/** * @file tests/crypt_md5.c * Test md5 using rfc1321.txt * @todo use test library and verify against expected digest */ #include #include #include #include #include struct _crypt_md5_test { const char *msg; const char *digest; } crypt_md5_test_list[] = { { .msg = "", .digest = "d41d8cd98f00b204e9800998ecf8427e" }, { .msg = "a", .digest = "0cc175b9c0f1b6a831c399e269772661" }, { .msg = "abc", .digest = "900150983cd24fb0d6963f7d28e17f72" }, { .msg = "message_digest", .digest = "f96b697d7cb7938d525a2f31aaf161d0" }, { .msg = "abcdefghijklmnopqrstuvwxyz", .digest = "c3fcd3d76192e4007dfb496cca67e13b" }, { .msg = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", .digest = "d174ab98d277d9f5a5611c2c9f419d9f" }, { .msg = "12345678901234567890123456789012345678901234567890123456789012345678901234567890", .digest = "57edf4a22be3c955ac49da2e2107b67a" }, { .msg = NULL, .digest = NULL } }; void di_crypt_md5_print_digest(const uint8_t *digest, size_t len) { for (size_t i = 0; i < len; i++) printf("%02x", digest[i]); printf("\n"); } void di_crypt_md5_test( const char *descr, unsigned char tcase, const char *msg, const char *digest) { uint8_t digest_out[16]; char digest_out_str[33]; printf("=== md5 %s case #%u ===\n", descr, tcase); printf("msg: \"%s\"\n", msg); printf("md5_exp: 0x%s\n", digest); di_crypt_md5(msg, strlen(msg), digest_out); di_hexstr_from_bin(digest_out_str, 33, digest_out, 16); printf("md5_got: 0x%s\n", digest_out_str); } void di_crypt_md5_rfc1321(void) { const char *descr = "rfc1321"; unsigned int tcase = 1; struct _crypt_md5_test *t = &crypt_md5_test_list[0]; while (t->msg != NULL && t->digest != NULL) { di_crypt_md5_test(descr, tcase, t->msg, t->digest); tcase++; t++; } } int main(void) { di_crypt_md5_rfc1321(); return 0; }