diff options
author | Shane Lontis <shane.lontis@oracle.com> | 2021-05-17 18:21:19 +1000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2021-05-20 08:52:57 +0100 |
commit | 0050db7bb37814879012226dd24aa433b3600019 (patch) | |
tree | e5b6c45a0b5445c5cac35d59790f5eb024cfd94c | |
parent | e3884ec5c37334e585e9208ce69d7e5b3cad4624 (diff) | |
download | openssl-0050db7bb37814879012226dd24aa433b3600019.tar.gz |
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)
-rw-r--r-- | test/evp_extra_test2.c | 43 |
1 files 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 |