diff options
author | Richard Levitte <levitte@openssl.org> | 2020-08-18 20:39:45 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2020-08-20 12:32:00 +0200 |
commit | 22b814443eea4ef4ea86d5d5677601d6645606d9 (patch) | |
tree | 8c29025ed8bc952d64f10b5822b78d84574ccc02 /crypto/ec | |
parent | 3b1fd0b003572554ad9bb3914527c160bc6a7727 (diff) |
X509: Add d2i_PUBKEY_ex(), which take a libctx and propq
Just like d2i_PrivateKey() / d2i_PrivateKey_ex(), there's a need to
associate an EVP_PKEY extracted from a PUBKEY to a library context and
a property query string. Without it, a provider-native EVP_PKEY can
only fetch necessary internal algorithms from the default library
context, even though an application specific context should be used.
Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/12671)
Diffstat (limited to 'crypto/ec')
-rw-r--r-- | crypto/ec/ec_ameth.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/crypto/ec/ec_ameth.c b/crypto/ec/ec_ameth.c index f8251a6de2..6cd0bf6279 100644 --- a/crypto/ec/ec_ameth.c +++ b/crypto/ec/ec_ameth.c @@ -22,6 +22,7 @@ #include <openssl/asn1t.h> #include "crypto/asn1.h" #include "crypto/evp.h" +#include "crypto/x509.h" #include <openssl/core_names.h> #include "openssl/param_build.h" #include "ec_local.h" @@ -161,12 +162,15 @@ static int eckey_pub_decode(EVP_PKEY *pkey, const X509_PUBKEY *pubkey) int ptype, pklen; EC_KEY *eckey = NULL; X509_ALGOR *palg; + OPENSSL_CTX *libctx = NULL; + const char *propq = NULL; - if (!X509_PUBKEY_get0_param(NULL, &p, &pklen, &palg, pubkey)) + if (!X509_PUBKEY_get0_libctx(&libctx, &propq, pubkey) + || !X509_PUBKEY_get0_param(NULL, &p, &pklen, &palg, pubkey)) return 0; X509_ALGOR_get0(NULL, &ptype, &pval, palg); - eckey = eckey_type2param(ptype, pval, NULL, NULL); + eckey = eckey_type2param(ptype, pval, libctx, propq); if (!eckey) { ECerr(EC_F_ECKEY_PUB_DECODE, ERR_R_EC_LIB); |