Mercurial > masqmail-0.2
changeset 165:ca99aa7f052a
improved hmactest
added the test vectors that are included in the RFC
plus improved the output
author | meillo@marmaro.de |
---|---|
date | Sun, 18 Jul 2010 22:24:51 +0200 |
parents | b8c358b2e242 |
children | 41faebf64d0b |
files | src/md5/hmactest.c |
diffstat | 1 files changed, 64 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/md5/hmactest.c Sun Jul 18 22:20:20 2010 +0200 +++ b/src/md5/hmactest.c Sun Jul 18 22:24:51 2010 +0200 @@ -5,6 +5,11 @@ #include "md5.h" #include "hmac_md5.h" +/* +instead of pad0_copy(d, s, sz) use: + memset(d, 0, sz); + memcpy(d, s, strlen(s)); + static void pad0_copy(char *d, char *s, int sz) { @@ -18,31 +23,82 @@ i++; } } +*/ int main() { int i; - // unsigned char digest[16]; char digest[16]; char *msgid = "<1896.697170952@postoffice.reston.mci.net>"; char secret[65]; + hmac_md5("<48157.953508124@mail.class-c.net>", 34, "no!SpamAtAll", 12, digest); for (i = 0; i < 16; i++) - printf("%x", (unsigned int) digest[i]); - printf("\n"); + printf("%.2x", 0xFF & (unsigned int) digest[i]); + printf("\n\n"); + + + puts("---- The next two should be equal"); + hmac_md5(msgid, strlen(msgid), "tanstaaftanstaaf", 16, digest); for (i = 0; i < 16; i++) - printf("%x", (unsigned int) digest[i]); - printf("\n"); + printf("%.2x", 0xFF & (unsigned int) digest[i]); + printf("\n\n"); + - pad0_copy(secret, "tanstaaftanstaaf", 64); + /* pad0_copy(secret, "tanstaaftanstaaf", 64); */ + /* let's do it easier ... */ + memset(secret, 0, sizeof(secret)); + memcpy(secret, "tanstaaftanstaaf", 16); hmac_md5(msgid, strlen(msgid), secret, 64, digest); for (i = 0; i < 16; i++) - printf("%x", (unsigned int) digest[i]); - printf("\n"); + printf("%.2x", 0xFF & (unsigned int) digest[i]); + printf("\n\n"); + + + puts("---- Following are the test vectors from RFC 2104"); + + + char* d01 = "Hi There"; + char k01[16]; + for (i=0; i<16; i++) { + k01[i] = 0x0b; + } + printf("9294727a3638bb1c13f48ef8158bfc9d (should be)\n"); + hmac_md5(d01, strlen(d01), k01, sizeof(k01), digest); + for (i = 0; i < 16; i++) { + printf("%.2x", 0xFF & (unsigned int) digest[i]); + } + printf(" (was computed)\n\n"); + + + char* d02 = "what do ya want for nothing?"; + char* k02 = "Jefe"; + printf("750c783e6ab0b503eaa86e310a5db738 (should be)\n"); + hmac_md5(d02, strlen(d02), k02, strlen(k02), digest); + for (i = 0; i < 16; i++) { + printf("%.2x", 0xFF & (unsigned int) digest[i]); + } + printf(" (was computed)\n\n"); + + + char d03[50]; + for (i=0; i<sizeof(d03); i++) { + d03[i] = 0xdd; + } + char k03[16]; + for (i=0; i<sizeof(k03); i++) { + k03[i] = 0xaa; + } + printf("56be34521d144c88dbb8c733f0e8b3f6 (should be)\n"); + hmac_md5(d03, sizeof(d03), k03, sizeof(k03), digest); + for (i = 0; i < 16; i++) { + printf("%.2x", 0xFF & (unsigned int) digest[i]); + } + printf(" (was computed)\n\n"); exit(0); }