X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fhmac%2Fhmac.c;h=c45e001492759d05c4a497206dd004ffeda76b3d;hb=302ea8c260fa8800ea1e494dd470028e6b00bac7;hp=3fff7b1af35c1558b59afbe0db274618311b056e;hpb=ff3fa48fc79029d46f5285bdf9347b96f2262ce2;p=oweals%2Fopenssl.git diff --git a/crypto/hmac/hmac.c b/crypto/hmac/hmac.c index 3fff7b1af3..c45e001492 100644 --- a/crypto/hmac/hmac.c +++ b/crypto/hmac/hmac.c @@ -58,10 +58,11 @@ #include #include #include +#include "cryptlib.h" #include void HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md) + const EVP_MD *md, ENGINE *impl) { int i,j,reset=0; unsigned char pad[HMAC_MAX_MD_CBLOCK]; @@ -78,15 +79,17 @@ void HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, { reset=1; j=EVP_MD_block_size(md); + OPENSSL_assert(j <= (int)sizeof(ctx->key)); if (j < len) { - EVP_DigestInit_ex(&ctx->md_ctx,md, NULL); + EVP_DigestInit_ex(&ctx->md_ctx,md, impl); EVP_DigestUpdate(&ctx->md_ctx,key,len); EVP_DigestFinal_ex(&(ctx->md_ctx),ctx->key, &ctx->key_length); } else { + OPENSSL_assert(len>=0 && len<=(int)sizeof(ctx->key)); memcpy(ctx->key,key,len); ctx->key_length=len; } @@ -99,12 +102,12 @@ void HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, { for (i=0; ikey[i]; - EVP_DigestInit_ex(&ctx->i_ctx,md, NULL); + EVP_DigestInit_ex(&ctx->i_ctx,md, impl); EVP_DigestUpdate(&ctx->i_ctx,pad,EVP_MD_block_size(md)); for (i=0; ikey[i]; - EVP_DigestInit_ex(&ctx->o_ctx,md, NULL); + EVP_DigestInit_ex(&ctx->o_ctx,md, impl); EVP_DigestUpdate(&ctx->o_ctx,pad,EVP_MD_block_size(md)); } EVP_MD_CTX_copy_ex(&ctx->md_ctx,&ctx->i_ctx); @@ -115,10 +118,10 @@ void HMAC_Init(HMAC_CTX *ctx, const void *key, int len, { if(key && md) HMAC_CTX_init(ctx); - HMAC_Init_ex(ctx,key,len,md); + HMAC_Init_ex(ctx,key,len,md, NULL); } -void HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, int len) +void HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len) { EVP_DigestUpdate(&ctx->md_ctx,data,len); } @@ -153,7 +156,7 @@ void HMAC_CTX_cleanup(HMAC_CTX *ctx) } unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, - const unsigned char *d, int n, unsigned char *md, + const unsigned char *d, size_t n, unsigned char *md, unsigned int *md_len) { HMAC_CTX c;