summaryrefslogtreecommitdiffstats
path: root/test/evp_extra_test.c
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2020-04-15 13:36:19 +0200
committerPauli <paul.dale@oracle.com>2020-04-17 19:50:03 +1000
commit8a5cb59601fa9892e22e26337917cf513d57c473 (patch)
treebe491a12c60f53abbdff98905a8a6db9ebaf644d /test/evp_extra_test.c
parentd0ddf9b409495e8e2adab8a6b5bc38b34273341a (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/evp_extra_test.c')
-rw-r--r--test/evp_extra_test.c42
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;
}