From 0050db7bb37814879012226dd24aa433b3600019 Mon Sep 17 00:00:00 2001 From: Shane Lontis Date: Mon, 17 May 2021 18:21:19 +1000 Subject: 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 (Merged from https://github.com/openssl/openssl/pull/15303) --- test/evp_extra_test2.c | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/test/evp_extra_test2.c b/test/evp_extra_test2.c index cad1934c5b..3ad28d867a 100644 --- a/test/evp_extra_test2.c +++ b/test/evp_extra_test2.c @@ -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 -- cgit v1.2.3