EVP: Check that key methods aren't foreign when exporting
authorRichard Levitte <levitte@openssl.org>
Thu, 27 Feb 2020 09:51:45 +0000 (10:51 +0100)
committerRichard Levitte <levitte@openssl.org>
Mon, 9 Mar 2020 09:54:01 +0000 (10:54 +0100)
commitdf13defd4fd4c5a7afff69bc9733e7526e07959a
tree869933ff708dffee404be50d512fff4f59394581
parentb4dc705a73ba2e8257ea3438ee39e661973e2a13
EVP: Check that key methods aren't foreign when exporting

The EVP_PKEY_ASN1_METHOD function export_to() must check that the key
we're trying to export has a known libcrypto method, i.e. is a built
in RSA_METHOD, DSA_METHOD, etc.  Otherwise, the method may be defined
by the calling application, by an engine, by another library, and we
simply cannot know all the quirks hidden behind that method, if we
have access to the key data, or much anything.

Such keys are simply deemed impossible to export to provider keys,
i.e. have export_to() return 0.  This cascades back to functions like
evp_pkey_export_to_provider() and evp_pkey_upgrade_to_provider() and
their callers.  In most cases, this is fine, but if these get mixed in
with provider side keys in any function, that function will fail.

Fixes #11179
Fixes #9915

Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/11193)
crypto/dh/dh_ameth.c
crypto/dsa/dsa_ameth.c
crypto/ec/ec_ameth.c
crypto/evp/m_sigver.c
crypto/evp/pmeth_fn.c
crypto/evp/signature.c
crypto/rsa/rsa_ameth.c