1 #include "silcincludes.h"
3 /* Test vectors from RFC 1321 */
5 /* First test vector */
6 const unsigned char data1[] = "a";
7 const unsigned char data1_digest[] = "\x0c\xc1\x75\xb9\xc0\xf1\xb6\xa8\x31\xc3\x99\xe2\x69\x77\x26\x61";
9 /* Second test vector. */
10 const unsigned char data2[] = "message digest";
11 const unsigned char data2_digest[] = "\xf9\x6b\x69\x7d\x7c\xb7\x93\x8d\x52\x5a\x2f\x31\xaa\xf1\x61\xd0";
13 /* Third test vector. */
14 const unsigned char data3[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
15 const unsigned char data3_digest[] = "\xd1\x74\xab\x98\xd2\x77\xd9\xf5\xa5\x61\x1c\x2c\x9f\x41\x9d\x9f";
17 int main(int argc, char **argv)
20 unsigned char digest[16];
23 if (argc > 1 && !strcmp(argv[1], "-d")) {
25 silc_debug_hexdump = 1;
26 silc_log_set_debug_string("*crypt*,*hash*,*md5*");
29 SILC_LOG_DEBUG(("Registering builtin hash functions"));
30 silc_hash_register_default();
32 SILC_LOG_DEBUG(("Allocating md5 hash function"));
33 if (!silc_hash_alloc("md5", &md5)) {
34 SILC_LOG_DEBUG(("Allocating md5 hash function failed"));
38 /* First test vector */
39 SILC_LOG_DEBUG(("First test vector"));
41 silc_hash_update(md5, data1, strlen(data1));
42 silc_hash_final(md5, digest);
43 SILC_LOG_HEXDUMP(("Message"), (unsigned char *)data1, strlen(data1));
44 SILC_LOG_HEXDUMP(("Digest"), digest, sizeof(digest));
45 SILC_LOG_HEXDUMP(("Expected digest"), (unsigned char *)data1_digest,
47 if (memcmp(digest, data1_digest, sizeof(digest))) {
48 SILC_LOG_DEBUG(("Hash failed"));
51 SILC_LOG_DEBUG(("Hash is successful"));
53 /* Second test vector */
54 SILC_LOG_DEBUG(("Second test vector"));
56 silc_hash_update(md5, data2, strlen(data2));
57 silc_hash_final(md5, digest);
58 SILC_LOG_HEXDUMP(("Message"), (unsigned char *)data2, strlen(data2));
59 SILC_LOG_HEXDUMP(("Digest"), digest, sizeof(digest));
60 SILC_LOG_HEXDUMP(("Expected digest"), (unsigned char *)data2_digest,
62 if (memcmp(digest, data2_digest, sizeof(digest))) {
63 SILC_LOG_DEBUG(("Hash failed"));
66 SILC_LOG_DEBUG(("Hash is successful"));
68 /* Third test vector */
69 SILC_LOG_DEBUG(("Third test vector"));
71 silc_hash_update(md5, data3, strlen(data3));
72 silc_hash_final(md5, digest);
73 SILC_LOG_HEXDUMP(("Message"), (unsigned char *)data3, strlen(data3));
74 SILC_LOG_HEXDUMP(("Digest"), digest, sizeof(digest));
75 SILC_LOG_HEXDUMP(("Expected digest"), (unsigned char *)data3_digest,
77 if (memcmp(digest, data3_digest, sizeof(digest))) {
78 SILC_LOG_DEBUG(("Hash failed"));
81 SILC_LOG_DEBUG(("Hash is successful"));
86 SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
87 fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");
90 silc_hash_unregister_all();