X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fhmac-sha1.c;h=be5dd547c17fee8078eed7530d22eef7078eafb6;hb=23eecb48e39afd0d267d64d40ba6bf97aa865e13;hp=bee723118b609511a60e5871f9998c3a7264faa5;hpb=9a2b952ab7a836a546997e60497d471c326bc6b7;p=gnulib.git
diff --git a/lib/hmac-sha1.c b/lib/hmac-sha1.c
index bee723118..be5dd547c 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-2013 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
@@ -12,17 +12,15 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+ along with this program; if not, see . */
/* Written by Simon Josefsson. */
-#ifdef HAVE_CONFIG_H
-# include
-#endif
+#include
#include "hmac.h"
+#include "memxor.h"
#include "sha1.h"
#include
@@ -32,7 +30,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 +38,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 +52,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 +64,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));