/* hmac-md5.c -- hashed message authentication codes
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005-2006, 2009-2011 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
/* Written by Simon Josefsson. */
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
#include "hmac.h"
+#include "memxor.h"
#include "md5.h"
#include <string.h>
int
hmac_md5 (const void *key, size_t keylen,
- const void *in, size_t inlen, void *resbuf)
+ const void *in, size_t inlen, void *resbuf)
{
struct md5_ctx inner;
struct md5_ctx outer;
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;
keylen = 16;
}
+ /* Compute INNERHASH from KEY and IN. */
+
md5_init_ctx (&inner);
memset (block, IPAD, sizeof (block));
md5_finish_ctx (&inner, innerhash);
+ /* Compute result from KEY and INNERHASH. */
+
md5_init_ctx (&outer);
memset (block, OPAD, sizeof (block));