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 */
{
_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
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);
}
/* 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;
};