X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=test%2Fssl_test.c;h=731f569743b6492f4851d464315d559c383e6ce7;hb=2de64666a07cccf8477e6483de62ae31f463df64;hp=4f82bf72560cd41c980cbb6fcd83895afc5cd308;hpb=5c587fb6b996d47771bcaecd71489e4849103f56;p=openssl.git diff --git a/test/ssl_test.c b/test/ssl_test.c index 4f82bf7256..731f569743 100644 --- a/test/ssl_test.c +++ b/test/ssl_test.c @@ -1,5 +1,5 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -13,12 +13,17 @@ #include #include #include +#include #include "handshake_helper.h" #include "ssl_test_ctx.h" #include "testutil.h" +DEFINE_STACK_OF(X509_NAME) + static CONF *conf = NULL; +static OSSL_PROVIDER *defctxnull = NULL, *thisprov = NULL; +static OPENSSL_CTX *libctx = NULL; /* Currently the section names are of the form test-, e.g. test-15. */ #define MAX_TESTCASE_NAME_LENGTH 100 @@ -405,22 +410,26 @@ static int test_handshake(int idx) #ifndef OPENSSL_NO_DTLS if (test_ctx->method == SSL_TEST_METHOD_DTLS) { - server_ctx = SSL_CTX_new(DTLS_server_method()); + server_ctx = SSL_CTX_new_with_libctx(libctx, NULL, DTLS_server_method()); if (!TEST_true(SSL_CTX_set_max_proto_version(server_ctx, 0))) goto err; if (test_ctx->extra.server.servername_callback != SSL_TEST_SERVERNAME_CB_NONE) { - if (!TEST_ptr(server2_ctx = SSL_CTX_new(DTLS_server_method()))) + if (!TEST_ptr(server2_ctx = + SSL_CTX_new_with_libctx(libctx, NULL, + DTLS_server_method()))) goto err; } - client_ctx = SSL_CTX_new(DTLS_client_method()); + client_ctx = SSL_CTX_new_with_libctx(libctx, NULL, DTLS_client_method()); if (!TEST_true(SSL_CTX_set_max_proto_version(client_ctx, 0))) goto err; if (test_ctx->handshake_mode == SSL_TEST_HANDSHAKE_RESUME) { - resume_server_ctx = SSL_CTX_new(DTLS_server_method()); + resume_server_ctx = SSL_CTX_new_with_libctx(libctx, NULL, + DTLS_server_method()); if (!TEST_true(SSL_CTX_set_max_proto_version(resume_server_ctx, 0))) goto err; - resume_client_ctx = SSL_CTX_new(DTLS_client_method()); + resume_client_ctx = SSL_CTX_new_with_libctx(libctx, NULL, + DTLS_client_method()); if (!TEST_true(SSL_CTX_set_max_proto_version(resume_client_ctx, 0))) goto err; if (!TEST_ptr(resume_server_ctx) @@ -430,26 +439,30 @@ static int test_handshake(int idx) } #endif if (test_ctx->method == SSL_TEST_METHOD_TLS) { - server_ctx = SSL_CTX_new(TLS_server_method()); + server_ctx = SSL_CTX_new_with_libctx(libctx, NULL, TLS_server_method()); if (!TEST_true(SSL_CTX_set_max_proto_version(server_ctx, 0))) goto err; /* SNI on resumption isn't supported/tested yet. */ if (test_ctx->extra.server.servername_callback != SSL_TEST_SERVERNAME_CB_NONE) { - if (!TEST_ptr(server2_ctx = SSL_CTX_new(TLS_server_method()))) + if (!TEST_ptr(server2_ctx = + SSL_CTX_new_with_libctx(libctx, NULL, + TLS_server_method()))) goto err; if (!TEST_true(SSL_CTX_set_max_proto_version(server2_ctx, 0))) goto err; } - client_ctx = SSL_CTX_new(TLS_client_method()); + client_ctx = SSL_CTX_new_with_libctx(libctx, NULL, TLS_client_method()); if (!TEST_true(SSL_CTX_set_max_proto_version(client_ctx, 0))) goto err; if (test_ctx->handshake_mode == SSL_TEST_HANDSHAKE_RESUME) { - resume_server_ctx = SSL_CTX_new(TLS_server_method()); + resume_server_ctx = SSL_CTX_new_with_libctx(libctx, NULL, + TLS_server_method()); if (!TEST_true(SSL_CTX_set_max_proto_version(resume_server_ctx, 0))) goto err; - resume_client_ctx = SSL_CTX_new(TLS_client_method()); + resume_client_ctx = SSL_CTX_new_with_libctx(libctx, NULL, + TLS_client_method()); if (!TEST_true(SSL_CTX_set_max_proto_version(resume_client_ctx, 0))) goto err; if (!TEST_ptr(resume_server_ctx) @@ -500,9 +513,17 @@ err: return ret; } +OPT_TEST_DECLARE_USAGE("conf_file modulename [fips_conf_file]\n") + int setup_tests(void) { long num_tests; + const char *modulename; + + if (!test_skip_common_options()) { + TEST_error("Error parsing test options\n"); + return 0; + } if (!TEST_ptr(conf = NCONF_new(NULL)) /* argv[1] should point to the test conf file */ @@ -511,6 +532,26 @@ int setup_tests(void) &num_tests), 0)) return 0; + if (!TEST_ptr(modulename = test_get_argument(1))) + return 0; + + if (strcmp(modulename, "none") != 0) { + const char *configfile = test_get_argument(2); + + defctxnull = OSSL_PROVIDER_load(NULL, "null"); + libctx = OPENSSL_CTX_new(); + if (!TEST_ptr(libctx)) + return 0; + + if (configfile != NULL + && !TEST_true(OPENSSL_CTX_load_config(libctx, configfile))) + return 0; + + thisprov = OSSL_PROVIDER_load(libctx, modulename); + if (!TEST_ptr(thisprov)) + return 0; + } + ADD_ALL_TESTS(test_handshake, (int)num_tests); return 1; } @@ -518,4 +559,7 @@ int setup_tests(void) void cleanup_tests(void) { NCONF_free(conf); + OSSL_PROVIDER_unload(defctxnull); + OSSL_PROVIDER_unload(thisprov); + OPENSSL_CTX_free(libctx); }