From 7964f11d9f9bd51a0f3bd0d7dfb1a66f112d61fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Mon, 14 Jan 2002 15:39:04 +0100 Subject: [PATCH] * hmac.c: Bug fixes. * Makefile.am (libnettle_a_SOURCES): Added hmac.c and hmac-md5.c. (libnettleinclude_HEADERS): Added hmac.h. Rev: src/nettle/hmac.c:1.2 --- hmac.c | 61 +++++++++++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/hmac.c b/hmac.c index 4ea273cd..2e0e84f6 100644 --- a/hmac.c +++ b/hmac.c @@ -28,63 +28,72 @@ #include "memxor.h" #include <assert.h> +#include <string.h> #define IPAD 0x36 #define OPAD 0x5c void -hmac_init(void *outer, void *inner, void *state, - struct hmac_info *info, - unsigned key_length, const uint8_t *key) +hmac_set_key(void *outer, void *inner, void *state, + const struct nettle_hash *hash, + unsigned key_length, const uint8_t *key) { - uint8_t pad = alloca(info->block_size); + uint8_t *pad = alloca(hash->block_size); - info->init(outer); - info->init(inner); + hash->init(outer); + hash->init(inner); - if (length > info->block_size) + if (key_length > hash->block_size) { /* Reduce key to the algorithm's hash size. Use the area pointed * to by state for the temporary state. */ - uint8_t *digest = alloca(info->digest_size); + uint8_t *digest = alloca(hash->digest_size); - info->init(state); - info->update(state, key_length, key); - info->digest(state, info->digest_size, digest); + hash->init(state); + hash->update(state, key_length, key); + hash->digest(state, hash->digest_size, digest); key = digest; - key_length = info->digest_size; + key_length = hash->digest_size; } - assert(key_size <= info->block_size); + assert(key_length <= hash->block_size); - memset(pad, OPAD, info->block_size); + memset(pad, OPAD, hash->block_size); memxor(pad, key, key_length); - info->update(outer, info->block_size, pad); + hash->update(outer, hash->block_size, pad); - memset(pad, IPAD, info->block_size); + memset(pad, IPAD, hash->block_size); memxor(pad, key, key_length); - info->update(inner, info->block_size, pad); + hash->update(inner, hash->block_size, pad); - memcpy(state, inner, info->ctx_size); + memcpy(state, inner, hash->context_size); } void -hmac_digest(void *outer, void *inner, void *state - struct hmac_info *info, +hmac_update(void *state, + const struct nettle_hash *hash, + unsigned length, const uint8_t *data) +{ + hash->update(state, length, data); +} + +void +hmac_digest(const void *outer, const void *inner, void *state, + const struct nettle_hash *hash, unsigned length, uint8_t *dst) { - uint8_t *digest = alloca(info->digest_size); + uint8_t *digest = alloca(hash->digest_size); - info->digest(state, info->digest_size, digest); + hash->digest(state, hash->digest_size, digest); - memcpy(outer, state, info->ctx_size); + memcpy(state, outer, hash->context_size); - info->update(state, info->digest_size, digest); - info->digest(state, length, dst); + hash->update(state, hash->digest_size, digest); + hash->digest(state, length, dst); - memcpy(state, inner, info->ctx_size); + memcpy(state, inner, hash->context_size); } -- GitLab