]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
Update hmac-gosthash94 and hmac-gosthash94cp.
authorNiels Möller <nisse@lysator.liu.se>
Wed, 30 Oct 2024 13:15:22 +0000 (14:15 +0100)
committerNiels Möller <nisse@lysator.liu.se>
Sun, 22 Jun 2025 19:11:04 +0000 (21:11 +0200)
hmac-gosthash94.c
hmac-internal.h
hmac.h

index ea72470c278c751814dc2a7e8e8c9087d1841d1b..71dd7108de71a2edf7d4d53f640572759ef01351 100644 (file)
@@ -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.
 
 #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));
 }
index 672c687d517cf0860683805790d02714f802cf4b..9f67ed8dbdd844a55932b211596622e3384430c9 100644 (file)
@@ -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 65964acfd3e1cb1f708a2cc6478f0e8c5a3694c8..892b07aa38cef1af3f27acfa6575f21f0438c9fb 100644 (file)
--- 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,