diff options
author | Richard Levitte <levitte@openssl.org> | 2020-04-15 13:36:19 +0200 |
---|---|---|
committer | Pauli <paul.dale@oracle.com> | 2020-04-17 19:50:03 +1000 |
commit | 8a5cb59601fa9892e22e26337917cf513d57c473 (patch) | |
tree | be491a12c60f53abbdff98905a8a6db9ebaf644d /test | |
parent | d0ddf9b409495e8e2adab8a6b5bc38b34273341a (diff) |
TEST: Add a test of keygen with an empty template in test/evp_extra_test.c
We do it with RSA, which may seem strange. However, an RSA "template"
is generally ignored, so this is safe. This is modelled after the test
code given in github issue #11549.
Reviewed-by: Paul Dale <paul.dale@oracle.com>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/11550)
Diffstat (limited to 'test')
-rw-r--r-- | test/evp_extra_test.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/test/evp_extra_test.c b/test/evp_extra_test.c index 07161ad8d8..ed6273dc9c 100644 --- a/test/evp_extra_test.c +++ b/test/evp_extra_test.c @@ -1540,6 +1540,47 @@ static int test_EVP_PKEY_set1_DH(void) } #endif +/* + * We test what happens with an empty template. For the sake of this test, + * the template must be ignored, and we know that's the case for RSA keys + * (this might arguably be a misfeature, but that's what we currently do, + * even in provider code, since that's how the legacy RSA implementation + * does things) + */ +static int test_keygen_with_empty_template(int n) +{ + EVP_PKEY_CTX *ctx = NULL; + EVP_PKEY *pkey = NULL; + EVP_PKEY *tkey = NULL; + int ret = 0; + + switch (n) { + case 0: + /* We do test with no template at all as well */ + if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL))) + goto err; + break; + case 1: + /* Here we create an empty RSA key that serves as our template */ + if (!TEST_ptr(tkey = EVP_PKEY_new()) + || !TEST_true(EVP_PKEY_set_type(tkey, EVP_PKEY_RSA)) + || !TEST_ptr(ctx = EVP_PKEY_CTX_new(tkey, NULL))) + goto err; + break; + } + + if (!TEST_int_gt(EVP_PKEY_keygen_init(ctx), 0) + || !TEST_int_gt(EVP_PKEY_keygen(ctx, &pkey), 0)) + goto err; + + ret = 1; + err: + EVP_PKEY_CTX_free(ctx); + EVP_PKEY_free(pkey); + EVP_PKEY_free(tkey); + return ret; +} + int setup_tests(void) { ADD_ALL_TESTS(test_EVP_DigestSignInit, 9); @@ -1579,6 +1620,7 @@ int setup_tests(void) #ifndef OPENSSL_NO_DH ADD_TEST(test_EVP_PKEY_set1_DH); #endif + ADD_ALL_TESTS(test_keygen_with_empty_template, 2); return 1; } |