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)
This commit is contained in:
Tomas Mraz 2021-09-22 17:24:09 +02:00
parent ef2fb64f9d
commit bf585c9c07
2 changed files with 75 additions and 2 deletions

View File

@ -352,6 +352,62 @@ static int test_redirect(void)
OPENSSL_free(tmp); OPENSSL_free(tmp);
return to_return; 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 #endif
int global_init(void) int global_init(void)
@ -363,13 +419,27 @@ int global_init(void)
return OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL); return OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL);
} }
OPT_TEST_DECLARE_USAGE("certfile\n")
int setup_tests(void) int setup_tests(void)
{ {
#ifdef OPENSSL_NO_ENGINE #ifdef OPENSSL_NO_ENGINE
TEST_note("No ENGINE support"); TEST_note("No ENGINE support");
#else #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_engines);
ADD_TEST(test_redirect); ADD_TEST(test_redirect);
ADD_TEST(test_x509_dup_w_engine);
#endif #endif
return 1; return 1;
} }

View File

@ -10,13 +10,16 @@
use strict; use strict;
use warnings; use warnings;
use OpenSSL::Test; use OpenSSL::Test qw/:DEFAULT srctop_file/;
use OpenSSL::Test::Utils; use OpenSSL::Test::Utils;
setup("test_engine"); setup("test_engine");
my @path = qw(test certs);
plan skip_all => "engines are deprecated" plan skip_all => "engines are deprecated"
if disabled('deprecated-3.0'); if disabled('deprecated-3.0');
plan tests => 1; plan tests => 1;
ok(run(test(["enginetest"])), "running enginetest"); ok(run(test(["enginetest", srctop_file(@path, "root-cert.pem")])),
"running enginetest");