X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fhmac-sha1.c;h=5d89d8152c44b8fb87d17f2bd7ab7ab0ac6fe8ec;hb=ae0044cde430d5feeba0c9c53a5c0fe1ba636080;hp=bee723118b609511a60e5871f9998c3a7264faa5;hpb=9a2b952ab7a836a546997e60497d471c326bc6b7;p=gnulib.git diff --git a/lib/hmac-sha1.c b/lib/hmac-sha1.c index bee723118..5d89d8152 100644 --- a/lib/hmac-sha1.c +++ b/lib/hmac-sha1.c @@ -1,5 +1,5 @@ /* hmac-sha1.c -- hashed message authentication codes - Copyright (C) 2005 Free Software Foundation, Inc. + Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,12 +17,11 @@ /* Written by Simon Josefsson. */ -#ifdef HAVE_CONFIG_H -# include -#endif +#include #include "hmac.h" +#include "memxor.h" #include "sha1.h" #include @@ -32,7 +31,7 @@ int hmac_sha1 (const void *key, size_t keylen, - const void *in, size_t inlen, void *resbuf) + const void *in, size_t inlen, void *resbuf) { struct sha1_ctx inner; struct sha1_ctx outer; @@ -40,6 +39,8 @@ hmac_sha1 (const void *key, size_t keylen, char block[64]; char innerhash[20]; + /* Reduce the key's size, so that it becomes <= 64 bytes large. */ + if (keylen > 64) { struct sha1_ctx keyhash; @@ -52,6 +53,8 @@ hmac_sha1 (const void *key, size_t keylen, keylen = 20; } + /* Compute INNERHASH from KEY and IN. */ + sha1_init_ctx (&inner); memset (block, IPAD, sizeof (block)); @@ -62,6 +65,8 @@ hmac_sha1 (const void *key, size_t keylen, sha1_finish_ctx (&inner, innerhash); + /* Compute result from KEY and INNERHASH. */ + sha1_init_ctx (&outer); memset (block, OPAD, sizeof (block));