From d336e22b854046cec25059ba31cf519c5f2ac7f3 Mon Sep 17 00:00:00 2001 From: Hideki Miyazaki Date: Fri, 10 Feb 2023 07:48:52 +0900 Subject: [PATCH] Allow reading ENC EC PRIVATE KEY as well via wolfSSL_PEM_read_bio_ECPrivateKey (#6055) * fix qt qsslkey unit test --- src/pk.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/pk.c b/src/pk.c index ce27fb5b6..d25b0d4dc 100644 --- a/src/pk.c +++ b/src/pk.c @@ -12121,7 +12121,7 @@ WOLFSSL_EC_KEY* wolfSSL_PEM_read_bio_ECPrivateKey(WOLFSSL_BIO* bio, DerBuffer* der = NULL; int keyFormat = 0; - WOLFSSL_ENTER("wolfSSL_PEM_read_bio_EC_PUBKEY"); + WOLFSSL_ENTER("wolfSSL_PEM_read_bio_ECPrivateKey"); /* Validate parameters. */ if (bio == NULL) { @@ -12135,11 +12135,18 @@ WOLFSSL_EC_KEY* wolfSSL_PEM_read_bio_ECPrivateKey(WOLFSSL_BIO* bio, err = 1; } } - /* Read a PEM key in to a new DER buffer. */ - if ((!err) && (pem_read_bio_key(bio, cb, pass, ECC_PRIVATEKEY_TYPE, + /* Read a PEM key in to a new DER buffer. + * To check ENC EC PRIVATE KEY, it uses PRIVATEKEY_TYPE to call + * pem_read_bio_key(), and then check key format if it is EC. + */ + if ((!err) && (pem_read_bio_key(bio, cb, pass, PRIVATEKEY_TYPE, &keyFormat, &der) <= 0)) { err = 1; } + if (keyFormat != ECDSAk) { + WOLFSSL_ERROR_MSG("Error not EC key format"); + err = 1; + } /* Load the EC key with the private key from the DER encoding. */ if ((!err) && (wolfSSL_EC_KEY_LoadDer_ex(ec, der->buffer, der->length, WOLFSSL_EC_KEY_LOAD_PRIVATE) != 1)) {