]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
Include count in the copied state
authorNiels Möller <nisse@lysator.liu.se>
Wed, 30 Oct 2024 09:06:04 +0000 (10:06 +0100)
committerNiels Möller <nisse@lysator.liu.se>
Sun, 22 Jun 2025 19:11:04 +0000 (21:11 +0200)
hmac-internal.h
hmac-sha256.c
hmac.h

index 2861e730bd567e42da1e860d9973b72173fb5746..20d2494708a34c4d25203dc9f5c5283e3fdd3456 100644 (file)
@@ -44,14 +44,10 @@ _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, digest_size, f, digest) do { \
-    f ((ctx), (ctx)->block);                                           \
-    memcpy (&(ctx)->state, (outer), sizeof ((ctx)->state));            \
-    (ctx)->count = 1;                                                  \
-    (ctx)->index = (digest_size);                                      \
-    f ((ctx), (digest));                                               \
-    memcpy (&(ctx)->state, (inner), sizeof ((ctx)->state));            \
-    (ctx)->count = 1;                                                  \
+#define _NETTLE_HMAC_DIGEST(outer, inner, ctx, f, digest) do { \
+    memcpy (&(ctx)->state, (outer), sizeof (outer));           \
+    f ((ctx), (digest));                               \
+    memcpy (&(ctx)->state, (inner), sizeof ((inner)));         \
   } while (0)
 
 #endif /* NETTLE_HMAC_INTERNAL_H_INCLUDED */
index bcb7e60b2e9f0a6d39a3ef081b920cf4c6c2c0c3..6adc62dea85ee1f02bdc6aaf814433b9235f810d 100644 (file)
@@ -48,7 +48,6 @@ hmac_sha256_set_key(struct hmac_sha256_ctx *ctx,
 {
   _nettle_hmac_set_key (sizeof(ctx->outer), ctx->outer, ctx->inner, &ctx->state,
                        ctx->state.block, &nettle_sha256, key_length, key);
-  ctx->state.count = 1;
 }
 
 void
@@ -62,5 +61,7 @@ void
 hmac_sha256_digest(struct hmac_sha256_ctx *ctx,
                   uint8_t *digest)
 {
-  _NETTLE_HMAC_DIGEST (ctx->outer, ctx->inner, &ctx->state, SHA256_DIGEST_SIZE, sha256_digest, digest);
+  sha256_digest (&ctx->state, ctx->state.block);
+  ctx->state.index = SHA256_DIGEST_SIZE;
+  _NETTLE_HMAC_DIGEST (ctx->outer, ctx->inner, &ctx->state, sha256_digest, digest);
 }
diff --git a/hmac.h b/hmac.h
index 2abb3b20fe32143ad2b92b33d179088bc58bca1c..dbfbbbe828e7cf49e8cdaded21af657f70be451e 100644 (file)
--- a/hmac.h
+++ b/hmac.h
@@ -166,8 +166,8 @@ hmac_sha1_digest(struct hmac_sha1_ctx *ctx,
 
 /* hmac-sha256 */
 struct hmac_sha256_ctx {
-  uint32_t outer[_SHA256_DIGEST_LENGTH];
-  uint32_t inner[_SHA256_DIGEST_LENGTH];
+  char outer[offsetof(struct sha256_ctx, index)];
+  char inner[offsetof(struct sha256_ctx, index)];
   struct sha256_ctx state;
 };