Fix PEM_write_bio_PrivateKey_traditional() to not output PKCS#8
authorRichard Levitte <levitte@openssl.org>
Thu, 27 Aug 2020 05:18:55 +0000 (07:18 +0200)
committerRichard Levitte <levitte@openssl.org>
Fri, 28 Aug 2020 18:48:27 +0000 (20:48 +0200)
commit87d91d223b869855c11f51b54541ba8139d30d8e
tree10219efed302ad89f237e9fa8f3b2897d054dc14
parentb6ef3c7089e887427cde8c550e28211dc0c22dd1
Fix PEM_write_bio_PrivateKey_traditional() to not output PKCS#8

PEM_write_bio_PrivateKey_traditional() uses i2d_PrivateKey() to do the
actual encoding to DER.  However, i2d_PrivateKey() is a generic
function that will do what it can to produce output according to what
the associated EVP_PKEY_ASN1_METHOD offers.  If that method offers a
function 'old_priv_encode', which is expected to produce the
"traditional" encoded form, then i2d_PrivateKey() uses that.  If not,
i2d_PrivateKey() will go on and used more modern methods, which are
all expected to produce PKCS#8.

To ensure that PEM_write_bio_PrivateKey_traditional() never produces
more modern encoded forms, an extra check that 'old_priv_encode' is
non-NULL is added.  If it is NULL, an error is returned.

Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/12728)
crypto/err/openssl.txt
crypto/pem/pem_err.c
crypto/pem/pem_pkey.c
include/openssl/pemerr.h