diff options
author | Richard Levitte <levitte@openssl.org> | 2021-11-07 06:18:16 +0100 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2021-11-09 05:42:20 +0100 |
commit | 2d49519210ed60ed16778b4b1097b4c6880541e5 (patch) | |
tree | a0626ad7fa4bcd79463e2a86e13ebd74e0b4bbba /providers/implementations | |
parent | 09235289c377ff998964bb6b074bb2a3ad768fd2 (diff) | |
download | openssl-new-2d49519210ed60ed16778b4b1097b4c6880541e5.tar.gz |
Fix DER encoder implementations for output structures "EC" and "SM2"
These DER encoder implementations are supposed to be aliases for the
"type-specific" output structure, but were made different in so far
that they would output a "type specific" public key, which turns out
to be garbage (it called i2o_ECPublicKey()). The "type-specific"
output structure doesn't support that, and shouldn't.
Fixes #16977
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/16983)
(cherry picked from commit 2cb802e16fff3fb2c57ae664baa7bd9ce3e33805)
Diffstat (limited to 'providers/implementations')
-rw-r--r-- | providers/implementations/encode_decode/encode_key2any.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/providers/implementations/encode_decode/encode_key2any.c b/providers/implementations/encode_decode/encode_key2any.c index b1d95fc4e0..7c9716bca9 100644 --- a/providers/implementations/encode_decode/encode_key2any.c +++ b/providers/implementations/encode_decode/encode_key2any.c @@ -731,7 +731,7 @@ static int ec_pki_priv_to_der(const void *veckey, unsigned char **pder) # define ec_epki_priv_to_der ec_pki_priv_to_der # define ec_type_specific_params_to_der (i2d_of_void *)i2d_ECParameters -# define ec_type_specific_pub_to_der (i2d_of_void *)i2o_ECPublicKey +/* No ec_type_specific_pub_to_der, there simply is no such thing */ # define ec_type_specific_priv_to_der (i2d_of_void *)i2d_ECPrivateKey # define ec_check_key_type NULL @@ -1190,11 +1190,11 @@ static int key2any_encode(struct key2any_ctx_st *ctx, OSSL_CORE_BIO *cout, #define DO_DSA_selection_mask DO_type_specific_selection_mask #define DO_DSA(impl, type, output) DO_type_specific(impl, type, output) -#define DO_EC_selection_mask DO_type_specific_selection_mask -#define DO_EC(impl, type, output) DO_type_specific(impl, type, output) +#define DO_EC_selection_mask DO_type_specific_no_pub_selection_mask +#define DO_EC(impl, type, output) DO_type_specific_no_pub(impl, type, output) -#define DO_SM2_selection_mask DO_type_specific_selection_mask -#define DO_SM2(impl, type, output) DO_type_specific(impl, type, output) +#define DO_SM2_selection_mask DO_type_specific_no_pub_selection_mask +#define DO_SM2(impl, type, output) DO_type_specific_no_pub(impl, type, output) /* PKCS#1 defines a structure for RSA private and public keys */ #define DO_PKCS1_selection_mask DO_RSA_selection_mask |