Test d2i_PrivateKey_bio() does not add errors to stack when decoding a X25519 key sucessfully.

This confirms that another merge has addressed this issue.

Fixes #14996

Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15303)
This commit is contained in:
Shane Lontis 2021-05-17 18:21:19 +10:00 committed by Matt Caswell
parent e3884ec5c3
commit 0050db7bb3

View File

@ -223,6 +223,13 @@ static const unsigned char kExampleECKey2DER[] = {
0xE0, 0xC7, 0xB2, 0xF8, 0x20, 0x40, 0xC2, 0x27, 0xC8, 0xBE, 0x02, 0x7E,
0x96, 0x69, 0xE0, 0x04, 0xCB, 0x89, 0x0B, 0x42
};
static const unsigned char kExampleECXKey2DER[] = {
0x30, 0x2E, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e,
0x04, 0x22, 0x04, 0x20, 0xc8, 0xa9, 0xd5, 0xa9, 0x10, 0x91, 0xad, 0x85,
0x1c, 0x66, 0x8b, 0x07, 0x36, 0xc1, 0xc9, 0xa0, 0x29, 0x36, 0xc0, 0xd3,
0xad, 0x62, 0x67, 0x08, 0x58, 0x08, 0x80, 0x47, 0xba, 0x05, 0x74, 0x75
};
#endif
typedef struct APK_DATA_st {
@ -235,6 +242,7 @@ static APK_DATA keydata[] = {
{kExampleRSAKeyDER, sizeof(kExampleRSAKeyDER), EVP_PKEY_RSA},
{kExampleRSAKeyPKCS8, sizeof(kExampleRSAKeyPKCS8), EVP_PKEY_RSA},
#ifndef OPENSSL_NO_EC
{kExampleECXKey2DER, sizeof(kExampleECXKey2DER), EVP_PKEY_X25519},
{kExampleECKeyDER, sizeof(kExampleECKeyDER), EVP_PKEY_EC},
{kExampleECKey2DER, sizeof(kExampleECKey2DER), EVP_PKEY_EC},
#endif
@ -268,6 +276,15 @@ static int test_d2i_AutoPrivateKey_ex(int i)
if (!TEST_true(EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_RSA_D,
&priv_bn)))
goto done;
} else if (ak->evptype == EVP_PKEY_X25519) {
unsigned char buffer[32];
size_t len;
if (!TEST_true(EVP_PKEY_get_octet_string_param(pkey,
OSSL_PKEY_PARAM_PRIV_KEY,
buffer, sizeof(buffer),
&len)))
goto done;
} else {
if (!TEST_true(EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_PRIV_KEY,
&priv_bn)))
@ -361,16 +378,18 @@ static int test_alternative_default(void)
return ok;
}
static int test_d2i_PrivateKey_ex(void) {
int ok;
OSSL_PROVIDER *provider;
BIO *key_bio;
EVP_PKEY* pkey;
ok = 0;
provider = OSSL_PROVIDER_load(NULL, "default");
key_bio = BIO_new_mem_buf((&keydata[0])->kder, (&keydata)[0]->size);
static int test_d2i_PrivateKey_ex(int testid)
{
int ok = 0;
OSSL_PROVIDER *provider = NULL;
BIO *key_bio = NULL;
EVP_PKEY *pkey = NULL;
int id = (testid == 0) ? 0 : 2;
if (!TEST_ptr(provider = OSSL_PROVIDER_load(NULL, "default")))
goto err;
if (!TEST_ptr(key_bio = BIO_new_mem_buf(keydata[id].kder, keydata[id].size)))
goto err;
if (!TEST_ptr_null(pkey = PEM_read_bio_PrivateKey(key_bio, NULL, NULL, NULL)))
goto err;
@ -748,7 +767,11 @@ int setup_tests(void)
ADD_TEST(test_alternative_default);
ADD_ALL_TESTS(test_d2i_AutoPrivateKey_ex, OSSL_NELEM(keydata));
ADD_TEST(test_d2i_PrivateKey_ex);
#ifndef OPENSSL_NO_EC
ADD_ALL_TESTS(test_d2i_PrivateKey_ex, 2);
#else
ADD_ALL_TESTS(test_d2i_PrivateKey_ex, 1);
#endif
#ifndef OPENSSL_NO_DSA
ADD_TEST(test_dsa_todata);
#endif