md5.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*
  2. * Copyright © 2016 Guillem Jover <[email protected]>
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. * 1. Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * 2. Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. * 3. The name of the author may not be used to endorse or promote products
  13. * derived from this software without specific prior written permission.
  14. *
  15. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
  16. * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  17. * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
  18. * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  19. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  20. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  21. * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  22. * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  23. * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  24. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  25. */
  26. #define LIBMD_MD5_ALADDIN 1
  27. #include <config.h>
  28. #include <assert.h>
  29. #include <md5.h>
  30. #include <string.h>
  31. #include "test.h"
  32. DEF_TEST_DIGEST(MD5, MD5)
  33. static void
  34. test_MD5_aladdin(const char *hash_str_ref, const char *data)
  35. {
  36. uint8_t hash_bin_ref[MD5_DIGEST_LENGTH];
  37. uint8_t hash_bin_got[MD5_DIGEST_LENGTH];
  38. md5_state_t pms;
  39. hex2bin(hash_bin_ref, hash_str_ref, MD5_DIGEST_LENGTH);
  40. md5_init(&pms);
  41. md5_append(&pms, (const uint8_t *)data, strlen(data));
  42. md5_finish(&pms, hash_bin_got);
  43. assert(memcmp(hash_bin_ref, hash_bin_got, MD5_DIGEST_LENGTH) == 0);
  44. }
  45. static void
  46. test_MD5_all(const char *hash_str_ref, const char *data)
  47. {
  48. test_MD5(hash_str_ref, data);
  49. test_MD5_aladdin(hash_str_ref, data);
  50. }
  51. int
  52. main(int argc, char *argv[])
  53. {
  54. test_MD5_all("d41d8cd98f00b204e9800998ecf8427e", "");
  55. test_MD5_all("900150983cd24fb0d6963f7d28e17f72", "abc");
  56. test_MD5_all("827ccb0eea8a706c4c34a16891f84e7b", "12345");
  57. return 0;
  58. }