void hmac_sha224_init(hmac_sha224_ctx *ctx, unsigned char *key, unsigned int key_size) { unsigned int fill; unsigned int num; unsigned char *key_used; unsigned char key_temp[SHA224_DIGEST_SIZE]; int i; if (key_size == SHA224_BLOCK_SIZE) { key_used = key; num = SHA224_BLOCK_SIZE; } else { if (key_size > SHA224_BLOCK_SIZE){ key_used = key_temp; num = SHA224_DIGEST_SIZE; sha224(key, key_size, key_used); } else { /* key_size > SHA224_BLOCK_SIZE */ key_used = key; num = key_size; } fill = SHA224_BLOCK_SIZE - num; memset(ctx->block_ipad + num, 0x36, fill); memset(ctx->block_opad + num, 0x5c, fill); } for (i = 0; i < num; i++) { ctx->block_ipad[i] = key_used[i] ^ 0x36; ctx->block_opad[i] = key_used[i] ^ 0x5c; } sha224_init(&ctx->ctx_inside); sha224_update(&ctx->ctx_inside, ctx->block_ipad, SHA224_BLOCK_SIZE); sha224_init(&ctx->ctx_outside); sha224_update(&ctx->ctx_outside, ctx->block_opad, SHA224_BLOCK_SIZE); /* for hmac_reinit */ memcpy(&ctx->ctx_inside_reinit, &ctx->ctx_inside, sizeof(sha224_ctx)); memcpy(&ctx->ctx_outside_reinit, &ctx->ctx_outside, sizeof(sha224_ctx)); }
void sha224(const unsigned char *message, unsigned int len, unsigned char *digest) { sha224_ctx ctx; sha224_init(&ctx); sha224_update(&ctx, message, len); sha224_final(&ctx, digest); }
void hmac_sha224_final(hmac_sha224_ctx *ctx, unsigned char *mac, unsigned int mac_size) { unsigned char digest_inside[SHA224_DIGEST_SIZE]; unsigned char mac_temp[SHA224_DIGEST_SIZE]; sha224_final(&ctx->ctx_inside, digest_inside); sha224_update(&ctx->ctx_outside, digest_inside, SHA224_DIGEST_SIZE); sha224_final(&ctx->ctx_outside, mac_temp); memcpy(mac, mac_temp, mac_size); }
void hmac_sha224_update(hmac_sha224_ctx *ctx, unsigned char *message, unsigned int message_len) { sha224_update(&ctx->ctx_inside, message, message_len); }
void libmaus2::digest::SHA2_224::update(uint8_t const * t, size_t l) { sha224_update(reinterpret_cast<sha224_ctx *>(ctx),l,t); }
void mySHA224_Update(void *c, unsigned char *in, int len) {sha224_update((sha224_ctx *)c, in, len); }