Remove HMAC_CTX_cleanup and combine its functionality into EVP_MD_CTX_init

This follows the same idea as the combination of EVP_MD_CTX_cleanup
and EVP_MD_CTX_init into one function.

Reviewed-by: Rich Salz <rsalz@openssl.org>
This commit is contained in:
Richard Levitte 2015-11-30 23:42:39 +01:00
parent 74cabf3fef
commit 32fd54a9a3
2 changed files with 18 additions and 19 deletions

View file

@ -180,38 +180,46 @@ HMAC_CTX *HMAC_CTX_new(void)
return ctx; return ctx;
} }
static void hmac_ctx_cleanup(HMAC_CTX *ctx)
{
EVP_MD_CTX_init(ctx->i_ctx);
EVP_MD_CTX_init(ctx->o_ctx);
EVP_MD_CTX_init(ctx->md_ctx);
ctx->md = NULL;
ctx->key_length = 0;
memset(ctx->key, 0, sizeof(HMAC_MAX_MD_CBLOCK));
}
void HMAC_CTX_free(HMAC_CTX *ctx) void HMAC_CTX_free(HMAC_CTX *ctx)
{ {
if (ctx != NULL) { if (ctx != NULL) {
HMAC_CTX_cleanup(ctx); hmac_ctx_cleanup(ctx);
EVP_MD_CTX_destroy(ctx->i_ctx);
EVP_MD_CTX_destroy(ctx->o_ctx);
EVP_MD_CTX_destroy(ctx->md_ctx);
OPENSSL_free(ctx); OPENSSL_free(ctx);
} }
} }
int HMAC_CTX_init(HMAC_CTX *ctx) int HMAC_CTX_init(HMAC_CTX *ctx)
{ {
hmac_ctx_cleanup(ctx);
if (ctx->i_ctx == NULL) if (ctx->i_ctx == NULL)
ctx->i_ctx = EVP_MD_CTX_create(); ctx->i_ctx = EVP_MD_CTX_create();
else
EVP_MD_CTX_init(ctx->i_ctx);
if (ctx->i_ctx == NULL) if (ctx->i_ctx == NULL)
goto err; goto err;
if (ctx->o_ctx == NULL) if (ctx->o_ctx == NULL)
ctx->o_ctx = EVP_MD_CTX_create(); ctx->o_ctx = EVP_MD_CTX_create();
else
EVP_MD_CTX_init(ctx->o_ctx);
if (ctx->o_ctx == NULL) if (ctx->o_ctx == NULL)
goto err; goto err;
if (ctx->md_ctx == NULL) if (ctx->md_ctx == NULL)
ctx->md_ctx = EVP_MD_CTX_create(); ctx->md_ctx = EVP_MD_CTX_create();
else
EVP_MD_CTX_init(ctx->md_ctx);
if (ctx->md_ctx == NULL) if (ctx->md_ctx == NULL)
goto err; goto err;
ctx->md = NULL; ctx->md = NULL;
return 1; return 1;
err: err:
HMAC_CTX_cleanup(ctx); hmac_ctx_cleanup(ctx);
return 0; return 0;
} }
@ -230,18 +238,10 @@ int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx)
dctx->md = sctx->md; dctx->md = sctx->md;
return 1; return 1;
err: err:
HMAC_CTX_cleanup(dctx); hmac_ctx_cleanup(dctx);
return 0; return 0;
} }
void HMAC_CTX_cleanup(HMAC_CTX *ctx)
{
EVP_MD_CTX_destroy(ctx->i_ctx);
EVP_MD_CTX_destroy(ctx->o_ctx);
EVP_MD_CTX_destroy(ctx->md_ctx);
memset(ctx, 0, sizeof(*ctx));
}
unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,
const unsigned char *d, size_t n, unsigned char *md, const unsigned char *d, size_t n, unsigned char *md,
unsigned int *md_len) unsigned int *md_len)

View file

@ -70,9 +70,8 @@ extern "C" {
size_t HMAC_size(HMAC_CTX *e); size_t HMAC_size(HMAC_CTX *e);
HMAC_CTX *HMAC_CTX_new(void); HMAC_CTX *HMAC_CTX_new(void);
void HMAC_CTX_free(HMAC_CTX *ctx);
int HMAC_CTX_init(HMAC_CTX *ctx); int HMAC_CTX_init(HMAC_CTX *ctx);
void HMAC_CTX_cleanup(HMAC_CTX *ctx); void HMAC_CTX_free(HMAC_CTX *ctx);
#ifdef OPENSSL_USE_DEPRECATED #ifdef OPENSSL_USE_DEPRECATED