projects
/
oweals
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix mapping "leak" in newly introduced win32_globallookup.
[oweals/openssl.git]
/
crypto
/
hmac
/
hmac.c
diff --git
a/crypto/hmac/hmac.c
b/crypto/hmac/hmac.c
index 3fff7b1af35c1558b59afbe0db274618311b056e..c45e001492759d05c4a497206dd004ffeda76b3d 100644
(file)
--- a/
crypto/hmac/hmac.c
+++ b/
crypto/hmac/hmac.c
@@
-58,10
+58,11
@@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include "cryptlib.h"
#include <openssl/hmac.h>
void HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len,
#include <openssl/hmac.h>
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];
{
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);
{
reset=1;
j=EVP_MD_block_size(md);
+ OPENSSL_assert(j <= (int)sizeof(ctx->key));
if (j < len)
{
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
{
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;
}
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; i<HMAC_MAX_MD_CBLOCK; i++)
pad[i]=0x36^ctx->key[i];
{
for (i=0; i<HMAC_MAX_MD_CBLOCK; i++)
pad[i]=0x36^ctx->key[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; i<HMAC_MAX_MD_CBLOCK; i++)
pad[i]=0x5c^ctx->key[i];
EVP_DigestUpdate(&ctx->i_ctx,pad,EVP_MD_block_size(md));
for (i=0; i<HMAC_MAX_MD_CBLOCK; i++)
pad[i]=0x5c^ctx->key[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);
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);
{
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,
in
t len)
+void HMAC_Update(HMAC_CTX *ctx, const unsigned char *data,
size_
t len)
{
EVP_DigestUpdate(&ctx->md_ctx,data,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,
}
unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,
- const unsigned char *d,
in
t n, unsigned char *md,
+ const unsigned char *d,
size_
t n, unsigned char *md,
unsigned int *md_len)
{
HMAC_CTX c;
unsigned int *md_len)
{
HMAC_CTX c;