X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fhmac-md5.c;h=816762b7982c229b2a39d73e728e14d62415159b;hb=41f33021bba216bf24c5d93951fbede15390ea92;hp=6df653d276ac2465084c89a304e420888e67f6ec;hpb=f6800ee02280d07036209444b32109c54c98ff64;p=gnulib.git diff --git a/lib/hmac-md5.c b/lib/hmac-md5.c index 6df653d27..816762b79 100644 --- a/lib/hmac-md5.c +++ b/lib/hmac-md5.c @@ -23,6 +23,7 @@ #include "hmac.h" +#include "memxor.h" #include "md5.h" #include @@ -40,6 +41,8 @@ hmac_md5 (const void *key, size_t keylen, char block[64]; char innerhash[16]; + /* Reduce the key's size, so that it becomes <= 64 bytes large. */ + if (keylen > 64) { struct md5_ctx keyhash; @@ -52,6 +55,8 @@ hmac_md5 (const void *key, size_t keylen, keylen = 16; } + /* Compute INNERHASH from KEY and IN. */ + md5_init_ctx (&inner); memset (block, IPAD, sizeof (block)); @@ -62,6 +67,8 @@ hmac_md5 (const void *key, size_t keylen, md5_finish_ctx (&inner, innerhash); + /* Compute result from KEY and INNERHASH. */ + md5_init_ctx (&outer); memset (block, OPAD, sizeof (block));