X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fevp%2Fkeymgmt_lib.c;h=583e8b362a31f482429fe048b26d2fb5e0c2371a;hp=5e9ec73f7d87cc22e591ff8b7bc7385b155bfa66;hb=46e2dd05ef1456e3e8fc3d12bd839bae01576c19;hpb=54a0d4ceb28d53f5b00a27fc5ca8ff8f0ddf9036 diff --git a/crypto/evp/keymgmt_lib.c b/crypto/evp/keymgmt_lib.c index 5e9ec73f7d..583e8b362a 100644 --- a/crypto/evp/keymgmt_lib.c +++ b/crypto/evp/keymgmt_lib.c @@ -254,6 +254,24 @@ void evp_keymgmt_clear_pkey_cache(EVP_PKEY *pk) } } +void *evp_keymgmt_fromdata(EVP_PKEY *target, EVP_KEYMGMT *keymgmt, + const OSSL_PARAM params[], int domainparams) +{ + void *provctx = ossl_provider_ctx(EVP_KEYMGMT_provider(keymgmt)); + void *provdata = domainparams + ? keymgmt->importdomparams(provctx, params) + : keymgmt->importkey(provctx, params); + + evp_keymgmt_clear_pkey_cache(target); + if (provdata != NULL) { + EVP_KEYMGMT_up_ref(keymgmt); + target->pkeys[0].keymgmt = keymgmt; + target->pkeys[0].provdata = provdata; + target->pkeys[0].domainparams = domainparams; + } + + return provdata; +} /* internal functions */ /* TODO(3.0) decide if these should be public or internal */