From: Niels Möller Date: Wed, 30 Oct 2024 13:15:22 +0000 (+0100) Subject: Update hmac-gosthash94 and hmac-gosthash94cp. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eae571c164342bba5315c4f97f51ca7749663082;p=thirdparty%2Fnettle.git Update hmac-gosthash94 and hmac-gosthash94cp. --- diff --git a/hmac-gosthash94.c b/hmac-gosthash94.c index ea72470c..71dd7108 100644 --- a/hmac-gosthash94.c +++ b/hmac-gosthash94.c @@ -3,6 +3,7 @@ HMAC-GOSTHASH94 message authentication code. Copyright (C) 2016 Dmitry Eremin-Solenikov + Copyright (C) 2024 Niels Möller This file is part of GNU Nettle. @@ -36,12 +37,14 @@ #endif #include "hmac.h" +#include "hmac-internal.h" void hmac_gosthash94_set_key(struct hmac_gosthash94_ctx *ctx, - size_t key_length, const uint8_t *key) + size_t key_length, const uint8_t *key) { - HMAC_SET_KEY(ctx, &nettle_gosthash94, key_length, key); + _nettle_hmac_set_key (sizeof(ctx->outer), ctx->outer, ctx->inner, &ctx->state, + ctx->state.block, &nettle_gosthash94, key_length, key); } void @@ -55,14 +58,21 @@ void hmac_gosthash94_digest(struct hmac_gosthash94_ctx *ctx, uint8_t *digest) { - HMAC_DIGEST(ctx, &nettle_gosthash94, digest); + /* Using _NETTLE_HMAC_DIGEST doesn't work since + GOSTHASH94_DIGEST_SIZE == GOSTHASH94_BLOCK_SIZE. */ + gosthash94_digest (&ctx->state, ctx->state.block); + memcpy (&ctx->state, ctx->outer, sizeof (ctx->outer)); + gosthash94_update (&ctx->state, GOSTHASH94_DIGEST_SIZE, ctx->state.block); + gosthash94_digest (&ctx->state, digest); + memcpy (&ctx->state, ctx->inner, sizeof (ctx->inner)); } void hmac_gosthash94cp_set_key(struct hmac_gosthash94cp_ctx *ctx, size_t key_length, const uint8_t *key) { - HMAC_SET_KEY(ctx, &nettle_gosthash94cp, key_length, key); + _nettle_hmac_set_key (sizeof(ctx->outer), ctx->outer, ctx->inner, &ctx->state, + ctx->state.block, &nettle_gosthash94cp, key_length, key); } void @@ -71,9 +81,16 @@ hmac_gosthash94cp_update(struct hmac_gosthash94cp_ctx *ctx, { gosthash94cp_update(&ctx->state, length, data); } + void hmac_gosthash94cp_digest(struct hmac_gosthash94cp_ctx *ctx, uint8_t *digest) { - HMAC_DIGEST(ctx, &nettle_gosthash94cp, digest); + /* Using _NETTLE_HMAC_DIGEST doesn't work since + GOSTHASH94CP_DIGEST_SIZE == GOSTHASH94CP_BLOCK_SIZE. */ + gosthash94cp_digest (&ctx->state, ctx->state.block); + memcpy (&ctx->state, ctx->outer, sizeof (ctx->outer)); + gosthash94cp_update (&ctx->state, GOSTHASH94CP_DIGEST_SIZE, ctx->state.block); + gosthash94cp_digest (&ctx->state, digest); + memcpy (&ctx->state, ctx->inner, sizeof (ctx->inner)); } diff --git a/hmac-internal.h b/hmac-internal.h index 672c687d..9f67ed8d 100644 --- a/hmac-internal.h +++ b/hmac-internal.h @@ -46,7 +46,7 @@ _nettle_hmac_set_key (size_t state_size, void *outer, void *inner, const struct nettle_hash *hash, size_t key_size, const uint8_t *key); -#define _NETTLE_HMAC_DIGEST(outer, inner, ctx, f, digest) do { \ +#define _NETTLE_HMAC_DIGEST(outer, inner, ctx, f, digest) do { \ memcpy ((ctx), (outer), sizeof (outer)); \ f ((ctx), (digest)); \ memcpy ((ctx), (inner), sizeof ((inner))); \ diff --git a/hmac.h b/hmac.h index 65964acf..892b07aa 100644 --- a/hmac.h +++ b/hmac.h @@ -224,7 +224,7 @@ hmac_sha384_digest(struct hmac_sha512_ctx *ctx, uint8_t *digest); /* hmac-gosthash94 */ -struct hmac_gosthash94_ctx OLD_HMAC_CTX(struct gosthash94_ctx); +struct hmac_gosthash94_ctx HMAC_CTX (struct gosthash94_ctx, offsetof (struct gosthash94_ctx,index)); void hmac_gosthash94_set_key(struct hmac_gosthash94_ctx *ctx, @@ -238,7 +238,7 @@ hmac_gosthash94_update(struct hmac_gosthash94_ctx *ctx, hmac_gosthash94_digest(struct hmac_gosthash94_ctx *ctx, uint8_t *digest); -struct hmac_gosthash94cp_ctx OLD_HMAC_CTX(struct gosthash94cp_ctx); +#define hmac_gosthash94cp_ctx hmac_gosthash94_ctx void hmac_gosthash94cp_set_key(struct hmac_gosthash94cp_ctx *ctx,