diff options
author | Tomas Mraz <tomas@openssl.org> | 2021-09-22 17:24:09 +0200 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2021-10-25 14:32:43 +0200 |
commit | bf585c9c071ec606ebb4606e749e63354140ca30 (patch) | |
tree | decbc6a49489ff986134e3b3b65682a70080dc90 /test/enginetest.c | |
parent | ef2fb64f9dfde1965cb0b8a5f8765c4f467c1604 (diff) | |
download | openssl-bf585c9c071ec606ebb4606e749e63354140ca30.tar.gz |
tests: Add test for X509_dup with ENGINE based key
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/16648)
Diffstat (limited to 'test/enginetest.c')
-rw-r--r-- | test/enginetest.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/test/enginetest.c b/test/enginetest.c index 4c4aeb9b8d..d865488770 100644 --- a/test/enginetest.c +++ b/test/enginetest.c @@ -352,6 +352,62 @@ static int test_redirect(void) OPENSSL_free(tmp); return to_return; } + +static int test_x509_dup_w_engine(void) +{ + ENGINE *e = NULL; + X509 *cert = NULL, *dupcert = NULL; + int ret = 0; + BIO *b = NULL; + RSA_METHOD *rsameth = NULL; + + if (!TEST_ptr(b = BIO_new_file(test_get_argument(0), "r")) + || !TEST_ptr(cert = PEM_read_bio_X509(b, NULL, NULL, NULL))) + goto err; + + /* Dup without an engine */ + if (!TEST_ptr(dupcert = X509_dup(cert))) + goto err; + X509_free(dupcert); + dupcert = NULL; + X509_free(cert); + cert = NULL; + + /* Create a test ENGINE */ + if (!TEST_ptr(e = ENGINE_new()) + || !TEST_true(ENGINE_set_id(e, "Test dummy engine")) + || !TEST_true(ENGINE_set_name(e, "Test dummy engine"))) + goto err; + + if (!TEST_ptr(rsameth = RSA_meth_dup(RSA_get_default_method()))) + goto err; + + ENGINE_set_RSA(e, rsameth); + + if (!TEST_true(ENGINE_set_default_RSA(e))) + goto err; + + if (!TEST_int_ge(BIO_seek(b, 0), 0) + || !TEST_ptr(cert = PEM_read_bio_X509(b, NULL, NULL, NULL))) + goto err; + + /* Dup with an engine set on the key */ + if (!TEST_ptr(dupcert = X509_dup(cert))) + goto err; + + ret = 1; + + err: + X509_free(cert); + X509_free(dupcert); + if (e != NULL) { + ENGINE_unregister_RSA(e); + ENGINE_free(e); + } + RSA_meth_free(rsameth); + BIO_free(b); + return ret; +} #endif int global_init(void) @@ -363,13 +419,27 @@ int global_init(void) return OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL); } +OPT_TEST_DECLARE_USAGE("certfile\n") + int setup_tests(void) { #ifdef OPENSSL_NO_ENGINE TEST_note("No ENGINE support"); #else + int n; + + if (!test_skip_common_options()) { + TEST_error("Error parsing test options\n"); + return 0; + } + + n = test_get_argument_count(); + if (n == 0) + return 0; + ADD_TEST(test_engines); ADD_TEST(test_redirect); + ADD_TEST(test_x509_dup_w_engine); #endif return 1; } |