/*
- * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
*
- * Licensed under the OpenSSL license (the "License"). You may not use
+ * 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
* in the file LICENSE in the source distribution or at
* https://www.openssl.org/source/license.html
#include <openssl/conf.h>
#include <openssl/err.h>
#include <openssl/ssl.h>
+#include <openssl/provider.h>
+#ifndef OPENSSL_NO_QUIC
+#include <openssl/quic.h>
+#endif
-#include "handshake_helper.h"
-#include "ssl_test_ctx.h"
+#include "helpers/handshake.h"
+#include "helpers/ssl_test_ctx.h"
#include "testutil.h"
static CONF *conf = NULL;
+static OSSL_PROVIDER *defctxnull = NULL, *thisprov = NULL;
+static OSSL_LIB_CTX *libctx = NULL;
/* Currently the section names are of the form test-<number>, e.g. test-15. */
#define MAX_TESTCASE_NAME_LENGTH 100
BIO_snprintf(test_app, sizeof(test_app), "test-%d", idx);
- test_ctx = SSL_TEST_CTX_create(conf, test_app);
+ test_ctx = SSL_TEST_CTX_create(conf, test_app, libctx);
if (!TEST_ptr(test_ctx))
goto err;
#ifndef OPENSSL_NO_DTLS
if (test_ctx->method == SSL_TEST_METHOD_DTLS) {
- server_ctx = SSL_CTX_new(DTLS_server_method());
- if (!TEST_true(SSL_CTX_set_max_proto_version(server_ctx,
- DTLS_MAX_VERSION)))
+ server_ctx = SSL_CTX_new_ex(libctx, NULL, DTLS_server_method());
+ if (!TEST_true(SSL_CTX_set_options(server_ctx,
+ SSL_OP_ALLOW_CLIENT_RENEGOTIATION))
+ || !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_ex(libctx, NULL, DTLS_server_method()))
+ || !TEST_true(SSL_CTX_set_options(server2_ctx,
+ SSL_OP_ALLOW_CLIENT_RENEGOTIATION)))
goto err;
}
- client_ctx = SSL_CTX_new(DTLS_client_method());
- if (!TEST_true(SSL_CTX_set_max_proto_version(client_ctx,
- DTLS_MAX_VERSION)))
+ client_ctx = SSL_CTX_new_ex(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());
- if (!TEST_true(SSL_CTX_set_max_proto_version(resume_server_ctx,
- DTLS_MAX_VERSION)))
+ resume_server_ctx = SSL_CTX_new_ex(libctx, NULL,
+ DTLS_server_method());
+ if (!TEST_true(SSL_CTX_set_max_proto_version(resume_server_ctx, 0))
+ || !TEST_true(SSL_CTX_set_options(resume_server_ctx,
+ SSL_OP_ALLOW_CLIENT_RENEGOTIATION)))
goto err;
- resume_client_ctx = SSL_CTX_new(DTLS_client_method());
- if (!TEST_true(SSL_CTX_set_max_proto_version(resume_client_ctx,
- DTLS_MAX_VERSION)))
+ resume_client_ctx = SSL_CTX_new_ex(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)
|| !TEST_ptr(resume_client_ctx))
}
#endif
if (test_ctx->method == SSL_TEST_METHOD_TLS) {
- server_ctx = SSL_CTX_new(TLS_server_method());
- if (!TEST_true(SSL_CTX_set_max_proto_version(server_ctx,
- TLS_MAX_VERSION)))
+#if !defined(OPENSSL_NO_TLS1_3) \
+ && defined(OPENSSL_NO_EC) \
+ && defined(OPENSSL_NO_DH)
+ /* Without ec or dh there are no built-in groups for TLSv1.3 */
+ int maxversion = TLS1_2_VERSION;
+#else
+ int maxversion = 0;
+#endif
+
+ server_ctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method());
+ if (!TEST_true(SSL_CTX_set_max_proto_version(server_ctx, maxversion))
+ || !TEST_true(SSL_CTX_set_options(server_ctx,
+ SSL_OP_ALLOW_CLIENT_RENEGOTIATION)))
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_ex(libctx, NULL, TLS_server_method()))
+ || !TEST_true(SSL_CTX_set_options(server2_ctx,
+ SSL_OP_ALLOW_CLIENT_RENEGOTIATION)))
goto err;
if (!TEST_true(SSL_CTX_set_max_proto_version(server2_ctx,
- TLS_MAX_VERSION)))
+ maxversion)))
goto err;
}
- client_ctx = SSL_CTX_new(TLS_client_method());
- if (!TEST_true(SSL_CTX_set_max_proto_version(client_ctx,
- TLS_MAX_VERSION)))
+ client_ctx = SSL_CTX_new_ex(libctx, NULL, TLS_client_method());
+ if (!TEST_true(SSL_CTX_set_max_proto_version(client_ctx, maxversion)))
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_ex(libctx, NULL,
+ TLS_server_method());
if (!TEST_true(SSL_CTX_set_max_proto_version(resume_server_ctx,
- TLS_MAX_VERSION)))
+ maxversion))
+ || !TEST_true(SSL_CTX_set_options(resume_server_ctx,
+ SSL_OP_ALLOW_CLIENT_RENEGOTIATION)))
goto err;
- resume_client_ctx = SSL_CTX_new(TLS_client_method());
+ resume_client_ctx = SSL_CTX_new_ex(libctx, NULL,
+ TLS_client_method());
if (!TEST_true(SSL_CTX_set_max_proto_version(resume_client_ctx,
- TLS_MAX_VERSION)))
+ maxversion)))
+ goto err;
+ if (!TEST_ptr(resume_server_ctx)
+ || !TEST_ptr(resume_client_ctx))
+ goto err;
+ }
+ }
+#ifndef OPENSSL_NO_QUIC
+ if (test_ctx->method == SSL_TEST_METHOD_QUIC) {
+ server_ctx = SSL_CTX_new_ex(libctx, NULL, OSSL_QUIC_server_method());
+ if (test_ctx->extra.server.servername_callback !=
+ SSL_TEST_SERVERNAME_CB_NONE) {
+ if (!TEST_ptr(server2_ctx =
+ SSL_CTX_new_ex(libctx, NULL,
+ OSSL_QUIC_server_method())))
goto err;
+ }
+ client_ctx = SSL_CTX_new_ex(libctx, NULL, OSSL_QUIC_client_method());
+ if (test_ctx->handshake_mode == SSL_TEST_HANDSHAKE_RESUME) {
+ resume_server_ctx = SSL_CTX_new_ex(libctx, NULL,
+ OSSL_QUIC_server_method());
+ resume_client_ctx = SSL_CTX_new_ex(libctx, NULL,
+ OSSL_QUIC_client_method());
if (!TEST_ptr(resume_server_ctx)
|| !TEST_ptr(resume_client_ctx))
goto err;
}
}
+#endif
+
+#ifdef OPENSSL_NO_AUTOLOAD_CONFIG
+ if (!TEST_true(OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL)))
+ goto err;
+#endif
if (!TEST_ptr(server_ctx)
|| !TEST_ptr(client_ctx)
return ret;
}
+#define USAGE "conf_file module_name [module_conf_file]\n"
+OPT_TEST_DECLARE_USAGE(USAGE)
+
int setup_tests(void)
{
long num_tests;
+ 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 */
|| !TEST_int_gt(NCONF_load(conf, test_get_argument(0), NULL), 0)
|| !TEST_int_ne(NCONF_get_number_e(conf, NULL, "num_tests",
- &num_tests), 0))
+ &num_tests), 0)) {
+ TEST_error("usage: ssl_test %s", USAGE);
+ return 0;
+ }
+
+ if (!test_arg_libctx(&libctx, &defctxnull, &thisprov, 1, USAGE))
return 0;
ADD_ALL_TESTS(test_handshake, (int)num_tests);
void cleanup_tests(void)
{
NCONF_free(conf);
+ OSSL_PROVIDER_unload(defctxnull);
+ OSSL_PROVIDER_unload(thisprov);
+ OSSL_LIB_CTX_free(libctx);
}