diff options
author | Matt Caswell <matt@openssl.org> | 2021-02-24 16:38:28 +0000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2021-03-08 15:11:31 +0000 |
commit | b574c6a9ac96825b4f19c5e835273bf176174af8 (patch) | |
tree | 0320f1f6cd4905072ce38567868d3fe4881c8859 /crypto/evp/p_legacy.c | |
parent | ec961f866ac048a2d3dfd6adcfa95042114bef52 (diff) |
Cache legacy keys instead of downgrading them
If someone calls an EVP_PKEY_get0*() function then we create a legacy
key and cache it in the EVP_PKEY - but it doesn't become an "origin" and
it doesn't ever get updated. This will be documented as a restriction of
the EVP_PKEY_get0*() function with provided keys.
Fixes #14020
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/14319)
Diffstat (limited to 'crypto/evp/p_legacy.c')
-rw-r--r-- | crypto/evp/p_legacy.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/crypto/evp/p_legacy.c b/crypto/evp/p_legacy.c index 5d8468f949..e478814065 100644 --- a/crypto/evp/p_legacy.c +++ b/crypto/evp/p_legacy.c @@ -33,15 +33,11 @@ int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key) RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey) { - if (!evp_pkey_downgrade((EVP_PKEY *)pkey)) { - ERR_raise(ERR_LIB_EVP, EVP_R_INACCESSIBLE_KEY); - return NULL; - } if (pkey->type != EVP_PKEY_RSA && pkey->type != EVP_PKEY_RSA_PSS) { ERR_raise(ERR_LIB_EVP, EVP_R_EXPECTING_AN_RSA_KEY); return NULL; } - return pkey->pkey.rsa; + return evp_pkey_get_legacy((EVP_PKEY *)pkey); } RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey) @@ -65,15 +61,11 @@ int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, EC_KEY *key) EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey) { - if (!evp_pkey_downgrade((EVP_PKEY *)pkey)) { - ERR_raise(ERR_LIB_EVP, EVP_R_INACCESSIBLE_KEY); - return NULL; - } if (EVP_PKEY_base_id(pkey) != EVP_PKEY_EC) { EVPerr(EVP_F_EVP_PKEY_GET0_EC_KEY, EVP_R_EXPECTING_A_EC_KEY); return NULL; } - return pkey->pkey.ec; + return evp_pkey_get_legacy((EVP_PKEY *)pkey); } EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey) |