From: Pauli Date: Tue, 25 Jan 2022 00:54:42 +0000 (+1100) Subject: pkcs12 kdf: implement ctx dup operation X-Git-Tag: openssl-3.2.0-alpha1~2990 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d3aaf4e9e71944d869ae47821d7b5a8402234ee8;p=thirdparty%2Fopenssl.git pkcs12 kdf: implement ctx dup operation Reviewed-by: Shane Lontis (Merged from https://github.com/openssl/openssl/pull/17572) --- diff --git a/providers/implementations/kdfs/pkcs12kdf.c b/providers/implementations/kdfs/pkcs12kdf.c index a29a618ee87..5f8905de13a 100644 --- a/providers/implementations/kdfs/pkcs12kdf.c +++ b/providers/implementations/kdfs/pkcs12kdf.c @@ -24,6 +24,7 @@ #include "prov/provider_util.h" static OSSL_FUNC_kdf_newctx_fn kdf_pkcs12_new; +static OSSL_FUNC_kdf_dupctx_fn kdf_pkcs12_dup; static OSSL_FUNC_kdf_freectx_fn kdf_pkcs12_free; static OSSL_FUNC_kdf_reset_fn kdf_pkcs12_reset; static OSSL_FUNC_kdf_derive_fn kdf_pkcs12_derive; @@ -178,6 +179,29 @@ static void kdf_pkcs12_reset(void *vctx) ctx->provctx = provctx; } +static void *kdf_pkcs12_dup(void *vctx) +{ + const KDF_PKCS12 *src = (const KDF_PKCS12 *)vctx; + KDF_PKCS12 *dest; + + dest = kdf_pkcs12_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; + dest->id = src->id; + } + return dest; + + err: + kdf_pkcs12_free(dest); + return NULL; +} + static int pkcs12kdf_set_membuf(unsigned char **buffer, size_t *buflen, const OSSL_PARAM *p) { @@ -287,6 +311,7 @@ static const OSSL_PARAM *kdf_pkcs12_gettable_ctx_params( const OSSL_DISPATCH ossl_kdf_pkcs12_functions[] = { { OSSL_FUNC_KDF_NEWCTX, (void(*)(void))kdf_pkcs12_new }, + { OSSL_FUNC_KDF_DUPCTX, (void(*)(void))kdf_pkcs12_dup }, { OSSL_FUNC_KDF_FREECTX, (void(*)(void))kdf_pkcs12_free }, { OSSL_FUNC_KDF_RESET, (void(*)(void))kdf_pkcs12_reset }, { OSSL_FUNC_KDF_DERIVE, (void(*)(void))kdf_pkcs12_derive },