HMAC-MD5 message authentication code.
- Copyright (C) 2002 Niels Möller
+ Copyright (C) 2002, 2024 Niels Möller
This file is part of GNU Nettle.
#endif
#include "hmac.h"
+#include "hmac-internal.h"
void
hmac_md5_set_key(struct hmac_md5_ctx *ctx,
size_t key_length, const uint8_t *key)
{
- HMAC_SET_KEY(ctx, &nettle_md5, key_length, key);
+ _nettle_hmac_set_key (sizeof(ctx->outer), ctx->outer, ctx->inner, &ctx->state,
+ ctx->state.block, &nettle_md5, key_length, key);
}
void
hmac_md5_digest(struct hmac_md5_ctx *ctx,
uint8_t *digest)
{
- HMAC_DIGEST(ctx, &nettle_md5, digest);
+ md5_digest (&ctx->state, ctx->state.block);
+ ctx->state.index = MD5_DIGEST_SIZE;
+ _NETTLE_HMAC_DIGEST (ctx->outer, ctx->inner, &ctx->state, md5_digest, digest);
}
uint8_t *digest);
-#define HMAC_CTX(type) \
+#define HMAC_CTX(type, size) \
+{ char outer[size]; char inner[size]; type state; }
+
+#define OLD_HMAC_CTX(type) \
{ type outer; type inner; type state; }
#define HMAC_SET_KEY(ctx, hash, length, key) \
/* HMAC using specific hash functions */
/* hmac-md5 */
-struct hmac_md5_ctx HMAC_CTX(struct md5_ctx);
+struct hmac_md5_ctx HMAC_CTX(struct md5_ctx, offsetof(struct md5_ctx, index));
void
hmac_md5_set_key(struct hmac_md5_ctx *ctx,
/* hmac-ripemd160 */
-struct hmac_ripemd160_ctx HMAC_CTX(struct ripemd160_ctx);
+struct hmac_ripemd160_ctx OLD_HMAC_CTX(struct ripemd160_ctx);
void
hmac_ripemd160_set_key(struct hmac_ripemd160_ctx *ctx,
/* hmac-sha1 */
-struct hmac_sha1_ctx HMAC_CTX(struct sha1_ctx);
+struct hmac_sha1_ctx OLD_HMAC_CTX(struct sha1_ctx);
void
hmac_sha1_set_key(struct hmac_sha1_ctx *ctx,
uint8_t *digest);
/* hmac-sha256 */
-struct hmac_sha256_ctx {
- char outer[offsetof(struct sha256_ctx, index)];
- char inner[offsetof(struct sha256_ctx, index)];
- struct sha256_ctx state;
-};
+struct hmac_sha256_ctx HMAC_CTX (struct sha256_ctx, offsetof(struct sha256_ctx, index));
void
hmac_sha256_set_key(struct hmac_sha256_ctx *ctx,
uint8_t *digest);
/* hmac-sha512 */
-struct hmac_sha512_ctx HMAC_CTX(struct sha512_ctx);
+struct hmac_sha512_ctx OLD_HMAC_CTX(struct sha512_ctx);
void
hmac_sha512_set_key(struct hmac_sha512_ctx *ctx,
uint8_t *digest);
/* hmac-gosthash94 */
-struct hmac_gosthash94_ctx HMAC_CTX(struct gosthash94_ctx);
+struct hmac_gosthash94_ctx OLD_HMAC_CTX(struct gosthash94_ctx);
void
hmac_gosthash94_set_key(struct hmac_gosthash94_ctx *ctx,
hmac_gosthash94_digest(struct hmac_gosthash94_ctx *ctx,
uint8_t *digest);
-struct hmac_gosthash94cp_ctx HMAC_CTX(struct gosthash94cp_ctx);
+struct hmac_gosthash94cp_ctx OLD_HMAC_CTX(struct gosthash94cp_ctx);
void
hmac_gosthash94cp_set_key(struct hmac_gosthash94cp_ctx *ctx,
/* hmac-streebog */
-struct hmac_streebog512_ctx HMAC_CTX(struct streebog512_ctx);
+struct hmac_streebog512_ctx OLD_HMAC_CTX(struct streebog512_ctx);
void
hmac_streebog512_set_key(struct hmac_streebog512_ctx *ctx,
uint8_t *digest);
/* hmac-sm3 */
-struct hmac_sm3_ctx HMAC_CTX(struct sm3_ctx);
+struct hmac_sm3_ctx OLD_HMAC_CTX(struct sm3_ctx);
void
hmac_sm3_set_key(struct hmac_sm3_ctx *ctx,