hcrypto: HMAC_Init_Ex(): return int like OpenSSL
This commit is contained in:
@@ -85,7 +85,7 @@ HMAC_size(const HMAC_CTX *ctx)
|
|||||||
return EVP_MD_size(ctx->md);
|
return EVP_MD_size(ctx->md);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
HMAC_Init_ex(HMAC_CTX *ctx,
|
HMAC_Init_ex(HMAC_CTX *ctx,
|
||||||
const void *key,
|
const void *key,
|
||||||
size_t keylen,
|
size_t keylen,
|
||||||
@@ -103,17 +103,26 @@ HMAC_Init_ex(HMAC_CTX *ctx,
|
|||||||
|
|
||||||
ctx->md = md;
|
ctx->md = md;
|
||||||
ctx->key_length = EVP_MD_size(ctx->md);
|
ctx->key_length = EVP_MD_size(ctx->md);
|
||||||
|
ctx->opad = NULL;
|
||||||
|
ctx->ipad = NULL;
|
||||||
|
ctx->ctx = NULL;
|
||||||
ctx->buf = malloc(ctx->key_length);
|
ctx->buf = malloc(ctx->key_length);
|
||||||
ctx->opad = malloc(blockSize);
|
if (ctx->buf)
|
||||||
ctx->ipad = malloc(blockSize);
|
ctx->opad = malloc(blockSize);
|
||||||
ctx->ctx = EVP_MD_CTX_create();
|
if (ctx->opad)
|
||||||
|
ctx->ipad = malloc(blockSize);
|
||||||
|
if (ctx->ipad)
|
||||||
|
ctx->ctx = EVP_MD_CTX_create();
|
||||||
|
if (!ctx->buf || !ctx->opad || !ctx->ipad || !ctx->ctx)
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
ctx->engine = engine;
|
ctx->engine = engine;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (keylen > blockSize) {
|
if (keylen > blockSize) {
|
||||||
EVP_Digest(key, keylen, ctx->buf, NULL, ctx->md, engine);
|
if (EVP_Digest(key, keylen, ctx->buf, NULL, ctx->md, engine) == 0)
|
||||||
|
return 0;
|
||||||
key = ctx->buf;
|
key = ctx->buf;
|
||||||
keylen = EVP_MD_size(ctx->md);
|
keylen = EVP_MD_size(ctx->md);
|
||||||
}
|
}
|
||||||
@@ -126,8 +135,10 @@ HMAC_Init_ex(HMAC_CTX *ctx,
|
|||||||
for (i = 0, p = ctx->opad; i < keylen; i++)
|
for (i = 0, p = ctx->opad; i < keylen; i++)
|
||||||
p[i] ^= ((const unsigned char *)key)[i];
|
p[i] ^= ((const unsigned char *)key)[i];
|
||||||
|
|
||||||
EVP_DigestInit_ex(ctx->ctx, ctx->md, ctx->engine);
|
if (EVP_DigestInit_ex(ctx->ctx, ctx->md, ctx->engine) == 0)
|
||||||
|
return 0;
|
||||||
EVP_DigestUpdate(ctx->ctx, ctx->ipad, EVP_MD_block_size(ctx->md));
|
EVP_DigestUpdate(ctx->ctx, ctx->ipad, EVP_MD_block_size(ctx->md));
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@@ -75,7 +75,7 @@ void HMAC_CTX_free(HMAC_CTX *ctx);
|
|||||||
|
|
||||||
size_t HMAC_size(const HMAC_CTX *ctx);
|
size_t HMAC_size(const HMAC_CTX *ctx);
|
||||||
|
|
||||||
void HMAC_Init_ex(HMAC_CTX *, const void *, size_t,
|
int HMAC_Init_ex(HMAC_CTX *, const void *, size_t,
|
||||||
const EVP_MD *, ENGINE *);
|
const EVP_MD *, ENGINE *);
|
||||||
void HMAC_Update(HMAC_CTX *ctx, const void *data, size_t len);
|
void HMAC_Update(HMAC_CTX *ctx, const void *data, size_t len);
|
||||||
void HMAC_Final(HMAC_CTX *ctx, void *md, unsigned int *len);
|
void HMAC_Final(HMAC_CTX *ctx, void *md, unsigned int *len);
|
||||||
|
Reference in New Issue
Block a user