diff options
author | Pauli <pauli@openssl.org> | 2022-01-24 16:17:44 +1100 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2022-11-11 10:03:09 +0100 |
commit | 34d2a072a9cd85e72a118fa831f2dfd5d07854c4 (patch) | |
tree | bdf7e842611eb7e45c38577eae291df224a0644d /providers | |
parent | f46befd667e808df56b6351e3056025503badf85 (diff) | |
download | openssl-new-34d2a072a9cd85e72a118fa831f2dfd5d07854c4.tar.gz |
pbkdf1: implement ctx dup operation
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/17572)
(cherry picked from commit 6585d3aa7638c8cea2d4bb9f10e7298002f652e5)
Reviewed-by: Hugo Landau <hlandau@openssl.org>
Diffstat (limited to 'providers')
-rw-r--r-- | providers/implementations/kdfs/pbkdf1.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/providers/implementations/kdfs/pbkdf1.c b/providers/implementations/kdfs/pbkdf1.c index 1a042bac9f..4df580d669 100644 --- a/providers/implementations/kdfs/pbkdf1.c +++ b/providers/implementations/kdfs/pbkdf1.c @@ -24,6 +24,7 @@ #include "prov/provider_util.h" static OSSL_FUNC_kdf_newctx_fn kdf_pbkdf1_new; +static OSSL_FUNC_kdf_dupctx_fn kdf_pbkdf1_dup; static OSSL_FUNC_kdf_freectx_fn kdf_pbkdf1_free; static OSSL_FUNC_kdf_reset_fn kdf_pbkdf1_reset; static OSSL_FUNC_kdf_derive_fn kdf_pbkdf1_derive; @@ -130,6 +131,28 @@ static void kdf_pbkdf1_reset(void *vctx) ctx->provctx = provctx; } +static void *kdf_pbkdf1_dup(void *vctx) +{ + const KDF_PBKDF1 *src = (const KDF_PBKDF1 *)vctx; + KDF_PBKDF1 *dest; + + dest = kdf_pbkdf1_new(src->provctx); + if (dest != NULL) { + if (!ossl_prov_memdup(src->salt, src->salt_len, + &dest->salt, &dest->salt_len) + || !ossl_prov_memdup(src->pass, src->pass_len, + &dest->pass , &dest->pass_len) + || !ossl_prov_digest_copy(&dest->digest, &src->digest)) + goto err; + dest->iter = src->iter; + } + return dest; + + err: + kdf_pbkdf1_free(dest); + return NULL; +} + static int kdf_pbkdf1_set_membuf(unsigned char **buffer, size_t *buflen, const OSSL_PARAM *p) { @@ -231,6 +254,7 @@ static const OSSL_PARAM *kdf_pbkdf1_gettable_ctx_params(ossl_unused void *ctx, const OSSL_DISPATCH ossl_kdf_pbkdf1_functions[] = { { OSSL_FUNC_KDF_NEWCTX, (void(*)(void))kdf_pbkdf1_new }, + { OSSL_FUNC_KDF_DUPCTX, (void(*)(void))kdf_pbkdf1_dup }, { OSSL_FUNC_KDF_FREECTX, (void(*)(void))kdf_pbkdf1_free }, { OSSL_FUNC_KDF_RESET, (void(*)(void))kdf_pbkdf1_reset }, { OSSL_FUNC_KDF_DERIVE, (void(*)(void))kdf_pbkdf1_derive }, |