From 629c72db5f8af3312fd89188298ce464186470d1 Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Fri, 10 Apr 2020 18:28:24 +0100 Subject: When calling the import_to function pass the libctx too Previously import_to just took an EVP_PKEY as the argument. However we need to some additional context data as well - specifically the libctx. Therefore we pass an EVP_PKEY_CTX instead to hold the combination of both of these things. Reviewed-by: Tomas Mraz Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/11536) --- crypto/ec/ec_ameth.c | 7 ++++--- crypto/ec/ecx_meth.c | 21 +++++++++++---------- 2 files changed, 15 insertions(+), 13 deletions(-) (limited to 'crypto/ec') diff --git a/crypto/ec/ec_ameth.c b/crypto/ec/ec_ameth.c index 33712247ad..545d251e21 100644 --- a/crypto/ec/ec_ameth.c +++ b/crypto/ec/ec_ameth.c @@ -758,10 +758,11 @@ int ec_pkey_export_to(const EVP_PKEY *from, void *to_keydata, return rv; } -static int ec_pkey_import_from(const OSSL_PARAM params[], void *key) +static int ec_pkey_import_from(const OSSL_PARAM params[], void *vpctx) { - EVP_PKEY *pkey = key; - EC_KEY *ec = EC_KEY_new(); + EVP_PKEY_CTX *pctx = vpctx; + EVP_PKEY *pkey = EVP_PKEY_CTX_get0_pkey(pctx); + EC_KEY *ec = EC_KEY_new_ex(pctx->libctx); if (ec == NULL) { ERR_raise(ERR_LIB_DH, ERR_R_MALLOC_FAILURE); diff --git a/crypto/ec/ecx_meth.c b/crypto/ec/ecx_meth.c index ba037ffb8b..4603902122 100644 --- a/crypto/ec/ecx_meth.c +++ b/crypto/ec/ecx_meth.c @@ -450,10 +450,11 @@ static int ecx_pkey_export_to(const EVP_PKEY *from, void *to_keydata, return rv; } -static int ecx_generic_import_from(const OSSL_PARAM params[], void *key, +static int ecx_generic_import_from(const OSSL_PARAM params[], void *vpctx, int keytype) { - EVP_PKEY *pkey = key; + EVP_PKEY_CTX *pctx = vpctx; + EVP_PKEY *pkey = EVP_PKEY_CTX_get0_pkey(pctx); ECX_KEY *ecx = ecx_key_new(KEYNID2TYPE(keytype), 0); if (ecx == NULL) { @@ -469,9 +470,9 @@ static int ecx_generic_import_from(const OSSL_PARAM params[], void *key, return 1; } -static int x25519_import_from(const OSSL_PARAM params[], void *key) +static int x25519_import_from(const OSSL_PARAM params[], void *vpctx) { - return ecx_generic_import_from(params, key, EVP_PKEY_X25519); + return ecx_generic_import_from(params, vpctx, EVP_PKEY_X25519); } const EVP_PKEY_ASN1_METHOD ecx25519_asn1_meth = { @@ -522,9 +523,9 @@ const EVP_PKEY_ASN1_METHOD ecx25519_asn1_meth = { ecx_priv_decode_with_libctx }; -static int x448_import_from(const OSSL_PARAM params[], void *key) +static int x448_import_from(const OSSL_PARAM params[], void *vpctx) { - return ecx_generic_import_from(params, key, EVP_PKEY_X448); + return ecx_generic_import_from(params, vpctx, EVP_PKEY_X448); } const EVP_PKEY_ASN1_METHOD ecx448_asn1_meth = { @@ -647,9 +648,9 @@ static int ecd_sig_info_set448(X509_SIG_INFO *siginf, const X509_ALGOR *alg, return 1; } -static int ed25519_import_from(const OSSL_PARAM params[], void *key) +static int ed25519_import_from(const OSSL_PARAM params[], void *vpctx) { - return ecx_generic_import_from(params, key, EVP_PKEY_ED25519); + return ecx_generic_import_from(params, vpctx, EVP_PKEY_ED25519); } const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth = { @@ -699,9 +700,9 @@ const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth = { ecx_priv_decode_with_libctx }; -static int ed448_import_from(const OSSL_PARAM params[], void *key) +static int ed448_import_from(const OSSL_PARAM params[], void *vpctx) { - return ecx_generic_import_from(params, key, EVP_PKEY_ED448); + return ecx_generic_import_from(params, vpctx, EVP_PKEY_ED448); } const EVP_PKEY_ASN1_METHOD ed448_asn1_meth = { -- cgit v1.2.3