summaryrefslogtreecommitdiffstats
path: root/test/provider_pkey_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/provider_pkey_test.c')
-rw-r--r--test/provider_pkey_test.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/test/provider_pkey_test.c b/test/provider_pkey_test.c
index d360c0cf30..dc59326182 100644
--- a/test/provider_pkey_test.c
+++ b/test/provider_pkey_test.c
@@ -115,6 +115,66 @@ end:
return ret;
}
+static int test_alternative_keygen_init(void)
+{
+ EVP_PKEY_CTX *ctx = NULL;
+ OSSL_PROVIDER *deflt = NULL;
+ OSSL_PROVIDER *fake_rsa = NULL;
+ const OSSL_PROVIDER *provider;
+ const char *provname;
+ int ret = 0;
+
+ if (!TEST_ptr(deflt = OSSL_PROVIDER_load(libctx, "default")))
+ goto end;
+
+ /* first try without the fake RSA provider loaded */
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA", NULL)))
+ goto end;
+
+ if (!TEST_int_gt(EVP_PKEY_keygen_init(ctx), 0))
+ goto end;
+
+ if (!TEST_ptr(provider = EVP_PKEY_CTX_get0_provider(ctx)))
+ goto end;
+
+ if (!TEST_ptr(provname = OSSL_PROVIDER_get0_name(provider)))
+ goto end;
+
+ if (!TEST_str_eq(provname, "default"))
+ goto end;
+
+ EVP_PKEY_CTX_free(ctx);
+ ctx = NULL;
+
+ /* now load fake RSA and try again */
+ if (!TEST_ptr(fake_rsa = fake_rsa_start(libctx)))
+ return 0;
+
+ if (!TEST_ptr(ctx = EVP_PKEY_CTX_new_from_name(libctx, "RSA",
+ "?provider=fake-rsa")))
+ goto end;
+
+ if (!TEST_int_gt(EVP_PKEY_keygen_init(ctx), 0))
+ goto end;
+
+ if (!TEST_ptr(provider = EVP_PKEY_CTX_get0_provider(ctx)))
+ goto end;
+
+ if (!TEST_ptr(provname = OSSL_PROVIDER_get0_name(provider)))
+ goto end;
+
+ if (!TEST_str_eq(provname, "fake-rsa"))
+ goto end;
+
+ ret = 1;
+
+end:
+ fake_rsa_finish(fake_rsa);
+ OSSL_PROVIDER_unload(deflt);
+ EVP_PKEY_CTX_free(ctx);
+ return ret;
+}
+
int setup_tests(void)
{
libctx = OSSL_LIB_CTX_new();
@@ -122,6 +182,7 @@ int setup_tests(void)
return 0;
ADD_TEST(test_pkey_sig);
+ ADD_TEST(test_alternative_keygen_init);
return 1;
}