diff options
author | Gergely Nagy <ngg@ngg.hu> | 2016-10-13 18:50:31 +0200 |
---|---|---|
committer | Rich Salz <rsalz@openssl.org> | 2017-04-04 10:44:17 -0400 |
commit | b98530d6e09f4cb34c791b8840e936c1fc1467cf (patch) | |
tree | 629ef403353fddfc5eb8c736c3b5594d41468d09 /crypto/hmac | |
parent | 79b3452faf04f2572f57eb37b618cc603d9983da (diff) | |
download | openssl-b98530d6e09f4cb34c791b8840e936c1fc1467cf.zip openssl-b98530d6e09f4cb34c791b8840e936c1fc1467cf.tar.gz openssl-b98530d6e09f4cb34c791b8840e936c1fc1467cf.tar.bz2 |
PBKDF2 computation speedup (15-40%)
This commit contains some optimizations in PKCS5_PBKDF2_HMAC() and
HMAC_CTX_copy() functions which together makes PBKDF2 computations
faster by 15-40% according to my measurements made on x64 Linux with
both asm optimized and no-asm versions of SHA1, SHA256 and SHA512.
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/1708)
Diffstat (limited to 'crypto/hmac')
-rw-r--r-- | crypto/hmac/hmac.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/crypto/hmac/hmac.c b/crypto/hmac/hmac.c index ffca891..3952dd5 100644 --- a/crypto/hmac/hmac.c +++ b/crypto/hmac/hmac.c @@ -157,31 +157,36 @@ void HMAC_CTX_free(HMAC_CTX *ctx) } } -int HMAC_CTX_reset(HMAC_CTX *ctx) +static int hmac_ctx_alloc_mds(HMAC_CTX *ctx) { - hmac_ctx_cleanup(ctx); if (ctx->i_ctx == NULL) ctx->i_ctx = EVP_MD_CTX_new(); if (ctx->i_ctx == NULL) - goto err; + return 0; if (ctx->o_ctx == NULL) ctx->o_ctx = EVP_MD_CTX_new(); if (ctx->o_ctx == NULL) - goto err; + return 0; if (ctx->md_ctx == NULL) ctx->md_ctx = EVP_MD_CTX_new(); if (ctx->md_ctx == NULL) - goto err; - ctx->md = NULL; + return 0; return 1; - err: +} + +int HMAC_CTX_reset(HMAC_CTX *ctx) +{ hmac_ctx_cleanup(ctx); - return 0; + if (!hmac_ctx_alloc_mds(ctx)) { + hmac_ctx_cleanup(ctx); + return 0; + } + return 1; } int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx) { - if (!HMAC_CTX_reset(dctx)) + if (!hmac_ctx_alloc_mds(dctx)) goto err; if (!EVP_MD_CTX_copy_ex(dctx->i_ctx, sctx->i_ctx)) goto err; |