1 1.1 christos /* 2 1.3 christos * Copyright 2016-2025 The OpenSSL Project Authors. All Rights Reserved. 3 1.1 christos * 4 1.2 christos * Licensed under the Apache License 2.0 (the "License"). You may not use 5 1.1 christos * this file except in compliance with the License. You can obtain a copy 6 1.1 christos * in the file LICENSE in the source distribution or at 7 1.1 christos * https://www.openssl.org/source/license.html 8 1.1 christos */ 9 1.1 christos 10 1.2 christos /* 11 1.2 christos * We need access to the deprecated low level HMAC APIs for legacy purposes 12 1.2 christos * when the deprecated calls are not hidden 13 1.2 christos */ 14 1.2 christos #ifndef OPENSSL_NO_DEPRECATED_3_0 15 1.2 christos # define OPENSSL_SUPPRESS_DEPRECATED 16 1.2 christos #endif 17 1.2 christos 18 1.2 christos #include <stdio.h> 19 1.1 christos #include <string.h> 20 1.1 christos 21 1.1 christos #include <openssl/opensslconf.h> 22 1.1 christos #include <openssl/bio.h> 23 1.1 christos #include <openssl/crypto.h> 24 1.1 christos #include <openssl/ssl.h> 25 1.1 christos #include <openssl/ocsp.h> 26 1.2 christos #include <openssl/srp.h> 27 1.2 christos #include <openssl/txt_db.h> 28 1.2 christos #include <openssl/aes.h> 29 1.2 christos #include <openssl/rand.h> 30 1.2 christos #include <openssl/core_names.h> 31 1.2 christos #include <openssl/core_dispatch.h> 32 1.2 christos #include <openssl/provider.h> 33 1.2 christos #include <openssl/param_build.h> 34 1.2 christos #include <openssl/x509v3.h> 35 1.2 christos #include <openssl/dh.h> 36 1.2 christos #include <openssl/engine.h> 37 1.1 christos 38 1.2 christos #include "helpers/ssltestlib.h" 39 1.1 christos #include "testutil.h" 40 1.2 christos #include "testutil/output.h" 41 1.2 christos #include "internal/nelem.h" 42 1.2 christos #include "internal/ktls.h" 43 1.2 christos #include "../ssl/ssl_local.h" 44 1.2 christos #include "filterprov.h" 45 1.2 christos 46 1.2 christos #undef OSSL_NO_USABLE_TLS1_3 47 1.2 christos #if defined(OPENSSL_NO_TLS1_3) \ 48 1.2 christos || (defined(OPENSSL_NO_EC) && defined(OPENSSL_NO_DH)) 49 1.2 christos /* 50 1.2 christos * If we don't have ec or dh then there are no built-in groups that are usable 51 1.2 christos * with TLSv1.3 52 1.2 christos */ 53 1.2 christos # define OSSL_NO_USABLE_TLS1_3 54 1.2 christos #endif 55 1.2 christos 56 1.2 christos /* Defined in tls-provider.c */ 57 1.2 christos int tls_provider_init(const OSSL_CORE_HANDLE *handle, 58 1.2 christos const OSSL_DISPATCH *in, 59 1.2 christos const OSSL_DISPATCH **out, 60 1.2 christos void **provctx); 61 1.2 christos 62 1.2 christos static OSSL_LIB_CTX *libctx = NULL; 63 1.2 christos static OSSL_PROVIDER *defctxnull = NULL; 64 1.2 christos 65 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 66 1.2 christos 67 1.2 christos static SSL_SESSION *clientpsk = NULL; 68 1.2 christos static SSL_SESSION *serverpsk = NULL; 69 1.2 christos static const char *pskid = "Identity"; 70 1.2 christos static const char *srvid; 71 1.2 christos 72 1.2 christos static int use_session_cb(SSL *ssl, const EVP_MD *md, const unsigned char **id, 73 1.2 christos size_t *idlen, SSL_SESSION **sess); 74 1.2 christos static int find_session_cb(SSL *ssl, const unsigned char *identity, 75 1.2 christos size_t identity_len, SSL_SESSION **sess); 76 1.1 christos 77 1.2 christos static int use_session_cb_cnt = 0; 78 1.2 christos static int find_session_cb_cnt = 0; 79 1.2 christos 80 1.2 christos static SSL_SESSION *create_a_psk(SSL *ssl, size_t mdsize); 81 1.2 christos #endif 82 1.2 christos 83 1.2 christos static char *certsdir = NULL; 84 1.1 christos static char *cert = NULL; 85 1.1 christos static char *privkey = NULL; 86 1.2 christos static char *cert2 = NULL; 87 1.2 christos static char *privkey2 = NULL; 88 1.2 christos static char *cert1024 = NULL; 89 1.2 christos static char *privkey1024 = NULL; 90 1.2 christos static char *cert3072 = NULL; 91 1.2 christos static char *privkey3072 = NULL; 92 1.2 christos static char *cert4096 = NULL; 93 1.2 christos static char *privkey4096 = NULL; 94 1.2 christos static char *cert8192 = NULL; 95 1.2 christos static char *privkey8192 = NULL; 96 1.2 christos static char *srpvfile = NULL; 97 1.2 christos static char *tmpfilename = NULL; 98 1.2 christos static char *dhfile = NULL; 99 1.2 christos 100 1.2 christos static int is_fips = 0; 101 1.2 christos 102 1.2 christos #define LOG_BUFFER_SIZE 2048 103 1.2 christos static char server_log_buffer[LOG_BUFFER_SIZE + 1] = {0}; 104 1.2 christos static size_t server_log_buffer_index = 0; 105 1.2 christos static char client_log_buffer[LOG_BUFFER_SIZE + 1] = {0}; 106 1.2 christos static size_t client_log_buffer_index = 0; 107 1.2 christos static int error_writing_log = 0; 108 1.1 christos 109 1.1 christos #ifndef OPENSSL_NO_OCSP 110 1.1 christos static const unsigned char orespder[] = "Dummy OCSP Response"; 111 1.1 christos static int ocsp_server_called = 0; 112 1.1 christos static int ocsp_client_called = 0; 113 1.1 christos 114 1.1 christos static int cdummyarg = 1; 115 1.1 christos static X509 *ocspcert = NULL; 116 1.1 christos #endif 117 1.1 christos 118 1.1 christos #define NUM_EXTRA_CERTS 40 119 1.2 christos #define CLIENT_VERSION_LEN 2 120 1.2 christos 121 1.2 christos /* 122 1.2 christos * This structure is used to validate that the correct number of log messages 123 1.2 christos * of various types are emitted when emitting secret logs. 124 1.2 christos */ 125 1.2 christos struct sslapitest_log_counts { 126 1.2 christos unsigned int rsa_key_exchange_count; 127 1.2 christos unsigned int master_secret_count; 128 1.2 christos unsigned int client_early_secret_count; 129 1.2 christos unsigned int client_handshake_secret_count; 130 1.2 christos unsigned int server_handshake_secret_count; 131 1.2 christos unsigned int client_application_secret_count; 132 1.2 christos unsigned int server_application_secret_count; 133 1.2 christos unsigned int early_exporter_secret_count; 134 1.2 christos unsigned int exporter_secret_count; 135 1.2 christos }; 136 1.2 christos 137 1.2 christos 138 1.2 christos static int hostname_cb(SSL *s, int *al, void *arg) 139 1.2 christos { 140 1.2 christos const char *hostname = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name); 141 1.2 christos 142 1.2 christos if (hostname != NULL && (strcmp(hostname, "goodhost") == 0 143 1.2 christos || strcmp(hostname, "altgoodhost") == 0)) 144 1.2 christos return SSL_TLSEXT_ERR_OK; 145 1.2 christos 146 1.2 christos return SSL_TLSEXT_ERR_NOACK; 147 1.2 christos } 148 1.1 christos 149 1.2 christos static void client_keylog_callback(const SSL *ssl, const char *line) 150 1.1 christos { 151 1.2 christos int line_length = strlen(line); 152 1.1 christos 153 1.2 christos /* If the log doesn't fit, error out. */ 154 1.2 christos if (client_log_buffer_index + line_length > sizeof(client_log_buffer) - 1) { 155 1.2 christos TEST_info("Client log too full"); 156 1.2 christos error_writing_log = 1; 157 1.2 christos return; 158 1.1 christos } 159 1.2 christos 160 1.2 christos strcat(client_log_buffer, line); 161 1.2 christos client_log_buffer_index += line_length; 162 1.2 christos client_log_buffer[client_log_buffer_index++] = '\n'; 163 1.2 christos } 164 1.2 christos 165 1.2 christos static void server_keylog_callback(const SSL *ssl, const char *line) 166 1.2 christos { 167 1.2 christos int line_length = strlen(line); 168 1.2 christos 169 1.2 christos /* If the log doesn't fit, error out. */ 170 1.2 christos if (server_log_buffer_index + line_length > sizeof(server_log_buffer) - 1) { 171 1.2 christos TEST_info("Server log too full"); 172 1.2 christos error_writing_log = 1; 173 1.2 christos return; 174 1.1 christos } 175 1.1 christos 176 1.2 christos strcat(server_log_buffer, line); 177 1.2 christos server_log_buffer_index += line_length; 178 1.2 christos server_log_buffer[server_log_buffer_index++] = '\n'; 179 1.2 christos } 180 1.2 christos 181 1.2 christos static int compare_hex_encoded_buffer(const char *hex_encoded, 182 1.2 christos size_t hex_length, 183 1.2 christos const uint8_t *raw, 184 1.2 christos size_t raw_length) 185 1.2 christos { 186 1.2 christos size_t i, j; 187 1.2 christos char hexed[3]; 188 1.2 christos 189 1.2 christos if (!TEST_size_t_eq(raw_length * 2, hex_length)) 190 1.2 christos return 1; 191 1.2 christos 192 1.2 christos for (i = j = 0; i < raw_length && j + 1 < hex_length; i++, j += 2) { 193 1.3 christos BIO_snprintf(hexed, sizeof(hexed), "%02x", raw[i]); 194 1.2 christos if (!TEST_int_eq(hexed[0], hex_encoded[j]) 195 1.2 christos || !TEST_int_eq(hexed[1], hex_encoded[j + 1])) 196 1.2 christos return 1; 197 1.1 christos } 198 1.1 christos 199 1.2 christos return 0; 200 1.2 christos } 201 1.1 christos 202 1.2 christos static int test_keylog_output(char *buffer, const SSL *ssl, 203 1.2 christos const SSL_SESSION *session, 204 1.2 christos struct sslapitest_log_counts *expected) 205 1.2 christos { 206 1.2 christos char *token = NULL; 207 1.2 christos unsigned char actual_client_random[SSL3_RANDOM_SIZE] = {0}; 208 1.2 christos size_t client_random_size = SSL3_RANDOM_SIZE; 209 1.2 christos unsigned char actual_master_key[SSL_MAX_MASTER_KEY_LENGTH] = {0}; 210 1.2 christos size_t master_key_size = SSL_MAX_MASTER_KEY_LENGTH; 211 1.2 christos unsigned int rsa_key_exchange_count = 0; 212 1.2 christos unsigned int master_secret_count = 0; 213 1.2 christos unsigned int client_early_secret_count = 0; 214 1.2 christos unsigned int client_handshake_secret_count = 0; 215 1.2 christos unsigned int server_handshake_secret_count = 0; 216 1.2 christos unsigned int client_application_secret_count = 0; 217 1.2 christos unsigned int server_application_secret_count = 0; 218 1.2 christos unsigned int early_exporter_secret_count = 0; 219 1.2 christos unsigned int exporter_secret_count = 0; 220 1.2 christos 221 1.2 christos for (token = strtok(buffer, " \n"); token != NULL; 222 1.2 christos token = strtok(NULL, " \n")) { 223 1.2 christos if (strcmp(token, "RSA") == 0) { 224 1.2 christos /* 225 1.2 christos * Premaster secret. Tokens should be: 16 ASCII bytes of 226 1.2 christos * hex-encoded encrypted secret, then the hex-encoded pre-master 227 1.2 christos * secret. 228 1.2 christos */ 229 1.2 christos if (!TEST_ptr(token = strtok(NULL, " \n"))) 230 1.2 christos return 0; 231 1.2 christos if (!TEST_size_t_eq(strlen(token), 16)) 232 1.2 christos return 0; 233 1.2 christos if (!TEST_ptr(token = strtok(NULL, " \n"))) 234 1.2 christos return 0; 235 1.2 christos /* 236 1.2 christos * We can't sensibly check the log because the premaster secret is 237 1.2 christos * transient, and OpenSSL doesn't keep hold of it once the master 238 1.2 christos * secret is generated. 239 1.2 christos */ 240 1.2 christos rsa_key_exchange_count++; 241 1.2 christos } else if (strcmp(token, "CLIENT_RANDOM") == 0) { 242 1.2 christos /* 243 1.2 christos * Master secret. Tokens should be: 64 ASCII bytes of hex-encoded 244 1.2 christos * client random, then the hex-encoded master secret. 245 1.2 christos */ 246 1.2 christos client_random_size = SSL_get_client_random(ssl, 247 1.2 christos actual_client_random, 248 1.2 christos SSL3_RANDOM_SIZE); 249 1.2 christos if (!TEST_size_t_eq(client_random_size, SSL3_RANDOM_SIZE)) 250 1.2 christos return 0; 251 1.2 christos 252 1.2 christos if (!TEST_ptr(token = strtok(NULL, " \n"))) 253 1.2 christos return 0; 254 1.2 christos if (!TEST_size_t_eq(strlen(token), 64)) 255 1.2 christos return 0; 256 1.2 christos if (!TEST_false(compare_hex_encoded_buffer(token, 64, 257 1.2 christos actual_client_random, 258 1.2 christos client_random_size))) 259 1.2 christos return 0; 260 1.2 christos 261 1.2 christos if (!TEST_ptr(token = strtok(NULL, " \n"))) 262 1.2 christos return 0; 263 1.2 christos master_key_size = SSL_SESSION_get_master_key(session, 264 1.2 christos actual_master_key, 265 1.2 christos master_key_size); 266 1.2 christos if (!TEST_size_t_ne(master_key_size, 0)) 267 1.2 christos return 0; 268 1.2 christos if (!TEST_false(compare_hex_encoded_buffer(token, strlen(token), 269 1.2 christos actual_master_key, 270 1.2 christos master_key_size))) 271 1.2 christos return 0; 272 1.2 christos master_secret_count++; 273 1.2 christos } else if (strcmp(token, "CLIENT_EARLY_TRAFFIC_SECRET") == 0 274 1.2 christos || strcmp(token, "CLIENT_HANDSHAKE_TRAFFIC_SECRET") == 0 275 1.2 christos || strcmp(token, "SERVER_HANDSHAKE_TRAFFIC_SECRET") == 0 276 1.2 christos || strcmp(token, "CLIENT_TRAFFIC_SECRET_0") == 0 277 1.2 christos || strcmp(token, "SERVER_TRAFFIC_SECRET_0") == 0 278 1.2 christos || strcmp(token, "EARLY_EXPORTER_SECRET") == 0 279 1.2 christos || strcmp(token, "EXPORTER_SECRET") == 0) { 280 1.2 christos /* 281 1.2 christos * TLSv1.3 secret. Tokens should be: 64 ASCII bytes of hex-encoded 282 1.2 christos * client random, and then the hex-encoded secret. In this case, 283 1.2 christos * we treat all of these secrets identically and then just 284 1.2 christos * distinguish between them when counting what we saw. 285 1.2 christos */ 286 1.2 christos if (strcmp(token, "CLIENT_EARLY_TRAFFIC_SECRET") == 0) 287 1.2 christos client_early_secret_count++; 288 1.2 christos else if (strcmp(token, "CLIENT_HANDSHAKE_TRAFFIC_SECRET") == 0) 289 1.2 christos client_handshake_secret_count++; 290 1.2 christos else if (strcmp(token, "SERVER_HANDSHAKE_TRAFFIC_SECRET") == 0) 291 1.2 christos server_handshake_secret_count++; 292 1.2 christos else if (strcmp(token, "CLIENT_TRAFFIC_SECRET_0") == 0) 293 1.2 christos client_application_secret_count++; 294 1.2 christos else if (strcmp(token, "SERVER_TRAFFIC_SECRET_0") == 0) 295 1.2 christos server_application_secret_count++; 296 1.2 christos else if (strcmp(token, "EARLY_EXPORTER_SECRET") == 0) 297 1.2 christos early_exporter_secret_count++; 298 1.2 christos else if (strcmp(token, "EXPORTER_SECRET") == 0) 299 1.2 christos exporter_secret_count++; 300 1.2 christos 301 1.2 christos client_random_size = SSL_get_client_random(ssl, 302 1.2 christos actual_client_random, 303 1.2 christos SSL3_RANDOM_SIZE); 304 1.2 christos if (!TEST_size_t_eq(client_random_size, SSL3_RANDOM_SIZE)) 305 1.2 christos return 0; 306 1.2 christos 307 1.2 christos if (!TEST_ptr(token = strtok(NULL, " \n"))) 308 1.2 christos return 0; 309 1.2 christos if (!TEST_size_t_eq(strlen(token), 64)) 310 1.2 christos return 0; 311 1.2 christos if (!TEST_false(compare_hex_encoded_buffer(token, 64, 312 1.2 christos actual_client_random, 313 1.2 christos client_random_size))) 314 1.2 christos return 0; 315 1.2 christos 316 1.2 christos if (!TEST_ptr(token = strtok(NULL, " \n"))) 317 1.2 christos return 0; 318 1.2 christos } else { 319 1.2 christos TEST_info("Unexpected token %s\n", token); 320 1.2 christos return 0; 321 1.1 christos } 322 1.1 christos } 323 1.1 christos 324 1.2 christos /* Got what we expected? */ 325 1.2 christos if (!TEST_size_t_eq(rsa_key_exchange_count, 326 1.2 christos expected->rsa_key_exchange_count) 327 1.2 christos || !TEST_size_t_eq(master_secret_count, 328 1.2 christos expected->master_secret_count) 329 1.2 christos || !TEST_size_t_eq(client_early_secret_count, 330 1.2 christos expected->client_early_secret_count) 331 1.2 christos || !TEST_size_t_eq(client_handshake_secret_count, 332 1.2 christos expected->client_handshake_secret_count) 333 1.2 christos || !TEST_size_t_eq(server_handshake_secret_count, 334 1.2 christos expected->server_handshake_secret_count) 335 1.2 christos || !TEST_size_t_eq(client_application_secret_count, 336 1.2 christos expected->client_application_secret_count) 337 1.2 christos || !TEST_size_t_eq(server_application_secret_count, 338 1.2 christos expected->server_application_secret_count) 339 1.2 christos || !TEST_size_t_eq(early_exporter_secret_count, 340 1.2 christos expected->early_exporter_secret_count) 341 1.2 christos || !TEST_size_t_eq(exporter_secret_count, 342 1.2 christos expected->exporter_secret_count)) 343 1.2 christos return 0; 344 1.2 christos return 1; 345 1.2 christos } 346 1.2 christos 347 1.2 christos #if !defined(OPENSSL_NO_TLS1_2) || defined(OSSL_NO_USABLE_TLS1_3) 348 1.2 christos static int test_keylog(void) 349 1.2 christos { 350 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 351 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 352 1.2 christos int testresult = 0; 353 1.2 christos struct sslapitest_log_counts expected; 354 1.2 christos 355 1.2 christos /* Clean up logging space */ 356 1.2 christos memset(&expected, 0, sizeof(expected)); 357 1.2 christos memset(client_log_buffer, 0, sizeof(client_log_buffer)); 358 1.2 christos memset(server_log_buffer, 0, sizeof(server_log_buffer)); 359 1.2 christos client_log_buffer_index = 0; 360 1.2 christos server_log_buffer_index = 0; 361 1.2 christos error_writing_log = 0; 362 1.2 christos 363 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 364 1.2 christos TLS_client_method(), 365 1.2 christos TLS1_VERSION, 0, 366 1.2 christos &sctx, &cctx, cert, privkey))) 367 1.2 christos return 0; 368 1.1 christos 369 1.2 christos /* We cannot log the master secret for TLSv1.3, so we should forbid it. */ 370 1.2 christos SSL_CTX_set_options(cctx, SSL_OP_NO_TLSv1_3); 371 1.2 christos SSL_CTX_set_options(sctx, SSL_OP_NO_TLSv1_3); 372 1.2 christos 373 1.2 christos /* We also want to ensure that we use RSA-based key exchange. */ 374 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(cctx, "RSA"))) 375 1.2 christos goto end; 376 1.2 christos 377 1.2 christos if (!TEST_true(SSL_CTX_get_keylog_callback(cctx) == NULL) 378 1.2 christos || !TEST_true(SSL_CTX_get_keylog_callback(sctx) == NULL)) 379 1.2 christos goto end; 380 1.2 christos SSL_CTX_set_keylog_callback(cctx, client_keylog_callback); 381 1.2 christos if (!TEST_true(SSL_CTX_get_keylog_callback(cctx) 382 1.2 christos == client_keylog_callback)) 383 1.2 christos goto end; 384 1.2 christos SSL_CTX_set_keylog_callback(sctx, server_keylog_callback); 385 1.2 christos if (!TEST_true(SSL_CTX_get_keylog_callback(sctx) 386 1.2 christos == server_keylog_callback)) 387 1.2 christos goto end; 388 1.2 christos 389 1.2 christos /* Now do a handshake and check that the logs have been written to. */ 390 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 391 1.2 christos &clientssl, NULL, NULL)) 392 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 393 1.2 christos SSL_ERROR_NONE)) 394 1.2 christos || !TEST_false(error_writing_log) 395 1.2 christos || !TEST_int_gt(client_log_buffer_index, 0) 396 1.2 christos || !TEST_int_gt(server_log_buffer_index, 0)) 397 1.1 christos goto end; 398 1.1 christos 399 1.1 christos /* 400 1.2 christos * Now we want to test that our output data was vaguely sensible. We 401 1.2 christos * do that by using strtok and confirming that we have more or less the 402 1.2 christos * data we expect. For both client and server, we expect to see one master 403 1.2 christos * secret. The client should also see an RSA key exchange. 404 1.1 christos */ 405 1.2 christos expected.rsa_key_exchange_count = 1; 406 1.2 christos expected.master_secret_count = 1; 407 1.2 christos if (!TEST_true(test_keylog_output(client_log_buffer, clientssl, 408 1.2 christos SSL_get_session(clientssl), &expected))) 409 1.2 christos goto end; 410 1.2 christos 411 1.2 christos expected.rsa_key_exchange_count = 0; 412 1.2 christos if (!TEST_true(test_keylog_output(server_log_buffer, serverssl, 413 1.2 christos SSL_get_session(serverssl), &expected))) 414 1.1 christos goto end; 415 1.1 christos 416 1.1 christos testresult = 1; 417 1.2 christos 418 1.2 christos end: 419 1.1 christos SSL_free(serverssl); 420 1.1 christos SSL_free(clientssl); 421 1.1 christos SSL_CTX_free(sctx); 422 1.1 christos SSL_CTX_free(cctx); 423 1.1 christos 424 1.1 christos return testresult; 425 1.1 christos } 426 1.2 christos #endif 427 1.1 christos 428 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 429 1.2 christos static int test_keylog_no_master_key(void) 430 1.1 christos { 431 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 432 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 433 1.2 christos SSL_SESSION *sess = NULL; 434 1.2 christos int testresult = 0; 435 1.2 christos struct sslapitest_log_counts expected; 436 1.2 christos unsigned char buf[1]; 437 1.2 christos size_t readbytes, written; 438 1.2 christos 439 1.2 christos /* Clean up logging space */ 440 1.2 christos memset(&expected, 0, sizeof(expected)); 441 1.2 christos memset(client_log_buffer, 0, sizeof(client_log_buffer)); 442 1.2 christos memset(server_log_buffer, 0, sizeof(server_log_buffer)); 443 1.2 christos client_log_buffer_index = 0; 444 1.2 christos server_log_buffer_index = 0; 445 1.2 christos error_writing_log = 0; 446 1.2 christos 447 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 448 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 449 1.2 christos &sctx, &cctx, cert, privkey)) 450 1.2 christos || !TEST_true(SSL_CTX_set_max_early_data(sctx, 451 1.2 christos SSL3_RT_MAX_PLAIN_LENGTH))) 452 1.2 christos return 0; 453 1.2 christos 454 1.2 christos if (!TEST_true(SSL_CTX_get_keylog_callback(cctx) == NULL) 455 1.2 christos || !TEST_true(SSL_CTX_get_keylog_callback(sctx) == NULL)) 456 1.2 christos goto end; 457 1.2 christos 458 1.2 christos SSL_CTX_set_keylog_callback(cctx, client_keylog_callback); 459 1.2 christos if (!TEST_true(SSL_CTX_get_keylog_callback(cctx) 460 1.2 christos == client_keylog_callback)) 461 1.2 christos goto end; 462 1.2 christos 463 1.2 christos SSL_CTX_set_keylog_callback(sctx, server_keylog_callback); 464 1.2 christos if (!TEST_true(SSL_CTX_get_keylog_callback(sctx) 465 1.2 christos == server_keylog_callback)) 466 1.2 christos goto end; 467 1.1 christos 468 1.2 christos /* Now do a handshake and check that the logs have been written to. */ 469 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 470 1.2 christos &clientssl, NULL, NULL)) 471 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 472 1.2 christos SSL_ERROR_NONE)) 473 1.2 christos || !TEST_false(error_writing_log)) 474 1.2 christos goto end; 475 1.1 christos 476 1.1 christos /* 477 1.2 christos * Now we want to test that our output data was vaguely sensible. For this 478 1.2 christos * test, we expect no CLIENT_RANDOM entry because it doesn't make sense for 479 1.2 christos * TLSv1.3, but we do expect both client and server to emit keys. 480 1.1 christos */ 481 1.2 christos expected.client_handshake_secret_count = 1; 482 1.2 christos expected.server_handshake_secret_count = 1; 483 1.2 christos expected.client_application_secret_count = 1; 484 1.2 christos expected.server_application_secret_count = 1; 485 1.2 christos expected.exporter_secret_count = 1; 486 1.2 christos if (!TEST_true(test_keylog_output(client_log_buffer, clientssl, 487 1.2 christos SSL_get_session(clientssl), &expected)) 488 1.2 christos || !TEST_true(test_keylog_output(server_log_buffer, serverssl, 489 1.2 christos SSL_get_session(serverssl), 490 1.2 christos &expected))) 491 1.2 christos goto end; 492 1.2 christos 493 1.2 christos /* Terminate old session and resume with early data. */ 494 1.2 christos sess = SSL_get1_session(clientssl); 495 1.2 christos SSL_shutdown(clientssl); 496 1.2 christos SSL_shutdown(serverssl); 497 1.2 christos SSL_free(serverssl); 498 1.2 christos SSL_free(clientssl); 499 1.2 christos serverssl = clientssl = NULL; 500 1.2 christos 501 1.2 christos /* Reset key log */ 502 1.2 christos memset(client_log_buffer, 0, sizeof(client_log_buffer)); 503 1.2 christos memset(server_log_buffer, 0, sizeof(server_log_buffer)); 504 1.2 christos client_log_buffer_index = 0; 505 1.2 christos server_log_buffer_index = 0; 506 1.2 christos 507 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 508 1.2 christos &clientssl, NULL, NULL)) 509 1.2 christos || !TEST_true(SSL_set_session(clientssl, sess)) 510 1.2 christos /* Here writing 0 length early data is enough. */ 511 1.2 christos || !TEST_true(SSL_write_early_data(clientssl, NULL, 0, &written)) 512 1.2 christos || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 513 1.2 christos &readbytes), 514 1.2 christos SSL_READ_EARLY_DATA_ERROR) 515 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(serverssl), 516 1.2 christos SSL_EARLY_DATA_ACCEPTED) 517 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 518 1.2 christos SSL_ERROR_NONE)) 519 1.2 christos || !TEST_true(SSL_session_reused(clientssl))) 520 1.2 christos goto end; 521 1.2 christos 522 1.2 christos /* In addition to the previous entries, expect early secrets. */ 523 1.2 christos expected.client_early_secret_count = 1; 524 1.2 christos expected.early_exporter_secret_count = 1; 525 1.2 christos if (!TEST_true(test_keylog_output(client_log_buffer, clientssl, 526 1.2 christos SSL_get_session(clientssl), &expected)) 527 1.2 christos || !TEST_true(test_keylog_output(server_log_buffer, serverssl, 528 1.2 christos SSL_get_session(serverssl), 529 1.2 christos &expected))) 530 1.2 christos goto end; 531 1.2 christos 532 1.2 christos testresult = 1; 533 1.2 christos 534 1.2 christos end: 535 1.2 christos SSL_SESSION_free(sess); 536 1.2 christos SSL_free(serverssl); 537 1.2 christos SSL_free(clientssl); 538 1.2 christos SSL_CTX_free(sctx); 539 1.2 christos SSL_CTX_free(cctx); 540 1.2 christos 541 1.2 christos return testresult; 542 1.1 christos } 543 1.1 christos #endif 544 1.1 christos 545 1.2 christos static int verify_retry_cb(X509_STORE_CTX *ctx, void *arg) 546 1.2 christos { 547 1.2 christos int res = X509_verify_cert(ctx); 548 1.2 christos int idx = SSL_get_ex_data_X509_STORE_CTX_idx(); 549 1.2 christos SSL *ssl; 550 1.2 christos 551 1.2 christos /* this should not happen but check anyway */ 552 1.2 christos if (idx < 0 553 1.2 christos || (ssl = X509_STORE_CTX_get_ex_data(ctx, idx)) == NULL) 554 1.2 christos return 0; 555 1.2 christos 556 1.2 christos if (res == 0 && X509_STORE_CTX_get_error(ctx) == 557 1.2 christos X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY) 558 1.2 christos /* indicate SSL_ERROR_WANT_RETRY_VERIFY */ 559 1.2 christos return SSL_set_retry_verify(ssl); 560 1.2 christos 561 1.2 christos return res; 562 1.2 christos } 563 1.2 christos 564 1.2 christos static int test_client_cert_verify_cb(void) 565 1.1 christos { 566 1.2 christos /* server key, cert, chain, and root */ 567 1.2 christos char *skey = test_mk_file_path(certsdir, "leaf.key"); 568 1.2 christos char *leaf = test_mk_file_path(certsdir, "leaf.pem"); 569 1.2 christos char *int2 = test_mk_file_path(certsdir, "subinterCA.pem"); 570 1.2 christos char *int1 = test_mk_file_path(certsdir, "interCA.pem"); 571 1.2 christos char *root = test_mk_file_path(certsdir, "rootCA.pem"); 572 1.2 christos X509 *crt1 = NULL, *crt2 = NULL; 573 1.2 christos STACK_OF(X509) *server_chain; 574 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 575 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 576 1.2 christos int testresult = 0; 577 1.2 christos 578 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 579 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 580 1.2 christos &sctx, &cctx, NULL, NULL))) 581 1.2 christos goto end; 582 1.2 christos if (!TEST_int_eq(SSL_CTX_use_certificate_chain_file(sctx, leaf), 1) 583 1.2 christos || !TEST_int_eq(SSL_CTX_use_PrivateKey_file(sctx, skey, 584 1.2 christos SSL_FILETYPE_PEM), 1) 585 1.2 christos || !TEST_int_eq(SSL_CTX_check_private_key(sctx), 1)) 586 1.2 christos goto end; 587 1.2 christos if (!TEST_true(SSL_CTX_load_verify_locations(cctx, root, NULL))) 588 1.2 christos goto end; 589 1.2 christos SSL_CTX_set_verify(cctx, SSL_VERIFY_PEER, NULL); 590 1.2 christos SSL_CTX_set_cert_verify_callback(cctx, verify_retry_cb, NULL); 591 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 592 1.2 christos &clientssl, NULL, NULL))) 593 1.2 christos goto end; 594 1.2 christos 595 1.2 christos /* attempt SSL_connect() with incomplete server chain */ 596 1.2 christos if (!TEST_false(create_ssl_connection(serverssl, clientssl, 597 1.2 christos SSL_ERROR_WANT_RETRY_VERIFY))) 598 1.2 christos goto end; 599 1.2 christos 600 1.2 christos /* application provides intermediate certs needed to verify server cert */ 601 1.2 christos if (!TEST_ptr((crt1 = load_cert_pem(int1, libctx))) 602 1.2 christos || !TEST_ptr((crt2 = load_cert_pem(int2, libctx))) 603 1.2 christos || !TEST_ptr((server_chain = SSL_get_peer_cert_chain(clientssl)))) 604 1.2 christos goto end; 605 1.2 christos /* add certs in reverse order to demonstrate real chain building */ 606 1.2 christos if (!TEST_true(sk_X509_push(server_chain, crt1))) 607 1.2 christos goto end; 608 1.2 christos crt1 = NULL; 609 1.2 christos if (!TEST_true(sk_X509_push(server_chain, crt2))) 610 1.2 christos goto end; 611 1.2 christos crt2 = NULL; 612 1.2 christos 613 1.2 christos /* continue SSL_connect(), must now succeed with completed server chain */ 614 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 615 1.2 christos SSL_ERROR_NONE))) 616 1.2 christos goto end; 617 1.1 christos 618 1.2 christos testresult = 1; 619 1.1 christos 620 1.2 christos end: 621 1.2 christos X509_free(crt1); 622 1.2 christos X509_free(crt2); 623 1.2 christos if (clientssl != NULL) { 624 1.2 christos SSL_shutdown(clientssl); 625 1.2 christos SSL_free(clientssl); 626 1.2 christos } 627 1.2 christos if (serverssl != NULL) { 628 1.2 christos SSL_shutdown(serverssl); 629 1.2 christos SSL_free(serverssl); 630 1.1 christos } 631 1.2 christos SSL_CTX_free(sctx); 632 1.2 christos SSL_CTX_free(cctx); 633 1.2 christos 634 1.2 christos OPENSSL_free(skey); 635 1.2 christos OPENSSL_free(leaf); 636 1.2 christos OPENSSL_free(int2); 637 1.2 christos OPENSSL_free(int1); 638 1.2 christos OPENSSL_free(root); 639 1.2 christos 640 1.2 christos return testresult; 641 1.2 christos } 642 1.2 christos 643 1.2 christos static int test_ssl_build_cert_chain(void) 644 1.2 christos { 645 1.2 christos int ret = 0; 646 1.2 christos SSL_CTX *ssl_ctx = NULL; 647 1.2 christos SSL *ssl = NULL; 648 1.2 christos char *skey = test_mk_file_path(certsdir, "leaf.key"); 649 1.2 christos char *leaf_chain = test_mk_file_path(certsdir, "leaf-chain.pem"); 650 1.1 christos 651 1.2 christos if (!TEST_ptr(ssl_ctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method()))) 652 1.2 christos goto end; 653 1.2 christos if (!TEST_ptr(ssl = SSL_new(ssl_ctx))) 654 1.2 christos goto end; 655 1.2 christos /* leaf_chain contains leaf + subinterCA + interCA + rootCA */ 656 1.2 christos if (!TEST_int_eq(SSL_use_certificate_chain_file(ssl, leaf_chain), 1) 657 1.2 christos || !TEST_int_eq(SSL_use_PrivateKey_file(ssl, skey, SSL_FILETYPE_PEM), 1) 658 1.2 christos || !TEST_int_eq(SSL_check_private_key(ssl), 1)) 659 1.2 christos goto end; 660 1.2 christos if (!TEST_true(SSL_build_cert_chain(ssl, SSL_BUILD_CHAIN_FLAG_NO_ROOT 661 1.2 christos | SSL_BUILD_CHAIN_FLAG_CHECK))) 662 1.2 christos goto end; 663 1.2 christos ret = 1; 664 1.2 christos end: 665 1.2 christos SSL_free(ssl); 666 1.2 christos SSL_CTX_free(ssl_ctx); 667 1.2 christos OPENSSL_free(leaf_chain); 668 1.2 christos OPENSSL_free(skey); 669 1.2 christos return ret; 670 1.2 christos } 671 1.1 christos 672 1.2 christos static int get_password_cb(char *buf, int size, int rw_flag, void *userdata) 673 1.2 christos { 674 1.2 christos static const char pass[] = "testpass"; 675 1.1 christos 676 1.2 christos if (!TEST_int_eq(size, PEM_BUFSIZE)) 677 1.2 christos return -1; 678 1.1 christos 679 1.2 christos memcpy(buf, pass, sizeof(pass) - 1); 680 1.2 christos return sizeof(pass) - 1; 681 1.2 christos } 682 1.1 christos 683 1.2 christos static int test_ssl_ctx_build_cert_chain(void) 684 1.2 christos { 685 1.2 christos int ret = 0; 686 1.2 christos SSL_CTX *ctx = NULL; 687 1.2 christos char *skey = test_mk_file_path(certsdir, "leaf-encrypted.key"); 688 1.2 christos char *leaf_chain = test_mk_file_path(certsdir, "leaf-chain.pem"); 689 1.2 christos 690 1.2 christos if (!TEST_ptr(ctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method()))) 691 1.2 christos goto end; 692 1.2 christos SSL_CTX_set_default_passwd_cb(ctx, get_password_cb); 693 1.2 christos /* leaf_chain contains leaf + subinterCA + interCA + rootCA */ 694 1.2 christos if (!TEST_int_eq(SSL_CTX_use_certificate_chain_file(ctx, leaf_chain), 1) 695 1.2 christos || !TEST_int_eq(SSL_CTX_use_PrivateKey_file(ctx, skey, 696 1.2 christos SSL_FILETYPE_PEM), 1) 697 1.2 christos || !TEST_int_eq(SSL_CTX_check_private_key(ctx), 1)) 698 1.2 christos goto end; 699 1.2 christos if (!TEST_true(SSL_CTX_build_cert_chain(ctx, SSL_BUILD_CHAIN_FLAG_NO_ROOT 700 1.2 christos | SSL_BUILD_CHAIN_FLAG_CHECK))) 701 1.2 christos goto end; 702 1.2 christos ret = 1; 703 1.2 christos end: 704 1.2 christos SSL_CTX_free(ctx); 705 1.2 christos OPENSSL_free(leaf_chain); 706 1.2 christos OPENSSL_free(skey); 707 1.2 christos return ret; 708 1.1 christos } 709 1.1 christos 710 1.2 christos #ifndef OPENSSL_NO_TLS1_2 711 1.2 christos static int full_client_hello_callback(SSL *s, int *al, void *arg) 712 1.1 christos { 713 1.2 christos int *ctr = arg; 714 1.2 christos const unsigned char *p; 715 1.2 christos int *exts; 716 1.2 christos /* We only configure two ciphers, but the SCSV is added automatically. */ 717 1.2 christos #ifdef OPENSSL_NO_EC 718 1.2 christos const unsigned char expected_ciphers[] = {0x00, 0x9d, 0x00, 0xff}; 719 1.2 christos #else 720 1.2 christos const unsigned char expected_ciphers[] = {0x00, 0x9d, 0xc0, 721 1.2 christos 0x2c, 0x00, 0xff}; 722 1.2 christos #endif 723 1.2 christos const int expected_extensions[] = { 724 1.2 christos #ifndef OPENSSL_NO_EC 725 1.2 christos 11, 10, 726 1.2 christos #endif 727 1.2 christos 35, 22, 23, 13}; 728 1.1 christos size_t len; 729 1.1 christos 730 1.2 christos /* Make sure we can defer processing and get called back. */ 731 1.2 christos if ((*ctr)++ == 0) 732 1.2 christos return SSL_CLIENT_HELLO_RETRY; 733 1.2 christos 734 1.2 christos len = SSL_client_hello_get0_ciphers(s, &p); 735 1.2 christos if (!TEST_mem_eq(p, len, expected_ciphers, sizeof(expected_ciphers)) 736 1.2 christos || !TEST_size_t_eq( 737 1.2 christos SSL_client_hello_get0_compression_methods(s, &p), 1) 738 1.2 christos || !TEST_int_eq(*p, 0)) 739 1.2 christos return SSL_CLIENT_HELLO_ERROR; 740 1.2 christos if (!SSL_client_hello_get1_extensions_present(s, &exts, &len)) 741 1.2 christos return SSL_CLIENT_HELLO_ERROR; 742 1.2 christos if (len != OSSL_NELEM(expected_extensions) || 743 1.2 christos memcmp(exts, expected_extensions, len * sizeof(*exts)) != 0) { 744 1.2 christos printf("ClientHello callback expected extensions mismatch\n"); 745 1.2 christos OPENSSL_free(exts); 746 1.2 christos return SSL_CLIENT_HELLO_ERROR; 747 1.2 christos } 748 1.2 christos OPENSSL_free(exts); 749 1.2 christos return SSL_CLIENT_HELLO_SUCCESS; 750 1.2 christos } 751 1.2 christos 752 1.2 christos static int test_client_hello_cb(void) 753 1.2 christos { 754 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 755 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 756 1.2 christos int testctr = 0, testresult = 0; 757 1.1 christos 758 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 759 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 760 1.2 christos &sctx, &cctx, cert, privkey))) 761 1.2 christos goto end; 762 1.2 christos SSL_CTX_set_client_hello_cb(sctx, full_client_hello_callback, &testctr); 763 1.2 christos 764 1.2 christos /* The gimpy cipher list we configure can't do TLS 1.3. */ 765 1.2 christos SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION); 766 1.2 christos 767 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(cctx, 768 1.2 christos "AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384")) 769 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 770 1.2 christos &clientssl, NULL, NULL)) 771 1.2 christos || !TEST_false(create_ssl_connection(serverssl, clientssl, 772 1.2 christos SSL_ERROR_WANT_CLIENT_HELLO_CB)) 773 1.2 christos /* 774 1.2 christos * Passing a -1 literal is a hack since 775 1.2 christos * the real value was lost. 776 1.2 christos * */ 777 1.2 christos || !TEST_int_eq(SSL_get_error(serverssl, -1), 778 1.2 christos SSL_ERROR_WANT_CLIENT_HELLO_CB) 779 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 780 1.2 christos SSL_ERROR_NONE))) 781 1.2 christos goto end; 782 1.1 christos 783 1.2 christos testresult = 1; 784 1.1 christos 785 1.2 christos end: 786 1.2 christos SSL_free(serverssl); 787 1.2 christos SSL_free(clientssl); 788 1.2 christos SSL_CTX_free(sctx); 789 1.2 christos SSL_CTX_free(cctx); 790 1.1 christos 791 1.2 christos return testresult; 792 1.1 christos } 793 1.1 christos 794 1.2 christos static int test_no_ems(void) 795 1.1 christos { 796 1.1 christos SSL_CTX *cctx = NULL, *sctx = NULL; 797 1.1 christos SSL *clientssl = NULL, *serverssl = NULL; 798 1.1 christos int testresult = 0; 799 1.1 christos 800 1.2 christos if (!create_ssl_ctx_pair(libctx, TLS_server_method(), TLS_client_method(), 801 1.2 christos TLS1_VERSION, TLS1_2_VERSION, 802 1.2 christos &sctx, &cctx, cert, privkey)) { 803 1.1 christos printf("Unable to create SSL_CTX pair\n"); 804 1.2 christos goto end; 805 1.1 christos } 806 1.1 christos 807 1.2 christos SSL_CTX_set_options(sctx, SSL_OP_NO_EXTENDED_MASTER_SECRET); 808 1.2 christos 809 1.2 christos if (!create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL, NULL)) { 810 1.2 christos printf("Unable to create SSL objects\n"); 811 1.1 christos goto end; 812 1.1 christos } 813 1.1 christos 814 1.2 christos if (!create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)) { 815 1.2 christos printf("Creating SSL connection failed\n"); 816 1.1 christos goto end; 817 1.1 christos } 818 1.1 christos 819 1.2 christos if (SSL_get_extms_support(serverssl)) { 820 1.2 christos printf("Server reports Extended Master Secret support\n"); 821 1.1 christos goto end; 822 1.1 christos } 823 1.1 christos 824 1.2 christos if (SSL_get_extms_support(clientssl)) { 825 1.2 christos printf("Client reports Extended Master Secret support\n"); 826 1.1 christos goto end; 827 1.1 christos } 828 1.2 christos testresult = 1; 829 1.1 christos 830 1.2 christos end: 831 1.2 christos SSL_free(serverssl); 832 1.1 christos SSL_free(clientssl); 833 1.2 christos SSL_CTX_free(sctx); 834 1.2 christos SSL_CTX_free(cctx); 835 1.1 christos 836 1.2 christos return testresult; 837 1.2 christos } 838 1.1 christos 839 1.2 christos /* 840 1.2 christos * Very focused test to exercise a single case in the server-side state 841 1.2 christos * machine, when the ChangeCipherState message needs to actually change 842 1.2 christos * from one cipher to a different cipher (i.e., not changing from null 843 1.2 christos * encryption to real encryption). 844 1.2 christos */ 845 1.2 christos static int test_ccs_change_cipher(void) 846 1.2 christos { 847 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 848 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 849 1.2 christos SSL_SESSION *sess = NULL, *sesspre, *sesspost; 850 1.2 christos int testresult = 0; 851 1.2 christos int i; 852 1.2 christos unsigned char buf; 853 1.2 christos size_t readbytes; 854 1.2 christos 855 1.2 christos /* 856 1.2 christos * Create a conection so we can resume and potentially (but not) use 857 1.2 christos * a different cipher in the second connection. 858 1.2 christos */ 859 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 860 1.2 christos TLS_client_method(), 861 1.2 christos TLS1_VERSION, TLS1_2_VERSION, 862 1.2 christos &sctx, &cctx, cert, privkey)) 863 1.2 christos || !TEST_true(SSL_CTX_set_options(sctx, SSL_OP_NO_TICKET)) 864 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 865 1.2 christos NULL, NULL)) 866 1.2 christos || !TEST_true(SSL_set_cipher_list(clientssl, "AES128-GCM-SHA256")) 867 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 868 1.2 christos SSL_ERROR_NONE)) 869 1.2 christos || !TEST_ptr(sesspre = SSL_get0_session(serverssl)) 870 1.2 christos || !TEST_ptr(sess = SSL_get1_session(clientssl))) 871 1.1 christos goto end; 872 1.1 christos 873 1.2 christos shutdown_ssl_connection(serverssl, clientssl); 874 1.2 christos serverssl = clientssl = NULL; 875 1.1 christos 876 1.2 christos /* Resume, preferring a different cipher. Our server will force the 877 1.2 christos * same cipher to be used as the initial handshake. */ 878 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 879 1.2 christos NULL, NULL)) 880 1.2 christos || !TEST_true(SSL_set_session(clientssl, sess)) 881 1.2 christos || !TEST_true(SSL_set_cipher_list(clientssl, "AES256-GCM-SHA384:AES128-GCM-SHA256")) 882 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 883 1.2 christos SSL_ERROR_NONE)) 884 1.2 christos || !TEST_true(SSL_session_reused(clientssl)) 885 1.2 christos || !TEST_true(SSL_session_reused(serverssl)) 886 1.2 christos || !TEST_ptr(sesspost = SSL_get0_session(serverssl)) 887 1.2 christos || !TEST_ptr_eq(sesspre, sesspost) 888 1.2 christos || !TEST_int_eq(TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, 889 1.2 christos SSL_CIPHER_get_id(SSL_get_current_cipher(clientssl)))) 890 1.1 christos goto end; 891 1.2 christos shutdown_ssl_connection(serverssl, clientssl); 892 1.2 christos serverssl = clientssl = NULL; 893 1.1 christos 894 1.1 christos /* 895 1.2 christos * Now create a fresh connection and try to renegotiate a different 896 1.2 christos * cipher on it. 897 1.1 christos */ 898 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 899 1.2 christos NULL, NULL)) 900 1.2 christos || !TEST_true(SSL_set_cipher_list(clientssl, "AES128-GCM-SHA256")) 901 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 902 1.2 christos SSL_ERROR_NONE)) 903 1.2 christos || !TEST_ptr(sesspre = SSL_get0_session(serverssl)) 904 1.2 christos || !TEST_true(SSL_set_cipher_list(clientssl, "AES256-GCM-SHA384")) 905 1.2 christos || !TEST_true(SSL_renegotiate(clientssl)) 906 1.2 christos || !TEST_true(SSL_renegotiate_pending(clientssl))) 907 1.2 christos goto end; 908 1.2 christos /* Actually drive the renegotiation. */ 909 1.2 christos for (i = 0; i < 3; i++) { 910 1.2 christos if (SSL_read_ex(clientssl, &buf, sizeof(buf), &readbytes) > 0) { 911 1.2 christos if (!TEST_ulong_eq(readbytes, 0)) 912 1.2 christos goto end; 913 1.2 christos } else if (!TEST_int_eq(SSL_get_error(clientssl, 0), 914 1.2 christos SSL_ERROR_WANT_READ)) { 915 1.2 christos goto end; 916 1.2 christos } 917 1.2 christos if (SSL_read_ex(serverssl, &buf, sizeof(buf), &readbytes) > 0) { 918 1.2 christos if (!TEST_ulong_eq(readbytes, 0)) 919 1.2 christos goto end; 920 1.2 christos } else if (!TEST_int_eq(SSL_get_error(serverssl, 0), 921 1.2 christos SSL_ERROR_WANT_READ)) { 922 1.2 christos goto end; 923 1.2 christos } 924 1.2 christos } 925 1.2 christos /* sesspre and sesspost should be different since the cipher changed. */ 926 1.2 christos if (!TEST_false(SSL_renegotiate_pending(clientssl)) 927 1.2 christos || !TEST_false(SSL_session_reused(clientssl)) 928 1.2 christos || !TEST_false(SSL_session_reused(serverssl)) 929 1.2 christos || !TEST_ptr(sesspost = SSL_get0_session(serverssl)) 930 1.2 christos || !TEST_ptr_ne(sesspre, sesspost) 931 1.2 christos || !TEST_int_eq(TLS1_CK_RSA_WITH_AES_256_GCM_SHA384, 932 1.2 christos SSL_CIPHER_get_id(SSL_get_current_cipher(clientssl)))) 933 1.1 christos goto end; 934 1.1 christos 935 1.2 christos shutdown_ssl_connection(serverssl, clientssl); 936 1.2 christos serverssl = clientssl = NULL; 937 1.1 christos 938 1.2 christos testresult = 1; 939 1.1 christos 940 1.2 christos end: 941 1.1 christos SSL_free(serverssl); 942 1.1 christos SSL_free(clientssl); 943 1.2 christos SSL_CTX_free(sctx); 944 1.2 christos SSL_CTX_free(cctx); 945 1.2 christos SSL_SESSION_free(sess); 946 1.2 christos 947 1.2 christos return testresult; 948 1.2 christos } 949 1.2 christos #endif 950 1.1 christos 951 1.2 christos static int add_large_cert_chain(SSL_CTX *sctx) 952 1.2 christos { 953 1.2 christos BIO *certbio = NULL; 954 1.2 christos X509 *chaincert = NULL; 955 1.2 christos int certlen; 956 1.2 christos int ret = 0; 957 1.2 christos int i; 958 1.1 christos 959 1.2 christos if (!TEST_ptr(certbio = BIO_new_file(cert, "r"))) 960 1.1 christos goto end; 961 1.1 christos 962 1.2 christos if (!TEST_ptr(chaincert = X509_new_ex(libctx, NULL))) 963 1.1 christos goto end; 964 1.1 christos 965 1.2 christos if (PEM_read_bio_X509(certbio, &chaincert, NULL, NULL) == NULL) 966 1.1 christos goto end; 967 1.2 christos BIO_free(certbio); 968 1.2 christos certbio = NULL; 969 1.2 christos 970 1.2 christos /* 971 1.2 christos * We assume the supplied certificate is big enough so that if we add 972 1.2 christos * NUM_EXTRA_CERTS it will make the overall message large enough. The 973 1.2 christos * default buffer size is requested to be 16k, but due to the way BUF_MEM 974 1.2 christos * works, it ends up allocating a little over 21k (16 * 4/3). So, in this 975 1.2 christos * test we need to have a message larger than that. 976 1.2 christos */ 977 1.2 christos certlen = i2d_X509(chaincert, NULL); 978 1.2 christos OPENSSL_assert(certlen * NUM_EXTRA_CERTS > 979 1.2 christos (SSL3_RT_MAX_PLAIN_LENGTH * 4) / 3); 980 1.2 christos for (i = 0; i < NUM_EXTRA_CERTS; i++) { 981 1.2 christos if (!X509_up_ref(chaincert)) 982 1.2 christos goto end; 983 1.2 christos if (!SSL_CTX_add_extra_chain_cert(sctx, chaincert)) { 984 1.2 christos X509_free(chaincert); 985 1.2 christos goto end; 986 1.2 christos } 987 1.1 christos } 988 1.1 christos 989 1.2 christos ret = 1; 990 1.2 christos end: 991 1.2 christos BIO_free(certbio); 992 1.2 christos X509_free(chaincert); 993 1.2 christos return ret; 994 1.2 christos } 995 1.1 christos 996 1.2 christos static int execute_test_large_message(const SSL_METHOD *smeth, 997 1.2 christos const SSL_METHOD *cmeth, 998 1.2 christos int min_version, int max_version, 999 1.2 christos int read_ahead) 1000 1.2 christos { 1001 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 1002 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 1003 1.2 christos int testresult = 0; 1004 1.1 christos 1005 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, smeth, cmeth, min_version, 1006 1.2 christos max_version, &sctx, &cctx, cert, 1007 1.2 christos privkey))) 1008 1.1 christos goto end; 1009 1.2 christos 1010 1.2 christos #ifdef OPENSSL_NO_DTLS1_2 1011 1.2 christos if (smeth == DTLS_server_method()) { 1012 1.2 christos /* 1013 1.2 christos * Default sigalgs are SHA1 based in <DTLS1.2 which is in security 1014 1.2 christos * level 0 1015 1.2 christos */ 1016 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(sctx, "DEFAULT:@SECLEVEL=0")) 1017 1.2 christos || !TEST_true(SSL_CTX_set_cipher_list(cctx, 1018 1.2 christos "DEFAULT:@SECLEVEL=0"))) 1019 1.2 christos goto end; 1020 1.1 christos } 1021 1.2 christos #endif 1022 1.1 christos 1023 1.2 christos if (read_ahead) { 1024 1.2 christos /* 1025 1.2 christos * Test that read_ahead works correctly when dealing with large 1026 1.2 christos * records 1027 1.2 christos */ 1028 1.2 christos SSL_CTX_set_read_ahead(cctx, 1); 1029 1.1 christos } 1030 1.2 christos 1031 1.2 christos if (!add_large_cert_chain(sctx)) 1032 1.1 christos goto end; 1033 1.1 christos 1034 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 1035 1.2 christos NULL, NULL)) 1036 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 1037 1.2 christos SSL_ERROR_NONE))) 1038 1.1 christos goto end; 1039 1.1 christos 1040 1.2 christos /* 1041 1.2 christos * Calling SSL_clear() first is not required but this tests that SSL_clear() 1042 1.2 christos * doesn't leak. 1043 1.2 christos */ 1044 1.2 christos if (!TEST_true(SSL_clear(serverssl))) 1045 1.1 christos goto end; 1046 1.1 christos 1047 1.1 christos testresult = 1; 1048 1.1 christos end: 1049 1.1 christos SSL_free(serverssl); 1050 1.1 christos SSL_free(clientssl); 1051 1.1 christos SSL_CTX_free(sctx); 1052 1.1 christos SSL_CTX_free(cctx); 1053 1.1 christos 1054 1.1 christos return testresult; 1055 1.1 christos } 1056 1.1 christos 1057 1.2 christos #if !defined(OPENSSL_NO_SOCK) && !defined(OPENSSL_NO_KTLS) && \ 1058 1.2 christos !(defined(OSSL_NO_USABLE_TLS1_3) && defined(OPENSSL_NO_TLS1_2)) 1059 1.2 christos /* sock must be connected */ 1060 1.2 christos static int ktls_chk_platform(int sock) 1061 1.1 christos { 1062 1.2 christos if (!ktls_enable(sock)) 1063 1.2 christos return 0; 1064 1.2 christos return 1; 1065 1.1 christos } 1066 1.1 christos 1067 1.2 christos static int ping_pong_query(SSL *clientssl, SSL *serverssl) 1068 1.1 christos { 1069 1.2 christos static char count = 1; 1070 1.2 christos unsigned char cbuf[16000] = {0}; 1071 1.2 christos unsigned char sbuf[16000]; 1072 1.2 christos size_t err = 0; 1073 1.2 christos char crec_wseq_before[SEQ_NUM_SIZE]; 1074 1.2 christos char crec_wseq_after[SEQ_NUM_SIZE]; 1075 1.2 christos char crec_rseq_before[SEQ_NUM_SIZE]; 1076 1.2 christos char crec_rseq_after[SEQ_NUM_SIZE]; 1077 1.2 christos char srec_wseq_before[SEQ_NUM_SIZE]; 1078 1.2 christos char srec_wseq_after[SEQ_NUM_SIZE]; 1079 1.2 christos char srec_rseq_before[SEQ_NUM_SIZE]; 1080 1.2 christos char srec_rseq_after[SEQ_NUM_SIZE]; 1081 1.2 christos 1082 1.2 christos cbuf[0] = count++; 1083 1.2 christos memcpy(crec_wseq_before, &clientssl->rlayer.write_sequence, SEQ_NUM_SIZE); 1084 1.2 christos memcpy(crec_rseq_before, &clientssl->rlayer.read_sequence, SEQ_NUM_SIZE); 1085 1.2 christos memcpy(srec_wseq_before, &serverssl->rlayer.write_sequence, SEQ_NUM_SIZE); 1086 1.2 christos memcpy(srec_rseq_before, &serverssl->rlayer.read_sequence, SEQ_NUM_SIZE); 1087 1.1 christos 1088 1.2 christos if (!TEST_true(SSL_write(clientssl, cbuf, sizeof(cbuf)) == sizeof(cbuf))) 1089 1.2 christos goto end; 1090 1.1 christos 1091 1.2 christos while ((err = SSL_read(serverssl, &sbuf, sizeof(sbuf))) != sizeof(sbuf)) { 1092 1.2 christos if (SSL_get_error(serverssl, err) != SSL_ERROR_WANT_READ) { 1093 1.2 christos goto end; 1094 1.2 christos } 1095 1.2 christos } 1096 1.1 christos 1097 1.2 christos if (!TEST_true(SSL_write(serverssl, sbuf, sizeof(sbuf)) == sizeof(sbuf))) 1098 1.2 christos goto end; 1099 1.1 christos 1100 1.2 christos while ((err = SSL_read(clientssl, &cbuf, sizeof(cbuf))) != sizeof(cbuf)) { 1101 1.2 christos if (SSL_get_error(clientssl, err) != SSL_ERROR_WANT_READ) { 1102 1.2 christos goto end; 1103 1.2 christos } 1104 1.2 christos } 1105 1.1 christos 1106 1.2 christos memcpy(crec_wseq_after, &clientssl->rlayer.write_sequence, SEQ_NUM_SIZE); 1107 1.2 christos memcpy(crec_rseq_after, &clientssl->rlayer.read_sequence, SEQ_NUM_SIZE); 1108 1.2 christos memcpy(srec_wseq_after, &serverssl->rlayer.write_sequence, SEQ_NUM_SIZE); 1109 1.2 christos memcpy(srec_rseq_after, &serverssl->rlayer.read_sequence, SEQ_NUM_SIZE); 1110 1.1 christos 1111 1.2 christos /* verify the payload */ 1112 1.2 christos if (!TEST_mem_eq(cbuf, sizeof(cbuf), sbuf, sizeof(sbuf))) 1113 1.2 christos goto end; 1114 1.1 christos 1115 1.2 christos /* 1116 1.2 christos * If ktls is used then kernel sequences are used instead of 1117 1.2 christos * OpenSSL sequences 1118 1.2 christos */ 1119 1.2 christos if (!BIO_get_ktls_send(clientssl->wbio)) { 1120 1.2 christos if (!TEST_mem_ne(crec_wseq_before, SEQ_NUM_SIZE, 1121 1.2 christos crec_wseq_after, SEQ_NUM_SIZE)) 1122 1.2 christos goto end; 1123 1.2 christos } else { 1124 1.2 christos if (!TEST_mem_eq(crec_wseq_before, SEQ_NUM_SIZE, 1125 1.2 christos crec_wseq_after, SEQ_NUM_SIZE)) 1126 1.2 christos goto end; 1127 1.1 christos } 1128 1.2 christos 1129 1.2 christos if (!BIO_get_ktls_send(serverssl->wbio)) { 1130 1.2 christos if (!TEST_mem_ne(srec_wseq_before, SEQ_NUM_SIZE, 1131 1.2 christos srec_wseq_after, SEQ_NUM_SIZE)) 1132 1.2 christos goto end; 1133 1.1 christos } else { 1134 1.2 christos if (!TEST_mem_eq(srec_wseq_before, SEQ_NUM_SIZE, 1135 1.2 christos srec_wseq_after, SEQ_NUM_SIZE)) 1136 1.2 christos goto end; 1137 1.1 christos } 1138 1.1 christos 1139 1.2 christos if (!BIO_get_ktls_recv(clientssl->wbio)) { 1140 1.2 christos if (!TEST_mem_ne(crec_rseq_before, SEQ_NUM_SIZE, 1141 1.2 christos crec_rseq_after, SEQ_NUM_SIZE)) 1142 1.2 christos goto end; 1143 1.2 christos } else { 1144 1.2 christos if (!TEST_mem_eq(crec_rseq_before, SEQ_NUM_SIZE, 1145 1.2 christos crec_rseq_after, SEQ_NUM_SIZE)) 1146 1.2 christos goto end; 1147 1.1 christos } 1148 1.1 christos 1149 1.2 christos if (!BIO_get_ktls_recv(serverssl->wbio)) { 1150 1.2 christos if (!TEST_mem_ne(srec_rseq_before, SEQ_NUM_SIZE, 1151 1.2 christos srec_rseq_after, SEQ_NUM_SIZE)) 1152 1.2 christos goto end; 1153 1.2 christos } else { 1154 1.2 christos if (!TEST_mem_eq(srec_rseq_before, SEQ_NUM_SIZE, 1155 1.2 christos srec_rseq_after, SEQ_NUM_SIZE)) 1156 1.2 christos goto end; 1157 1.1 christos } 1158 1.2 christos 1159 1.2 christos return 1; 1160 1.2 christos end: 1161 1.2 christos return 0; 1162 1.2 christos } 1163 1.2 christos 1164 1.2 christos static int execute_test_ktls(int cis_ktls, int sis_ktls, 1165 1.2 christos int tls_version, const char *cipher) 1166 1.2 christos { 1167 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 1168 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 1169 1.2 christos int ktls_used = 0, testresult = 0; 1170 1.2 christos int cfd = -1, sfd = -1; 1171 1.2 christos int rx_supported; 1172 1.2 christos 1173 1.2 christos if (!TEST_true(create_test_sockets(&cfd, &sfd))) 1174 1.1 christos goto end; 1175 1.1 christos 1176 1.2 christos /* Skip this test if the platform does not support ktls */ 1177 1.2 christos if (!ktls_chk_platform(cfd)) { 1178 1.2 christos testresult = TEST_skip("Kernel does not support KTLS"); 1179 1.1 christos goto end; 1180 1.1 christos } 1181 1.1 christos 1182 1.2 christos if (is_fips && strstr(cipher, "CHACHA") != NULL) { 1183 1.2 christos testresult = TEST_skip("CHACHA is not supported in FIPS"); 1184 1.1 christos goto end; 1185 1.1 christos } 1186 1.1 christos 1187 1.2 christos /* Create a session based on SHA-256 */ 1188 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 1189 1.2 christos TLS_client_method(), 1190 1.2 christos tls_version, tls_version, 1191 1.2 christos &sctx, &cctx, cert, privkey))) 1192 1.1 christos goto end; 1193 1.2 christos 1194 1.2 christos if (tls_version == TLS1_3_VERSION) { 1195 1.2 christos if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, cipher)) 1196 1.2 christos || !TEST_true(SSL_CTX_set_ciphersuites(sctx, cipher))) 1197 1.2 christos goto end; 1198 1.2 christos } else { 1199 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(cctx, cipher)) 1200 1.2 christos || !TEST_true(SSL_CTX_set_cipher_list(sctx, cipher))) 1201 1.2 christos goto end; 1202 1.1 christos } 1203 1.1 christos 1204 1.2 christos if (!TEST_true(create_ssl_objects2(sctx, cctx, &serverssl, 1205 1.2 christos &clientssl, sfd, cfd))) 1206 1.1 christos goto end; 1207 1.2 christos 1208 1.2 christos if (cis_ktls) { 1209 1.2 christos if (!TEST_true(SSL_set_options(clientssl, SSL_OP_ENABLE_KTLS))) 1210 1.2 christos goto end; 1211 1.1 christos } 1212 1.1 christos 1213 1.2 christos if (sis_ktls) { 1214 1.2 christos if (!TEST_true(SSL_set_options(serverssl, SSL_OP_ENABLE_KTLS))) 1215 1.2 christos goto end; 1216 1.1 christos } 1217 1.1 christos 1218 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 1219 1.1 christos goto end; 1220 1.1 christos 1221 1.1 christos /* 1222 1.2 christos * The running kernel may not support a given cipher suite 1223 1.2 christos * or direction, so just check that KTLS isn't used when it 1224 1.2 christos * isn't enabled. 1225 1.1 christos */ 1226 1.2 christos if (!cis_ktls) { 1227 1.2 christos if (!TEST_false(BIO_get_ktls_send(clientssl->wbio))) 1228 1.2 christos goto end; 1229 1.2 christos } else { 1230 1.2 christos if (BIO_get_ktls_send(clientssl->wbio)) 1231 1.2 christos ktls_used = 1; 1232 1.1 christos } 1233 1.1 christos 1234 1.2 christos if (!sis_ktls) { 1235 1.2 christos if (!TEST_false(BIO_get_ktls_send(serverssl->wbio))) 1236 1.2 christos goto end; 1237 1.2 christos } else { 1238 1.2 christos if (BIO_get_ktls_send(serverssl->wbio)) 1239 1.2 christos ktls_used = 1; 1240 1.1 christos } 1241 1.1 christos 1242 1.2 christos #if defined(OPENSSL_NO_KTLS_RX) 1243 1.2 christos rx_supported = 0; 1244 1.2 christos #else 1245 1.2 christos rx_supported = (tls_version != TLS1_3_VERSION); 1246 1.2 christos #endif 1247 1.2 christos if (!cis_ktls || !rx_supported) { 1248 1.2 christos if (!TEST_false(BIO_get_ktls_recv(clientssl->rbio))) 1249 1.2 christos goto end; 1250 1.2 christos } else { 1251 1.2 christos if (BIO_get_ktls_send(clientssl->rbio)) 1252 1.2 christos ktls_used = 1; 1253 1.1 christos } 1254 1.1 christos 1255 1.2 christos if (!sis_ktls || !rx_supported) { 1256 1.2 christos if (!TEST_false(BIO_get_ktls_recv(serverssl->rbio))) 1257 1.1 christos goto end; 1258 1.2 christos } else { 1259 1.2 christos if (BIO_get_ktls_send(serverssl->rbio)) 1260 1.2 christos ktls_used = 1; 1261 1.1 christos } 1262 1.1 christos 1263 1.2 christos if ((cis_ktls || sis_ktls) && !ktls_used) { 1264 1.2 christos testresult = TEST_skip("KTLS not supported for %s cipher %s", 1265 1.2 christos tls_version == TLS1_3_VERSION ? "TLS 1.3" : 1266 1.2 christos "TLS 1.2", cipher); 1267 1.1 christos goto end; 1268 1.1 christos } 1269 1.1 christos 1270 1.2 christos if (!TEST_true(ping_pong_query(clientssl, serverssl))) 1271 1.1 christos goto end; 1272 1.2 christos 1273 1.2 christos testresult = 1; 1274 1.2 christos end: 1275 1.2 christos if (clientssl) { 1276 1.2 christos SSL_shutdown(clientssl); 1277 1.2 christos SSL_free(clientssl); 1278 1.2 christos } 1279 1.2 christos if (serverssl) { 1280 1.2 christos SSL_shutdown(serverssl); 1281 1.2 christos SSL_free(serverssl); 1282 1.1 christos } 1283 1.2 christos SSL_CTX_free(sctx); 1284 1.2 christos SSL_CTX_free(cctx); 1285 1.2 christos serverssl = clientssl = NULL; 1286 1.2 christos if (cfd != -1) 1287 1.2 christos close(cfd); 1288 1.2 christos if (sfd != -1) 1289 1.2 christos close(sfd); 1290 1.2 christos return testresult; 1291 1.2 christos } 1292 1.1 christos 1293 1.2 christos #define SENDFILE_SZ (16 * 4096) 1294 1.2 christos #define SENDFILE_CHUNK (4 * 4096) 1295 1.2 christos #define min(a,b) ((a) > (b) ? (b) : (a)) 1296 1.2 christos 1297 1.2 christos static int execute_test_ktls_sendfile(int tls_version, const char *cipher) 1298 1.2 christos { 1299 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 1300 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 1301 1.2 christos unsigned char *buf, *buf_dst; 1302 1.2 christos BIO *out = NULL, *in = NULL; 1303 1.2 christos int cfd = -1, sfd = -1, ffd, err; 1304 1.2 christos ssize_t chunk_size = 0; 1305 1.2 christos off_t chunk_off = 0; 1306 1.2 christos int testresult = 0; 1307 1.2 christos FILE *ffdp; 1308 1.1 christos 1309 1.2 christos buf = OPENSSL_zalloc(SENDFILE_SZ); 1310 1.2 christos buf_dst = OPENSSL_zalloc(SENDFILE_SZ); 1311 1.2 christos if (!TEST_ptr(buf) || !TEST_ptr(buf_dst) 1312 1.2 christos || !TEST_true(create_test_sockets(&cfd, &sfd))) 1313 1.1 christos goto end; 1314 1.1 christos 1315 1.2 christos /* Skip this test if the platform does not support ktls */ 1316 1.2 christos if (!ktls_chk_platform(sfd)) { 1317 1.2 christos testresult = TEST_skip("Kernel does not support KTLS"); 1318 1.1 christos goto end; 1319 1.1 christos } 1320 1.1 christos 1321 1.2 christos if (is_fips && strstr(cipher, "CHACHA") != NULL) { 1322 1.2 christos testresult = TEST_skip("CHACHA is not supported in FIPS"); 1323 1.1 christos goto end; 1324 1.1 christos } 1325 1.1 christos 1326 1.2 christos /* Create a session based on SHA-256 */ 1327 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 1328 1.2 christos TLS_client_method(), 1329 1.2 christos tls_version, tls_version, 1330 1.2 christos &sctx, &cctx, cert, privkey))) 1331 1.2 christos goto end; 1332 1.2 christos 1333 1.2 christos if (tls_version == TLS1_3_VERSION) { 1334 1.2 christos if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, cipher)) 1335 1.2 christos || !TEST_true(SSL_CTX_set_ciphersuites(sctx, cipher))) 1336 1.2 christos goto end; 1337 1.2 christos } else { 1338 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(cctx, cipher)) 1339 1.2 christos || !TEST_true(SSL_CTX_set_cipher_list(sctx, cipher))) 1340 1.2 christos goto end; 1341 1.2 christos } 1342 1.2 christos 1343 1.2 christos if (!TEST_true(create_ssl_objects2(sctx, cctx, &serverssl, 1344 1.2 christos &clientssl, sfd, cfd))) 1345 1.2 christos goto end; 1346 1.1 christos 1347 1.2 christos if (!TEST_true(SSL_set_options(serverssl, SSL_OP_ENABLE_KTLS))) 1348 1.2 christos goto end; 1349 1.2 christos 1350 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 1351 1.2 christos SSL_ERROR_NONE))) 1352 1.2 christos goto end; 1353 1.2 christos 1354 1.2 christos if (!BIO_get_ktls_send(serverssl->wbio)) { 1355 1.2 christos testresult = TEST_skip("Failed to enable KTLS for %s cipher %s", 1356 1.2 christos tls_version == TLS1_3_VERSION ? "TLS 1.3" : 1357 1.2 christos "TLS 1.2", cipher); 1358 1.1 christos goto end; 1359 1.1 christos } 1360 1.1 christos 1361 1.2 christos if (!TEST_int_gt(RAND_bytes_ex(libctx, buf, SENDFILE_SZ, 0), 0)) 1362 1.2 christos goto end; 1363 1.2 christos 1364 1.2 christos out = BIO_new_file(tmpfilename, "wb"); 1365 1.2 christos if (!TEST_ptr(out)) 1366 1.2 christos goto end; 1367 1.2 christos 1368 1.2 christos if (BIO_write(out, buf, SENDFILE_SZ) != SENDFILE_SZ) 1369 1.1 christos goto end; 1370 1.2 christos 1371 1.2 christos BIO_free(out); 1372 1.2 christos out = NULL; 1373 1.2 christos in = BIO_new_file(tmpfilename, "rb"); 1374 1.2 christos BIO_get_fp(in, &ffdp); 1375 1.2 christos ffd = fileno(ffdp); 1376 1.2 christos 1377 1.2 christos while (chunk_off < SENDFILE_SZ) { 1378 1.2 christos chunk_size = min(SENDFILE_CHUNK, SENDFILE_SZ - chunk_off); 1379 1.2 christos while ((err = SSL_sendfile(serverssl, 1380 1.2 christos ffd, 1381 1.2 christos chunk_off, 1382 1.2 christos chunk_size, 1383 1.2 christos 0)) != chunk_size) { 1384 1.2 christos if (SSL_get_error(serverssl, err) != SSL_ERROR_WANT_WRITE) 1385 1.2 christos goto end; 1386 1.2 christos } 1387 1.2 christos while ((err = SSL_read(clientssl, 1388 1.2 christos buf_dst + chunk_off, 1389 1.2 christos chunk_size)) != chunk_size) { 1390 1.2 christos if (SSL_get_error(clientssl, err) != SSL_ERROR_WANT_READ) 1391 1.2 christos goto end; 1392 1.2 christos } 1393 1.2 christos 1394 1.2 christos /* verify the payload */ 1395 1.2 christos if (!TEST_mem_eq(buf_dst + chunk_off, 1396 1.2 christos chunk_size, 1397 1.2 christos buf + chunk_off, 1398 1.2 christos chunk_size)) 1399 1.2 christos goto end; 1400 1.2 christos 1401 1.2 christos chunk_off += chunk_size; 1402 1.1 christos } 1403 1.1 christos 1404 1.1 christos testresult = 1; 1405 1.2 christos end: 1406 1.2 christos if (clientssl) { 1407 1.2 christos SSL_shutdown(clientssl); 1408 1.2 christos SSL_free(clientssl); 1409 1.2 christos } 1410 1.2 christos if (serverssl) { 1411 1.2 christos SSL_shutdown(serverssl); 1412 1.2 christos SSL_free(serverssl); 1413 1.2 christos } 1414 1.1 christos SSL_CTX_free(sctx); 1415 1.1 christos SSL_CTX_free(cctx); 1416 1.2 christos serverssl = clientssl = NULL; 1417 1.2 christos BIO_free(out); 1418 1.2 christos BIO_free(in); 1419 1.2 christos if (cfd != -1) 1420 1.2 christos close(cfd); 1421 1.2 christos if (sfd != -1) 1422 1.2 christos close(sfd); 1423 1.2 christos OPENSSL_free(buf); 1424 1.2 christos OPENSSL_free(buf_dst); 1425 1.1 christos return testresult; 1426 1.1 christos } 1427 1.1 christos 1428 1.2 christos static struct ktls_test_cipher { 1429 1.2 christos int tls_version; 1430 1.2 christos const char *cipher; 1431 1.2 christos } ktls_test_ciphers[] = { 1432 1.2 christos # if !defined(OPENSSL_NO_TLS1_2) 1433 1.2 christos # ifdef OPENSSL_KTLS_AES_GCM_128 1434 1.2 christos { TLS1_2_VERSION, "AES128-GCM-SHA256" }, 1435 1.2 christos # endif 1436 1.2 christos # ifdef OPENSSL_KTLS_AES_CCM_128 1437 1.2 christos { TLS1_2_VERSION, "AES128-CCM"}, 1438 1.2 christos # endif 1439 1.2 christos # ifdef OPENSSL_KTLS_AES_GCM_256 1440 1.2 christos { TLS1_2_VERSION, "AES256-GCM-SHA384"}, 1441 1.2 christos # endif 1442 1.2 christos # ifdef OPENSSL_KTLS_CHACHA20_POLY1305 1443 1.2 christos # ifndef OPENSSL_NO_EC 1444 1.2 christos { TLS1_2_VERSION, "ECDHE-RSA-CHACHA20-POLY1305"}, 1445 1.2 christos # endif 1446 1.2 christos # endif 1447 1.2 christos # endif 1448 1.2 christos # if !defined(OSSL_NO_USABLE_TLS1_3) 1449 1.2 christos # ifdef OPENSSL_KTLS_AES_GCM_128 1450 1.2 christos { TLS1_3_VERSION, "TLS_AES_128_GCM_SHA256" }, 1451 1.2 christos # endif 1452 1.2 christos # ifdef OPENSSL_KTLS_AES_CCM_128 1453 1.2 christos { TLS1_3_VERSION, "TLS_AES_128_CCM_SHA256" }, 1454 1.2 christos # endif 1455 1.2 christos # ifdef OPENSSL_KTLS_AES_GCM_256 1456 1.2 christos { TLS1_3_VERSION, "TLS_AES_256_GCM_SHA384" }, 1457 1.2 christos # endif 1458 1.2 christos # ifdef OPENSSL_KTLS_CHACHA20_POLY1305 1459 1.2 christos { TLS1_3_VERSION, "TLS_CHACHA20_POLY1305_SHA256" }, 1460 1.2 christos # endif 1461 1.2 christos # endif 1462 1.2 christos }; 1463 1.2 christos 1464 1.2 christos #define NUM_KTLS_TEST_CIPHERS \ 1465 1.2 christos (sizeof(ktls_test_ciphers) / sizeof(ktls_test_ciphers[0])) 1466 1.2 christos 1467 1.2 christos static int test_ktls(int test) 1468 1.1 christos { 1469 1.2 christos struct ktls_test_cipher *cipher; 1470 1.2 christos int cis_ktls, sis_ktls; 1471 1.1 christos 1472 1.2 christos OPENSSL_assert(test / 4 < (int)NUM_KTLS_TEST_CIPHERS); 1473 1.2 christos cipher = &ktls_test_ciphers[test / 4]; 1474 1.1 christos 1475 1.2 christos cis_ktls = (test & 1) != 0; 1476 1.2 christos sis_ktls = (test & 2) != 0; 1477 1.2 christos 1478 1.2 christos return execute_test_ktls(cis_ktls, sis_ktls, cipher->tls_version, 1479 1.2 christos cipher->cipher); 1480 1.1 christos } 1481 1.1 christos 1482 1.2 christos static int test_ktls_sendfile(int tst) 1483 1.1 christos { 1484 1.2 christos struct ktls_test_cipher *cipher; 1485 1.1 christos 1486 1.2 christos OPENSSL_assert(tst < (int)NUM_KTLS_TEST_CIPHERS); 1487 1.2 christos cipher = &ktls_test_ciphers[tst]; 1488 1.2 christos 1489 1.2 christos return execute_test_ktls_sendfile(cipher->tls_version, cipher->cipher); 1490 1.2 christos } 1491 1.2 christos #endif 1492 1.1 christos 1493 1.2 christos static int test_large_message_tls(void) 1494 1.2 christos { 1495 1.2 christos return execute_test_large_message(TLS_server_method(), TLS_client_method(), 1496 1.2 christos TLS1_VERSION, 0, 0); 1497 1.1 christos } 1498 1.1 christos 1499 1.2 christos static int test_large_message_tls_read_ahead(void) 1500 1.1 christos { 1501 1.2 christos return execute_test_large_message(TLS_server_method(), TLS_client_method(), 1502 1.2 christos TLS1_VERSION, 0, 1); 1503 1.2 christos } 1504 1.1 christos 1505 1.2 christos #ifndef OPENSSL_NO_DTLS 1506 1.2 christos static int test_large_message_dtls(void) 1507 1.2 christos { 1508 1.2 christos # ifdef OPENSSL_NO_DTLS1_2 1509 1.2 christos /* Not supported in the FIPS provider */ 1510 1.2 christos if (is_fips) 1511 1.2 christos return 1; 1512 1.2 christos # endif 1513 1.2 christos /* 1514 1.2 christos * read_ahead is not relevant to DTLS because DTLS always acts as if 1515 1.2 christos * read_ahead is set. 1516 1.2 christos */ 1517 1.2 christos return execute_test_large_message(DTLS_server_method(), 1518 1.2 christos DTLS_client_method(), 1519 1.2 christos DTLS1_VERSION, 0, 0); 1520 1.1 christos } 1521 1.2 christos #endif 1522 1.2 christos 1523 1.2 christos /* 1524 1.2 christos * Test we can successfully send the maximum amount of application data. We 1525 1.2 christos * test each protocol version individually, each with and without EtM enabled. 1526 1.2 christos * TLSv1.3 doesn't use EtM so technically it is redundant to test both but it is 1527 1.2 christos * simpler this way. We also test all combinations with and without the 1528 1.2 christos * SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS option which affects the size of the 1529 1.2 christos * underlying buffer. 1530 1.2 christos */ 1531 1.2 christos static int test_large_app_data(int tst) 1532 1.2 christos { 1533 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 1534 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 1535 1.2 christos int testresult = 0, prot; 1536 1.2 christos unsigned char *msg, *buf = NULL; 1537 1.2 christos size_t written, readbytes; 1538 1.2 christos const SSL_METHOD *smeth = TLS_server_method(); 1539 1.2 christos const SSL_METHOD *cmeth = TLS_client_method(); 1540 1.2 christos 1541 1.2 christos switch (tst >> 2) { 1542 1.2 christos case 0: 1543 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 1544 1.2 christos prot = TLS1_3_VERSION; 1545 1.2 christos break; 1546 1.2 christos #else 1547 1.2 christos return 1; 1548 1.2 christos #endif 1549 1.2 christos 1550 1.2 christos case 1: 1551 1.2 christos #ifndef OPENSSL_NO_TLS1_2 1552 1.2 christos prot = TLS1_2_VERSION; 1553 1.2 christos break; 1554 1.2 christos #else 1555 1.2 christos return 1; 1556 1.2 christos #endif 1557 1.1 christos 1558 1.2 christos case 2: 1559 1.2 christos #ifndef OPENSSL_NO_TLS1_1 1560 1.2 christos prot = TLS1_1_VERSION; 1561 1.2 christos break; 1562 1.2 christos #else 1563 1.2 christos return 1; 1564 1.2 christos #endif 1565 1.1 christos 1566 1.2 christos case 3: 1567 1.2 christos #ifndef OPENSSL_NO_TLS1 1568 1.2 christos prot = TLS1_VERSION; 1569 1.2 christos break; 1570 1.2 christos #else 1571 1.2 christos return 1; 1572 1.2 christos #endif 1573 1.1 christos 1574 1.2 christos case 4: 1575 1.2 christos #ifndef OPENSSL_NO_SSL3 1576 1.2 christos prot = SSL3_VERSION; 1577 1.1 christos break; 1578 1.2 christos #else 1579 1.2 christos return 1; 1580 1.2 christos #endif 1581 1.2 christos 1582 1.2 christos case 5: 1583 1.2 christos #ifndef OPENSSL_NO_DTLS1_2 1584 1.2 christos prot = DTLS1_2_VERSION; 1585 1.2 christos smeth = DTLS_server_method(); 1586 1.2 christos cmeth = DTLS_client_method(); 1587 1.1 christos break; 1588 1.2 christos #else 1589 1.2 christos return 1; 1590 1.2 christos #endif 1591 1.2 christos 1592 1.2 christos case 6: 1593 1.2 christos #ifndef OPENSSL_NO_DTLS1 1594 1.2 christos prot = DTLS1_VERSION; 1595 1.2 christos smeth = DTLS_server_method(); 1596 1.2 christos cmeth = DTLS_client_method(); 1597 1.1 christos break; 1598 1.2 christos #else 1599 1.2 christos return 1; 1600 1.2 christos #endif 1601 1.2 christos 1602 1.2 christos default: 1603 1.2 christos /* Shouldn't happen */ 1604 1.2 christos return 0; 1605 1.1 christos } 1606 1.1 christos 1607 1.2 christos if ((prot < TLS1_2_VERSION || prot == DTLS1_VERSION) && is_fips) 1608 1.2 christos return 1; 1609 1.2 christos 1610 1.2 christos /* Maximal sized message of zeros */ 1611 1.2 christos msg = OPENSSL_zalloc(SSL3_RT_MAX_PLAIN_LENGTH); 1612 1.2 christos if (!TEST_ptr(msg)) 1613 1.2 christos goto end; 1614 1.2 christos 1615 1.2 christos buf = OPENSSL_malloc(SSL3_RT_MAX_PLAIN_LENGTH + 1); 1616 1.2 christos if (!TEST_ptr(buf)) 1617 1.2 christos goto end; 1618 1.2 christos /* Set whole buffer to all bits set */ 1619 1.2 christos memset(buf, 0xff, SSL3_RT_MAX_PLAIN_LENGTH + 1); 1620 1.1 christos 1621 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, smeth, cmeth, prot, prot, 1622 1.2 christos &sctx, &cctx, cert, privkey))) 1623 1.1 christos goto end; 1624 1.1 christos 1625 1.2 christos if (prot < TLS1_2_VERSION || prot == DTLS1_VERSION) { 1626 1.2 christos /* Older protocol versions need SECLEVEL=0 due to SHA1 usage */ 1627 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(cctx, "DEFAULT:@SECLEVEL=0")) 1628 1.2 christos || !TEST_true(SSL_CTX_set_cipher_list(sctx, 1629 1.2 christos "DEFAULT:@SECLEVEL=0"))) 1630 1.1 christos goto end; 1631 1.1 christos } 1632 1.1 christos 1633 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 1634 1.2 christos &clientssl, NULL, NULL))) 1635 1.2 christos goto end; 1636 1.1 christos 1637 1.2 christos if ((tst & 1) != 0) { 1638 1.2 christos /* Setting this option gives us a minimally sized underlying buffer */ 1639 1.2 christos if (!TEST_true(SSL_set_options(serverssl, 1640 1.2 christos SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS)) 1641 1.2 christos || !TEST_true(SSL_set_options(clientssl, 1642 1.2 christos SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS))) 1643 1.1 christos goto end; 1644 1.1 christos } 1645 1.1 christos 1646 1.2 christos if ((tst & 2) != 0) { 1647 1.2 christos /* 1648 1.2 christos * Setting this option means the MAC is added before encryption 1649 1.2 christos * giving us a larger record for the encryption process 1650 1.2 christos */ 1651 1.2 christos if (!TEST_true(SSL_set_options(serverssl, SSL_OP_NO_ENCRYPT_THEN_MAC)) 1652 1.2 christos || !TEST_true(SSL_set_options(clientssl, 1653 1.2 christos SSL_OP_NO_ENCRYPT_THEN_MAC))) 1654 1.1 christos goto end; 1655 1.1 christos } 1656 1.1 christos 1657 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 1658 1.2 christos goto end; 1659 1.1 christos 1660 1.2 christos if (!TEST_true(SSL_write_ex(clientssl, msg, SSL3_RT_MAX_PLAIN_LENGTH, 1661 1.2 christos &written)) 1662 1.2 christos || !TEST_size_t_eq(written, SSL3_RT_MAX_PLAIN_LENGTH)) 1663 1.2 christos goto end; 1664 1.1 christos 1665 1.2 christos /* We provide a buffer slightly larger than what we are actually expecting */ 1666 1.2 christos if (!TEST_true(SSL_read_ex(serverssl, buf, SSL3_RT_MAX_PLAIN_LENGTH + 1, 1667 1.2 christos &readbytes))) 1668 1.2 christos goto end; 1669 1.1 christos 1670 1.2 christos if (!TEST_mem_eq(msg, written, buf, readbytes)) 1671 1.2 christos goto end; 1672 1.1 christos 1673 1.1 christos testresult = 1; 1674 1.2 christos end: 1675 1.2 christos OPENSSL_free(msg); 1676 1.2 christos OPENSSL_free(buf); 1677 1.2 christos SSL_free(serverssl); 1678 1.2 christos SSL_free(clientssl); 1679 1.2 christos SSL_CTX_free(sctx); 1680 1.2 christos SSL_CTX_free(cctx); 1681 1.1 christos return testresult; 1682 1.1 christos } 1683 1.1 christos 1684 1.2 christos #if !defined(OPENSSL_NO_TLS1_2) || !defined(OSSL_NO_USABLE_TLS1_3) \ 1685 1.2 christos || !defined(OPENSSL_NO_DTLS) 1686 1.2 christos static int execute_cleanse_plaintext(const SSL_METHOD *smeth, 1687 1.2 christos const SSL_METHOD *cmeth, 1688 1.2 christos int min_version, int max_version) 1689 1.2 christos { 1690 1.2 christos size_t i; 1691 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 1692 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 1693 1.2 christos int testresult = 0; 1694 1.2 christos SSL3_RECORD *rr; 1695 1.2 christos void *zbuf; 1696 1.1 christos 1697 1.2 christos static unsigned char cbuf[16000]; 1698 1.2 christos static unsigned char sbuf[16000]; 1699 1.1 christos 1700 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, 1701 1.2 christos smeth, cmeth, 1702 1.2 christos min_version, max_version, 1703 1.2 christos &sctx, &cctx, cert, 1704 1.2 christos privkey))) 1705 1.2 christos goto end; 1706 1.2 christos 1707 1.2 christos # ifdef OPENSSL_NO_DTLS1_2 1708 1.2 christos if (smeth == DTLS_server_method()) { 1709 1.2 christos /* Not supported in the FIPS provider */ 1710 1.2 christos if (is_fips) { 1711 1.2 christos testresult = 1; 1712 1.2 christos goto end; 1713 1.2 christos }; 1714 1.2 christos /* 1715 1.2 christos * Default sigalgs are SHA1 based in <DTLS1.2 which is in security 1716 1.2 christos * level 0 1717 1.2 christos */ 1718 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(sctx, "DEFAULT:@SECLEVEL=0")) 1719 1.2 christos || !TEST_true(SSL_CTX_set_cipher_list(cctx, 1720 1.2 christos "DEFAULT:@SECLEVEL=0"))) 1721 1.2 christos goto end; 1722 1.2 christos } 1723 1.2 christos # endif 1724 1.1 christos 1725 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 1726 1.2 christos NULL, NULL))) 1727 1.2 christos goto end; 1728 1.1 christos 1729 1.2 christos if (!TEST_true(SSL_set_options(serverssl, SSL_OP_CLEANSE_PLAINTEXT))) 1730 1.2 christos goto end; 1731 1.1 christos 1732 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 1733 1.2 christos SSL_ERROR_NONE))) 1734 1.2 christos goto end; 1735 1.1 christos 1736 1.2 christos for (i = 0; i < sizeof(cbuf); i++) { 1737 1.2 christos cbuf[i] = i & 0xff; 1738 1.1 christos } 1739 1.1 christos 1740 1.2 christos if (!TEST_int_eq(SSL_write(clientssl, cbuf, sizeof(cbuf)), sizeof(cbuf))) 1741 1.1 christos goto end; 1742 1.1 christos 1743 1.2 christos if (!TEST_int_eq(SSL_peek(serverssl, &sbuf, sizeof(sbuf)), sizeof(sbuf))) 1744 1.2 christos goto end; 1745 1.1 christos 1746 1.2 christos if (!TEST_mem_eq(cbuf, sizeof(cbuf), sbuf, sizeof(sbuf))) 1747 1.1 christos goto end; 1748 1.1 christos 1749 1.2 christos /* 1750 1.2 christos * Since we called SSL_peek(), we know the data in the record 1751 1.2 christos * layer is a plaintext record. We can gather the pointer to check 1752 1.2 christos * for zeroization after SSL_read(). 1753 1.2 christos */ 1754 1.2 christos rr = serverssl->rlayer.rrec; 1755 1.2 christos zbuf = &rr->data[rr->off]; 1756 1.2 christos if (!TEST_int_eq(rr->length, sizeof(cbuf))) 1757 1.2 christos goto end; 1758 1.1 christos 1759 1.1 christos /* 1760 1.2 christos * After SSL_peek() the plaintext must still be stored in the 1761 1.2 christos * record. 1762 1.1 christos */ 1763 1.2 christos if (!TEST_mem_eq(cbuf, sizeof(cbuf), zbuf, sizeof(cbuf))) 1764 1.2 christos goto end; 1765 1.2 christos 1766 1.2 christos memset(sbuf, 0, sizeof(sbuf)); 1767 1.2 christos if (!TEST_int_eq(SSL_read(serverssl, &sbuf, sizeof(sbuf)), sizeof(sbuf))) 1768 1.2 christos goto end; 1769 1.1 christos 1770 1.2 christos if (!TEST_mem_eq(cbuf, sizeof(cbuf), sbuf, sizeof(cbuf))) 1771 1.2 christos goto end; 1772 1.1 christos 1773 1.2 christos /* Check if rbuf is cleansed */ 1774 1.2 christos memset(cbuf, 0, sizeof(cbuf)); 1775 1.2 christos if (!TEST_mem_eq(cbuf, sizeof(cbuf), zbuf, sizeof(cbuf))) 1776 1.2 christos goto end; 1777 1.1 christos 1778 1.1 christos testresult = 1; 1779 1.1 christos end: 1780 1.2 christos SSL_free(serverssl); 1781 1.2 christos SSL_free(clientssl); 1782 1.2 christos SSL_CTX_free(sctx); 1783 1.2 christos SSL_CTX_free(cctx); 1784 1.1 christos 1785 1.1 christos return testresult; 1786 1.1 christos } 1787 1.2 christos #endif /* 1788 1.2 christos * !defined(OPENSSL_NO_TLS1_2) || !defined(OSSL_NO_USABLE_TLS1_3) 1789 1.2 christos * || !defined(OPENSSL_NO_DTLS) 1790 1.2 christos */ 1791 1.1 christos 1792 1.2 christos static int test_cleanse_plaintext(void) 1793 1.1 christos { 1794 1.2 christos #if !defined(OPENSSL_NO_TLS1_2) 1795 1.2 christos if (!TEST_true(execute_cleanse_plaintext(TLS_server_method(), 1796 1.2 christos TLS_client_method(), 1797 1.2 christos TLS1_2_VERSION, 1798 1.2 christos TLS1_2_VERSION))) 1799 1.2 christos return 0; 1800 1.1 christos 1801 1.2 christos #endif 1802 1.1 christos 1803 1.2 christos #if !defined(OSSL_NO_USABLE_TLS1_3) 1804 1.2 christos if (!TEST_true(execute_cleanse_plaintext(TLS_server_method(), 1805 1.2 christos TLS_client_method(), 1806 1.2 christos TLS1_3_VERSION, 1807 1.2 christos TLS1_3_VERSION))) 1808 1.2 christos return 0; 1809 1.2 christos #endif 1810 1.1 christos 1811 1.2 christos #if !defined(OPENSSL_NO_DTLS) 1812 1.1 christos 1813 1.2 christos if (!TEST_true(execute_cleanse_plaintext(DTLS_server_method(), 1814 1.2 christos DTLS_client_method(), 1815 1.2 christos DTLS1_VERSION, 1816 1.2 christos 0))) 1817 1.2 christos return 0; 1818 1.2 christos #endif 1819 1.2 christos return 1; 1820 1.1 christos } 1821 1.1 christos 1822 1.2 christos #ifndef OPENSSL_NO_OCSP 1823 1.2 christos static int ocsp_server_cb(SSL *s, void *arg) 1824 1.1 christos { 1825 1.2 christos int *argi = (int *)arg; 1826 1.2 christos unsigned char *copy = NULL; 1827 1.2 christos STACK_OF(OCSP_RESPID) *ids = NULL; 1828 1.2 christos OCSP_RESPID *id = NULL; 1829 1.1 christos 1830 1.2 christos if (*argi == 2) { 1831 1.2 christos /* In this test we are expecting exactly 1 OCSP_RESPID */ 1832 1.2 christos SSL_get_tlsext_status_ids(s, &ids); 1833 1.2 christos if (ids == NULL || sk_OCSP_RESPID_num(ids) != 1) 1834 1.2 christos return SSL_TLSEXT_ERR_ALERT_FATAL; 1835 1.1 christos 1836 1.2 christos id = sk_OCSP_RESPID_value(ids, 0); 1837 1.2 christos if (id == NULL || !OCSP_RESPID_match_ex(id, ocspcert, libctx, NULL)) 1838 1.2 christos return SSL_TLSEXT_ERR_ALERT_FATAL; 1839 1.2 christos } else if (*argi != 1) { 1840 1.2 christos return SSL_TLSEXT_ERR_ALERT_FATAL; 1841 1.2 christos } 1842 1.1 christos 1843 1.2 christos if (!TEST_ptr(copy = OPENSSL_memdup(orespder, sizeof(orespder)))) 1844 1.2 christos return SSL_TLSEXT_ERR_ALERT_FATAL; 1845 1.1 christos 1846 1.2 christos if (!TEST_true(SSL_set_tlsext_status_ocsp_resp(s, copy, 1847 1.2 christos sizeof(orespder)))) { 1848 1.2 christos OPENSSL_free(copy); 1849 1.2 christos return SSL_TLSEXT_ERR_ALERT_FATAL; 1850 1.2 christos } 1851 1.2 christos ocsp_server_called = 1; 1852 1.2 christos return SSL_TLSEXT_ERR_OK; 1853 1.1 christos } 1854 1.1 christos 1855 1.2 christos static int ocsp_client_cb(SSL *s, void *arg) 1856 1.2 christos { 1857 1.2 christos int *argi = (int *)arg; 1858 1.2 christos const unsigned char *respderin; 1859 1.2 christos size_t len; 1860 1.2 christos 1861 1.2 christos if (*argi != 1 && *argi != 2) 1862 1.2 christos return 0; 1863 1.2 christos 1864 1.2 christos len = SSL_get_tlsext_status_ocsp_resp(s, &respderin); 1865 1.2 christos if (!TEST_mem_eq(orespder, len, respderin, len)) 1866 1.2 christos return 0; 1867 1.2 christos 1868 1.2 christos ocsp_client_called = 1; 1869 1.2 christos return 1; 1870 1.2 christos } 1871 1.2 christos 1872 1.2 christos static int test_tlsext_status_type(void) 1873 1.2 christos { 1874 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 1875 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 1876 1.2 christos int testresult = 0; 1877 1.2 christos STACK_OF(OCSP_RESPID) *ids = NULL; 1878 1.2 christos OCSP_RESPID *id = NULL; 1879 1.2 christos BIO *certbio = NULL; 1880 1.2 christos 1881 1.2 christos if (!create_ssl_ctx_pair(libctx, TLS_server_method(), TLS_client_method(), 1882 1.2 christos TLS1_VERSION, 0, 1883 1.2 christos &sctx, &cctx, cert, privkey)) 1884 1.2 christos return 0; 1885 1.2 christos 1886 1.2 christos if (SSL_CTX_get_tlsext_status_type(cctx) != -1) 1887 1.2 christos goto end; 1888 1.2 christos 1889 1.2 christos /* First just do various checks getting and setting tlsext_status_type */ 1890 1.2 christos 1891 1.2 christos clientssl = SSL_new(cctx); 1892 1.2 christos if (!TEST_int_eq(SSL_get_tlsext_status_type(clientssl), -1) 1893 1.2 christos || !TEST_true(SSL_set_tlsext_status_type(clientssl, 1894 1.2 christos TLSEXT_STATUSTYPE_ocsp)) 1895 1.2 christos || !TEST_int_eq(SSL_get_tlsext_status_type(clientssl), 1896 1.2 christos TLSEXT_STATUSTYPE_ocsp)) 1897 1.2 christos goto end; 1898 1.2 christos 1899 1.2 christos SSL_free(clientssl); 1900 1.2 christos clientssl = NULL; 1901 1.2 christos 1902 1.2 christos if (!SSL_CTX_set_tlsext_status_type(cctx, TLSEXT_STATUSTYPE_ocsp) 1903 1.2 christos || SSL_CTX_get_tlsext_status_type(cctx) != TLSEXT_STATUSTYPE_ocsp) 1904 1.2 christos goto end; 1905 1.2 christos 1906 1.2 christos clientssl = SSL_new(cctx); 1907 1.2 christos if (SSL_get_tlsext_status_type(clientssl) != TLSEXT_STATUSTYPE_ocsp) 1908 1.2 christos goto end; 1909 1.2 christos SSL_free(clientssl); 1910 1.2 christos clientssl = NULL; 1911 1.2 christos 1912 1.2 christos /* 1913 1.2 christos * Now actually do a handshake and check OCSP information is exchanged and 1914 1.2 christos * the callbacks get called 1915 1.2 christos */ 1916 1.2 christos SSL_CTX_set_tlsext_status_cb(cctx, ocsp_client_cb); 1917 1.2 christos SSL_CTX_set_tlsext_status_arg(cctx, &cdummyarg); 1918 1.2 christos SSL_CTX_set_tlsext_status_cb(sctx, ocsp_server_cb); 1919 1.2 christos SSL_CTX_set_tlsext_status_arg(sctx, &cdummyarg); 1920 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 1921 1.2 christos &clientssl, NULL, NULL)) 1922 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 1923 1.2 christos SSL_ERROR_NONE)) 1924 1.2 christos || !TEST_true(ocsp_client_called) 1925 1.2 christos || !TEST_true(ocsp_server_called)) 1926 1.2 christos goto end; 1927 1.2 christos SSL_free(serverssl); 1928 1.2 christos SSL_free(clientssl); 1929 1.2 christos serverssl = NULL; 1930 1.2 christos clientssl = NULL; 1931 1.2 christos 1932 1.2 christos /* Try again but this time force the server side callback to fail */ 1933 1.2 christos ocsp_client_called = 0; 1934 1.2 christos ocsp_server_called = 0; 1935 1.2 christos cdummyarg = 0; 1936 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 1937 1.2 christos &clientssl, NULL, NULL)) 1938 1.2 christos /* This should fail because the callback will fail */ 1939 1.2 christos || !TEST_false(create_ssl_connection(serverssl, clientssl, 1940 1.2 christos SSL_ERROR_NONE)) 1941 1.2 christos || !TEST_false(ocsp_client_called) 1942 1.2 christos || !TEST_false(ocsp_server_called)) 1943 1.2 christos goto end; 1944 1.2 christos SSL_free(serverssl); 1945 1.2 christos SSL_free(clientssl); 1946 1.2 christos serverssl = NULL; 1947 1.2 christos clientssl = NULL; 1948 1.2 christos 1949 1.2 christos /* 1950 1.2 christos * This time we'll get the client to send an OCSP_RESPID that it will 1951 1.2 christos * accept. 1952 1.2 christos */ 1953 1.2 christos ocsp_client_called = 0; 1954 1.2 christos ocsp_server_called = 0; 1955 1.2 christos cdummyarg = 2; 1956 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 1957 1.2 christos &clientssl, NULL, NULL))) 1958 1.2 christos goto end; 1959 1.2 christos 1960 1.2 christos /* 1961 1.2 christos * We'll just use any old cert for this test - it doesn't have to be an OCSP 1962 1.2 christos * specific one. We'll use the server cert. 1963 1.2 christos */ 1964 1.2 christos if (!TEST_ptr(certbio = BIO_new_file(cert, "r")) 1965 1.2 christos || !TEST_ptr(id = OCSP_RESPID_new()) 1966 1.2 christos || !TEST_ptr(ids = sk_OCSP_RESPID_new_null()) 1967 1.2 christos || !TEST_ptr(ocspcert = X509_new_ex(libctx, NULL)) 1968 1.2 christos || !TEST_ptr(PEM_read_bio_X509(certbio, &ocspcert, NULL, NULL)) 1969 1.2 christos || !TEST_true(OCSP_RESPID_set_by_key_ex(id, ocspcert, libctx, NULL)) 1970 1.2 christos || !TEST_true(sk_OCSP_RESPID_push(ids, id))) 1971 1.2 christos goto end; 1972 1.2 christos id = NULL; 1973 1.2 christos SSL_set_tlsext_status_ids(clientssl, ids); 1974 1.2 christos /* Control has been transferred */ 1975 1.2 christos ids = NULL; 1976 1.2 christos 1977 1.2 christos BIO_free(certbio); 1978 1.2 christos certbio = NULL; 1979 1.2 christos 1980 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 1981 1.2 christos SSL_ERROR_NONE)) 1982 1.2 christos || !TEST_true(ocsp_client_called) 1983 1.2 christos || !TEST_true(ocsp_server_called)) 1984 1.2 christos goto end; 1985 1.2 christos 1986 1.2 christos testresult = 1; 1987 1.2 christos 1988 1.2 christos end: 1989 1.2 christos SSL_free(serverssl); 1990 1.2 christos SSL_free(clientssl); 1991 1.2 christos SSL_CTX_free(sctx); 1992 1.2 christos SSL_CTX_free(cctx); 1993 1.2 christos sk_OCSP_RESPID_pop_free(ids, OCSP_RESPID_free); 1994 1.2 christos OCSP_RESPID_free(id); 1995 1.2 christos BIO_free(certbio); 1996 1.2 christos X509_free(ocspcert); 1997 1.2 christos ocspcert = NULL; 1998 1.2 christos 1999 1.2 christos return testresult; 2000 1.2 christos } 2001 1.2 christos #endif 2002 1.2 christos 2003 1.2 christos #if !defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2) 2004 1.2 christos static int new_called, remove_called, get_called; 2005 1.2 christos 2006 1.2 christos static int new_session_cb(SSL *ssl, SSL_SESSION *sess) 2007 1.2 christos { 2008 1.2 christos new_called++; 2009 1.2 christos /* 2010 1.2 christos * sess has been up-refed for us, but we don't actually need it so free it 2011 1.2 christos * immediately. 2012 1.2 christos */ 2013 1.2 christos SSL_SESSION_free(sess); 2014 1.2 christos return 1; 2015 1.2 christos } 2016 1.2 christos 2017 1.2 christos static void remove_session_cb(SSL_CTX *ctx, SSL_SESSION *sess) 2018 1.2 christos { 2019 1.2 christos remove_called++; 2020 1.2 christos } 2021 1.2 christos 2022 1.2 christos static SSL_SESSION *get_sess_val = NULL; 2023 1.2 christos 2024 1.2 christos static SSL_SESSION *get_session_cb(SSL *ssl, const unsigned char *id, int len, 2025 1.2 christos int *copy) 2026 1.2 christos { 2027 1.2 christos get_called++; 2028 1.2 christos *copy = 1; 2029 1.2 christos return get_sess_val; 2030 1.2 christos } 2031 1.2 christos 2032 1.2 christos static int execute_test_session(int maxprot, int use_int_cache, 2033 1.2 christos int use_ext_cache, long s_options) 2034 1.2 christos { 2035 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 2036 1.2 christos SSL *serverssl1 = NULL, *clientssl1 = NULL; 2037 1.2 christos SSL *serverssl2 = NULL, *clientssl2 = NULL; 2038 1.2 christos # ifndef OPENSSL_NO_TLS1_1 2039 1.2 christos SSL *serverssl3 = NULL, *clientssl3 = NULL; 2040 1.2 christos # endif 2041 1.2 christos SSL_SESSION *sess1 = NULL, *sess2 = NULL; 2042 1.2 christos int testresult = 0, numnewsesstick = 1; 2043 1.2 christos 2044 1.2 christos new_called = remove_called = 0; 2045 1.2 christos 2046 1.2 christos /* TLSv1.3 sends 2 NewSessionTickets */ 2047 1.2 christos if (maxprot == TLS1_3_VERSION) 2048 1.2 christos numnewsesstick = 2; 2049 1.2 christos 2050 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 2051 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 2052 1.2 christos &sctx, &cctx, cert, privkey))) 2053 1.2 christos return 0; 2054 1.2 christos 2055 1.2 christos /* 2056 1.2 christos * Only allow the max protocol version so we can force a connection failure 2057 1.2 christos * later 2058 1.2 christos */ 2059 1.2 christos SSL_CTX_set_min_proto_version(cctx, maxprot); 2060 1.2 christos SSL_CTX_set_max_proto_version(cctx, maxprot); 2061 1.2 christos 2062 1.2 christos /* Set up session cache */ 2063 1.2 christos if (use_ext_cache) { 2064 1.2 christos SSL_CTX_sess_set_new_cb(cctx, new_session_cb); 2065 1.2 christos SSL_CTX_sess_set_remove_cb(cctx, remove_session_cb); 2066 1.2 christos } 2067 1.2 christos if (use_int_cache) { 2068 1.2 christos /* Also covers instance where both are set */ 2069 1.2 christos SSL_CTX_set_session_cache_mode(cctx, SSL_SESS_CACHE_CLIENT); 2070 1.2 christos } else { 2071 1.2 christos SSL_CTX_set_session_cache_mode(cctx, 2072 1.2 christos SSL_SESS_CACHE_CLIENT 2073 1.2 christos | SSL_SESS_CACHE_NO_INTERNAL_STORE); 2074 1.2 christos } 2075 1.2 christos 2076 1.2 christos if (s_options) { 2077 1.2 christos SSL_CTX_set_options(sctx, s_options); 2078 1.2 christos } 2079 1.2 christos 2080 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl1, &clientssl1, 2081 1.2 christos NULL, NULL)) 2082 1.2 christos || !TEST_true(create_ssl_connection(serverssl1, clientssl1, 2083 1.2 christos SSL_ERROR_NONE)) 2084 1.2 christos || !TEST_ptr(sess1 = SSL_get1_session(clientssl1))) 2085 1.2 christos goto end; 2086 1.2 christos 2087 1.2 christos /* Should fail because it should already be in the cache */ 2088 1.2 christos if (use_int_cache && !TEST_false(SSL_CTX_add_session(cctx, sess1))) 2089 1.2 christos goto end; 2090 1.2 christos if (use_ext_cache 2091 1.2 christos && (!TEST_int_eq(new_called, numnewsesstick) 2092 1.2 christos 2093 1.2 christos || !TEST_int_eq(remove_called, 0))) 2094 1.2 christos goto end; 2095 1.2 christos 2096 1.2 christos new_called = remove_called = 0; 2097 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl2, 2098 1.2 christos &clientssl2, NULL, NULL)) 2099 1.2 christos || !TEST_true(SSL_set_session(clientssl2, sess1)) 2100 1.2 christos || !TEST_true(create_ssl_connection(serverssl2, clientssl2, 2101 1.2 christos SSL_ERROR_NONE)) 2102 1.2 christos || !TEST_true(SSL_session_reused(clientssl2))) 2103 1.2 christos goto end; 2104 1.2 christos 2105 1.2 christos if (maxprot == TLS1_3_VERSION) { 2106 1.2 christos /* 2107 1.2 christos * In TLSv1.3 we should have created a new session even though we have 2108 1.2 christos * resumed. Since we attempted a resume we should also have removed the 2109 1.2 christos * old ticket from the cache so that we try to only use tickets once. 2110 1.2 christos */ 2111 1.2 christos if (use_ext_cache 2112 1.2 christos && (!TEST_int_eq(new_called, 1) 2113 1.2 christos || !TEST_int_eq(remove_called, 1))) 2114 1.2 christos goto end; 2115 1.2 christos } else { 2116 1.2 christos /* 2117 1.2 christos * In TLSv1.2 we expect to have resumed so no sessions added or 2118 1.2 christos * removed. 2119 1.2 christos */ 2120 1.2 christos if (use_ext_cache 2121 1.2 christos && (!TEST_int_eq(new_called, 0) 2122 1.2 christos || !TEST_int_eq(remove_called, 0))) 2123 1.2 christos goto end; 2124 1.2 christos } 2125 1.2 christos 2126 1.2 christos SSL_SESSION_free(sess1); 2127 1.2 christos if (!TEST_ptr(sess1 = SSL_get1_session(clientssl2))) 2128 1.2 christos goto end; 2129 1.2 christos shutdown_ssl_connection(serverssl2, clientssl2); 2130 1.2 christos serverssl2 = clientssl2 = NULL; 2131 1.2 christos 2132 1.2 christos new_called = remove_called = 0; 2133 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl2, 2134 1.2 christos &clientssl2, NULL, NULL)) 2135 1.2 christos || !TEST_true(create_ssl_connection(serverssl2, clientssl2, 2136 1.2 christos SSL_ERROR_NONE))) 2137 1.2 christos goto end; 2138 1.2 christos 2139 1.2 christos if (!TEST_ptr(sess2 = SSL_get1_session(clientssl2))) 2140 1.2 christos goto end; 2141 1.2 christos 2142 1.2 christos if (use_ext_cache 2143 1.2 christos && (!TEST_int_eq(new_called, numnewsesstick) 2144 1.2 christos || !TEST_int_eq(remove_called, 0))) 2145 1.2 christos goto end; 2146 1.2 christos 2147 1.2 christos new_called = remove_called = 0; 2148 1.2 christos /* 2149 1.2 christos * This should clear sess2 from the cache because it is a "bad" session. 2150 1.2 christos * See SSL_set_session() documentation. 2151 1.2 christos */ 2152 1.2 christos if (!TEST_true(SSL_set_session(clientssl2, sess1))) 2153 1.2 christos goto end; 2154 1.2 christos if (use_ext_cache 2155 1.2 christos && (!TEST_int_eq(new_called, 0) || !TEST_int_eq(remove_called, 1))) 2156 1.2 christos goto end; 2157 1.2 christos if (!TEST_ptr_eq(SSL_get_session(clientssl2), sess1)) 2158 1.2 christos goto end; 2159 1.2 christos 2160 1.2 christos if (use_int_cache) { 2161 1.2 christos /* Should succeeded because it should not already be in the cache */ 2162 1.2 christos if (!TEST_true(SSL_CTX_add_session(cctx, sess2)) 2163 1.2 christos || !TEST_true(SSL_CTX_remove_session(cctx, sess2))) 2164 1.2 christos goto end; 2165 1.2 christos } 2166 1.2 christos 2167 1.2 christos new_called = remove_called = 0; 2168 1.2 christos /* This shouldn't be in the cache so should fail */ 2169 1.2 christos if (!TEST_false(SSL_CTX_remove_session(cctx, sess2))) 2170 1.2 christos goto end; 2171 1.2 christos 2172 1.2 christos if (use_ext_cache 2173 1.2 christos && (!TEST_int_eq(new_called, 0) || !TEST_int_eq(remove_called, 1))) 2174 1.2 christos goto end; 2175 1.2 christos 2176 1.2 christos # if !defined(OPENSSL_NO_TLS1_1) 2177 1.2 christos new_called = remove_called = 0; 2178 1.2 christos /* Force a connection failure */ 2179 1.2 christos SSL_CTX_set_max_proto_version(sctx, TLS1_1_VERSION); 2180 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl3, 2181 1.2 christos &clientssl3, NULL, NULL)) 2182 1.2 christos || !TEST_true(SSL_set_session(clientssl3, sess1)) 2183 1.2 christos /* This should fail because of the mismatched protocol versions */ 2184 1.2 christos || !TEST_false(create_ssl_connection(serverssl3, clientssl3, 2185 1.2 christos SSL_ERROR_NONE))) 2186 1.2 christos goto end; 2187 1.2 christos 2188 1.2 christos /* We should have automatically removed the session from the cache */ 2189 1.2 christos if (use_ext_cache 2190 1.2 christos && (!TEST_int_eq(new_called, 0) || !TEST_int_eq(remove_called, 1))) 2191 1.2 christos goto end; 2192 1.2 christos 2193 1.2 christos /* Should succeed because it should not already be in the cache */ 2194 1.2 christos if (use_int_cache && !TEST_true(SSL_CTX_add_session(cctx, sess2))) 2195 1.2 christos goto end; 2196 1.2 christos # endif 2197 1.2 christos 2198 1.2 christos /* Now do some tests for server side caching */ 2199 1.2 christos if (use_ext_cache) { 2200 1.2 christos SSL_CTX_sess_set_new_cb(cctx, NULL); 2201 1.2 christos SSL_CTX_sess_set_remove_cb(cctx, NULL); 2202 1.2 christos SSL_CTX_sess_set_new_cb(sctx, new_session_cb); 2203 1.2 christos SSL_CTX_sess_set_remove_cb(sctx, remove_session_cb); 2204 1.2 christos SSL_CTX_sess_set_get_cb(sctx, get_session_cb); 2205 1.2 christos get_sess_val = NULL; 2206 1.2 christos } 2207 1.2 christos 2208 1.2 christos SSL_CTX_set_session_cache_mode(cctx, 0); 2209 1.2 christos /* Internal caching is the default on the server side */ 2210 1.2 christos if (!use_int_cache) 2211 1.2 christos SSL_CTX_set_session_cache_mode(sctx, 2212 1.2 christos SSL_SESS_CACHE_SERVER 2213 1.2 christos | SSL_SESS_CACHE_NO_INTERNAL_STORE); 2214 1.2 christos 2215 1.2 christos SSL_free(serverssl1); 2216 1.2 christos SSL_free(clientssl1); 2217 1.2 christos serverssl1 = clientssl1 = NULL; 2218 1.2 christos SSL_free(serverssl2); 2219 1.2 christos SSL_free(clientssl2); 2220 1.2 christos serverssl2 = clientssl2 = NULL; 2221 1.2 christos SSL_SESSION_free(sess1); 2222 1.2 christos sess1 = NULL; 2223 1.2 christos SSL_SESSION_free(sess2); 2224 1.2 christos sess2 = NULL; 2225 1.2 christos 2226 1.2 christos SSL_CTX_set_max_proto_version(sctx, maxprot); 2227 1.2 christos if (maxprot == TLS1_2_VERSION) 2228 1.2 christos SSL_CTX_set_options(sctx, SSL_OP_NO_TICKET); 2229 1.2 christos new_called = remove_called = get_called = 0; 2230 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl1, &clientssl1, 2231 1.2 christos NULL, NULL)) 2232 1.2 christos || !TEST_true(create_ssl_connection(serverssl1, clientssl1, 2233 1.2 christos SSL_ERROR_NONE)) 2234 1.2 christos || !TEST_ptr(sess1 = SSL_get1_session(clientssl1)) 2235 1.2 christos || !TEST_ptr(sess2 = SSL_get1_session(serverssl1))) 2236 1.2 christos goto end; 2237 1.2 christos 2238 1.2 christos if (use_int_cache) { 2239 1.2 christos if (maxprot == TLS1_3_VERSION && !use_ext_cache) { 2240 1.2 christos /* 2241 1.2 christos * In TLSv1.3 it should not have been added to the internal cache, 2242 1.2 christos * except in the case where we also have an external cache (in that 2243 1.2 christos * case it gets added to the cache in order to generate remove 2244 1.2 christos * events after timeout). 2245 1.2 christos */ 2246 1.2 christos if (!TEST_false(SSL_CTX_remove_session(sctx, sess2))) 2247 1.2 christos goto end; 2248 1.2 christos } else { 2249 1.2 christos /* Should fail because it should already be in the cache */ 2250 1.2 christos if (!TEST_false(SSL_CTX_add_session(sctx, sess2))) 2251 1.2 christos goto end; 2252 1.2 christos } 2253 1.2 christos } 2254 1.2 christos 2255 1.2 christos if (use_ext_cache) { 2256 1.2 christos SSL_SESSION *tmp = sess2; 2257 1.2 christos 2258 1.2 christos if (!TEST_int_eq(new_called, numnewsesstick) 2259 1.2 christos || !TEST_int_eq(remove_called, 0) 2260 1.2 christos || !TEST_int_eq(get_called, 0)) 2261 1.2 christos goto end; 2262 1.2 christos /* 2263 1.2 christos * Delete the session from the internal cache to force a lookup from 2264 1.2 christos * the external cache. We take a copy first because 2265 1.2 christos * SSL_CTX_remove_session() also marks the session as non-resumable. 2266 1.2 christos */ 2267 1.2 christos if (use_int_cache && maxprot != TLS1_3_VERSION) { 2268 1.2 christos if (!TEST_ptr(tmp = SSL_SESSION_dup(sess2)) 2269 1.2 christos || !TEST_true(sess2->owner != NULL) 2270 1.2 christos || !TEST_true(tmp->owner == NULL) 2271 1.2 christos || !TEST_true(SSL_CTX_remove_session(sctx, sess2))) 2272 1.2 christos goto end; 2273 1.2 christos SSL_SESSION_free(sess2); 2274 1.2 christos } 2275 1.2 christos sess2 = tmp; 2276 1.2 christos } 2277 1.2 christos 2278 1.2 christos new_called = remove_called = get_called = 0; 2279 1.2 christos get_sess_val = sess2; 2280 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl2, 2281 1.2 christos &clientssl2, NULL, NULL)) 2282 1.2 christos || !TEST_true(SSL_set_session(clientssl2, sess1)) 2283 1.2 christos || !TEST_true(create_ssl_connection(serverssl2, clientssl2, 2284 1.2 christos SSL_ERROR_NONE)) 2285 1.2 christos || !TEST_true(SSL_session_reused(clientssl2))) 2286 1.2 christos goto end; 2287 1.2 christos 2288 1.2 christos if (use_ext_cache) { 2289 1.2 christos if (!TEST_int_eq(remove_called, 0)) 2290 1.2 christos goto end; 2291 1.2 christos 2292 1.2 christos if (maxprot == TLS1_3_VERSION) { 2293 1.2 christos if (!TEST_int_eq(new_called, 1) 2294 1.2 christos || !TEST_int_eq(get_called, 0)) 2295 1.2 christos goto end; 2296 1.2 christos } else { 2297 1.2 christos if (!TEST_int_eq(new_called, 0) 2298 1.2 christos || !TEST_int_eq(get_called, 1)) 2299 1.2 christos goto end; 2300 1.2 christos } 2301 1.2 christos } 2302 1.2 christos /* 2303 1.2 christos * Make a small cache, force out all other sessions but 2304 1.2 christos * sess2, try to add sess1, which should succeed. Then 2305 1.2 christos * make sure it's there by checking the owners. Despite 2306 1.2 christos * the timeouts, sess1 should have kicked out sess2 2307 1.2 christos */ 2308 1.2 christos 2309 1.2 christos /* Make sess1 expire before sess2 */ 2310 1.2 christos if (!TEST_long_gt(SSL_SESSION_set_time(sess1, 1000), 0) 2311 1.2 christos || !TEST_long_gt(SSL_SESSION_set_timeout(sess1, 1000), 0) 2312 1.2 christos || !TEST_long_gt(SSL_SESSION_set_time(sess2, 2000), 0) 2313 1.2 christos || !TEST_long_gt(SSL_SESSION_set_timeout(sess2, 2000), 0)) 2314 1.2 christos goto end; 2315 1.2 christos 2316 1.2 christos if (!TEST_long_ne(SSL_CTX_sess_set_cache_size(sctx, 1), 0)) 2317 1.2 christos goto end; 2318 1.2 christos 2319 1.2 christos /* Don't care about results - cache should only be sess2 at end */ 2320 1.2 christos SSL_CTX_add_session(sctx, sess1); 2321 1.2 christos SSL_CTX_add_session(sctx, sess2); 2322 1.2 christos 2323 1.2 christos /* Now add sess1, and make sure it remains, despite timeout */ 2324 1.2 christos if (!TEST_true(SSL_CTX_add_session(sctx, sess1)) 2325 1.2 christos || !TEST_ptr(sess1->owner) 2326 1.2 christos || !TEST_ptr_null(sess2->owner)) 2327 1.2 christos goto end; 2328 1.2 christos 2329 1.2 christos testresult = 1; 2330 1.2 christos 2331 1.2 christos end: 2332 1.2 christos SSL_free(serverssl1); 2333 1.2 christos SSL_free(clientssl1); 2334 1.2 christos SSL_free(serverssl2); 2335 1.2 christos SSL_free(clientssl2); 2336 1.2 christos # ifndef OPENSSL_NO_TLS1_1 2337 1.2 christos SSL_free(serverssl3); 2338 1.2 christos SSL_free(clientssl3); 2339 1.2 christos # endif 2340 1.2 christos SSL_SESSION_free(sess1); 2341 1.2 christos SSL_SESSION_free(sess2); 2342 1.2 christos SSL_CTX_free(sctx); 2343 1.2 christos SSL_CTX_free(cctx); 2344 1.2 christos 2345 1.2 christos return testresult; 2346 1.2 christos } 2347 1.2 christos #endif /* !defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2) */ 2348 1.2 christos 2349 1.2 christos static int test_session_with_only_int_cache(void) 2350 1.2 christos { 2351 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 2352 1.2 christos if (!execute_test_session(TLS1_3_VERSION, 1, 0, 0)) 2353 1.2 christos return 0; 2354 1.2 christos #endif 2355 1.2 christos 2356 1.2 christos #ifndef OPENSSL_NO_TLS1_2 2357 1.2 christos return execute_test_session(TLS1_2_VERSION, 1, 0, 0); 2358 1.2 christos #else 2359 1.2 christos return 1; 2360 1.2 christos #endif 2361 1.2 christos } 2362 1.2 christos 2363 1.2 christos static int test_session_with_only_ext_cache(void) 2364 1.2 christos { 2365 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 2366 1.2 christos if (!execute_test_session(TLS1_3_VERSION, 0, 1, 0)) 2367 1.2 christos return 0; 2368 1.2 christos #endif 2369 1.2 christos 2370 1.2 christos #ifndef OPENSSL_NO_TLS1_2 2371 1.2 christos return execute_test_session(TLS1_2_VERSION, 0, 1, 0); 2372 1.2 christos #else 2373 1.2 christos return 1; 2374 1.2 christos #endif 2375 1.2 christos } 2376 1.2 christos 2377 1.2 christos static int test_session_with_both_cache(void) 2378 1.2 christos { 2379 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 2380 1.2 christos if (!execute_test_session(TLS1_3_VERSION, 1, 1, 0)) 2381 1.2 christos return 0; 2382 1.2 christos #endif 2383 1.2 christos 2384 1.2 christos #ifndef OPENSSL_NO_TLS1_2 2385 1.2 christos return execute_test_session(TLS1_2_VERSION, 1, 1, 0); 2386 1.2 christos #else 2387 1.2 christos return 1; 2388 1.2 christos #endif 2389 1.2 christos } 2390 1.2 christos 2391 1.2 christos static int test_session_wo_ca_names(void) 2392 1.2 christos { 2393 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 2394 1.2 christos if (!execute_test_session(TLS1_3_VERSION, 1, 0, SSL_OP_DISABLE_TLSEXT_CA_NAMES)) 2395 1.2 christos return 0; 2396 1.2 christos #endif 2397 1.2 christos 2398 1.2 christos #ifndef OPENSSL_NO_TLS1_2 2399 1.2 christos return execute_test_session(TLS1_2_VERSION, 1, 0, SSL_OP_DISABLE_TLSEXT_CA_NAMES); 2400 1.2 christos #else 2401 1.2 christos return 1; 2402 1.2 christos #endif 2403 1.2 christos } 2404 1.2 christos 2405 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 2406 1.2 christos static SSL_SESSION *sesscache[6]; 2407 1.2 christos static int do_cache; 2408 1.2 christos 2409 1.2 christos static int new_cachesession_cb(SSL *ssl, SSL_SESSION *sess) 2410 1.2 christos { 2411 1.2 christos if (do_cache) { 2412 1.2 christos sesscache[new_called] = sess; 2413 1.2 christos } else { 2414 1.2 christos /* We don't need the reference to the session, so free it */ 2415 1.2 christos SSL_SESSION_free(sess); 2416 1.2 christos } 2417 1.2 christos new_called++; 2418 1.2 christos 2419 1.2 christos return 1; 2420 1.2 christos } 2421 1.2 christos 2422 1.2 christos static int post_handshake_verify(SSL *sssl, SSL *cssl) 2423 1.2 christos { 2424 1.2 christos SSL_set_verify(sssl, SSL_VERIFY_PEER, NULL); 2425 1.2 christos if (!TEST_true(SSL_verify_client_post_handshake(sssl))) 2426 1.2 christos return 0; 2427 1.2 christos 2428 1.2 christos /* Start handshake on the server and client */ 2429 1.2 christos if (!TEST_int_eq(SSL_do_handshake(sssl), 1) 2430 1.2 christos || !TEST_int_le(SSL_read(cssl, NULL, 0), 0) 2431 1.2 christos || !TEST_int_le(SSL_read(sssl, NULL, 0), 0) 2432 1.2 christos || !TEST_true(create_ssl_connection(sssl, cssl, 2433 1.2 christos SSL_ERROR_NONE))) 2434 1.2 christos return 0; 2435 1.2 christos 2436 1.2 christos return 1; 2437 1.2 christos } 2438 1.2 christos 2439 1.2 christos static int setup_ticket_test(int stateful, int idx, SSL_CTX **sctx, 2440 1.2 christos SSL_CTX **cctx) 2441 1.2 christos { 2442 1.2 christos int sess_id_ctx = 1; 2443 1.2 christos 2444 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 2445 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 2446 1.2 christos sctx, cctx, cert, privkey)) 2447 1.2 christos || !TEST_true(SSL_CTX_set_num_tickets(*sctx, idx)) 2448 1.2 christos || !TEST_true(SSL_CTX_set_session_id_context(*sctx, 2449 1.2 christos (void *)&sess_id_ctx, 2450 1.2 christos sizeof(sess_id_ctx)))) 2451 1.2 christos return 0; 2452 1.2 christos 2453 1.2 christos if (stateful) 2454 1.2 christos SSL_CTX_set_options(*sctx, SSL_OP_NO_TICKET); 2455 1.2 christos 2456 1.2 christos SSL_CTX_set_session_cache_mode(*cctx, SSL_SESS_CACHE_CLIENT 2457 1.2 christos | SSL_SESS_CACHE_NO_INTERNAL_STORE); 2458 1.2 christos SSL_CTX_sess_set_new_cb(*cctx, new_cachesession_cb); 2459 1.2 christos 2460 1.2 christos return 1; 2461 1.2 christos } 2462 1.2 christos 2463 1.2 christos static int check_resumption(int idx, SSL_CTX *sctx, SSL_CTX *cctx, int succ) 2464 1.2 christos { 2465 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 2466 1.2 christos int i; 2467 1.2 christos 2468 1.2 christos /* Test that we can resume with all the tickets we got given */ 2469 1.2 christos for (i = 0; i < idx * 2; i++) { 2470 1.2 christos new_called = 0; 2471 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 2472 1.2 christos &clientssl, NULL, NULL)) 2473 1.2 christos || !TEST_true(SSL_set_session(clientssl, sesscache[i]))) 2474 1.2 christos goto end; 2475 1.2 christos 2476 1.2 christos SSL_set_post_handshake_auth(clientssl, 1); 2477 1.2 christos 2478 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 2479 1.2 christos SSL_ERROR_NONE))) 2480 1.2 christos goto end; 2481 1.2 christos 2482 1.2 christos /* 2483 1.2 christos * Following a successful resumption we only get 1 ticket. After a 2484 1.2 christos * failed one we should get idx tickets. 2485 1.2 christos */ 2486 1.2 christos if (succ) { 2487 1.2 christos if (!TEST_true(SSL_session_reused(clientssl)) 2488 1.2 christos || !TEST_int_eq(new_called, 1)) 2489 1.2 christos goto end; 2490 1.2 christos } else { 2491 1.2 christos if (!TEST_false(SSL_session_reused(clientssl)) 2492 1.2 christos || !TEST_int_eq(new_called, idx)) 2493 1.2 christos goto end; 2494 1.2 christos } 2495 1.2 christos 2496 1.2 christos new_called = 0; 2497 1.2 christos /* After a post-handshake authentication we should get 1 new ticket */ 2498 1.2 christos if (succ 2499 1.2 christos && (!post_handshake_verify(serverssl, clientssl) 2500 1.2 christos || !TEST_int_eq(new_called, 1))) 2501 1.2 christos goto end; 2502 1.2 christos 2503 1.2 christos SSL_shutdown(clientssl); 2504 1.2 christos SSL_shutdown(serverssl); 2505 1.2 christos SSL_free(serverssl); 2506 1.2 christos SSL_free(clientssl); 2507 1.2 christos serverssl = clientssl = NULL; 2508 1.2 christos SSL_SESSION_free(sesscache[i]); 2509 1.2 christos sesscache[i] = NULL; 2510 1.2 christos } 2511 1.2 christos 2512 1.2 christos return 1; 2513 1.2 christos 2514 1.2 christos end: 2515 1.2 christos SSL_free(clientssl); 2516 1.2 christos SSL_free(serverssl); 2517 1.2 christos return 0; 2518 1.2 christos } 2519 1.2 christos 2520 1.2 christos static int test_tickets(int stateful, int idx) 2521 1.2 christos { 2522 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 2523 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 2524 1.2 christos int testresult = 0; 2525 1.2 christos size_t j; 2526 1.2 christos 2527 1.2 christos /* idx is the test number, but also the number of tickets we want */ 2528 1.2 christos 2529 1.2 christos new_called = 0; 2530 1.2 christos do_cache = 1; 2531 1.2 christos 2532 1.2 christos if (!setup_ticket_test(stateful, idx, &sctx, &cctx)) 2533 1.2 christos goto end; 2534 1.2 christos 2535 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 2536 1.2 christos &clientssl, NULL, NULL))) 2537 1.2 christos goto end; 2538 1.2 christos 2539 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 2540 1.2 christos SSL_ERROR_NONE)) 2541 1.2 christos /* Check we got the number of tickets we were expecting */ 2542 1.2 christos || !TEST_int_eq(idx, new_called)) 2543 1.2 christos goto end; 2544 1.2 christos 2545 1.2 christos SSL_shutdown(clientssl); 2546 1.2 christos SSL_shutdown(serverssl); 2547 1.2 christos SSL_free(serverssl); 2548 1.2 christos SSL_free(clientssl); 2549 1.2 christos SSL_CTX_free(sctx); 2550 1.2 christos SSL_CTX_free(cctx); 2551 1.2 christos clientssl = serverssl = NULL; 2552 1.2 christos sctx = cctx = NULL; 2553 1.2 christos 2554 1.2 christos /* 2555 1.2 christos * Now we try to resume with the tickets we previously created. The 2556 1.2 christos * resumption attempt is expected to fail (because we're now using a new 2557 1.2 christos * SSL_CTX). We should see idx number of tickets issued again. 2558 1.2 christos */ 2559 1.2 christos 2560 1.2 christos /* Stop caching sessions - just count them */ 2561 1.2 christos do_cache = 0; 2562 1.2 christos 2563 1.2 christos if (!setup_ticket_test(stateful, idx, &sctx, &cctx)) 2564 1.2 christos goto end; 2565 1.2 christos 2566 1.2 christos if (!check_resumption(idx, sctx, cctx, 0)) 2567 1.2 christos goto end; 2568 1.2 christos 2569 1.2 christos /* Start again with caching sessions */ 2570 1.2 christos new_called = 0; 2571 1.2 christos do_cache = 1; 2572 1.2 christos SSL_CTX_free(sctx); 2573 1.2 christos SSL_CTX_free(cctx); 2574 1.2 christos sctx = cctx = NULL; 2575 1.2 christos 2576 1.2 christos if (!setup_ticket_test(stateful, idx, &sctx, &cctx)) 2577 1.2 christos goto end; 2578 1.2 christos 2579 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 2580 1.2 christos &clientssl, NULL, NULL))) 2581 1.2 christos goto end; 2582 1.2 christos 2583 1.2 christos SSL_set_post_handshake_auth(clientssl, 1); 2584 1.2 christos 2585 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 2586 1.2 christos SSL_ERROR_NONE)) 2587 1.2 christos /* Check we got the number of tickets we were expecting */ 2588 1.2 christos || !TEST_int_eq(idx, new_called)) 2589 1.2 christos goto end; 2590 1.2 christos 2591 1.2 christos /* After a post-handshake authentication we should get new tickets issued */ 2592 1.2 christos if (!post_handshake_verify(serverssl, clientssl) 2593 1.2 christos || !TEST_int_eq(idx * 2, new_called)) 2594 1.2 christos goto end; 2595 1.2 christos 2596 1.2 christos SSL_shutdown(clientssl); 2597 1.2 christos SSL_shutdown(serverssl); 2598 1.2 christos SSL_free(serverssl); 2599 1.2 christos SSL_free(clientssl); 2600 1.2 christos serverssl = clientssl = NULL; 2601 1.2 christos 2602 1.2 christos /* Stop caching sessions - just count them */ 2603 1.2 christos do_cache = 0; 2604 1.2 christos 2605 1.2 christos /* 2606 1.2 christos * Check we can resume with all the tickets we created. This time around the 2607 1.2 christos * resumptions should all be successful. 2608 1.2 christos */ 2609 1.2 christos if (!check_resumption(idx, sctx, cctx, 1)) 2610 1.2 christos goto end; 2611 1.2 christos 2612 1.2 christos testresult = 1; 2613 1.2 christos 2614 1.2 christos end: 2615 1.2 christos SSL_free(serverssl); 2616 1.2 christos SSL_free(clientssl); 2617 1.2 christos for (j = 0; j < OSSL_NELEM(sesscache); j++) { 2618 1.2 christos SSL_SESSION_free(sesscache[j]); 2619 1.2 christos sesscache[j] = NULL; 2620 1.2 christos } 2621 1.2 christos SSL_CTX_free(sctx); 2622 1.2 christos SSL_CTX_free(cctx); 2623 1.2 christos 2624 1.2 christos return testresult; 2625 1.2 christos } 2626 1.2 christos 2627 1.2 christos static int test_stateless_tickets(int idx) 2628 1.2 christos { 2629 1.2 christos return test_tickets(0, idx); 2630 1.2 christos } 2631 1.2 christos 2632 1.2 christos static int test_stateful_tickets(int idx) 2633 1.2 christos { 2634 1.2 christos return test_tickets(1, idx); 2635 1.2 christos } 2636 1.2 christos 2637 1.2 christos static int test_psk_tickets(void) 2638 1.2 christos { 2639 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 2640 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 2641 1.2 christos int testresult = 0; 2642 1.2 christos int sess_id_ctx = 1; 2643 1.2 christos 2644 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 2645 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 2646 1.2 christos &sctx, &cctx, NULL, NULL)) 2647 1.2 christos || !TEST_true(SSL_CTX_set_session_id_context(sctx, 2648 1.2 christos (void *)&sess_id_ctx, 2649 1.2 christos sizeof(sess_id_ctx)))) 2650 1.2 christos goto end; 2651 1.2 christos 2652 1.2 christos SSL_CTX_set_session_cache_mode(cctx, SSL_SESS_CACHE_CLIENT 2653 1.2 christos | SSL_SESS_CACHE_NO_INTERNAL_STORE); 2654 1.2 christos SSL_CTX_set_psk_use_session_callback(cctx, use_session_cb); 2655 1.2 christos SSL_CTX_set_psk_find_session_callback(sctx, find_session_cb); 2656 1.2 christos SSL_CTX_sess_set_new_cb(cctx, new_session_cb); 2657 1.2 christos use_session_cb_cnt = 0; 2658 1.2 christos find_session_cb_cnt = 0; 2659 1.2 christos srvid = pskid; 2660 1.2 christos new_called = 0; 2661 1.2 christos 2662 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 2663 1.2 christos NULL, NULL))) 2664 1.2 christos goto end; 2665 1.2 christos clientpsk = serverpsk = create_a_psk(clientssl, SHA384_DIGEST_LENGTH); 2666 1.2 christos if (!TEST_ptr(clientpsk)) 2667 1.2 christos goto end; 2668 1.2 christos SSL_SESSION_up_ref(clientpsk); 2669 1.2 christos 2670 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 2671 1.2 christos SSL_ERROR_NONE)) 2672 1.2 christos || !TEST_int_eq(1, find_session_cb_cnt) 2673 1.2 christos || !TEST_int_eq(1, use_session_cb_cnt) 2674 1.2 christos /* We should always get 1 ticket when using external PSK */ 2675 1.2 christos || !TEST_int_eq(1, new_called)) 2676 1.2 christos goto end; 2677 1.2 christos 2678 1.2 christos testresult = 1; 2679 1.2 christos 2680 1.2 christos end: 2681 1.2 christos SSL_free(serverssl); 2682 1.2 christos SSL_free(clientssl); 2683 1.2 christos SSL_CTX_free(sctx); 2684 1.2 christos SSL_CTX_free(cctx); 2685 1.2 christos SSL_SESSION_free(clientpsk); 2686 1.2 christos SSL_SESSION_free(serverpsk); 2687 1.2 christos clientpsk = serverpsk = NULL; 2688 1.2 christos 2689 1.2 christos return testresult; 2690 1.2 christos } 2691 1.2 christos 2692 1.2 christos static int test_extra_tickets(int idx) 2693 1.2 christos { 2694 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 2695 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 2696 1.2 christos BIO *bretry = BIO_new(bio_s_always_retry()); 2697 1.2 christos BIO *tmp = NULL; 2698 1.2 christos int testresult = 0; 2699 1.2 christos int stateful = 0; 2700 1.2 christos size_t nbytes; 2701 1.2 christos unsigned char c, buf[1]; 2702 1.2 christos 2703 1.2 christos new_called = 0; 2704 1.2 christos do_cache = 1; 2705 1.2 christos 2706 1.2 christos if (idx >= 3) { 2707 1.2 christos idx -= 3; 2708 1.2 christos stateful = 1; 2709 1.2 christos } 2710 1.2 christos 2711 1.2 christos if (!TEST_ptr(bretry) || !setup_ticket_test(stateful, idx, &sctx, &cctx)) 2712 1.2 christos goto end; 2713 1.2 christos SSL_CTX_sess_set_new_cb(sctx, new_session_cb); 2714 1.2 christos /* setup_ticket_test() uses new_cachesession_cb which we don't need. */ 2715 1.2 christos SSL_CTX_sess_set_new_cb(cctx, new_session_cb); 2716 1.2 christos 2717 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 2718 1.2 christos &clientssl, NULL, NULL))) 2719 1.2 christos goto end; 2720 1.2 christos 2721 1.2 christos /* 2722 1.2 christos * Note that we have new_session_cb on both sctx and cctx, so new_called is 2723 1.2 christos * incremented by both client and server. 2724 1.2 christos */ 2725 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 2726 1.2 christos SSL_ERROR_NONE)) 2727 1.2 christos /* Check we got the number of tickets we were expecting */ 2728 1.2 christos || !TEST_int_eq(idx * 2, new_called) 2729 1.2 christos || !TEST_true(SSL_new_session_ticket(serverssl)) 2730 1.2 christos || !TEST_true(SSL_new_session_ticket(serverssl)) 2731 1.2 christos || !TEST_int_eq(idx * 2, new_called)) 2732 1.2 christos goto end; 2733 1.2 christos 2734 1.2 christos /* Now try a (real) write to actually send the tickets */ 2735 1.2 christos c = '1'; 2736 1.2 christos if (!TEST_true(SSL_write_ex(serverssl, &c, 1, &nbytes)) 2737 1.2 christos || !TEST_size_t_eq(1, nbytes) 2738 1.2 christos || !TEST_int_eq(idx * 2 + 2, new_called) 2739 1.2 christos || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes)) 2740 1.2 christos || !TEST_int_eq(idx * 2 + 4, new_called) 2741 1.2 christos || !TEST_int_eq(sizeof(buf), nbytes) 2742 1.2 christos || !TEST_int_eq(c, buf[0]) 2743 1.2 christos || !TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes))) 2744 1.2 christos goto end; 2745 1.2 christos 2746 1.2 christos /* Try with only requesting one new ticket, too */ 2747 1.2 christos c = '2'; 2748 1.2 christos new_called = 0; 2749 1.2 christos if (!TEST_true(SSL_new_session_ticket(serverssl)) 2750 1.2 christos || !TEST_true(SSL_write_ex(serverssl, &c, sizeof(c), &nbytes)) 2751 1.2 christos || !TEST_size_t_eq(sizeof(c), nbytes) 2752 1.2 christos || !TEST_int_eq(1, new_called) 2753 1.2 christos || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes)) 2754 1.2 christos || !TEST_int_eq(2, new_called) 2755 1.2 christos || !TEST_size_t_eq(sizeof(buf), nbytes) 2756 1.2 christos || !TEST_int_eq(c, buf[0])) 2757 1.2 christos goto end; 2758 1.2 christos 2759 1.2 christos /* Do it again but use dummy writes to drive the ticket generation */ 2760 1.2 christos c = '3'; 2761 1.2 christos new_called = 0; 2762 1.2 christos if (!TEST_true(SSL_new_session_ticket(serverssl)) 2763 1.2 christos || !TEST_true(SSL_new_session_ticket(serverssl)) 2764 1.2 christos || !TEST_true(SSL_write_ex(serverssl, &c, 0, &nbytes)) 2765 1.2 christos || !TEST_size_t_eq(0, nbytes) 2766 1.2 christos || !TEST_int_eq(2, new_called) 2767 1.2 christos || !TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes)) 2768 1.2 christos || !TEST_int_eq(4, new_called)) 2769 1.2 christos goto end; 2770 1.2 christos 2771 1.2 christos /* Once more, but with SSL_do_handshake() to drive the ticket generation */ 2772 1.2 christos c = '4'; 2773 1.2 christos new_called = 0; 2774 1.2 christos if (!TEST_true(SSL_new_session_ticket(serverssl)) 2775 1.2 christos || !TEST_true(SSL_new_session_ticket(serverssl)) 2776 1.2 christos || !TEST_true(SSL_do_handshake(serverssl)) 2777 1.2 christos || !TEST_int_eq(2, new_called) 2778 1.2 christos || !TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes)) 2779 1.2 christos || !TEST_int_eq(4, new_called)) 2780 1.2 christos goto end; 2781 1.2 christos 2782 1.2 christos /* 2783 1.2 christos * Use the always-retry BIO to exercise the logic that forces ticket 2784 1.2 christos * generation to wait until a record boundary. 2785 1.2 christos */ 2786 1.2 christos c = '5'; 2787 1.2 christos new_called = 0; 2788 1.2 christos tmp = SSL_get_wbio(serverssl); 2789 1.2 christos if (!TEST_ptr(tmp) || !TEST_true(BIO_up_ref(tmp))) { 2790 1.2 christos tmp = NULL; 2791 1.2 christos goto end; 2792 1.2 christos } 2793 1.2 christos SSL_set0_wbio(serverssl, bretry); 2794 1.2 christos bretry = NULL; 2795 1.2 christos if (!TEST_false(SSL_write_ex(serverssl, &c, 1, &nbytes)) 2796 1.2 christos || !TEST_int_eq(SSL_get_error(serverssl, 0), SSL_ERROR_WANT_WRITE) 2797 1.2 christos || !TEST_size_t_eq(nbytes, 0)) 2798 1.2 christos goto end; 2799 1.2 christos /* Restore a BIO that will let the write succeed */ 2800 1.2 christos SSL_set0_wbio(serverssl, tmp); 2801 1.2 christos tmp = NULL; 2802 1.2 christos /* 2803 1.2 christos * These calls should just queue the request and not send anything 2804 1.2 christos * even if we explicitly try to hit the state machine. 2805 1.2 christos */ 2806 1.2 christos if (!TEST_true(SSL_new_session_ticket(serverssl)) 2807 1.2 christos || !TEST_true(SSL_new_session_ticket(serverssl)) 2808 1.2 christos || !TEST_int_eq(0, new_called) 2809 1.2 christos || !TEST_true(SSL_do_handshake(serverssl)) 2810 1.2 christos || !TEST_int_eq(0, new_called)) 2811 1.2 christos goto end; 2812 1.2 christos /* Re-do the write; still no tickets sent */ 2813 1.2 christos if (!TEST_true(SSL_write_ex(serverssl, &c, 1, &nbytes)) 2814 1.2 christos || !TEST_size_t_eq(1, nbytes) 2815 1.2 christos || !TEST_int_eq(0, new_called) 2816 1.2 christos || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes)) 2817 1.2 christos || !TEST_int_eq(0, new_called) 2818 1.2 christos || !TEST_int_eq(sizeof(buf), nbytes) 2819 1.2 christos || !TEST_int_eq(c, buf[0]) 2820 1.2 christos || !TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes))) 2821 1.2 christos goto end; 2822 1.2 christos /* Even trying to hit the state machine now will still not send tickets */ 2823 1.2 christos if (!TEST_true(SSL_do_handshake(serverssl)) 2824 1.2 christos || !TEST_int_eq(0, new_called)) 2825 1.2 christos goto end; 2826 1.2 christos /* Now the *next* write should send the tickets */ 2827 1.2 christos c = '6'; 2828 1.2 christos if (!TEST_true(SSL_write_ex(serverssl, &c, 1, &nbytes)) 2829 1.2 christos || !TEST_size_t_eq(1, nbytes) 2830 1.2 christos || !TEST_int_eq(2, new_called) 2831 1.2 christos || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes)) 2832 1.2 christos || !TEST_int_eq(4, new_called) 2833 1.2 christos || !TEST_int_eq(sizeof(buf), nbytes) 2834 1.2 christos || !TEST_int_eq(c, buf[0]) 2835 1.2 christos || !TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &nbytes))) 2836 1.2 christos goto end; 2837 1.2 christos 2838 1.2 christos SSL_shutdown(clientssl); 2839 1.2 christos SSL_shutdown(serverssl); 2840 1.2 christos testresult = 1; 2841 1.2 christos 2842 1.2 christos end: 2843 1.2 christos BIO_free(bretry); 2844 1.2 christos BIO_free(tmp); 2845 1.2 christos SSL_free(serverssl); 2846 1.2 christos SSL_free(clientssl); 2847 1.2 christos SSL_CTX_free(sctx); 2848 1.2 christos SSL_CTX_free(cctx); 2849 1.2 christos clientssl = serverssl = NULL; 2850 1.2 christos sctx = cctx = NULL; 2851 1.2 christos return testresult; 2852 1.2 christos } 2853 1.2 christos #endif 2854 1.2 christos 2855 1.2 christos #define USE_NULL 0 2856 1.2 christos #define USE_BIO_1 1 2857 1.2 christos #define USE_BIO_2 2 2858 1.2 christos #define USE_DEFAULT 3 2859 1.2 christos 2860 1.2 christos #define CONNTYPE_CONNECTION_SUCCESS 0 2861 1.2 christos #define CONNTYPE_CONNECTION_FAIL 1 2862 1.2 christos #define CONNTYPE_NO_CONNECTION 2 2863 1.2 christos 2864 1.2 christos #define TOTAL_NO_CONN_SSL_SET_BIO_TESTS (3 * 3 * 3 * 3) 2865 1.2 christos #define TOTAL_CONN_SUCCESS_SSL_SET_BIO_TESTS (2 * 2) 2866 1.2 christos #if !defined(OSSL_NO_USABLE_TLS1_3) && !defined(OPENSSL_NO_TLS1_2) 2867 1.2 christos # define TOTAL_CONN_FAIL_SSL_SET_BIO_TESTS (2 * 2) 2868 1.2 christos #else 2869 1.2 christos # define TOTAL_CONN_FAIL_SSL_SET_BIO_TESTS 0 2870 1.2 christos #endif 2871 1.2 christos 2872 1.2 christos #define TOTAL_SSL_SET_BIO_TESTS TOTAL_NO_CONN_SSL_SET_BIO_TESTS \ 2873 1.2 christos + TOTAL_CONN_SUCCESS_SSL_SET_BIO_TESTS \ 2874 1.2 christos + TOTAL_CONN_FAIL_SSL_SET_BIO_TESTS 2875 1.2 christos 2876 1.2 christos static void setupbio(BIO **res, BIO *bio1, BIO *bio2, int type) 2877 1.2 christos { 2878 1.2 christos switch (type) { 2879 1.2 christos case USE_NULL: 2880 1.2 christos *res = NULL; 2881 1.2 christos break; 2882 1.2 christos case USE_BIO_1: 2883 1.2 christos *res = bio1; 2884 1.2 christos break; 2885 1.2 christos case USE_BIO_2: 2886 1.2 christos *res = bio2; 2887 1.2 christos break; 2888 1.2 christos } 2889 1.2 christos } 2890 1.2 christos 2891 1.2 christos 2892 1.2 christos /* 2893 1.2 christos * Tests calls to SSL_set_bio() under various conditions. 2894 1.2 christos * 2895 1.2 christos * For the first 3 * 3 * 3 * 3 = 81 tests we do 2 calls to SSL_set_bio() with 2896 1.2 christos * various combinations of valid BIOs or NULL being set for the rbio/wbio. We 2897 1.2 christos * then do more tests where we create a successful connection first using our 2898 1.2 christos * standard connection setup functions, and then call SSL_set_bio() with 2899 1.2 christos * various combinations of valid BIOs or NULL. We then repeat these tests 2900 1.2 christos * following a failed connection. In this last case we are looking to check that 2901 1.2 christos * SSL_set_bio() functions correctly in the case where s->bbio is not NULL. 2902 1.2 christos */ 2903 1.2 christos static int test_ssl_set_bio(int idx) 2904 1.2 christos { 2905 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 2906 1.2 christos BIO *bio1 = NULL; 2907 1.2 christos BIO *bio2 = NULL; 2908 1.2 christos BIO *irbio = NULL, *iwbio = NULL, *nrbio = NULL, *nwbio = NULL; 2909 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 2910 1.2 christos int initrbio, initwbio, newrbio, newwbio, conntype; 2911 1.2 christos int testresult = 0; 2912 1.2 christos 2913 1.2 christos if (idx < TOTAL_NO_CONN_SSL_SET_BIO_TESTS) { 2914 1.2 christos initrbio = idx % 3; 2915 1.2 christos idx /= 3; 2916 1.2 christos initwbio = idx % 3; 2917 1.2 christos idx /= 3; 2918 1.2 christos newrbio = idx % 3; 2919 1.2 christos idx /= 3; 2920 1.2 christos newwbio = idx % 3; 2921 1.2 christos conntype = CONNTYPE_NO_CONNECTION; 2922 1.2 christos } else { 2923 1.2 christos idx -= TOTAL_NO_CONN_SSL_SET_BIO_TESTS; 2924 1.2 christos initrbio = initwbio = USE_DEFAULT; 2925 1.2 christos newrbio = idx % 2; 2926 1.2 christos idx /= 2; 2927 1.2 christos newwbio = idx % 2; 2928 1.2 christos idx /= 2; 2929 1.2 christos conntype = idx % 2; 2930 1.2 christos } 2931 1.2 christos 2932 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 2933 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 2934 1.2 christos &sctx, &cctx, cert, privkey))) 2935 1.2 christos goto end; 2936 1.2 christos 2937 1.2 christos if (conntype == CONNTYPE_CONNECTION_FAIL) { 2938 1.2 christos /* 2939 1.2 christos * We won't ever get here if either TLSv1.3 or TLSv1.2 is disabled 2940 1.2 christos * because we reduced the number of tests in the definition of 2941 1.2 christos * TOTAL_CONN_FAIL_SSL_SET_BIO_TESTS to avoid this scenario. By setting 2942 1.2 christos * mismatched protocol versions we will force a connection failure. 2943 1.2 christos */ 2944 1.2 christos SSL_CTX_set_min_proto_version(sctx, TLS1_3_VERSION); 2945 1.2 christos SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION); 2946 1.2 christos } 2947 1.2 christos 2948 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 2949 1.2 christos NULL, NULL))) 2950 1.2 christos goto end; 2951 1.2 christos 2952 1.2 christos if (initrbio == USE_BIO_1 2953 1.2 christos || initwbio == USE_BIO_1 2954 1.2 christos || newrbio == USE_BIO_1 2955 1.2 christos || newwbio == USE_BIO_1) { 2956 1.2 christos if (!TEST_ptr(bio1 = BIO_new(BIO_s_mem()))) 2957 1.2 christos goto end; 2958 1.2 christos } 2959 1.2 christos 2960 1.2 christos if (initrbio == USE_BIO_2 2961 1.2 christos || initwbio == USE_BIO_2 2962 1.2 christos || newrbio == USE_BIO_2 2963 1.2 christos || newwbio == USE_BIO_2) { 2964 1.2 christos if (!TEST_ptr(bio2 = BIO_new(BIO_s_mem()))) 2965 1.2 christos goto end; 2966 1.2 christos } 2967 1.2 christos 2968 1.2 christos if (initrbio != USE_DEFAULT) { 2969 1.2 christos setupbio(&irbio, bio1, bio2, initrbio); 2970 1.2 christos setupbio(&iwbio, bio1, bio2, initwbio); 2971 1.2 christos SSL_set_bio(clientssl, irbio, iwbio); 2972 1.2 christos 2973 1.2 christos /* 2974 1.2 christos * We want to maintain our own refs to these BIO, so do an up ref for 2975 1.2 christos * each BIO that will have ownership transferred in the SSL_set_bio() 2976 1.2 christos * call 2977 1.2 christos */ 2978 1.2 christos if (irbio != NULL) 2979 1.2 christos BIO_up_ref(irbio); 2980 1.2 christos if (iwbio != NULL && iwbio != irbio) 2981 1.2 christos BIO_up_ref(iwbio); 2982 1.2 christos } 2983 1.2 christos 2984 1.2 christos if (conntype != CONNTYPE_NO_CONNECTION 2985 1.2 christos && !TEST_true(create_ssl_connection(serverssl, clientssl, 2986 1.2 christos SSL_ERROR_NONE) 2987 1.2 christos == (conntype == CONNTYPE_CONNECTION_SUCCESS))) 2988 1.2 christos goto end; 2989 1.2 christos 2990 1.2 christos setupbio(&nrbio, bio1, bio2, newrbio); 2991 1.2 christos setupbio(&nwbio, bio1, bio2, newwbio); 2992 1.2 christos 2993 1.2 christos /* 2994 1.2 christos * We will (maybe) transfer ownership again so do more up refs. 2995 1.2 christos * SSL_set_bio() has some really complicated ownership rules where BIOs have 2996 1.2 christos * already been set! 2997 1.2 christos */ 2998 1.2 christos if (nrbio != NULL 2999 1.2 christos && nrbio != irbio 3000 1.2 christos && (nwbio != iwbio || nrbio != nwbio)) 3001 1.2 christos BIO_up_ref(nrbio); 3002 1.2 christos if (nwbio != NULL 3003 1.2 christos && nwbio != nrbio 3004 1.2 christos && (nwbio != iwbio || (nwbio == iwbio && irbio == iwbio))) 3005 1.2 christos BIO_up_ref(nwbio); 3006 1.2 christos 3007 1.2 christos SSL_set_bio(clientssl, nrbio, nwbio); 3008 1.2 christos 3009 1.2 christos testresult = 1; 3010 1.2 christos 3011 1.2 christos end: 3012 1.2 christos BIO_free(bio1); 3013 1.2 christos BIO_free(bio2); 3014 1.2 christos 3015 1.2 christos /* 3016 1.2 christos * This test is checking that the ref counting for SSL_set_bio is correct. 3017 1.2 christos * If we get here and we did too many frees then we will fail in the above 3018 1.2 christos * functions. 3019 1.2 christos */ 3020 1.2 christos SSL_free(serverssl); 3021 1.2 christos SSL_free(clientssl); 3022 1.2 christos SSL_CTX_free(sctx); 3023 1.2 christos SSL_CTX_free(cctx); 3024 1.2 christos return testresult; 3025 1.2 christos } 3026 1.2 christos 3027 1.2 christos typedef enum { NO_BIO_CHANGE, CHANGE_RBIO, CHANGE_WBIO } bio_change_t; 3028 1.2 christos 3029 1.2 christos static int execute_test_ssl_bio(int pop_ssl, bio_change_t change_bio) 3030 1.2 christos { 3031 1.2 christos BIO *sslbio = NULL, *membio1 = NULL, *membio2 = NULL; 3032 1.2 christos SSL_CTX *ctx; 3033 1.2 christos SSL *ssl = NULL; 3034 1.2 christos int testresult = 0; 3035 1.2 christos 3036 1.2 christos if (!TEST_ptr(ctx = SSL_CTX_new_ex(libctx, NULL, TLS_method())) 3037 1.2 christos || !TEST_ptr(ssl = SSL_new(ctx)) 3038 1.2 christos || !TEST_ptr(sslbio = BIO_new(BIO_f_ssl())) 3039 1.2 christos || !TEST_ptr(membio1 = BIO_new(BIO_s_mem()))) 3040 1.2 christos goto end; 3041 1.2 christos 3042 1.2 christos BIO_set_ssl(sslbio, ssl, BIO_CLOSE); 3043 1.2 christos 3044 1.2 christos /* 3045 1.2 christos * If anything goes wrong here then we could leak memory. 3046 1.2 christos */ 3047 1.2 christos BIO_push(sslbio, membio1); 3048 1.2 christos 3049 1.2 christos /* Verify changing the rbio/wbio directly does not cause leaks */ 3050 1.2 christos if (change_bio != NO_BIO_CHANGE) { 3051 1.2 christos if (!TEST_ptr(membio2 = BIO_new(BIO_s_mem()))) { 3052 1.2 christos ssl = NULL; 3053 1.2 christos goto end; 3054 1.2 christos } 3055 1.2 christos if (change_bio == CHANGE_RBIO) 3056 1.2 christos SSL_set0_rbio(ssl, membio2); 3057 1.2 christos else 3058 1.2 christos SSL_set0_wbio(ssl, membio2); 3059 1.2 christos } 3060 1.2 christos ssl = NULL; 3061 1.2 christos 3062 1.2 christos if (pop_ssl) 3063 1.2 christos BIO_pop(sslbio); 3064 1.2 christos else 3065 1.2 christos BIO_pop(membio1); 3066 1.2 christos 3067 1.2 christos testresult = 1; 3068 1.2 christos end: 3069 1.2 christos BIO_free(membio1); 3070 1.2 christos BIO_free(sslbio); 3071 1.2 christos SSL_free(ssl); 3072 1.2 christos SSL_CTX_free(ctx); 3073 1.2 christos 3074 1.2 christos return testresult; 3075 1.2 christos } 3076 1.2 christos 3077 1.2 christos static int test_ssl_bio_pop_next_bio(void) 3078 1.2 christos { 3079 1.2 christos return execute_test_ssl_bio(0, NO_BIO_CHANGE); 3080 1.2 christos } 3081 1.2 christos 3082 1.2 christos static int test_ssl_bio_pop_ssl_bio(void) 3083 1.2 christos { 3084 1.2 christos return execute_test_ssl_bio(1, NO_BIO_CHANGE); 3085 1.2 christos } 3086 1.2 christos 3087 1.2 christos static int test_ssl_bio_change_rbio(void) 3088 1.2 christos { 3089 1.2 christos return execute_test_ssl_bio(0, CHANGE_RBIO); 3090 1.2 christos } 3091 1.2 christos 3092 1.2 christos static int test_ssl_bio_change_wbio(void) 3093 1.2 christos { 3094 1.2 christos return execute_test_ssl_bio(0, CHANGE_WBIO); 3095 1.2 christos } 3096 1.2 christos 3097 1.2 christos #if !defined(OPENSSL_NO_TLS1_2) || defined(OSSL_NO_USABLE_TLS1_3) 3098 1.2 christos typedef struct { 3099 1.2 christos /* The list of sig algs */ 3100 1.2 christos const int *list; 3101 1.2 christos /* The length of the list */ 3102 1.2 christos size_t listlen; 3103 1.2 christos /* A sigalgs list in string format */ 3104 1.2 christos const char *liststr; 3105 1.2 christos /* Whether setting the list should succeed */ 3106 1.2 christos int valid; 3107 1.2 christos /* Whether creating a connection with the list should succeed */ 3108 1.2 christos int connsuccess; 3109 1.2 christos } sigalgs_list; 3110 1.2 christos 3111 1.2 christos static const int validlist1[] = {NID_sha256, EVP_PKEY_RSA}; 3112 1.2 christos # ifndef OPENSSL_NO_EC 3113 1.2 christos static const int validlist2[] = {NID_sha256, EVP_PKEY_RSA, NID_sha512, EVP_PKEY_EC}; 3114 1.2 christos static const int validlist3[] = {NID_sha512, EVP_PKEY_EC}; 3115 1.2 christos # endif 3116 1.2 christos static const int invalidlist1[] = {NID_undef, EVP_PKEY_RSA}; 3117 1.2 christos static const int invalidlist2[] = {NID_sha256, NID_undef}; 3118 1.2 christos static const int invalidlist3[] = {NID_sha256, EVP_PKEY_RSA, NID_sha256}; 3119 1.2 christos static const int invalidlist4[] = {NID_sha256}; 3120 1.2 christos static const sigalgs_list testsigalgs[] = { 3121 1.2 christos {validlist1, OSSL_NELEM(validlist1), NULL, 1, 1}, 3122 1.2 christos # ifndef OPENSSL_NO_EC 3123 1.2 christos {validlist2, OSSL_NELEM(validlist2), NULL, 1, 1}, 3124 1.2 christos {validlist3, OSSL_NELEM(validlist3), NULL, 1, 0}, 3125 1.2 christos # endif 3126 1.2 christos {NULL, 0, "RSA+SHA256", 1, 1}, 3127 1.2 christos # ifndef OPENSSL_NO_EC 3128 1.2 christos {NULL, 0, "RSA+SHA256:ECDSA+SHA512", 1, 1}, 3129 1.2 christos {NULL, 0, "ECDSA+SHA512", 1, 0}, 3130 1.2 christos # endif 3131 1.2 christos {invalidlist1, OSSL_NELEM(invalidlist1), NULL, 0, 0}, 3132 1.2 christos {invalidlist2, OSSL_NELEM(invalidlist2), NULL, 0, 0}, 3133 1.2 christos {invalidlist3, OSSL_NELEM(invalidlist3), NULL, 0, 0}, 3134 1.2 christos {invalidlist4, OSSL_NELEM(invalidlist4), NULL, 0, 0}, 3135 1.2 christos {NULL, 0, "RSA", 0, 0}, 3136 1.2 christos {NULL, 0, "SHA256", 0, 0}, 3137 1.2 christos {NULL, 0, "RSA+SHA256:SHA256", 0, 0}, 3138 1.2 christos {NULL, 0, "Invalid", 0, 0} 3139 1.2 christos }; 3140 1.2 christos 3141 1.2 christos static int test_set_sigalgs(int idx) 3142 1.2 christos { 3143 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 3144 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 3145 1.2 christos int testresult = 0; 3146 1.2 christos const sigalgs_list *curr; 3147 1.2 christos int testctx; 3148 1.2 christos 3149 1.2 christos /* Should never happen */ 3150 1.2 christos if (!TEST_size_t_le((size_t)idx, OSSL_NELEM(testsigalgs) * 2)) 3151 1.2 christos return 0; 3152 1.2 christos 3153 1.2 christos testctx = ((size_t)idx < OSSL_NELEM(testsigalgs)); 3154 1.2 christos curr = testctx ? &testsigalgs[idx] 3155 1.2 christos : &testsigalgs[idx - OSSL_NELEM(testsigalgs)]; 3156 1.2 christos 3157 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 3158 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 3159 1.2 christos &sctx, &cctx, cert, privkey))) 3160 1.2 christos return 0; 3161 1.2 christos 3162 1.2 christos SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION); 3163 1.2 christos 3164 1.2 christos if (testctx) { 3165 1.2 christos int ret; 3166 1.2 christos 3167 1.2 christos if (curr->list != NULL) 3168 1.2 christos ret = SSL_CTX_set1_sigalgs(cctx, curr->list, curr->listlen); 3169 1.2 christos else 3170 1.2 christos ret = SSL_CTX_set1_sigalgs_list(cctx, curr->liststr); 3171 1.2 christos 3172 1.2 christos if (!ret) { 3173 1.2 christos if (curr->valid) 3174 1.2 christos TEST_info("Failure setting sigalgs in SSL_CTX (%d)\n", idx); 3175 1.2 christos else 3176 1.2 christos testresult = 1; 3177 1.2 christos goto end; 3178 1.2 christos } 3179 1.2 christos if (!curr->valid) { 3180 1.2 christos TEST_info("Not-failed setting sigalgs in SSL_CTX (%d)\n", idx); 3181 1.2 christos goto end; 3182 1.2 christos } 3183 1.2 christos } 3184 1.2 christos 3185 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 3186 1.2 christos &clientssl, NULL, NULL))) 3187 1.2 christos goto end; 3188 1.2 christos 3189 1.2 christos if (!testctx) { 3190 1.2 christos int ret; 3191 1.2 christos 3192 1.2 christos if (curr->list != NULL) 3193 1.2 christos ret = SSL_set1_sigalgs(clientssl, curr->list, curr->listlen); 3194 1.2 christos else 3195 1.2 christos ret = SSL_set1_sigalgs_list(clientssl, curr->liststr); 3196 1.2 christos if (!ret) { 3197 1.2 christos if (curr->valid) 3198 1.2 christos TEST_info("Failure setting sigalgs in SSL (%d)\n", idx); 3199 1.2 christos else 3200 1.2 christos testresult = 1; 3201 1.2 christos goto end; 3202 1.2 christos } 3203 1.2 christos if (!curr->valid) 3204 1.2 christos goto end; 3205 1.2 christos } 3206 1.2 christos 3207 1.2 christos if (!TEST_int_eq(create_ssl_connection(serverssl, clientssl, 3208 1.2 christos SSL_ERROR_NONE), 3209 1.2 christos curr->connsuccess)) 3210 1.2 christos goto end; 3211 1.2 christos 3212 1.2 christos testresult = 1; 3213 1.2 christos 3214 1.2 christos end: 3215 1.2 christos SSL_free(serverssl); 3216 1.2 christos SSL_free(clientssl); 3217 1.2 christos SSL_CTX_free(sctx); 3218 1.2 christos SSL_CTX_free(cctx); 3219 1.2 christos 3220 1.2 christos return testresult; 3221 1.2 christos } 3222 1.2 christos #endif 3223 1.2 christos 3224 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 3225 1.2 christos static int psk_client_cb_cnt = 0; 3226 1.2 christos static int psk_server_cb_cnt = 0; 3227 1.2 christos 3228 1.2 christos static int use_session_cb(SSL *ssl, const EVP_MD *md, const unsigned char **id, 3229 1.2 christos size_t *idlen, SSL_SESSION **sess) 3230 1.2 christos { 3231 1.2 christos switch (++use_session_cb_cnt) { 3232 1.2 christos case 1: 3233 1.2 christos /* The first call should always have a NULL md */ 3234 1.2 christos if (md != NULL) 3235 1.2 christos return 0; 3236 1.2 christos break; 3237 1.2 christos 3238 1.2 christos case 2: 3239 1.2 christos /* The second call should always have an md */ 3240 1.2 christos if (md == NULL) 3241 1.2 christos return 0; 3242 1.2 christos break; 3243 1.2 christos 3244 1.2 christos default: 3245 1.2 christos /* We should only be called a maximum of twice */ 3246 1.2 christos return 0; 3247 1.2 christos } 3248 1.2 christos 3249 1.2 christos if (clientpsk != NULL) 3250 1.2 christos SSL_SESSION_up_ref(clientpsk); 3251 1.2 christos 3252 1.2 christos *sess = clientpsk; 3253 1.2 christos *id = (const unsigned char *)pskid; 3254 1.2 christos *idlen = strlen(pskid); 3255 1.2 christos 3256 1.2 christos return 1; 3257 1.2 christos } 3258 1.2 christos 3259 1.2 christos #ifndef OPENSSL_NO_PSK 3260 1.2 christos static unsigned int psk_client_cb(SSL *ssl, const char *hint, char *id, 3261 1.2 christos unsigned int max_id_len, 3262 1.2 christos unsigned char *psk, 3263 1.2 christos unsigned int max_psk_len) 3264 1.2 christos { 3265 1.2 christos unsigned int psklen = 0; 3266 1.2 christos 3267 1.2 christos psk_client_cb_cnt++; 3268 1.2 christos 3269 1.2 christos if (strlen(pskid) + 1 > max_id_len) 3270 1.2 christos return 0; 3271 1.2 christos 3272 1.2 christos /* We should only ever be called a maximum of twice per connection */ 3273 1.2 christos if (psk_client_cb_cnt > 2) 3274 1.2 christos return 0; 3275 1.2 christos 3276 1.2 christos if (clientpsk == NULL) 3277 1.2 christos return 0; 3278 1.2 christos 3279 1.2 christos /* We'll reuse the PSK we set up for TLSv1.3 */ 3280 1.2 christos if (SSL_SESSION_get_master_key(clientpsk, NULL, 0) > max_psk_len) 3281 1.2 christos return 0; 3282 1.2 christos psklen = SSL_SESSION_get_master_key(clientpsk, psk, max_psk_len); 3283 1.2 christos strncpy(id, pskid, max_id_len); 3284 1.2 christos 3285 1.2 christos return psklen; 3286 1.2 christos } 3287 1.2 christos #endif /* OPENSSL_NO_PSK */ 3288 1.2 christos 3289 1.2 christos static int find_session_cb(SSL *ssl, const unsigned char *identity, 3290 1.2 christos size_t identity_len, SSL_SESSION **sess) 3291 1.2 christos { 3292 1.2 christos find_session_cb_cnt++; 3293 1.2 christos 3294 1.2 christos /* We should only ever be called a maximum of twice per connection */ 3295 1.2 christos if (find_session_cb_cnt > 2) 3296 1.2 christos return 0; 3297 1.2 christos 3298 1.2 christos if (serverpsk == NULL) 3299 1.2 christos return 0; 3300 1.2 christos 3301 1.2 christos /* Identity should match that set by the client */ 3302 1.2 christos if (strlen(srvid) != identity_len 3303 1.2 christos || strncmp(srvid, (const char *)identity, identity_len) != 0) { 3304 1.2 christos /* No PSK found, continue but without a PSK */ 3305 1.2 christos *sess = NULL; 3306 1.2 christos return 1; 3307 1.2 christos } 3308 1.2 christos 3309 1.2 christos SSL_SESSION_up_ref(serverpsk); 3310 1.2 christos *sess = serverpsk; 3311 1.2 christos 3312 1.2 christos return 1; 3313 1.2 christos } 3314 1.2 christos 3315 1.2 christos #ifndef OPENSSL_NO_PSK 3316 1.2 christos static unsigned int psk_server_cb(SSL *ssl, const char *identity, 3317 1.2 christos unsigned char *psk, unsigned int max_psk_len) 3318 1.2 christos { 3319 1.2 christos unsigned int psklen = 0; 3320 1.2 christos 3321 1.2 christos psk_server_cb_cnt++; 3322 1.2 christos 3323 1.2 christos /* We should only ever be called a maximum of twice per connection */ 3324 1.2 christos if (find_session_cb_cnt > 2) 3325 1.2 christos return 0; 3326 1.2 christos 3327 1.2 christos if (serverpsk == NULL) 3328 1.2 christos return 0; 3329 1.2 christos 3330 1.2 christos /* Identity should match that set by the client */ 3331 1.2 christos if (strcmp(srvid, identity) != 0) { 3332 1.2 christos return 0; 3333 1.2 christos } 3334 1.2 christos 3335 1.2 christos /* We'll reuse the PSK we set up for TLSv1.3 */ 3336 1.2 christos if (SSL_SESSION_get_master_key(serverpsk, NULL, 0) > max_psk_len) 3337 1.2 christos return 0; 3338 1.2 christos psklen = SSL_SESSION_get_master_key(serverpsk, psk, max_psk_len); 3339 1.2 christos 3340 1.2 christos return psklen; 3341 1.2 christos } 3342 1.2 christos #endif /* OPENSSL_NO_PSK */ 3343 1.2 christos 3344 1.2 christos #define MSG1 "Hello" 3345 1.2 christos #define MSG2 "World." 3346 1.2 christos #define MSG3 "This" 3347 1.2 christos #define MSG4 "is" 3348 1.2 christos #define MSG5 "a" 3349 1.2 christos #define MSG6 "test" 3350 1.2 christos #define MSG7 "message." 3351 1.2 christos 3352 1.2 christos #define TLS13_AES_128_GCM_SHA256_BYTES ((const unsigned char *)"\x13\x01") 3353 1.2 christos #define TLS13_AES_256_GCM_SHA384_BYTES ((const unsigned char *)"\x13\x02") 3354 1.2 christos #define TLS13_CHACHA20_POLY1305_SHA256_BYTES ((const unsigned char *)"\x13\x03") 3355 1.2 christos #define TLS13_AES_128_CCM_SHA256_BYTES ((const unsigned char *)"\x13\x04") 3356 1.2 christos #define TLS13_AES_128_CCM_8_SHA256_BYTES ((const unsigned char *)"\x13\05") 3357 1.2 christos 3358 1.2 christos 3359 1.2 christos static SSL_SESSION *create_a_psk(SSL *ssl, size_t mdsize) 3360 1.2 christos { 3361 1.2 christos const SSL_CIPHER *cipher = NULL; 3362 1.2 christos const unsigned char key[] = { 3363 1.2 christos 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 3364 1.2 christos 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 3365 1.2 christos 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 3366 1.2 christos 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 3367 1.2 christos 0x2c, 0x2d, 0x2e, 0x2f /* SHA384_DIGEST_LENGTH bytes */ 3368 1.2 christos }; 3369 1.2 christos SSL_SESSION *sess = NULL; 3370 1.2 christos 3371 1.2 christos if (mdsize == SHA384_DIGEST_LENGTH) { 3372 1.2 christos cipher = SSL_CIPHER_find(ssl, TLS13_AES_256_GCM_SHA384_BYTES); 3373 1.2 christos } else if (mdsize == SHA256_DIGEST_LENGTH) { 3374 1.2 christos /* 3375 1.2 christos * Any ciphersuite using SHA256 will do - it will be compatible with 3376 1.2 christos * the actual ciphersuite selected as long as it too is based on SHA256 3377 1.2 christos */ 3378 1.2 christos cipher = SSL_CIPHER_find(ssl, TLS13_AES_128_GCM_SHA256_BYTES); 3379 1.2 christos } else { 3380 1.2 christos /* Should not happen */ 3381 1.2 christos return NULL; 3382 1.2 christos } 3383 1.2 christos sess = SSL_SESSION_new(); 3384 1.2 christos if (!TEST_ptr(sess) 3385 1.2 christos || !TEST_ptr(cipher) 3386 1.2 christos || !TEST_true(SSL_SESSION_set1_master_key(sess, key, mdsize)) 3387 1.2 christos || !TEST_true(SSL_SESSION_set_cipher(sess, cipher)) 3388 1.2 christos || !TEST_true( 3389 1.2 christos SSL_SESSION_set_protocol_version(sess, 3390 1.2 christos TLS1_3_VERSION))) { 3391 1.2 christos SSL_SESSION_free(sess); 3392 1.2 christos return NULL; 3393 1.2 christos } 3394 1.2 christos return sess; 3395 1.2 christos } 3396 1.2 christos 3397 1.2 christos /* 3398 1.2 christos * Helper method to setup objects for early data test. Caller frees objects on 3399 1.2 christos * error. 3400 1.2 christos */ 3401 1.2 christos static int setupearly_data_test(SSL_CTX **cctx, SSL_CTX **sctx, SSL **clientssl, 3402 1.2 christos SSL **serverssl, SSL_SESSION **sess, int idx, 3403 1.2 christos size_t mdsize) 3404 1.2 christos { 3405 1.2 christos if (*sctx == NULL 3406 1.2 christos && !TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 3407 1.2 christos TLS_client_method(), 3408 1.2 christos TLS1_VERSION, 0, 3409 1.2 christos sctx, cctx, cert, privkey))) 3410 1.2 christos return 0; 3411 1.2 christos 3412 1.2 christos if (!TEST_true(SSL_CTX_set_max_early_data(*sctx, SSL3_RT_MAX_PLAIN_LENGTH))) 3413 1.2 christos return 0; 3414 1.2 christos 3415 1.2 christos if (idx == 1) { 3416 1.2 christos /* When idx == 1 we repeat the tests with read_ahead set */ 3417 1.2 christos SSL_CTX_set_read_ahead(*cctx, 1); 3418 1.2 christos SSL_CTX_set_read_ahead(*sctx, 1); 3419 1.2 christos } else if (idx == 2) { 3420 1.2 christos /* When idx == 2 we are doing early_data with a PSK. Set up callbacks */ 3421 1.2 christos SSL_CTX_set_psk_use_session_callback(*cctx, use_session_cb); 3422 1.2 christos SSL_CTX_set_psk_find_session_callback(*sctx, find_session_cb); 3423 1.2 christos use_session_cb_cnt = 0; 3424 1.2 christos find_session_cb_cnt = 0; 3425 1.2 christos srvid = pskid; 3426 1.2 christos } 3427 1.2 christos 3428 1.2 christos if (!TEST_true(create_ssl_objects(*sctx, *cctx, serverssl, clientssl, 3429 1.2 christos NULL, NULL))) 3430 1.2 christos return 0; 3431 1.2 christos 3432 1.2 christos /* 3433 1.2 christos * For one of the run throughs (doesn't matter which one), we'll try sending 3434 1.2 christos * some SNI data in the initial ClientHello. This will be ignored (because 3435 1.2 christos * there is no SNI cb set up by the server), so it should not impact 3436 1.2 christos * early_data. 3437 1.2 christos */ 3438 1.2 christos if (idx == 1 3439 1.2 christos && !TEST_true(SSL_set_tlsext_host_name(*clientssl, "localhost"))) 3440 1.2 christos return 0; 3441 1.2 christos 3442 1.2 christos if (idx == 2) { 3443 1.2 christos clientpsk = create_a_psk(*clientssl, mdsize); 3444 1.2 christos if (!TEST_ptr(clientpsk) 3445 1.2 christos /* 3446 1.2 christos * We just choose an arbitrary value for max_early_data which 3447 1.2 christos * should be big enough for testing purposes. 3448 1.2 christos */ 3449 1.2 christos || !TEST_true(SSL_SESSION_set_max_early_data(clientpsk, 3450 1.2 christos 0x100)) 3451 1.2 christos || !TEST_true(SSL_SESSION_up_ref(clientpsk))) { 3452 1.2 christos SSL_SESSION_free(clientpsk); 3453 1.2 christos clientpsk = NULL; 3454 1.2 christos return 0; 3455 1.2 christos } 3456 1.2 christos serverpsk = clientpsk; 3457 1.2 christos 3458 1.2 christos if (sess != NULL) { 3459 1.2 christos if (!TEST_true(SSL_SESSION_up_ref(clientpsk))) { 3460 1.2 christos SSL_SESSION_free(clientpsk); 3461 1.2 christos SSL_SESSION_free(serverpsk); 3462 1.2 christos clientpsk = serverpsk = NULL; 3463 1.2 christos return 0; 3464 1.2 christos } 3465 1.2 christos *sess = clientpsk; 3466 1.2 christos } 3467 1.2 christos return 1; 3468 1.2 christos } 3469 1.2 christos 3470 1.2 christos if (sess == NULL) 3471 1.2 christos return 1; 3472 1.2 christos 3473 1.2 christos if (!TEST_true(create_ssl_connection(*serverssl, *clientssl, 3474 1.2 christos SSL_ERROR_NONE))) 3475 1.2 christos return 0; 3476 1.2 christos 3477 1.2 christos *sess = SSL_get1_session(*clientssl); 3478 1.2 christos SSL_shutdown(*clientssl); 3479 1.2 christos SSL_shutdown(*serverssl); 3480 1.2 christos SSL_free(*serverssl); 3481 1.2 christos SSL_free(*clientssl); 3482 1.2 christos *serverssl = *clientssl = NULL; 3483 1.2 christos 3484 1.2 christos if (!TEST_true(create_ssl_objects(*sctx, *cctx, serverssl, 3485 1.2 christos clientssl, NULL, NULL)) 3486 1.2 christos || !TEST_true(SSL_set_session(*clientssl, *sess))) 3487 1.2 christos return 0; 3488 1.2 christos 3489 1.2 christos return 1; 3490 1.2 christos } 3491 1.2 christos 3492 1.2 christos static int check_early_data_timeout(time_t timer) 3493 1.2 christos { 3494 1.2 christos int res = 0; 3495 1.2 christos 3496 1.2 christos /* 3497 1.2 christos * Early data is time sensitive. We have an approx 8 second allowance 3498 1.2 christos * between writing the early data and reading it. If we exceed that time 3499 1.2 christos * then this test will fail. This can sometimes (rarely) occur in normal CI 3500 1.2 christos * operation. We can try and detect this and just ignore the result of this 3501 1.2 christos * test if it has taken too long. We assume anything over 7 seconds is too 3502 1.2 christos * long 3503 1.2 christos */ 3504 1.2 christos timer = time(NULL) - timer; 3505 1.2 christos if (timer >= 7) 3506 1.2 christos res = TEST_skip("Test took too long, ignoring result"); 3507 1.2 christos 3508 1.2 christos return res; 3509 1.2 christos } 3510 1.2 christos 3511 1.2 christos static int test_early_data_read_write(int idx) 3512 1.2 christos { 3513 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 3514 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 3515 1.2 christos int testresult = 0; 3516 1.2 christos SSL_SESSION *sess = NULL; 3517 1.2 christos unsigned char buf[20], data[1024]; 3518 1.2 christos size_t readbytes, written, eoedlen, rawread, rawwritten; 3519 1.2 christos BIO *rbio; 3520 1.2 christos time_t timer; 3521 1.2 christos 3522 1.2 christos if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl, 3523 1.2 christos &serverssl, &sess, idx, 3524 1.2 christos SHA384_DIGEST_LENGTH))) 3525 1.2 christos goto end; 3526 1.2 christos 3527 1.2 christos /* Write and read some early data */ 3528 1.2 christos timer = time(NULL); 3529 1.2 christos if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1), 3530 1.2 christos &written)) 3531 1.2 christos || !TEST_size_t_eq(written, strlen(MSG1))) 3532 1.2 christos goto end; 3533 1.2 christos 3534 1.2 christos if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 3535 1.2 christos &readbytes), 3536 1.2 christos SSL_READ_EARLY_DATA_SUCCESS)) { 3537 1.2 christos testresult = check_early_data_timeout(timer); 3538 1.2 christos goto end; 3539 1.2 christos } 3540 1.2 christos 3541 1.2 christos if (!TEST_mem_eq(MSG1, readbytes, buf, strlen(MSG1)) 3542 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(serverssl), 3543 1.2 christos SSL_EARLY_DATA_ACCEPTED)) 3544 1.2 christos goto end; 3545 1.2 christos 3546 1.2 christos /* 3547 1.2 christos * Server should be able to write data, and client should be able to 3548 1.2 christos * read it. 3549 1.2 christos */ 3550 1.2 christos if (!TEST_true(SSL_write_early_data(serverssl, MSG2, strlen(MSG2), 3551 1.2 christos &written)) 3552 1.2 christos || !TEST_size_t_eq(written, strlen(MSG2)) 3553 1.2 christos || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes)) 3554 1.2 christos || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2))) 3555 1.2 christos goto end; 3556 1.2 christos 3557 1.2 christos /* Even after reading normal data, client should be able write early data */ 3558 1.2 christos if (!TEST_true(SSL_write_early_data(clientssl, MSG3, strlen(MSG3), 3559 1.2 christos &written)) 3560 1.2 christos || !TEST_size_t_eq(written, strlen(MSG3))) 3561 1.2 christos goto end; 3562 1.2 christos 3563 1.2 christos /* Server should still be able read early data after writing data */ 3564 1.2 christos if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 3565 1.2 christos &readbytes), 3566 1.2 christos SSL_READ_EARLY_DATA_SUCCESS) 3567 1.2 christos || !TEST_mem_eq(buf, readbytes, MSG3, strlen(MSG3))) 3568 1.2 christos goto end; 3569 1.2 christos 3570 1.2 christos /* Write more data from server and read it from client */ 3571 1.2 christos if (!TEST_true(SSL_write_early_data(serverssl, MSG4, strlen(MSG4), 3572 1.2 christos &written)) 3573 1.2 christos || !TEST_size_t_eq(written, strlen(MSG4)) 3574 1.2 christos || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes)) 3575 1.2 christos || !TEST_mem_eq(buf, readbytes, MSG4, strlen(MSG4))) 3576 1.2 christos goto end; 3577 1.2 christos 3578 1.2 christos /* 3579 1.2 christos * If client writes normal data it should mean writing early data is no 3580 1.2 christos * longer possible. 3581 1.2 christos */ 3582 1.2 christos if (!TEST_true(SSL_write_ex(clientssl, MSG5, strlen(MSG5), &written)) 3583 1.2 christos || !TEST_size_t_eq(written, strlen(MSG5)) 3584 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(clientssl), 3585 1.2 christos SSL_EARLY_DATA_ACCEPTED)) 3586 1.2 christos goto end; 3587 1.2 christos 3588 1.2 christos /* 3589 1.2 christos * At this point the client has written EndOfEarlyData, ClientFinished and 3590 1.2 christos * normal (fully protected) data. We are going to cause a delay between the 3591 1.2 christos * arrival of EndOfEarlyData and ClientFinished. We read out all the data 3592 1.2 christos * in the read BIO, and then just put back the EndOfEarlyData message. 3593 1.2 christos */ 3594 1.2 christos rbio = SSL_get_rbio(serverssl); 3595 1.2 christos if (!TEST_true(BIO_read_ex(rbio, data, sizeof(data), &rawread)) 3596 1.2 christos || !TEST_size_t_lt(rawread, sizeof(data)) 3597 1.2 christos || !TEST_size_t_gt(rawread, SSL3_RT_HEADER_LENGTH)) 3598 1.2 christos goto end; 3599 1.2 christos 3600 1.2 christos /* Record length is in the 4th and 5th bytes of the record header */ 3601 1.2 christos eoedlen = SSL3_RT_HEADER_LENGTH + (data[3] << 8 | data[4]); 3602 1.2 christos if (!TEST_true(BIO_write_ex(rbio, data, eoedlen, &rawwritten)) 3603 1.2 christos || !TEST_size_t_eq(rawwritten, eoedlen)) 3604 1.2 christos goto end; 3605 1.2 christos 3606 1.2 christos /* Server should be told that there is no more early data */ 3607 1.2 christos if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 3608 1.2 christos &readbytes), 3609 1.2 christos SSL_READ_EARLY_DATA_FINISH) 3610 1.2 christos || !TEST_size_t_eq(readbytes, 0)) 3611 1.2 christos goto end; 3612 1.2 christos 3613 1.2 christos /* 3614 1.2 christos * Server has not finished init yet, so should still be able to write early 3615 1.2 christos * data. 3616 1.2 christos */ 3617 1.2 christos if (!TEST_true(SSL_write_early_data(serverssl, MSG6, strlen(MSG6), 3618 1.2 christos &written)) 3619 1.2 christos || !TEST_size_t_eq(written, strlen(MSG6))) 3620 1.2 christos goto end; 3621 1.2 christos 3622 1.2 christos /* Push the ClientFinished and the normal data back into the server rbio */ 3623 1.2 christos if (!TEST_true(BIO_write_ex(rbio, data + eoedlen, rawread - eoedlen, 3624 1.2 christos &rawwritten)) 3625 1.2 christos || !TEST_size_t_eq(rawwritten, rawread - eoedlen)) 3626 1.2 christos goto end; 3627 1.2 christos 3628 1.2 christos /* Server should be able to read normal data */ 3629 1.2 christos if (!TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes)) 3630 1.2 christos || !TEST_size_t_eq(readbytes, strlen(MSG5))) 3631 1.2 christos goto end; 3632 1.2 christos 3633 1.2 christos /* Client and server should not be able to write/read early data now */ 3634 1.2 christos if (!TEST_false(SSL_write_early_data(clientssl, MSG6, strlen(MSG6), 3635 1.2 christos &written))) 3636 1.2 christos goto end; 3637 1.2 christos ERR_clear_error(); 3638 1.2 christos if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 3639 1.2 christos &readbytes), 3640 1.2 christos SSL_READ_EARLY_DATA_ERROR)) 3641 1.2 christos goto end; 3642 1.2 christos ERR_clear_error(); 3643 1.2 christos 3644 1.2 christos /* Client should be able to read the data sent by the server */ 3645 1.2 christos if (!TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes)) 3646 1.2 christos || !TEST_mem_eq(buf, readbytes, MSG6, strlen(MSG6))) 3647 1.2 christos goto end; 3648 1.2 christos 3649 1.2 christos /* 3650 1.2 christos * Make sure we process the two NewSessionTickets. These arrive 3651 1.2 christos * post-handshake. We attempt reads which we do not expect to return any 3652 1.2 christos * data. 3653 1.2 christos */ 3654 1.2 christos if (!TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes)) 3655 1.2 christos || !TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), 3656 1.2 christos &readbytes))) 3657 1.2 christos goto end; 3658 1.2 christos 3659 1.2 christos /* Server should be able to write normal data */ 3660 1.2 christos if (!TEST_true(SSL_write_ex(serverssl, MSG7, strlen(MSG7), &written)) 3661 1.2 christos || !TEST_size_t_eq(written, strlen(MSG7)) 3662 1.2 christos || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes)) 3663 1.2 christos || !TEST_mem_eq(buf, readbytes, MSG7, strlen(MSG7))) 3664 1.2 christos goto end; 3665 1.2 christos 3666 1.2 christos SSL_SESSION_free(sess); 3667 1.2 christos sess = SSL_get1_session(clientssl); 3668 1.2 christos use_session_cb_cnt = 0; 3669 1.2 christos find_session_cb_cnt = 0; 3670 1.2 christos 3671 1.2 christos SSL_shutdown(clientssl); 3672 1.2 christos SSL_shutdown(serverssl); 3673 1.2 christos SSL_free(serverssl); 3674 1.2 christos SSL_free(clientssl); 3675 1.2 christos serverssl = clientssl = NULL; 3676 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 3677 1.2 christos &clientssl, NULL, NULL)) 3678 1.2 christos || !TEST_true(SSL_set_session(clientssl, sess))) 3679 1.2 christos goto end; 3680 1.2 christos 3681 1.2 christos /* Write and read some early data */ 3682 1.2 christos if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1), 3683 1.2 christos &written)) 3684 1.2 christos || !TEST_size_t_eq(written, strlen(MSG1)) 3685 1.2 christos || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 3686 1.2 christos &readbytes), 3687 1.2 christos SSL_READ_EARLY_DATA_SUCCESS) 3688 1.2 christos || !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1))) 3689 1.2 christos goto end; 3690 1.2 christos 3691 1.2 christos if (!TEST_int_gt(SSL_connect(clientssl), 0) 3692 1.2 christos || !TEST_int_gt(SSL_accept(serverssl), 0)) 3693 1.2 christos goto end; 3694 1.2 christos 3695 1.2 christos /* Client and server should not be able to write/read early data now */ 3696 1.2 christos if (!TEST_false(SSL_write_early_data(clientssl, MSG6, strlen(MSG6), 3697 1.2 christos &written))) 3698 1.2 christos goto end; 3699 1.2 christos ERR_clear_error(); 3700 1.2 christos if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 3701 1.2 christos &readbytes), 3702 1.2 christos SSL_READ_EARLY_DATA_ERROR)) 3703 1.2 christos goto end; 3704 1.2 christos ERR_clear_error(); 3705 1.2 christos 3706 1.2 christos /* Client and server should be able to write/read normal data */ 3707 1.2 christos if (!TEST_true(SSL_write_ex(clientssl, MSG5, strlen(MSG5), &written)) 3708 1.2 christos || !TEST_size_t_eq(written, strlen(MSG5)) 3709 1.2 christos || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes)) 3710 1.2 christos || !TEST_size_t_eq(readbytes, strlen(MSG5))) 3711 1.2 christos goto end; 3712 1.2 christos 3713 1.2 christos testresult = 1; 3714 1.2 christos 3715 1.2 christos end: 3716 1.2 christos SSL_SESSION_free(sess); 3717 1.2 christos SSL_SESSION_free(clientpsk); 3718 1.2 christos SSL_SESSION_free(serverpsk); 3719 1.2 christos clientpsk = serverpsk = NULL; 3720 1.2 christos SSL_free(serverssl); 3721 1.2 christos SSL_free(clientssl); 3722 1.2 christos SSL_CTX_free(sctx); 3723 1.2 christos SSL_CTX_free(cctx); 3724 1.2 christos return testresult; 3725 1.2 christos } 3726 1.2 christos 3727 1.2 christos static int allow_ed_cb_called = 0; 3728 1.2 christos 3729 1.2 christos static int allow_early_data_cb(SSL *s, void *arg) 3730 1.2 christos { 3731 1.2 christos int *usecb = (int *)arg; 3732 1.2 christos 3733 1.2 christos allow_ed_cb_called++; 3734 1.2 christos 3735 1.2 christos if (*usecb == 1) 3736 1.2 christos return 0; 3737 1.2 christos 3738 1.2 christos return 1; 3739 1.2 christos } 3740 1.2 christos 3741 1.2 christos /* 3742 1.2 christos * idx == 0: Standard early_data setup 3743 1.2 christos * idx == 1: early_data setup using read_ahead 3744 1.2 christos * usecb == 0: Don't use a custom early data callback 3745 1.2 christos * usecb == 1: Use a custom early data callback and reject the early data 3746 1.2 christos * usecb == 2: Use a custom early data callback and accept the early data 3747 1.2 christos * confopt == 0: Configure anti-replay directly 3748 1.2 christos * confopt == 1: Configure anti-replay using SSL_CONF 3749 1.2 christos */ 3750 1.2 christos static int test_early_data_replay_int(int idx, int usecb, int confopt) 3751 1.2 christos { 3752 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 3753 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 3754 1.2 christos int testresult = 0; 3755 1.2 christos SSL_SESSION *sess = NULL; 3756 1.2 christos size_t readbytes, written; 3757 1.2 christos unsigned char buf[20]; 3758 1.2 christos time_t timer; 3759 1.2 christos 3760 1.2 christos allow_ed_cb_called = 0; 3761 1.2 christos 3762 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 3763 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 3764 1.2 christos &sctx, &cctx, cert, privkey))) 3765 1.2 christos return 0; 3766 1.2 christos 3767 1.2 christos if (usecb > 0) { 3768 1.2 christos if (confopt == 0) { 3769 1.2 christos SSL_CTX_set_options(sctx, SSL_OP_NO_ANTI_REPLAY); 3770 1.2 christos } else { 3771 1.2 christos SSL_CONF_CTX *confctx = SSL_CONF_CTX_new(); 3772 1.2 christos 3773 1.2 christos if (!TEST_ptr(confctx)) 3774 1.2 christos goto end; 3775 1.2 christos SSL_CONF_CTX_set_flags(confctx, SSL_CONF_FLAG_FILE 3776 1.2 christos | SSL_CONF_FLAG_SERVER); 3777 1.2 christos SSL_CONF_CTX_set_ssl_ctx(confctx, sctx); 3778 1.2 christos if (!TEST_int_eq(SSL_CONF_cmd(confctx, "Options", "-AntiReplay"), 3779 1.2 christos 2)) { 3780 1.2 christos SSL_CONF_CTX_free(confctx); 3781 1.2 christos goto end; 3782 1.2 christos } 3783 1.2 christos SSL_CONF_CTX_free(confctx); 3784 1.2 christos } 3785 1.2 christos SSL_CTX_set_allow_early_data_cb(sctx, allow_early_data_cb, &usecb); 3786 1.2 christos } 3787 1.2 christos 3788 1.2 christos if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl, 3789 1.2 christos &serverssl, &sess, idx, 3790 1.2 christos SHA384_DIGEST_LENGTH))) 3791 1.2 christos goto end; 3792 1.2 christos 3793 1.2 christos /* 3794 1.2 christos * The server is configured to accept early data. Create a connection to 3795 1.2 christos * "use up" the ticket 3796 1.2 christos */ 3797 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)) 3798 1.2 christos || !TEST_true(SSL_session_reused(clientssl))) 3799 1.2 christos goto end; 3800 1.2 christos 3801 1.2 christos SSL_shutdown(clientssl); 3802 1.2 christos SSL_shutdown(serverssl); 3803 1.2 christos SSL_free(serverssl); 3804 1.2 christos SSL_free(clientssl); 3805 1.2 christos serverssl = clientssl = NULL; 3806 1.2 christos 3807 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 3808 1.2 christos &clientssl, NULL, NULL)) 3809 1.2 christos || !TEST_true(SSL_set_session(clientssl, sess))) 3810 1.2 christos goto end; 3811 1.2 christos 3812 1.2 christos /* Write and read some early data */ 3813 1.2 christos timer = time(NULL); 3814 1.2 christos if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1), 3815 1.2 christos &written)) 3816 1.2 christos || !TEST_size_t_eq(written, strlen(MSG1))) 3817 1.2 christos goto end; 3818 1.2 christos 3819 1.2 christos if (usecb <= 1) { 3820 1.2 christos if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 3821 1.2 christos &readbytes), 3822 1.2 christos SSL_READ_EARLY_DATA_FINISH) 3823 1.2 christos /* 3824 1.2 christos * The ticket was reused, so the we should have rejected the 3825 1.2 christos * early data 3826 1.2 christos */ 3827 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(serverssl), 3828 1.2 christos SSL_EARLY_DATA_REJECTED)) 3829 1.2 christos goto end; 3830 1.2 christos } else { 3831 1.2 christos /* In this case the callback decides to accept the early data */ 3832 1.2 christos if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 3833 1.2 christos &readbytes), 3834 1.2 christos SSL_READ_EARLY_DATA_SUCCESS)) { 3835 1.2 christos testresult = check_early_data_timeout(timer); 3836 1.2 christos goto end; 3837 1.2 christos } 3838 1.2 christos if (!TEST_mem_eq(MSG1, strlen(MSG1), buf, readbytes) 3839 1.2 christos /* 3840 1.2 christos * Server will have sent its flight so client can now send 3841 1.2 christos * end of early data and complete its half of the handshake 3842 1.2 christos */ 3843 1.2 christos || !TEST_int_gt(SSL_connect(clientssl), 0) 3844 1.2 christos || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 3845 1.2 christos &readbytes), 3846 1.2 christos SSL_READ_EARLY_DATA_FINISH) 3847 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(serverssl), 3848 1.2 christos SSL_EARLY_DATA_ACCEPTED)) 3849 1.2 christos goto end; 3850 1.2 christos } 3851 1.2 christos 3852 1.2 christos /* Complete the connection */ 3853 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)) 3854 1.2 christos || !TEST_int_eq(SSL_session_reused(clientssl), (usecb > 0) ? 1 : 0) 3855 1.2 christos || !TEST_int_eq(allow_ed_cb_called, usecb > 0 ? 1 : 0)) 3856 1.2 christos goto end; 3857 1.2 christos 3858 1.2 christos testresult = 1; 3859 1.2 christos 3860 1.2 christos end: 3861 1.2 christos SSL_SESSION_free(sess); 3862 1.2 christos SSL_SESSION_free(clientpsk); 3863 1.2 christos SSL_SESSION_free(serverpsk); 3864 1.2 christos clientpsk = serverpsk = NULL; 3865 1.2 christos SSL_free(serverssl); 3866 1.2 christos SSL_free(clientssl); 3867 1.2 christos SSL_CTX_free(sctx); 3868 1.2 christos SSL_CTX_free(cctx); 3869 1.2 christos return testresult; 3870 1.2 christos } 3871 1.2 christos 3872 1.2 christos static int test_early_data_replay(int idx) 3873 1.2 christos { 3874 1.2 christos int ret = 1, usecb, confopt; 3875 1.2 christos 3876 1.2 christos for (usecb = 0; usecb < 3; usecb++) { 3877 1.2 christos for (confopt = 0; confopt < 2; confopt++) 3878 1.2 christos ret &= test_early_data_replay_int(idx, usecb, confopt); 3879 1.2 christos } 3880 1.2 christos 3881 1.2 christos return ret; 3882 1.2 christos } 3883 1.2 christos 3884 1.2 christos static const char *ciphersuites[] = { 3885 1.2 christos "TLS_AES_128_CCM_8_SHA256", 3886 1.2 christos "TLS_AES_128_GCM_SHA256", 3887 1.2 christos "TLS_AES_256_GCM_SHA384", 3888 1.2 christos "TLS_AES_128_CCM_SHA256", 3889 1.2 christos #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) 3890 1.2 christos "TLS_CHACHA20_POLY1305_SHA256" 3891 1.2 christos #endif 3892 1.2 christos }; 3893 1.2 christos 3894 1.2 christos /* 3895 1.2 christos * Helper function to test that a server attempting to read early data can 3896 1.2 christos * handle a connection from a client where the early data should be skipped. 3897 1.2 christos * testtype: 0 == No HRR 3898 1.2 christos * testtype: 1 == HRR 3899 1.2 christos * testtype: 2 == HRR, invalid early_data sent after HRR 3900 1.2 christos * testtype: 3 == recv_max_early_data set to 0 3901 1.2 christos */ 3902 1.2 christos static int early_data_skip_helper(int testtype, int cipher, int idx) 3903 1.2 christos { 3904 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 3905 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 3906 1.2 christos int testresult = 0; 3907 1.2 christos SSL_SESSION *sess = NULL; 3908 1.2 christos unsigned char buf[20]; 3909 1.2 christos size_t readbytes, written; 3910 1.2 christos 3911 1.2 christos if (is_fips && cipher == 4) 3912 1.2 christos return 1; 3913 1.2 christos 3914 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 3915 1.2 christos TLS_client_method(), 3916 1.2 christos TLS1_VERSION, 0, 3917 1.2 christos &sctx, &cctx, cert, privkey))) 3918 1.2 christos goto end; 3919 1.2 christos 3920 1.2 christos if (cipher == 0) { 3921 1.2 christos SSL_CTX_set_security_level(sctx, 0); 3922 1.2 christos SSL_CTX_set_security_level(cctx, 0); 3923 1.2 christos } 3924 1.2 christos 3925 1.2 christos if (!TEST_true(SSL_CTX_set_ciphersuites(sctx, ciphersuites[cipher])) 3926 1.2 christos || !TEST_true(SSL_CTX_set_ciphersuites(cctx, ciphersuites[cipher]))) 3927 1.2 christos goto end; 3928 1.2 christos 3929 1.2 christos if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl, 3930 1.2 christos &serverssl, &sess, idx, 3931 1.2 christos cipher == 2 ? SHA384_DIGEST_LENGTH 3932 1.2 christos : SHA256_DIGEST_LENGTH))) 3933 1.2 christos goto end; 3934 1.2 christos 3935 1.2 christos if (testtype == 1 || testtype == 2) { 3936 1.2 christos /* Force an HRR to occur */ 3937 1.2 christos #if defined(OPENSSL_NO_EC) 3938 1.2 christos if (!TEST_true(SSL_set1_groups_list(serverssl, "ffdhe3072"))) 3939 1.2 christos goto end; 3940 1.2 christos #else 3941 1.2 christos if (!TEST_true(SSL_set1_groups_list(serverssl, "P-384"))) 3942 1.2 christos goto end; 3943 1.2 christos #endif 3944 1.2 christos } else if (idx == 2) { 3945 1.2 christos /* 3946 1.2 christos * We force early_data rejection by ensuring the PSK identity is 3947 1.2 christos * unrecognised 3948 1.2 christos */ 3949 1.2 christos srvid = "Dummy Identity"; 3950 1.2 christos } else { 3951 1.2 christos /* 3952 1.2 christos * Deliberately corrupt the creation time. We take 20 seconds off the 3953 1.2 christos * time. It could be any value as long as it is not within tolerance. 3954 1.2 christos * This should mean the ticket is rejected. 3955 1.2 christos */ 3956 1.2 christos if (!TEST_true(SSL_SESSION_set_time(sess, (long)(time(NULL) - 20)))) 3957 1.2 christos goto end; 3958 1.2 christos } 3959 1.2 christos 3960 1.2 christos if (testtype == 3 3961 1.2 christos && !TEST_true(SSL_set_recv_max_early_data(serverssl, 0))) 3962 1.2 christos goto end; 3963 1.2 christos 3964 1.2 christos /* Write some early data */ 3965 1.2 christos if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1), 3966 1.2 christos &written)) 3967 1.2 christos || !TEST_size_t_eq(written, strlen(MSG1))) 3968 1.2 christos goto end; 3969 1.2 christos 3970 1.2 christos /* Server should reject the early data */ 3971 1.2 christos if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 3972 1.2 christos &readbytes), 3973 1.2 christos SSL_READ_EARLY_DATA_FINISH) 3974 1.2 christos || !TEST_size_t_eq(readbytes, 0) 3975 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(serverssl), 3976 1.2 christos SSL_EARLY_DATA_REJECTED)) 3977 1.2 christos goto end; 3978 1.2 christos 3979 1.2 christos switch (testtype) { 3980 1.2 christos case 0: 3981 1.2 christos /* Nothing to do */ 3982 1.2 christos break; 3983 1.2 christos 3984 1.2 christos case 1: 3985 1.2 christos /* 3986 1.2 christos * Finish off the handshake. We perform the same writes and reads as 3987 1.2 christos * further down but we expect them to fail due to the incomplete 3988 1.2 christos * handshake. 3989 1.2 christos */ 3990 1.2 christos if (!TEST_false(SSL_write_ex(clientssl, MSG2, strlen(MSG2), &written)) 3991 1.2 christos || !TEST_false(SSL_read_ex(serverssl, buf, sizeof(buf), 3992 1.2 christos &readbytes))) 3993 1.2 christos goto end; 3994 1.2 christos break; 3995 1.2 christos 3996 1.2 christos case 2: 3997 1.2 christos { 3998 1.2 christos BIO *wbio = SSL_get_wbio(clientssl); 3999 1.2 christos /* A record that will appear as bad early_data */ 4000 1.2 christos const unsigned char bad_early_data[] = { 4001 1.2 christos 0x17, 0x03, 0x03, 0x00, 0x01, 0x00 4002 1.2 christos }; 4003 1.2 christos 4004 1.2 christos /* 4005 1.2 christos * We force the client to attempt a write. This will fail because 4006 1.2 christos * we're still in the handshake. It will cause the second 4007 1.2 christos * ClientHello to be sent. 4008 1.2 christos */ 4009 1.2 christos if (!TEST_false(SSL_write_ex(clientssl, MSG2, strlen(MSG2), 4010 1.2 christos &written))) 4011 1.2 christos goto end; 4012 1.2 christos 4013 1.2 christos /* 4014 1.2 christos * Inject some early_data after the second ClientHello. This should 4015 1.2 christos * cause the server to fail 4016 1.2 christos */ 4017 1.2 christos if (!TEST_true(BIO_write_ex(wbio, bad_early_data, 4018 1.2 christos sizeof(bad_early_data), &written))) 4019 1.2 christos goto end; 4020 1.2 christos } 4021 1.2 christos /* fallthrough */ 4022 1.2 christos 4023 1.2 christos case 3: 4024 1.2 christos /* 4025 1.2 christos * This client has sent more early_data than we are willing to skip 4026 1.2 christos * (case 3) or sent invalid early_data (case 2) so the connection should 4027 1.2 christos * abort. 4028 1.2 christos */ 4029 1.2 christos if (!TEST_false(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes)) 4030 1.2 christos || !TEST_int_eq(SSL_get_error(serverssl, 0), SSL_ERROR_SSL)) 4031 1.2 christos goto end; 4032 1.2 christos 4033 1.2 christos /* Connection has failed - nothing more to do */ 4034 1.2 christos testresult = 1; 4035 1.2 christos goto end; 4036 1.2 christos 4037 1.2 christos default: 4038 1.2 christos TEST_error("Invalid test type"); 4039 1.2 christos goto end; 4040 1.2 christos } 4041 1.2 christos 4042 1.2 christos ERR_clear_error(); 4043 1.2 christos /* 4044 1.2 christos * Should be able to send normal data despite rejection of early data. The 4045 1.2 christos * early_data should be skipped. 4046 1.2 christos */ 4047 1.2 christos if (!TEST_true(SSL_write_ex(clientssl, MSG2, strlen(MSG2), &written)) 4048 1.2 christos || !TEST_size_t_eq(written, strlen(MSG2)) 4049 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(clientssl), 4050 1.2 christos SSL_EARLY_DATA_REJECTED) 4051 1.2 christos || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes)) 4052 1.2 christos || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2))) 4053 1.2 christos goto end; 4054 1.2 christos 4055 1.2 christos /* 4056 1.2 christos * Failure to decrypt early data records should not leave spurious errors 4057 1.2 christos * on the error stack 4058 1.2 christos */ 4059 1.2 christos if (!TEST_long_eq(ERR_peek_error(), 0)) 4060 1.2 christos goto end; 4061 1.2 christos 4062 1.2 christos testresult = 1; 4063 1.2 christos 4064 1.2 christos end: 4065 1.2 christos SSL_SESSION_free(clientpsk); 4066 1.2 christos SSL_SESSION_free(serverpsk); 4067 1.2 christos clientpsk = serverpsk = NULL; 4068 1.2 christos SSL_SESSION_free(sess); 4069 1.2 christos SSL_free(serverssl); 4070 1.2 christos SSL_free(clientssl); 4071 1.2 christos SSL_CTX_free(sctx); 4072 1.2 christos SSL_CTX_free(cctx); 4073 1.2 christos return testresult; 4074 1.2 christos } 4075 1.2 christos 4076 1.2 christos /* 4077 1.2 christos * Test that a server attempting to read early data can handle a connection 4078 1.2 christos * from a client where the early data is not acceptable. 4079 1.2 christos */ 4080 1.2 christos static int test_early_data_skip(int idx) 4081 1.2 christos { 4082 1.2 christos return early_data_skip_helper(0, 4083 1.2 christos idx % OSSL_NELEM(ciphersuites), 4084 1.2 christos idx / OSSL_NELEM(ciphersuites)); 4085 1.2 christos } 4086 1.2 christos 4087 1.2 christos /* 4088 1.2 christos * Test that a server attempting to read early data can handle a connection 4089 1.2 christos * from a client where an HRR occurs. 4090 1.2 christos */ 4091 1.2 christos static int test_early_data_skip_hrr(int idx) 4092 1.2 christos { 4093 1.2 christos return early_data_skip_helper(1, 4094 1.2 christos idx % OSSL_NELEM(ciphersuites), 4095 1.2 christos idx / OSSL_NELEM(ciphersuites)); 4096 1.2 christos } 4097 1.2 christos 4098 1.2 christos /* 4099 1.2 christos * Test that a server attempting to read early data can handle a connection 4100 1.2 christos * from a client where an HRR occurs and correctly fails if early_data is sent 4101 1.2 christos * after the HRR 4102 1.2 christos */ 4103 1.2 christos static int test_early_data_skip_hrr_fail(int idx) 4104 1.2 christos { 4105 1.2 christos return early_data_skip_helper(2, 4106 1.2 christos idx % OSSL_NELEM(ciphersuites), 4107 1.2 christos idx / OSSL_NELEM(ciphersuites)); 4108 1.2 christos } 4109 1.2 christos 4110 1.2 christos /* 4111 1.2 christos * Test that a server attempting to read early data will abort if it tries to 4112 1.2 christos * skip over too much. 4113 1.2 christos */ 4114 1.2 christos static int test_early_data_skip_abort(int idx) 4115 1.2 christos { 4116 1.2 christos return early_data_skip_helper(3, 4117 1.2 christos idx % OSSL_NELEM(ciphersuites), 4118 1.2 christos idx / OSSL_NELEM(ciphersuites)); 4119 1.2 christos } 4120 1.2 christos 4121 1.2 christos /* 4122 1.2 christos * Test that a server attempting to read early data can handle a connection 4123 1.2 christos * from a client that doesn't send any. 4124 1.2 christos */ 4125 1.2 christos static int test_early_data_not_sent(int idx) 4126 1.2 christos { 4127 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 4128 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 4129 1.2 christos int testresult = 0; 4130 1.2 christos SSL_SESSION *sess = NULL; 4131 1.2 christos unsigned char buf[20]; 4132 1.2 christos size_t readbytes, written; 4133 1.2 christos 4134 1.2 christos if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl, 4135 1.2 christos &serverssl, &sess, idx, 4136 1.2 christos SHA384_DIGEST_LENGTH))) 4137 1.2 christos goto end; 4138 1.2 christos 4139 1.2 christos /* Write some data - should block due to handshake with server */ 4140 1.2 christos SSL_set_connect_state(clientssl); 4141 1.2 christos if (!TEST_false(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written))) 4142 1.2 christos goto end; 4143 1.2 christos 4144 1.2 christos /* Server should detect that early data has not been sent */ 4145 1.2 christos if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 4146 1.2 christos &readbytes), 4147 1.2 christos SSL_READ_EARLY_DATA_FINISH) 4148 1.2 christos || !TEST_size_t_eq(readbytes, 0) 4149 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(serverssl), 4150 1.2 christos SSL_EARLY_DATA_NOT_SENT) 4151 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(clientssl), 4152 1.2 christos SSL_EARLY_DATA_NOT_SENT)) 4153 1.2 christos goto end; 4154 1.2 christos 4155 1.2 christos /* Continue writing the message we started earlier */ 4156 1.2 christos if (!TEST_true(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written)) 4157 1.2 christos || !TEST_size_t_eq(written, strlen(MSG1)) 4158 1.2 christos || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes)) 4159 1.2 christos || !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1)) 4160 1.2 christos || !SSL_write_ex(serverssl, MSG2, strlen(MSG2), &written) 4161 1.2 christos || !TEST_size_t_eq(written, strlen(MSG2))) 4162 1.2 christos goto end; 4163 1.2 christos 4164 1.2 christos if (!TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes)) 4165 1.2 christos || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2))) 4166 1.2 christos goto end; 4167 1.2 christos 4168 1.2 christos testresult = 1; 4169 1.2 christos 4170 1.2 christos end: 4171 1.2 christos SSL_SESSION_free(sess); 4172 1.2 christos SSL_SESSION_free(clientpsk); 4173 1.2 christos SSL_SESSION_free(serverpsk); 4174 1.2 christos clientpsk = serverpsk = NULL; 4175 1.2 christos SSL_free(serverssl); 4176 1.2 christos SSL_free(clientssl); 4177 1.2 christos SSL_CTX_free(sctx); 4178 1.2 christos SSL_CTX_free(cctx); 4179 1.2 christos return testresult; 4180 1.2 christos } 4181 1.2 christos 4182 1.2 christos static const char *servalpn; 4183 1.2 christos 4184 1.2 christos static int alpn_select_cb(SSL *ssl, const unsigned char **out, 4185 1.2 christos unsigned char *outlen, const unsigned char *in, 4186 1.2 christos unsigned int inlen, void *arg) 4187 1.2 christos { 4188 1.2 christos unsigned int protlen = 0; 4189 1.2 christos const unsigned char *prot; 4190 1.2 christos 4191 1.2 christos for (prot = in; prot < in + inlen; prot += protlen) { 4192 1.2 christos protlen = *prot++; 4193 1.2 christos if (in + inlen < prot + protlen) 4194 1.2 christos return SSL_TLSEXT_ERR_NOACK; 4195 1.2 christos 4196 1.2 christos if (protlen == strlen(servalpn) 4197 1.2 christos && memcmp(prot, servalpn, protlen) == 0) { 4198 1.2 christos *out = prot; 4199 1.2 christos *outlen = protlen; 4200 1.2 christos return SSL_TLSEXT_ERR_OK; 4201 1.2 christos } 4202 1.2 christos } 4203 1.2 christos 4204 1.2 christos return SSL_TLSEXT_ERR_NOACK; 4205 1.2 christos } 4206 1.2 christos 4207 1.2 christos /* Test that a PSK can be used to send early_data */ 4208 1.2 christos static int test_early_data_psk(int idx) 4209 1.2 christos { 4210 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 4211 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 4212 1.2 christos int testresult = 0; 4213 1.2 christos SSL_SESSION *sess = NULL; 4214 1.2 christos unsigned char alpnlist[] = { 4215 1.2 christos 0x08, 'g', 'o', 'o', 'd', 'a', 'l', 'p', 'n', 0x07, 'b', 'a', 'd', 'a', 4216 1.2 christos 'l', 'p', 'n' 4217 1.2 christos }; 4218 1.2 christos #define GOODALPNLEN 9 4219 1.2 christos #define BADALPNLEN 8 4220 1.2 christos #define GOODALPN (alpnlist) 4221 1.2 christos #define BADALPN (alpnlist + GOODALPNLEN) 4222 1.2 christos int err = 0; 4223 1.2 christos unsigned char buf[20]; 4224 1.2 christos size_t readbytes, written; 4225 1.2 christos int readearlyres = SSL_READ_EARLY_DATA_SUCCESS, connectres = 1; 4226 1.2 christos int edstatus = SSL_EARLY_DATA_ACCEPTED; 4227 1.2 christos 4228 1.2 christos /* We always set this up with a final parameter of "2" for PSK */ 4229 1.2 christos if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl, 4230 1.2 christos &serverssl, &sess, 2, 4231 1.2 christos SHA384_DIGEST_LENGTH))) 4232 1.2 christos goto end; 4233 1.2 christos 4234 1.2 christos servalpn = "goodalpn"; 4235 1.2 christos 4236 1.2 christos /* 4237 1.2 christos * Note: There is no test for inconsistent SNI with late client detection. 4238 1.2 christos * This is because servers do not acknowledge SNI even if they are using 4239 1.2 christos * it in a resumption handshake - so it is not actually possible for a 4240 1.2 christos * client to detect a problem. 4241 1.2 christos */ 4242 1.2 christos switch (idx) { 4243 1.2 christos case 0: 4244 1.2 christos /* Set inconsistent SNI (early client detection) */ 4245 1.2 christos err = SSL_R_INCONSISTENT_EARLY_DATA_SNI; 4246 1.2 christos if (!TEST_true(SSL_SESSION_set1_hostname(sess, "goodhost")) 4247 1.2 christos || !TEST_true(SSL_set_tlsext_host_name(clientssl, "badhost"))) 4248 1.2 christos goto end; 4249 1.2 christos break; 4250 1.2 christos 4251 1.2 christos case 1: 4252 1.2 christos /* Set inconsistent ALPN (early client detection) */ 4253 1.2 christos err = SSL_R_INCONSISTENT_EARLY_DATA_ALPN; 4254 1.2 christos /* SSL_set_alpn_protos returns 0 for success and 1 for failure */ 4255 1.2 christos if (!TEST_true(SSL_SESSION_set1_alpn_selected(sess, GOODALPN, 4256 1.2 christos GOODALPNLEN)) 4257 1.2 christos || !TEST_false(SSL_set_alpn_protos(clientssl, BADALPN, 4258 1.2 christos BADALPNLEN))) 4259 1.2 christos goto end; 4260 1.2 christos break; 4261 1.2 christos 4262 1.2 christos case 2: 4263 1.2 christos /* 4264 1.2 christos * Set invalid protocol version. Technically this affects PSKs without 4265 1.2 christos * early_data too, but we test it here because it is similar to the 4266 1.2 christos * SNI/ALPN consistency tests. 4267 1.2 christos */ 4268 1.2 christos err = SSL_R_BAD_PSK; 4269 1.2 christos if (!TEST_true(SSL_SESSION_set_protocol_version(sess, TLS1_2_VERSION))) 4270 1.2 christos goto end; 4271 1.2 christos break; 4272 1.2 christos 4273 1.2 christos case 3: 4274 1.2 christos /* 4275 1.2 christos * Set inconsistent SNI (server side). In this case the connection 4276 1.2 christos * will succeed and accept early_data. In TLSv1.3 on the server side SNI 4277 1.2 christos * is associated with each handshake - not the session. Therefore it 4278 1.2 christos * should not matter that we used a different server name last time. 4279 1.2 christos */ 4280 1.2 christos SSL_SESSION_free(serverpsk); 4281 1.2 christos serverpsk = SSL_SESSION_dup(clientpsk); 4282 1.2 christos if (!TEST_ptr(serverpsk) 4283 1.2 christos || !TEST_true(SSL_SESSION_set1_hostname(serverpsk, "badhost"))) 4284 1.2 christos goto end; 4285 1.2 christos /* Fall through */ 4286 1.2 christos case 4: 4287 1.2 christos /* Set consistent SNI */ 4288 1.2 christos if (!TEST_true(SSL_SESSION_set1_hostname(sess, "goodhost")) 4289 1.2 christos || !TEST_true(SSL_set_tlsext_host_name(clientssl, "goodhost")) 4290 1.2 christos || !TEST_true(SSL_CTX_set_tlsext_servername_callback(sctx, 4291 1.2 christos hostname_cb))) 4292 1.2 christos goto end; 4293 1.2 christos break; 4294 1.2 christos 4295 1.2 christos case 5: 4296 1.2 christos /* 4297 1.2 christos * Set inconsistent ALPN (server detected). In this case the connection 4298 1.2 christos * will succeed but reject early_data. 4299 1.2 christos */ 4300 1.2 christos servalpn = "badalpn"; 4301 1.2 christos edstatus = SSL_EARLY_DATA_REJECTED; 4302 1.2 christos readearlyres = SSL_READ_EARLY_DATA_FINISH; 4303 1.2 christos /* Fall through */ 4304 1.2 christos case 6: 4305 1.2 christos /* 4306 1.2 christos * Set consistent ALPN. 4307 1.2 christos * SSL_set_alpn_protos returns 0 for success and 1 for failure. It 4308 1.2 christos * accepts a list of protos (each one length prefixed). 4309 1.2 christos * SSL_set1_alpn_selected accepts a single protocol (not length 4310 1.2 christos * prefixed) 4311 1.2 christos */ 4312 1.2 christos if (!TEST_true(SSL_SESSION_set1_alpn_selected(sess, GOODALPN + 1, 4313 1.2 christos GOODALPNLEN - 1)) 4314 1.2 christos || !TEST_false(SSL_set_alpn_protos(clientssl, GOODALPN, 4315 1.2 christos GOODALPNLEN))) 4316 1.2 christos goto end; 4317 1.2 christos 4318 1.2 christos SSL_CTX_set_alpn_select_cb(sctx, alpn_select_cb, NULL); 4319 1.2 christos break; 4320 1.2 christos 4321 1.2 christos case 7: 4322 1.2 christos /* Set inconsistent ALPN (late client detection) */ 4323 1.2 christos SSL_SESSION_free(serverpsk); 4324 1.2 christos serverpsk = SSL_SESSION_dup(clientpsk); 4325 1.2 christos if (!TEST_ptr(serverpsk) 4326 1.2 christos || !TEST_true(SSL_SESSION_set1_alpn_selected(clientpsk, 4327 1.2 christos BADALPN + 1, 4328 1.2 christos BADALPNLEN - 1)) 4329 1.2 christos || !TEST_true(SSL_SESSION_set1_alpn_selected(serverpsk, 4330 1.2 christos GOODALPN + 1, 4331 1.2 christos GOODALPNLEN - 1)) 4332 1.2 christos || !TEST_false(SSL_set_alpn_protos(clientssl, alpnlist, 4333 1.2 christos sizeof(alpnlist)))) 4334 1.2 christos goto end; 4335 1.2 christos SSL_CTX_set_alpn_select_cb(sctx, alpn_select_cb, NULL); 4336 1.2 christos edstatus = SSL_EARLY_DATA_ACCEPTED; 4337 1.2 christos readearlyres = SSL_READ_EARLY_DATA_SUCCESS; 4338 1.2 christos /* SSL_connect() call should fail */ 4339 1.2 christos connectres = -1; 4340 1.2 christos break; 4341 1.2 christos 4342 1.2 christos default: 4343 1.2 christos TEST_error("Bad test index"); 4344 1.2 christos goto end; 4345 1.2 christos } 4346 1.2 christos 4347 1.2 christos SSL_set_connect_state(clientssl); 4348 1.2 christos if (err != 0) { 4349 1.2 christos if (!TEST_false(SSL_write_early_data(clientssl, MSG1, strlen(MSG1), 4350 1.2 christos &written)) 4351 1.2 christos || !TEST_int_eq(SSL_get_error(clientssl, 0), SSL_ERROR_SSL) 4352 1.2 christos || !TEST_int_eq(ERR_GET_REASON(ERR_get_error()), err)) 4353 1.2 christos goto end; 4354 1.2 christos } else { 4355 1.2 christos time_t timer = time(NULL); 4356 1.2 christos 4357 1.2 christos if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1), 4358 1.2 christos &written))) 4359 1.2 christos goto end; 4360 1.2 christos 4361 1.2 christos if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 4362 1.2 christos &readbytes), readearlyres)) { 4363 1.2 christos testresult = check_early_data_timeout(timer); 4364 1.2 christos goto end; 4365 1.2 christos } 4366 1.2 christos 4367 1.2 christos if ((readearlyres == SSL_READ_EARLY_DATA_SUCCESS 4368 1.2 christos && !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1))) 4369 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(serverssl), edstatus) 4370 1.2 christos || !TEST_int_eq(SSL_connect(clientssl), connectres)) 4371 1.2 christos goto end; 4372 1.2 christos } 4373 1.2 christos 4374 1.2 christos testresult = 1; 4375 1.2 christos 4376 1.2 christos end: 4377 1.2 christos SSL_SESSION_free(sess); 4378 1.2 christos SSL_SESSION_free(clientpsk); 4379 1.2 christos SSL_SESSION_free(serverpsk); 4380 1.2 christos clientpsk = serverpsk = NULL; 4381 1.2 christos SSL_free(serverssl); 4382 1.2 christos SSL_free(clientssl); 4383 1.2 christos SSL_CTX_free(sctx); 4384 1.2 christos SSL_CTX_free(cctx); 4385 1.2 christos return testresult; 4386 1.2 christos } 4387 1.2 christos 4388 1.2 christos /* 4389 1.2 christos * Test TLSv1.3 PSK can be used to send early_data with all 5 ciphersuites 4390 1.2 christos * idx == 0: Test with TLS1_3_RFC_AES_128_GCM_SHA256 4391 1.2 christos * idx == 1: Test with TLS1_3_RFC_AES_256_GCM_SHA384 4392 1.2 christos * idx == 2: Test with TLS1_3_RFC_CHACHA20_POLY1305_SHA256, 4393 1.2 christos * idx == 3: Test with TLS1_3_RFC_AES_128_CCM_SHA256 4394 1.2 christos * idx == 4: Test with TLS1_3_RFC_AES_128_CCM_8_SHA256 4395 1.2 christos */ 4396 1.2 christos static int test_early_data_psk_with_all_ciphers(int idx) 4397 1.2 christos { 4398 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 4399 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 4400 1.2 christos int testresult = 0; 4401 1.2 christos SSL_SESSION *sess = NULL; 4402 1.2 christos unsigned char buf[20]; 4403 1.2 christos size_t readbytes, written; 4404 1.2 christos const SSL_CIPHER *cipher; 4405 1.2 christos time_t timer; 4406 1.2 christos const char *cipher_str[] = { 4407 1.2 christos TLS1_3_RFC_AES_128_GCM_SHA256, 4408 1.2 christos TLS1_3_RFC_AES_256_GCM_SHA384, 4409 1.2 christos # if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) 4410 1.2 christos TLS1_3_RFC_CHACHA20_POLY1305_SHA256, 4411 1.2 christos # else 4412 1.2 christos NULL, 4413 1.2 christos # endif 4414 1.2 christos TLS1_3_RFC_AES_128_CCM_SHA256, 4415 1.2 christos TLS1_3_RFC_AES_128_CCM_8_SHA256 4416 1.2 christos }; 4417 1.2 christos const unsigned char *cipher_bytes[] = { 4418 1.2 christos TLS13_AES_128_GCM_SHA256_BYTES, 4419 1.2 christos TLS13_AES_256_GCM_SHA384_BYTES, 4420 1.2 christos # if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) 4421 1.2 christos TLS13_CHACHA20_POLY1305_SHA256_BYTES, 4422 1.2 christos # else 4423 1.2 christos NULL, 4424 1.2 christos # endif 4425 1.2 christos TLS13_AES_128_CCM_SHA256_BYTES, 4426 1.2 christos TLS13_AES_128_CCM_8_SHA256_BYTES 4427 1.2 christos }; 4428 1.2 christos 4429 1.2 christos if (cipher_str[idx] == NULL) 4430 1.2 christos return 1; 4431 1.2 christos /* Skip ChaCha20Poly1305 as currently FIPS module does not support it */ 4432 1.2 christos if (idx == 2 && is_fips == 1) 4433 1.2 christos return 1; 4434 1.2 christos 4435 1.2 christos /* We always set this up with a final parameter of "2" for PSK */ 4436 1.2 christos if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl, 4437 1.2 christos &serverssl, &sess, 2, 4438 1.2 christos SHA384_DIGEST_LENGTH))) 4439 1.2 christos goto end; 4440 1.2 christos 4441 1.2 christos if (!TEST_true(SSL_set_ciphersuites(clientssl, cipher_str[idx])) 4442 1.2 christos || !TEST_true(SSL_set_ciphersuites(serverssl, cipher_str[idx]))) 4443 1.2 christos goto end; 4444 1.2 christos 4445 1.2 christos /* 4446 1.2 christos * 'setupearly_data_test' creates only one instance of SSL_SESSION 4447 1.2 christos * and assigns to both client and server with incremented reference 4448 1.2 christos * and the same instance is updated in 'sess'. 4449 1.2 christos * So updating ciphersuite in 'sess' which will get reflected in 4450 1.2 christos * PSK handshake using psk use sess and find sess cb. 4451 1.2 christos */ 4452 1.2 christos cipher = SSL_CIPHER_find(clientssl, cipher_bytes[idx]); 4453 1.2 christos if (!TEST_ptr(cipher) || !TEST_true(SSL_SESSION_set_cipher(sess, cipher))) 4454 1.2 christos goto end; 4455 1.2 christos 4456 1.2 christos SSL_set_connect_state(clientssl); 4457 1.2 christos timer = time(NULL); 4458 1.2 christos if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1), 4459 1.2 christos &written))) 4460 1.2 christos goto end; 4461 1.2 christos 4462 1.2 christos if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 4463 1.2 christos &readbytes), 4464 1.2 christos SSL_READ_EARLY_DATA_SUCCESS)) { 4465 1.2 christos testresult = check_early_data_timeout(timer); 4466 1.2 christos goto end; 4467 1.2 christos } 4468 1.2 christos 4469 1.2 christos if (!TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1)) 4470 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(serverssl), 4471 1.2 christos SSL_EARLY_DATA_ACCEPTED) 4472 1.2 christos || !TEST_int_eq(SSL_connect(clientssl), 1) 4473 1.2 christos || !TEST_int_eq(SSL_accept(serverssl), 1)) 4474 1.2 christos goto end; 4475 1.2 christos 4476 1.2 christos /* Send some normal data from client to server */ 4477 1.2 christos if (!TEST_true(SSL_write_ex(clientssl, MSG2, strlen(MSG2), &written)) 4478 1.2 christos || !TEST_size_t_eq(written, strlen(MSG2))) 4479 1.2 christos goto end; 4480 1.2 christos 4481 1.2 christos if (!TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes)) 4482 1.2 christos || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2))) 4483 1.2 christos goto end; 4484 1.2 christos 4485 1.2 christos testresult = 1; 4486 1.2 christos end: 4487 1.2 christos SSL_SESSION_free(sess); 4488 1.2 christos SSL_SESSION_free(clientpsk); 4489 1.2 christos SSL_SESSION_free(serverpsk); 4490 1.2 christos clientpsk = serverpsk = NULL; 4491 1.2 christos if (clientssl != NULL) 4492 1.2 christos SSL_shutdown(clientssl); 4493 1.2 christos if (serverssl != NULL) 4494 1.2 christos SSL_shutdown(serverssl); 4495 1.2 christos SSL_free(serverssl); 4496 1.2 christos SSL_free(clientssl); 4497 1.2 christos SSL_CTX_free(sctx); 4498 1.2 christos SSL_CTX_free(cctx); 4499 1.2 christos return testresult; 4500 1.2 christos } 4501 1.2 christos 4502 1.2 christos /* 4503 1.2 christos * Test that a server that doesn't try to read early data can handle a 4504 1.2 christos * client sending some. 4505 1.2 christos */ 4506 1.2 christos static int test_early_data_not_expected(int idx) 4507 1.2 christos { 4508 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 4509 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 4510 1.2 christos int testresult = 0; 4511 1.2 christos SSL_SESSION *sess = NULL; 4512 1.2 christos unsigned char buf[20]; 4513 1.2 christos size_t readbytes, written; 4514 1.2 christos 4515 1.2 christos if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl, 4516 1.2 christos &serverssl, &sess, idx, 4517 1.2 christos SHA384_DIGEST_LENGTH))) 4518 1.2 christos goto end; 4519 1.2 christos 4520 1.2 christos /* Write some early data */ 4521 1.2 christos if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1), 4522 1.2 christos &written))) 4523 1.2 christos goto end; 4524 1.2 christos 4525 1.2 christos /* 4526 1.2 christos * Server should skip over early data and then block waiting for client to 4527 1.2 christos * continue handshake 4528 1.2 christos */ 4529 1.2 christos if (!TEST_int_le(SSL_accept(serverssl), 0) 4530 1.2 christos || !TEST_int_gt(SSL_connect(clientssl), 0) 4531 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(serverssl), 4532 1.2 christos SSL_EARLY_DATA_REJECTED) 4533 1.2 christos || !TEST_int_gt(SSL_accept(serverssl), 0) 4534 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(clientssl), 4535 1.2 christos SSL_EARLY_DATA_REJECTED)) 4536 1.2 christos goto end; 4537 1.2 christos 4538 1.2 christos /* Send some normal data from client to server */ 4539 1.2 christos if (!TEST_true(SSL_write_ex(clientssl, MSG2, strlen(MSG2), &written)) 4540 1.2 christos || !TEST_size_t_eq(written, strlen(MSG2))) 4541 1.2 christos goto end; 4542 1.2 christos 4543 1.2 christos if (!TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes)) 4544 1.2 christos || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2))) 4545 1.2 christos goto end; 4546 1.2 christos 4547 1.2 christos testresult = 1; 4548 1.2 christos 4549 1.2 christos end: 4550 1.2 christos SSL_SESSION_free(sess); 4551 1.2 christos SSL_SESSION_free(clientpsk); 4552 1.2 christos SSL_SESSION_free(serverpsk); 4553 1.2 christos clientpsk = serverpsk = NULL; 4554 1.2 christos SSL_free(serverssl); 4555 1.2 christos SSL_free(clientssl); 4556 1.2 christos SSL_CTX_free(sctx); 4557 1.2 christos SSL_CTX_free(cctx); 4558 1.2 christos return testresult; 4559 1.2 christos } 4560 1.2 christos 4561 1.2 christos 4562 1.2 christos # ifndef OPENSSL_NO_TLS1_2 4563 1.2 christos /* 4564 1.2 christos * Test that a server attempting to read early data can handle a connection 4565 1.2 christos * from a TLSv1.2 client. 4566 1.2 christos */ 4567 1.2 christos static int test_early_data_tls1_2(int idx) 4568 1.2 christos { 4569 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 4570 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 4571 1.2 christos int testresult = 0; 4572 1.2 christos unsigned char buf[20]; 4573 1.2 christos size_t readbytes, written; 4574 1.2 christos 4575 1.2 christos if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl, 4576 1.2 christos &serverssl, NULL, idx, 4577 1.2 christos SHA384_DIGEST_LENGTH))) 4578 1.2 christos goto end; 4579 1.2 christos 4580 1.2 christos /* Write some data - should block due to handshake with server */ 4581 1.2 christos SSL_set_max_proto_version(clientssl, TLS1_2_VERSION); 4582 1.2 christos SSL_set_connect_state(clientssl); 4583 1.2 christos if (!TEST_false(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written))) 4584 1.2 christos goto end; 4585 1.2 christos 4586 1.2 christos /* 4587 1.2 christos * Server should do TLSv1.2 handshake. First it will block waiting for more 4588 1.2 christos * messages from client after ServerDone. Then SSL_read_early_data should 4589 1.2 christos * finish and detect that early data has not been sent 4590 1.2 christos */ 4591 1.2 christos if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 4592 1.2 christos &readbytes), 4593 1.2 christos SSL_READ_EARLY_DATA_ERROR)) 4594 1.2 christos goto end; 4595 1.2 christos 4596 1.2 christos /* 4597 1.2 christos * Continue writing the message we started earlier. Will still block waiting 4598 1.2 christos * for the CCS/Finished from server 4599 1.2 christos */ 4600 1.2 christos if (!TEST_false(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written)) 4601 1.2 christos || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 4602 1.2 christos &readbytes), 4603 1.2 christos SSL_READ_EARLY_DATA_FINISH) 4604 1.2 christos || !TEST_size_t_eq(readbytes, 0) 4605 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(serverssl), 4606 1.2 christos SSL_EARLY_DATA_NOT_SENT)) 4607 1.2 christos goto end; 4608 1.2 christos 4609 1.2 christos /* Continue writing the message we started earlier */ 4610 1.2 christos if (!TEST_true(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written)) 4611 1.2 christos || !TEST_size_t_eq(written, strlen(MSG1)) 4612 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(clientssl), 4613 1.2 christos SSL_EARLY_DATA_NOT_SENT) 4614 1.2 christos || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes)) 4615 1.2 christos || !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1)) 4616 1.2 christos || !TEST_true(SSL_write_ex(serverssl, MSG2, strlen(MSG2), &written)) 4617 1.2 christos || !TEST_size_t_eq(written, strlen(MSG2)) 4618 1.2 christos || !SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes) 4619 1.2 christos || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2))) 4620 1.2 christos goto end; 4621 1.2 christos 4622 1.2 christos testresult = 1; 4623 1.2 christos 4624 1.2 christos end: 4625 1.2 christos SSL_SESSION_free(clientpsk); 4626 1.2 christos SSL_SESSION_free(serverpsk); 4627 1.2 christos clientpsk = serverpsk = NULL; 4628 1.2 christos SSL_free(serverssl); 4629 1.2 christos SSL_free(clientssl); 4630 1.2 christos SSL_CTX_free(sctx); 4631 1.2 christos SSL_CTX_free(cctx); 4632 1.2 christos 4633 1.2 christos return testresult; 4634 1.2 christos } 4635 1.2 christos # endif /* OPENSSL_NO_TLS1_2 */ 4636 1.2 christos 4637 1.2 christos /* 4638 1.2 christos * Test configuring the TLSv1.3 ciphersuites 4639 1.2 christos * 4640 1.2 christos * Test 0: Set a default ciphersuite in the SSL_CTX (no explicit cipher_list) 4641 1.2 christos * Test 1: Set a non-default ciphersuite in the SSL_CTX (no explicit cipher_list) 4642 1.2 christos * Test 2: Set a default ciphersuite in the SSL (no explicit cipher_list) 4643 1.2 christos * Test 3: Set a non-default ciphersuite in the SSL (no explicit cipher_list) 4644 1.2 christos * Test 4: Set a default ciphersuite in the SSL_CTX (SSL_CTX cipher_list) 4645 1.2 christos * Test 5: Set a non-default ciphersuite in the SSL_CTX (SSL_CTX cipher_list) 4646 1.2 christos * Test 6: Set a default ciphersuite in the SSL (SSL_CTX cipher_list) 4647 1.2 christos * Test 7: Set a non-default ciphersuite in the SSL (SSL_CTX cipher_list) 4648 1.2 christos * Test 8: Set a default ciphersuite in the SSL (SSL cipher_list) 4649 1.2 christos * Test 9: Set a non-default ciphersuite in the SSL (SSL cipher_list) 4650 1.2 christos */ 4651 1.2 christos static int test_set_ciphersuite(int idx) 4652 1.2 christos { 4653 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 4654 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 4655 1.2 christos int testresult = 0; 4656 1.2 christos 4657 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 4658 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 4659 1.2 christos &sctx, &cctx, cert, privkey)) 4660 1.2 christos || !TEST_true(SSL_CTX_set_ciphersuites(sctx, 4661 1.2 christos "TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256"))) 4662 1.2 christos goto end; 4663 1.2 christos 4664 1.2 christos if (idx >=4 && idx <= 7) { 4665 1.2 christos /* SSL_CTX explicit cipher list */ 4666 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(cctx, "AES256-GCM-SHA384"))) 4667 1.2 christos goto end; 4668 1.2 christos } 4669 1.2 christos 4670 1.2 christos if (idx == 0 || idx == 4) { 4671 1.2 christos /* Default ciphersuite */ 4672 1.2 christos if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, 4673 1.2 christos "TLS_AES_128_GCM_SHA256"))) 4674 1.2 christos goto end; 4675 1.2 christos } else if (idx == 1 || idx == 5) { 4676 1.2 christos /* Non default ciphersuite */ 4677 1.2 christos if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, 4678 1.2 christos "TLS_AES_128_CCM_SHA256"))) 4679 1.2 christos goto end; 4680 1.2 christos } 4681 1.2 christos 4682 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 4683 1.2 christos &clientssl, NULL, NULL))) 4684 1.2 christos goto end; 4685 1.2 christos 4686 1.2 christos if (idx == 8 || idx == 9) { 4687 1.2 christos /* SSL explicit cipher list */ 4688 1.2 christos if (!TEST_true(SSL_set_cipher_list(clientssl, "AES256-GCM-SHA384"))) 4689 1.2 christos goto end; 4690 1.2 christos } 4691 1.2 christos 4692 1.2 christos if (idx == 2 || idx == 6 || idx == 8) { 4693 1.2 christos /* Default ciphersuite */ 4694 1.2 christos if (!TEST_true(SSL_set_ciphersuites(clientssl, 4695 1.2 christos "TLS_AES_128_GCM_SHA256"))) 4696 1.2 christos goto end; 4697 1.2 christos } else if (idx == 3 || idx == 7 || idx == 9) { 4698 1.2 christos /* Non default ciphersuite */ 4699 1.2 christos if (!TEST_true(SSL_set_ciphersuites(clientssl, 4700 1.2 christos "TLS_AES_128_CCM_SHA256"))) 4701 1.2 christos goto end; 4702 1.2 christos } 4703 1.2 christos 4704 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 4705 1.2 christos goto end; 4706 1.2 christos 4707 1.2 christos testresult = 1; 4708 1.2 christos 4709 1.2 christos end: 4710 1.2 christos SSL_free(serverssl); 4711 1.2 christos SSL_free(clientssl); 4712 1.2 christos SSL_CTX_free(sctx); 4713 1.2 christos SSL_CTX_free(cctx); 4714 1.2 christos 4715 1.2 christos return testresult; 4716 1.2 christos } 4717 1.2 christos 4718 1.2 christos static int test_ciphersuite_change(void) 4719 1.2 christos { 4720 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 4721 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 4722 1.2 christos SSL_SESSION *clntsess = NULL; 4723 1.2 christos int testresult = 0; 4724 1.2 christos const SSL_CIPHER *aes_128_gcm_sha256 = NULL; 4725 1.2 christos 4726 1.2 christos /* Create a session based on SHA-256 */ 4727 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 4728 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 4729 1.2 christos &sctx, &cctx, cert, privkey)) 4730 1.2 christos || !TEST_true(SSL_CTX_set_ciphersuites(sctx, 4731 1.2 christos "TLS_AES_128_GCM_SHA256:" 4732 1.2 christos "TLS_AES_256_GCM_SHA384:" 4733 1.2 christos "TLS_AES_128_CCM_SHA256")) 4734 1.2 christos || !TEST_true(SSL_CTX_set_ciphersuites(cctx, 4735 1.2 christos "TLS_AES_128_GCM_SHA256")) 4736 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 4737 1.2 christos &clientssl, NULL, NULL)) 4738 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 4739 1.2 christos SSL_ERROR_NONE))) 4740 1.2 christos goto end; 4741 1.2 christos 4742 1.2 christos clntsess = SSL_get1_session(clientssl); 4743 1.2 christos /* Save for later */ 4744 1.2 christos aes_128_gcm_sha256 = SSL_SESSION_get0_cipher(clntsess); 4745 1.2 christos SSL_shutdown(clientssl); 4746 1.2 christos SSL_shutdown(serverssl); 4747 1.2 christos SSL_free(serverssl); 4748 1.2 christos SSL_free(clientssl); 4749 1.2 christos serverssl = clientssl = NULL; 4750 1.2 christos 4751 1.2 christos /* Check we can resume a session with a different SHA-256 ciphersuite */ 4752 1.2 christos if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, 4753 1.2 christos "TLS_AES_128_CCM_SHA256")) 4754 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 4755 1.2 christos &clientssl, NULL, NULL)) 4756 1.2 christos || !TEST_true(SSL_set_session(clientssl, clntsess)) 4757 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 4758 1.2 christos SSL_ERROR_NONE)) 4759 1.2 christos || !TEST_true(SSL_session_reused(clientssl))) 4760 1.2 christos goto end; 4761 1.2 christos 4762 1.2 christos SSL_SESSION_free(clntsess); 4763 1.2 christos clntsess = SSL_get1_session(clientssl); 4764 1.2 christos SSL_shutdown(clientssl); 4765 1.2 christos SSL_shutdown(serverssl); 4766 1.2 christos SSL_free(serverssl); 4767 1.2 christos SSL_free(clientssl); 4768 1.2 christos serverssl = clientssl = NULL; 4769 1.2 christos 4770 1.2 christos /* 4771 1.2 christos * Check attempting to resume a SHA-256 session with no SHA-256 ciphersuites 4772 1.2 christos * succeeds but does not resume. 4773 1.2 christos */ 4774 1.2 christos if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, "TLS_AES_256_GCM_SHA384")) 4775 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 4776 1.2 christos NULL, NULL)) 4777 1.2 christos || !TEST_true(SSL_set_session(clientssl, clntsess)) 4778 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 4779 1.2 christos SSL_ERROR_SSL)) 4780 1.2 christos || !TEST_false(SSL_session_reused(clientssl))) 4781 1.2 christos goto end; 4782 1.2 christos 4783 1.2 christos SSL_SESSION_free(clntsess); 4784 1.2 christos clntsess = NULL; 4785 1.2 christos SSL_shutdown(clientssl); 4786 1.2 christos SSL_shutdown(serverssl); 4787 1.2 christos SSL_free(serverssl); 4788 1.2 christos SSL_free(clientssl); 4789 1.2 christos serverssl = clientssl = NULL; 4790 1.2 christos 4791 1.2 christos /* Create a session based on SHA384 */ 4792 1.2 christos if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, "TLS_AES_256_GCM_SHA384")) 4793 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 4794 1.2 christos &clientssl, NULL, NULL)) 4795 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 4796 1.2 christos SSL_ERROR_NONE))) 4797 1.2 christos goto end; 4798 1.2 christos 4799 1.2 christos clntsess = SSL_get1_session(clientssl); 4800 1.2 christos SSL_shutdown(clientssl); 4801 1.2 christos SSL_shutdown(serverssl); 4802 1.2 christos SSL_free(serverssl); 4803 1.2 christos SSL_free(clientssl); 4804 1.2 christos serverssl = clientssl = NULL; 4805 1.2 christos 4806 1.2 christos if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, 4807 1.2 christos "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384")) 4808 1.2 christos || !TEST_true(SSL_CTX_set_ciphersuites(sctx, 4809 1.2 christos "TLS_AES_256_GCM_SHA384")) 4810 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 4811 1.2 christos NULL, NULL)) 4812 1.2 christos || !TEST_true(SSL_set_session(clientssl, clntsess)) 4813 1.2 christos /* 4814 1.2 christos * We use SSL_ERROR_WANT_READ below so that we can pause the 4815 1.2 christos * connection after the initial ClientHello has been sent to 4816 1.2 christos * enable us to make some session changes. 4817 1.2 christos */ 4818 1.2 christos || !TEST_false(create_ssl_connection(serverssl, clientssl, 4819 1.2 christos SSL_ERROR_WANT_READ))) 4820 1.2 christos goto end; 4821 1.2 christos 4822 1.2 christos /* Trick the client into thinking this session is for a different digest */ 4823 1.2 christos clntsess->cipher = aes_128_gcm_sha256; 4824 1.2 christos clntsess->cipher_id = clntsess->cipher->id; 4825 1.2 christos 4826 1.2 christos /* 4827 1.2 christos * Continue the previously started connection. Server has selected a SHA-384 4828 1.2 christos * ciphersuite, but client thinks the session is for SHA-256, so it should 4829 1.2 christos * bail out. 4830 1.2 christos */ 4831 1.2 christos if (!TEST_false(create_ssl_connection(serverssl, clientssl, 4832 1.2 christos SSL_ERROR_SSL)) 4833 1.2 christos || !TEST_int_eq(ERR_GET_REASON(ERR_get_error()), 4834 1.2 christos SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED)) 4835 1.2 christos goto end; 4836 1.2 christos 4837 1.2 christos testresult = 1; 4838 1.2 christos 4839 1.2 christos end: 4840 1.2 christos SSL_SESSION_free(clntsess); 4841 1.2 christos SSL_free(serverssl); 4842 1.2 christos SSL_free(clientssl); 4843 1.2 christos SSL_CTX_free(sctx); 4844 1.2 christos SSL_CTX_free(cctx); 4845 1.2 christos 4846 1.2 christos return testresult; 4847 1.2 christos } 4848 1.2 christos 4849 1.2 christos /* 4850 1.2 christos * Test TLSv1.3 Key exchange 4851 1.2 christos * Test 0 = Test all ECDHE Key exchange with TLSv1.3 client and server 4852 1.2 christos * Test 1 = Test NID_X9_62_prime256v1 with TLSv1.3 client and server 4853 1.2 christos * Test 2 = Test NID_secp384r1 with TLSv1.3 client and server 4854 1.2 christos * Test 3 = Test NID_secp521r1 with TLSv1.3 client and server 4855 1.2 christos * Test 4 = Test NID_X25519 with TLSv1.3 client and server 4856 1.2 christos * Test 5 = Test NID_X448 with TLSv1.3 client and server 4857 1.2 christos * Test 6 = Test all FFDHE Key exchange with TLSv1.3 client and server 4858 1.2 christos * Test 7 = Test NID_ffdhe2048 with TLSv1.3 client and server 4859 1.2 christos * Test 8 = Test NID_ffdhe3072 with TLSv1.3 client and server 4860 1.2 christos * Test 9 = Test NID_ffdhe4096 with TLSv1.3 client and server 4861 1.2 christos * Test 10 = Test NID_ffdhe6144 with TLSv1.3 client and server 4862 1.2 christos * Test 11 = Test NID_ffdhe8192 with TLSv1.3 client and server 4863 1.2 christos * Test 12 = Test all ECDHE with TLSv1.2 client and server 4864 1.2 christos * Test 13 = Test all FFDHE with TLSv1.2 client and server 4865 1.2 christos */ 4866 1.2 christos # ifndef OPENSSL_NO_EC 4867 1.2 christos static int ecdhe_kexch_groups[] = {NID_X9_62_prime256v1, NID_secp384r1, 4868 1.2 christos NID_secp521r1, NID_X25519, NID_X448}; 4869 1.2 christos # endif 4870 1.2 christos # ifndef OPENSSL_NO_DH 4871 1.2 christos static int ffdhe_kexch_groups[] = {NID_ffdhe2048, NID_ffdhe3072, NID_ffdhe4096, 4872 1.2 christos NID_ffdhe6144, NID_ffdhe8192}; 4873 1.2 christos # endif 4874 1.2 christos static int test_key_exchange(int idx) 4875 1.2 christos { 4876 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 4877 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 4878 1.2 christos int testresult = 0; 4879 1.2 christos int kexch_alg; 4880 1.2 christos int *kexch_groups = &kexch_alg; 4881 1.2 christos int kexch_groups_size = 1; 4882 1.2 christos int max_version = TLS1_3_VERSION; 4883 1.2 christos char *kexch_name0 = NULL; 4884 1.2 christos 4885 1.2 christos switch (idx) { 4886 1.2 christos # ifndef OPENSSL_NO_EC 4887 1.2 christos # ifndef OPENSSL_NO_TLS1_2 4888 1.2 christos case 12: 4889 1.2 christos max_version = TLS1_2_VERSION; 4890 1.2 christos # endif 4891 1.2 christos /* Fall through */ 4892 1.2 christos case 0: 4893 1.2 christos kexch_groups = ecdhe_kexch_groups; 4894 1.2 christos kexch_groups_size = OSSL_NELEM(ecdhe_kexch_groups); 4895 1.2 christos kexch_name0 = "secp256r1"; 4896 1.2 christos break; 4897 1.2 christos case 1: 4898 1.2 christos kexch_alg = NID_X9_62_prime256v1; 4899 1.2 christos kexch_name0 = "secp256r1"; 4900 1.2 christos break; 4901 1.2 christos case 2: 4902 1.2 christos kexch_alg = NID_secp384r1; 4903 1.2 christos kexch_name0 = "secp384r1"; 4904 1.2 christos break; 4905 1.2 christos case 3: 4906 1.2 christos kexch_alg = NID_secp521r1; 4907 1.2 christos kexch_name0 = "secp521r1"; 4908 1.2 christos break; 4909 1.2 christos case 4: 4910 1.2 christos if (is_fips) 4911 1.2 christos return TEST_skip("X25519 might not be supported by fips provider."); 4912 1.2 christos kexch_alg = NID_X25519; 4913 1.2 christos kexch_name0 = "x25519"; 4914 1.2 christos break; 4915 1.2 christos case 5: 4916 1.2 christos if (is_fips) 4917 1.2 christos return TEST_skip("X448 might not be supported by fips provider."); 4918 1.2 christos kexch_alg = NID_X448; 4919 1.2 christos kexch_name0 = "x448"; 4920 1.2 christos break; 4921 1.2 christos # endif 4922 1.2 christos # ifndef OPENSSL_NO_DH 4923 1.2 christos # ifndef OPENSSL_NO_TLS1_2 4924 1.2 christos case 13: 4925 1.2 christos max_version = TLS1_2_VERSION; 4926 1.2 christos kexch_name0 = "ffdhe2048"; 4927 1.2 christos # endif 4928 1.2 christos /* Fall through */ 4929 1.2 christos case 6: 4930 1.2 christos kexch_groups = ffdhe_kexch_groups; 4931 1.2 christos kexch_groups_size = OSSL_NELEM(ffdhe_kexch_groups); 4932 1.2 christos kexch_name0 = "ffdhe2048"; 4933 1.2 christos break; 4934 1.2 christos case 7: 4935 1.2 christos kexch_alg = NID_ffdhe2048; 4936 1.2 christos kexch_name0 = "ffdhe2048"; 4937 1.2 christos break; 4938 1.2 christos case 8: 4939 1.2 christos kexch_alg = NID_ffdhe3072; 4940 1.2 christos kexch_name0 = "ffdhe3072"; 4941 1.2 christos break; 4942 1.2 christos case 9: 4943 1.2 christos kexch_alg = NID_ffdhe4096; 4944 1.2 christos kexch_name0 = "ffdhe4096"; 4945 1.2 christos break; 4946 1.2 christos case 10: 4947 1.2 christos kexch_alg = NID_ffdhe6144; 4948 1.2 christos kexch_name0 = "ffdhe6144"; 4949 1.2 christos break; 4950 1.2 christos case 11: 4951 1.2 christos kexch_alg = NID_ffdhe8192; 4952 1.2 christos kexch_name0 = "ffdhe8192"; 4953 1.2 christos break; 4954 1.2 christos # endif 4955 1.2 christos default: 4956 1.2 christos /* We're skipping this test */ 4957 1.2 christos return 1; 4958 1.2 christos } 4959 1.2 christos 4960 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 4961 1.2 christos TLS_client_method(), TLS1_VERSION, 4962 1.2 christos max_version, &sctx, &cctx, cert, 4963 1.2 christos privkey))) 4964 1.2 christos goto end; 4965 1.2 christos 4966 1.2 christos if (!TEST_true(SSL_CTX_set_ciphersuites(sctx, 4967 1.2 christos TLS1_3_RFC_AES_128_GCM_SHA256))) 4968 1.2 christos goto end; 4969 1.2 christos 4970 1.2 christos if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, 4971 1.2 christos TLS1_3_RFC_AES_128_GCM_SHA256))) 4972 1.2 christos goto end; 4973 1.2 christos 4974 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(sctx, 4975 1.2 christos TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ":" 4976 1.2 christos TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256)) 4977 1.2 christos || !TEST_true(SSL_CTX_set_dh_auto(sctx, 1))) 4978 1.2 christos goto end; 4979 1.2 christos 4980 1.2 christos /* 4981 1.2 christos * Must include an EC ciphersuite so that we send supported groups in 4982 1.2 christos * TLSv1.2 4983 1.2 christos */ 4984 1.2 christos # ifndef OPENSSL_NO_TLS1_2 4985 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(cctx, 4986 1.2 christos TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ":" 4987 1.2 christos TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256))) 4988 1.2 christos goto end; 4989 1.2 christos # endif 4990 1.2 christos 4991 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 4992 1.2 christos NULL, NULL))) 4993 1.2 christos goto end; 4994 1.2 christos 4995 1.2 christos if (!TEST_true(SSL_set1_groups(serverssl, kexch_groups, kexch_groups_size)) 4996 1.2 christos || !TEST_true(SSL_set1_groups(clientssl, kexch_groups, kexch_groups_size))) 4997 1.2 christos goto end; 4998 1.2 christos 4999 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 5000 1.2 christos goto end; 5001 1.2 christos 5002 1.2 christos /* 5003 1.2 christos * If Handshake succeeds the negotiated kexch alg should be the first one in 5004 1.2 christos * configured, except in the case of FFDHE groups (idx 13), which are 5005 1.2 christos * TLSv1.3 only so we expect no shared group to exist. 5006 1.2 christos */ 5007 1.2 christos if (!TEST_int_eq(SSL_get_shared_group(serverssl, 0), 5008 1.2 christos idx == 13 ? 0 : kexch_groups[0])) 5009 1.2 christos goto end; 5010 1.2 christos 5011 1.2 christos if (!TEST_str_eq(SSL_group_to_name(serverssl, kexch_groups[0]), 5012 1.2 christos kexch_name0)) 5013 1.2 christos goto end; 5014 1.2 christos 5015 1.2 christos /* We don't implement RFC 7919 named groups for TLS 1.2. */ 5016 1.2 christos if (idx != 13) { 5017 1.2 christos if (!TEST_int_eq(SSL_get_negotiated_group(serverssl), kexch_groups[0])) 5018 1.2 christos goto end; 5019 1.2 christos if (!TEST_int_eq(SSL_get_negotiated_group(clientssl), kexch_groups[0])) 5020 1.2 christos goto end; 5021 1.2 christos } 5022 1.2 christos 5023 1.2 christos testresult = 1; 5024 1.2 christos end: 5025 1.2 christos SSL_free(serverssl); 5026 1.2 christos SSL_free(clientssl); 5027 1.2 christos SSL_CTX_free(sctx); 5028 1.2 christos SSL_CTX_free(cctx); 5029 1.2 christos return testresult; 5030 1.2 christos } 5031 1.2 christos 5032 1.2 christos # if !defined(OPENSSL_NO_TLS1_2) \ 5033 1.2 christos && !defined(OPENSSL_NO_EC) \ 5034 1.2 christos && !defined(OPENSSL_NO_DH) 5035 1.2 christos static int set_ssl_groups(SSL *serverssl, SSL *clientssl, int clientmulti, 5036 1.2 christos int isecdhe, int idx) 5037 1.2 christos { 5038 1.2 christos int kexch_alg; 5039 1.2 christos int *kexch_groups = &kexch_alg; 5040 1.2 christos int numec, numff; 5041 1.2 christos 5042 1.2 christos numec = OSSL_NELEM(ecdhe_kexch_groups); 5043 1.2 christos numff = OSSL_NELEM(ffdhe_kexch_groups); 5044 1.2 christos if (isecdhe) 5045 1.2 christos kexch_alg = ecdhe_kexch_groups[idx]; 5046 1.2 christos else 5047 1.2 christos kexch_alg = ffdhe_kexch_groups[idx]; 5048 1.2 christos 5049 1.2 christos if (clientmulti) { 5050 1.2 christos if (!TEST_true(SSL_set1_groups(serverssl, kexch_groups, 1))) 5051 1.2 christos return 0; 5052 1.2 christos if (isecdhe) { 5053 1.2 christos if (!TEST_true(SSL_set1_groups(clientssl, ecdhe_kexch_groups, 5054 1.2 christos numec))) 5055 1.2 christos return 0; 5056 1.2 christos } else { 5057 1.2 christos if (!TEST_true(SSL_set1_groups(clientssl, ffdhe_kexch_groups, 5058 1.2 christos numff))) 5059 1.2 christos return 0; 5060 1.2 christos } 5061 1.2 christos } else { 5062 1.2 christos if (!TEST_true(SSL_set1_groups(clientssl, kexch_groups, 1))) 5063 1.2 christos return 0; 5064 1.2 christos if (isecdhe) { 5065 1.2 christos if (!TEST_true(SSL_set1_groups(serverssl, ecdhe_kexch_groups, 5066 1.2 christos numec))) 5067 1.2 christos return 0; 5068 1.2 christos } else { 5069 1.2 christos if (!TEST_true(SSL_set1_groups(serverssl, ffdhe_kexch_groups, 5070 1.2 christos numff))) 5071 1.2 christos return 0; 5072 1.2 christos } 5073 1.2 christos } 5074 1.2 christos return 1; 5075 1.2 christos } 5076 1.2 christos 5077 1.2 christos /*- 5078 1.2 christos * Test the SSL_get_negotiated_group() API across a battery of scenarios. 5079 1.2 christos * Run through both the ECDHE and FFDHE group lists used in the previous 5080 1.2 christos * test, for both TLS 1.2 and TLS 1.3, negotiating each group in turn, 5081 1.2 christos * confirming the expected result; then perform a resumption handshake 5082 1.2 christos * while offering the same group list, and another resumption handshake 5083 1.2 christos * offering a different group list. The returned value should be the 5084 1.2 christos * negotiated group for the initial handshake; for TLS 1.3 resumption 5085 1.2 christos * handshakes the returned value will be negotiated on the resumption 5086 1.2 christos * handshake itself, but for TLS 1.2 resumption handshakes the value will 5087 1.2 christos * be cached in the session from the original handshake, regardless of what 5088 1.2 christos * was offered in the resumption ClientHello. 5089 1.2 christos * 5090 1.2 christos * Using E for the number of EC groups and F for the number of FF groups: 5091 1.2 christos * E tests of ECDHE with TLS 1.3, server only has one group 5092 1.2 christos * F tests of FFDHE with TLS 1.3, server only has one group 5093 1.2 christos * E tests of ECDHE with TLS 1.2, server only has one group 5094 1.2 christos * F tests of FFDHE with TLS 1.2, server only has one group 5095 1.2 christos * E tests of ECDHE with TLS 1.3, client sends only one group 5096 1.2 christos * F tests of FFDHE with TLS 1.3, client sends only one group 5097 1.2 christos * E tests of ECDHE with TLS 1.2, client sends only one group 5098 1.2 christos * F tests of FFDHE with TLS 1.2, client sends only one group 5099 1.2 christos */ 5100 1.2 christos static int test_negotiated_group(int idx) 5101 1.2 christos { 5102 1.2 christos int clientmulti, istls13, isecdhe, numec, numff, numgroups; 5103 1.2 christos int expectednid; 5104 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 5105 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 5106 1.2 christos SSL_SESSION *origsess = NULL; 5107 1.2 christos int testresult = 0; 5108 1.2 christos int kexch_alg; 5109 1.2 christos int max_version = TLS1_3_VERSION; 5110 1.2 christos 5111 1.2 christos numec = OSSL_NELEM(ecdhe_kexch_groups); 5112 1.2 christos numff = OSSL_NELEM(ffdhe_kexch_groups); 5113 1.2 christos numgroups = numec + numff; 5114 1.2 christos clientmulti = (idx < 2 * numgroups); 5115 1.2 christos idx = idx % (2 * numgroups); 5116 1.2 christos istls13 = (idx < numgroups); 5117 1.2 christos idx = idx % numgroups; 5118 1.2 christos isecdhe = (idx < numec); 5119 1.2 christos if (!isecdhe) 5120 1.2 christos idx -= numec; 5121 1.2 christos /* Now 'idx' is an index into ecdhe_kexch_groups or ffdhe_kexch_groups */ 5122 1.2 christos if (isecdhe) 5123 1.2 christos kexch_alg = ecdhe_kexch_groups[idx]; 5124 1.2 christos else 5125 1.2 christos kexch_alg = ffdhe_kexch_groups[idx]; 5126 1.2 christos /* We expect nothing for the unimplemented TLS 1.2 FFDHE named groups */ 5127 1.2 christos if (!istls13 && !isecdhe) 5128 1.2 christos expectednid = NID_undef; 5129 1.2 christos else 5130 1.2 christos expectednid = kexch_alg; 5131 1.2 christos 5132 1.2 christos if (is_fips && (kexch_alg == NID_X25519 || kexch_alg == NID_X448)) 5133 1.2 christos return TEST_skip("X25519 and X448 might not be available in fips provider."); 5134 1.2 christos 5135 1.2 christos if (!istls13) 5136 1.2 christos max_version = TLS1_2_VERSION; 5137 1.2 christos 5138 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 5139 1.2 christos TLS_client_method(), TLS1_VERSION, 5140 1.2 christos max_version, &sctx, &cctx, cert, 5141 1.2 christos privkey))) 5142 1.2 christos goto end; 5143 1.2 christos 5144 1.2 christos /* 5145 1.2 christos * Force (EC)DHE ciphers for TLS 1.2. 5146 1.2 christos * Be sure to enable auto tmp DH so that FFDHE can succeed. 5147 1.2 christos */ 5148 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(sctx, 5149 1.2 christos TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ":" 5150 1.2 christos TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256)) 5151 1.2 christos || !TEST_true(SSL_CTX_set_dh_auto(sctx, 1))) 5152 1.2 christos goto end; 5153 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(cctx, 5154 1.2 christos TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ":" 5155 1.2 christos TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256))) 5156 1.2 christos goto end; 5157 1.2 christos 5158 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 5159 1.2 christos NULL, NULL))) 5160 1.2 christos goto end; 5161 1.2 christos 5162 1.2 christos if (!TEST_true(set_ssl_groups(serverssl, clientssl, clientmulti, isecdhe, 5163 1.2 christos idx))) 5164 1.2 christos goto end; 5165 1.2 christos 5166 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 5167 1.2 christos goto end; 5168 1.2 christos 5169 1.2 christos /* Initial handshake; always the configured one */ 5170 1.2 christos if (!TEST_uint_eq(SSL_get_negotiated_group(clientssl), expectednid) 5171 1.2 christos || !TEST_uint_eq(SSL_get_negotiated_group(serverssl), expectednid)) 5172 1.2 christos goto end; 5173 1.2 christos 5174 1.2 christos if (!TEST_ptr((origsess = SSL_get1_session(clientssl)))) 5175 1.2 christos goto end; 5176 1.2 christos 5177 1.2 christos SSL_shutdown(clientssl); 5178 1.2 christos SSL_shutdown(serverssl); 5179 1.2 christos SSL_free(serverssl); 5180 1.2 christos SSL_free(clientssl); 5181 1.2 christos serverssl = clientssl = NULL; 5182 1.2 christos 5183 1.2 christos /* First resumption attempt; use the same config as initial handshake */ 5184 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 5185 1.2 christos NULL, NULL)) 5186 1.2 christos || !TEST_true(SSL_set_session(clientssl, origsess)) 5187 1.2 christos || !TEST_true(set_ssl_groups(serverssl, clientssl, clientmulti, 5188 1.2 christos isecdhe, idx))) 5189 1.2 christos goto end; 5190 1.2 christos 5191 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)) 5192 1.2 christos || !TEST_true(SSL_session_reused(clientssl))) 5193 1.2 christos goto end; 5194 1.2 christos 5195 1.2 christos /* Still had better agree, since nothing changed... */ 5196 1.2 christos if (!TEST_uint_eq(SSL_get_negotiated_group(clientssl), expectednid) 5197 1.2 christos || !TEST_uint_eq(SSL_get_negotiated_group(serverssl), expectednid)) 5198 1.2 christos goto end; 5199 1.2 christos 5200 1.2 christos SSL_shutdown(clientssl); 5201 1.2 christos SSL_shutdown(serverssl); 5202 1.2 christos SSL_free(serverssl); 5203 1.2 christos SSL_free(clientssl); 5204 1.2 christos serverssl = clientssl = NULL; 5205 1.2 christos 5206 1.2 christos /*- 5207 1.2 christos * Second resumption attempt 5208 1.2 christos * The party that picks one group changes it, which we effectuate by 5209 1.2 christos * changing 'idx' and updating what we expect. 5210 1.2 christos */ 5211 1.2 christos if (idx == 0) 5212 1.2 christos idx = 1; 5213 1.2 christos else 5214 1.2 christos idx--; 5215 1.2 christos if (istls13) { 5216 1.2 christos if (isecdhe) 5217 1.2 christos expectednid = ecdhe_kexch_groups[idx]; 5218 1.2 christos else 5219 1.2 christos expectednid = ffdhe_kexch_groups[idx]; 5220 1.2 christos /* Verify that we are changing what we expect. */ 5221 1.2 christos if (!TEST_int_ne(expectednid, kexch_alg)) 5222 1.2 christos goto end; 5223 1.2 christos } else { 5224 1.2 christos /* TLS 1.2 only supports named groups for ECDHE. */ 5225 1.2 christos if (isecdhe) 5226 1.2 christos expectednid = kexch_alg; 5227 1.2 christos else 5228 1.2 christos expectednid = 0; 5229 1.2 christos } 5230 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 5231 1.2 christos NULL, NULL)) 5232 1.2 christos || !TEST_true(SSL_set_session(clientssl, origsess)) 5233 1.2 christos || !TEST_true(set_ssl_groups(serverssl, clientssl, clientmulti, 5234 1.2 christos isecdhe, idx))) 5235 1.2 christos goto end; 5236 1.2 christos 5237 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)) 5238 1.2 christos || !TEST_true(SSL_session_reused(clientssl))) 5239 1.2 christos goto end; 5240 1.2 christos 5241 1.2 christos /* Check that we get what we expected */ 5242 1.2 christos if (!TEST_uint_eq(SSL_get_negotiated_group(clientssl), expectednid) 5243 1.2 christos || !TEST_uint_eq(SSL_get_negotiated_group(serverssl), expectednid)) 5244 1.2 christos goto end; 5245 1.2 christos 5246 1.2 christos testresult = 1; 5247 1.2 christos end: 5248 1.2 christos SSL_free(serverssl); 5249 1.2 christos SSL_free(clientssl); 5250 1.2 christos SSL_CTX_free(sctx); 5251 1.2 christos SSL_CTX_free(cctx); 5252 1.2 christos SSL_SESSION_free(origsess); 5253 1.2 christos return testresult; 5254 1.2 christos } 5255 1.2 christos # endif /* !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_DH) */ 5256 1.2 christos 5257 1.2 christos /* 5258 1.2 christos * Test TLSv1.3 Cipher Suite 5259 1.2 christos * Test 0 = Set TLS1.3 cipher on context 5260 1.2 christos * Test 1 = Set TLS1.3 cipher on SSL 5261 1.2 christos * Test 2 = Set TLS1.3 and TLS1.2 cipher on context 5262 1.2 christos * Test 3 = Set TLS1.3 and TLS1.2 cipher on SSL 5263 1.2 christos */ 5264 1.2 christos static int test_tls13_ciphersuite(int idx) 5265 1.2 christos { 5266 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 5267 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 5268 1.2 christos static const struct { 5269 1.2 christos const char *ciphername; 5270 1.2 christos int fipscapable; 5271 1.2 christos } t13_ciphers[] = { 5272 1.2 christos { TLS1_3_RFC_AES_128_GCM_SHA256, 1 }, 5273 1.2 christos { TLS1_3_RFC_AES_256_GCM_SHA384, 1 }, 5274 1.2 christos { TLS1_3_RFC_AES_128_CCM_SHA256, 1 }, 5275 1.2 christos # if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) 5276 1.2 christos { TLS1_3_RFC_CHACHA20_POLY1305_SHA256, 0 }, 5277 1.2 christos { TLS1_3_RFC_AES_256_GCM_SHA384 5278 1.2 christos ":" TLS1_3_RFC_CHACHA20_POLY1305_SHA256, 0 }, 5279 1.2 christos # endif 5280 1.2 christos { TLS1_3_RFC_AES_128_CCM_8_SHA256 ":" TLS1_3_RFC_AES_128_CCM_SHA256, 1 } 5281 1.2 christos }; 5282 1.2 christos const char *t13_cipher = NULL; 5283 1.2 christos const char *t12_cipher = NULL; 5284 1.2 christos const char *negotiated_scipher; 5285 1.2 christos const char *negotiated_ccipher; 5286 1.2 christos int set_at_ctx = 0; 5287 1.2 christos int set_at_ssl = 0; 5288 1.2 christos int testresult = 0; 5289 1.2 christos int max_ver; 5290 1.2 christos size_t i; 5291 1.2 christos 5292 1.2 christos switch (idx) { 5293 1.2 christos case 0: 5294 1.2 christos set_at_ctx = 1; 5295 1.2 christos break; 5296 1.2 christos case 1: 5297 1.2 christos set_at_ssl = 1; 5298 1.2 christos break; 5299 1.2 christos case 2: 5300 1.2 christos set_at_ctx = 1; 5301 1.2 christos t12_cipher = TLS1_TXT_RSA_WITH_AES_128_SHA256; 5302 1.2 christos break; 5303 1.2 christos case 3: 5304 1.2 christos set_at_ssl = 1; 5305 1.2 christos t12_cipher = TLS1_TXT_RSA_WITH_AES_128_SHA256; 5306 1.2 christos break; 5307 1.2 christos } 5308 1.2 christos 5309 1.2 christos for (max_ver = TLS1_2_VERSION; max_ver <= TLS1_3_VERSION; max_ver++) { 5310 1.2 christos # ifdef OPENSSL_NO_TLS1_2 5311 1.2 christos if (max_ver == TLS1_2_VERSION) 5312 1.2 christos continue; 5313 1.2 christos # endif 5314 1.2 christos for (i = 0; i < OSSL_NELEM(t13_ciphers); i++) { 5315 1.2 christos if (is_fips && !t13_ciphers[i].fipscapable) 5316 1.2 christos continue; 5317 1.2 christos t13_cipher = t13_ciphers[i].ciphername; 5318 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 5319 1.2 christos TLS_client_method(), 5320 1.2 christos TLS1_VERSION, max_ver, 5321 1.2 christos &sctx, &cctx, cert, privkey))) 5322 1.2 christos goto end; 5323 1.2 christos 5324 1.2 christos if (set_at_ctx) { 5325 1.2 christos if (!TEST_true(SSL_CTX_set_ciphersuites(sctx, t13_cipher)) 5326 1.2 christos || !TEST_true(SSL_CTX_set_ciphersuites(cctx, t13_cipher))) 5327 1.2 christos goto end; 5328 1.2 christos if (t12_cipher != NULL) { 5329 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(sctx, t12_cipher)) 5330 1.2 christos || !TEST_true(SSL_CTX_set_cipher_list(cctx, 5331 1.2 christos t12_cipher))) 5332 1.2 christos goto end; 5333 1.2 christos } 5334 1.2 christos } 5335 1.2 christos 5336 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 5337 1.2 christos &clientssl, NULL, NULL))) 5338 1.2 christos goto end; 5339 1.2 christos 5340 1.2 christos if (set_at_ssl) { 5341 1.2 christos if (!TEST_true(SSL_set_ciphersuites(serverssl, t13_cipher)) 5342 1.2 christos || !TEST_true(SSL_set_ciphersuites(clientssl, t13_cipher))) 5343 1.2 christos goto end; 5344 1.2 christos if (t12_cipher != NULL) { 5345 1.2 christos if (!TEST_true(SSL_set_cipher_list(serverssl, t12_cipher)) 5346 1.2 christos || !TEST_true(SSL_set_cipher_list(clientssl, 5347 1.2 christos t12_cipher))) 5348 1.2 christos goto end; 5349 1.2 christos } 5350 1.2 christos } 5351 1.2 christos 5352 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 5353 1.2 christos SSL_ERROR_NONE))) 5354 1.2 christos goto end; 5355 1.2 christos 5356 1.2 christos negotiated_scipher = SSL_CIPHER_get_name(SSL_get_current_cipher( 5357 1.2 christos serverssl)); 5358 1.2 christos negotiated_ccipher = SSL_CIPHER_get_name(SSL_get_current_cipher( 5359 1.2 christos clientssl)); 5360 1.2 christos if (!TEST_str_eq(negotiated_scipher, negotiated_ccipher)) 5361 1.2 christos goto end; 5362 1.2 christos 5363 1.2 christos /* 5364 1.2 christos * TEST_strn_eq is used below because t13_cipher can contain 5365 1.2 christos * multiple ciphersuites 5366 1.2 christos */ 5367 1.2 christos if (max_ver == TLS1_3_VERSION 5368 1.2 christos && !TEST_strn_eq(t13_cipher, negotiated_scipher, 5369 1.2 christos strlen(negotiated_scipher))) 5370 1.2 christos goto end; 5371 1.2 christos 5372 1.2 christos # ifndef OPENSSL_NO_TLS1_2 5373 1.2 christos /* Below validation is not done when t12_cipher is NULL */ 5374 1.2 christos if (max_ver == TLS1_2_VERSION && t12_cipher != NULL 5375 1.2 christos && !TEST_str_eq(t12_cipher, negotiated_scipher)) 5376 1.2 christos goto end; 5377 1.2 christos # endif 5378 1.2 christos 5379 1.2 christos SSL_free(serverssl); 5380 1.2 christos serverssl = NULL; 5381 1.2 christos SSL_free(clientssl); 5382 1.2 christos clientssl = NULL; 5383 1.2 christos SSL_CTX_free(sctx); 5384 1.2 christos sctx = NULL; 5385 1.2 christos SSL_CTX_free(cctx); 5386 1.2 christos cctx = NULL; 5387 1.2 christos } 5388 1.2 christos } 5389 1.2 christos 5390 1.2 christos testresult = 1; 5391 1.2 christos end: 5392 1.2 christos SSL_free(serverssl); 5393 1.2 christos SSL_free(clientssl); 5394 1.2 christos SSL_CTX_free(sctx); 5395 1.2 christos SSL_CTX_free(cctx); 5396 1.2 christos return testresult; 5397 1.2 christos } 5398 1.2 christos 5399 1.2 christos /* 5400 1.2 christos * Test TLSv1.3 PSKs 5401 1.2 christos * Test 0 = Test new style callbacks 5402 1.2 christos * Test 1 = Test both new and old style callbacks 5403 1.2 christos * Test 2 = Test old style callbacks 5404 1.2 christos * Test 3 = Test old style callbacks with no certificate 5405 1.2 christos */ 5406 1.2 christos static int test_tls13_psk(int idx) 5407 1.2 christos { 5408 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 5409 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 5410 1.2 christos const SSL_CIPHER *cipher = NULL; 5411 1.2 christos const unsigned char key[] = { 5412 1.2 christos 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 5413 1.2 christos 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 5414 1.2 christos 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 5415 1.2 christos 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f 5416 1.2 christos }; 5417 1.2 christos int testresult = 0; 5418 1.2 christos 5419 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 5420 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 5421 1.2 christos &sctx, &cctx, idx == 3 ? NULL : cert, 5422 1.2 christos idx == 3 ? NULL : privkey))) 5423 1.2 christos goto end; 5424 1.2 christos 5425 1.2 christos if (idx != 3) { 5426 1.2 christos /* 5427 1.2 christos * We use a ciphersuite with SHA256 to ease testing old style PSK 5428 1.2 christos * callbacks which will always default to SHA256. This should not be 5429 1.2 christos * necessary if we have no cert/priv key. In that case the server should 5430 1.2 christos * prefer SHA256 automatically. 5431 1.2 christos */ 5432 1.2 christos if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, 5433 1.2 christos "TLS_AES_128_GCM_SHA256"))) 5434 1.2 christos goto end; 5435 1.2 christos } else { 5436 1.2 christos /* 5437 1.2 christos * As noted above the server should prefer SHA256 automatically. However 5438 1.2 christos * we are careful not to offer TLS_CHACHA20_POLY1305_SHA256 so this same 5439 1.2 christos * code works even if we are testing with only the FIPS provider loaded. 5440 1.2 christos */ 5441 1.2 christos if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, 5442 1.2 christos "TLS_AES_256_GCM_SHA384:" 5443 1.2 christos "TLS_AES_128_GCM_SHA256"))) 5444 1.2 christos goto end; 5445 1.2 christos } 5446 1.2 christos 5447 1.2 christos /* 5448 1.2 christos * Test 0: New style callbacks only 5449 1.2 christos * Test 1: New and old style callbacks (only the new ones should be used) 5450 1.2 christos * Test 2: Old style callbacks only 5451 1.2 christos */ 5452 1.2 christos if (idx == 0 || idx == 1) { 5453 1.2 christos SSL_CTX_set_psk_use_session_callback(cctx, use_session_cb); 5454 1.2 christos SSL_CTX_set_psk_find_session_callback(sctx, find_session_cb); 5455 1.2 christos } 5456 1.2 christos #ifndef OPENSSL_NO_PSK 5457 1.2 christos if (idx >= 1) { 5458 1.2 christos SSL_CTX_set_psk_client_callback(cctx, psk_client_cb); 5459 1.2 christos SSL_CTX_set_psk_server_callback(sctx, psk_server_cb); 5460 1.2 christos } 5461 1.2 christos #endif 5462 1.2 christos srvid = pskid; 5463 1.2 christos use_session_cb_cnt = 0; 5464 1.2 christos find_session_cb_cnt = 0; 5465 1.2 christos psk_client_cb_cnt = 0; 5466 1.2 christos psk_server_cb_cnt = 0; 5467 1.2 christos 5468 1.2 christos if (idx != 3) { 5469 1.2 christos /* 5470 1.2 christos * Check we can create a connection if callback decides not to send a 5471 1.2 christos * PSK 5472 1.2 christos */ 5473 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 5474 1.2 christos NULL, NULL)) 5475 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 5476 1.2 christos SSL_ERROR_NONE)) 5477 1.2 christos || !TEST_false(SSL_session_reused(clientssl)) 5478 1.2 christos || !TEST_false(SSL_session_reused(serverssl))) 5479 1.2 christos goto end; 5480 1.2 christos 5481 1.2 christos if (idx == 0 || idx == 1) { 5482 1.2 christos if (!TEST_true(use_session_cb_cnt == 1) 5483 1.2 christos || !TEST_true(find_session_cb_cnt == 0) 5484 1.2 christos /* 5485 1.2 christos * If no old style callback then below should be 0 5486 1.2 christos * otherwise 1 5487 1.2 christos */ 5488 1.2 christos || !TEST_true(psk_client_cb_cnt == idx) 5489 1.2 christos || !TEST_true(psk_server_cb_cnt == 0)) 5490 1.2 christos goto end; 5491 1.2 christos } else { 5492 1.2 christos if (!TEST_true(use_session_cb_cnt == 0) 5493 1.2 christos || !TEST_true(find_session_cb_cnt == 0) 5494 1.2 christos || !TEST_true(psk_client_cb_cnt == 1) 5495 1.2 christos || !TEST_true(psk_server_cb_cnt == 0)) 5496 1.2 christos goto end; 5497 1.2 christos } 5498 1.2 christos 5499 1.2 christos shutdown_ssl_connection(serverssl, clientssl); 5500 1.2 christos serverssl = clientssl = NULL; 5501 1.2 christos use_session_cb_cnt = psk_client_cb_cnt = 0; 5502 1.2 christos } 5503 1.2 christos 5504 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 5505 1.2 christos NULL, NULL))) 5506 1.2 christos goto end; 5507 1.2 christos 5508 1.2 christos /* Create the PSK */ 5509 1.2 christos cipher = SSL_CIPHER_find(clientssl, TLS13_AES_128_GCM_SHA256_BYTES); 5510 1.2 christos clientpsk = SSL_SESSION_new(); 5511 1.2 christos if (!TEST_ptr(clientpsk) 5512 1.2 christos || !TEST_ptr(cipher) 5513 1.2 christos || !TEST_true(SSL_SESSION_set1_master_key(clientpsk, key, 5514 1.2 christos sizeof(key))) 5515 1.2 christos || !TEST_true(SSL_SESSION_set_cipher(clientpsk, cipher)) 5516 1.2 christos || !TEST_true(SSL_SESSION_set_protocol_version(clientpsk, 5517 1.2 christos TLS1_3_VERSION)) 5518 1.2 christos || !TEST_true(SSL_SESSION_up_ref(clientpsk))) 5519 1.2 christos goto end; 5520 1.2 christos serverpsk = clientpsk; 5521 1.2 christos 5522 1.2 christos /* Check we can create a connection and the PSK is used */ 5523 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)) 5524 1.2 christos || !TEST_true(SSL_session_reused(clientssl)) 5525 1.2 christos || !TEST_true(SSL_session_reused(serverssl))) 5526 1.2 christos goto end; 5527 1.2 christos 5528 1.2 christos if (idx == 0 || idx == 1) { 5529 1.2 christos if (!TEST_true(use_session_cb_cnt == 1) 5530 1.2 christos || !TEST_true(find_session_cb_cnt == 1) 5531 1.2 christos || !TEST_true(psk_client_cb_cnt == 0) 5532 1.2 christos || !TEST_true(psk_server_cb_cnt == 0)) 5533 1.2 christos goto end; 5534 1.2 christos } else { 5535 1.2 christos if (!TEST_true(use_session_cb_cnt == 0) 5536 1.2 christos || !TEST_true(find_session_cb_cnt == 0) 5537 1.2 christos || !TEST_true(psk_client_cb_cnt == 1) 5538 1.2 christos || !TEST_true(psk_server_cb_cnt == 1)) 5539 1.2 christos goto end; 5540 1.2 christos } 5541 1.2 christos 5542 1.2 christos shutdown_ssl_connection(serverssl, clientssl); 5543 1.2 christos serverssl = clientssl = NULL; 5544 1.2 christos use_session_cb_cnt = find_session_cb_cnt = 0; 5545 1.2 christos psk_client_cb_cnt = psk_server_cb_cnt = 0; 5546 1.2 christos 5547 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 5548 1.2 christos NULL, NULL))) 5549 1.2 christos goto end; 5550 1.2 christos 5551 1.2 christos /* Force an HRR */ 5552 1.2 christos #if defined(OPENSSL_NO_EC) 5553 1.2 christos if (!TEST_true(SSL_set1_groups_list(serverssl, "ffdhe3072"))) 5554 1.2 christos goto end; 5555 1.2 christos #else 5556 1.2 christos if (!TEST_true(SSL_set1_groups_list(serverssl, "P-384"))) 5557 1.2 christos goto end; 5558 1.2 christos #endif 5559 1.2 christos 5560 1.2 christos /* 5561 1.2 christos * Check we can create a connection, the PSK is used and the callbacks are 5562 1.2 christos * called twice. 5563 1.2 christos */ 5564 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)) 5565 1.2 christos || !TEST_true(SSL_session_reused(clientssl)) 5566 1.2 christos || !TEST_true(SSL_session_reused(serverssl))) 5567 1.2 christos goto end; 5568 1.2 christos 5569 1.2 christos if (idx == 0 || idx == 1) { 5570 1.2 christos if (!TEST_true(use_session_cb_cnt == 2) 5571 1.2 christos || !TEST_true(find_session_cb_cnt == 2) 5572 1.2 christos || !TEST_true(psk_client_cb_cnt == 0) 5573 1.2 christos || !TEST_true(psk_server_cb_cnt == 0)) 5574 1.2 christos goto end; 5575 1.2 christos } else { 5576 1.2 christos if (!TEST_true(use_session_cb_cnt == 0) 5577 1.2 christos || !TEST_true(find_session_cb_cnt == 0) 5578 1.2 christos || !TEST_true(psk_client_cb_cnt == 2) 5579 1.2 christos || !TEST_true(psk_server_cb_cnt == 2)) 5580 1.2 christos goto end; 5581 1.2 christos } 5582 1.2 christos 5583 1.2 christos shutdown_ssl_connection(serverssl, clientssl); 5584 1.2 christos serverssl = clientssl = NULL; 5585 1.2 christos use_session_cb_cnt = find_session_cb_cnt = 0; 5586 1.2 christos psk_client_cb_cnt = psk_server_cb_cnt = 0; 5587 1.2 christos 5588 1.2 christos if (idx != 3) { 5589 1.2 christos /* 5590 1.2 christos * Check that if the server rejects the PSK we can still connect, but with 5591 1.2 christos * a full handshake 5592 1.2 christos */ 5593 1.2 christos srvid = "Dummy Identity"; 5594 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 5595 1.2 christos NULL, NULL)) 5596 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 5597 1.2 christos SSL_ERROR_NONE)) 5598 1.2 christos || !TEST_false(SSL_session_reused(clientssl)) 5599 1.2 christos || !TEST_false(SSL_session_reused(serverssl))) 5600 1.2 christos goto end; 5601 1.2 christos 5602 1.2 christos if (idx == 0 || idx == 1) { 5603 1.2 christos if (!TEST_true(use_session_cb_cnt == 1) 5604 1.2 christos || !TEST_true(find_session_cb_cnt == 1) 5605 1.2 christos || !TEST_true(psk_client_cb_cnt == 0) 5606 1.2 christos /* 5607 1.2 christos * If no old style callback then below should be 0 5608 1.2 christos * otherwise 1 5609 1.2 christos */ 5610 1.2 christos || !TEST_true(psk_server_cb_cnt == idx)) 5611 1.2 christos goto end; 5612 1.2 christos } else { 5613 1.2 christos if (!TEST_true(use_session_cb_cnt == 0) 5614 1.2 christos || !TEST_true(find_session_cb_cnt == 0) 5615 1.2 christos || !TEST_true(psk_client_cb_cnt == 1) 5616 1.2 christos || !TEST_true(psk_server_cb_cnt == 1)) 5617 1.2 christos goto end; 5618 1.2 christos } 5619 1.2 christos 5620 1.2 christos shutdown_ssl_connection(serverssl, clientssl); 5621 1.2 christos serverssl = clientssl = NULL; 5622 1.2 christos } 5623 1.2 christos testresult = 1; 5624 1.2 christos 5625 1.2 christos end: 5626 1.2 christos SSL_SESSION_free(clientpsk); 5627 1.2 christos SSL_SESSION_free(serverpsk); 5628 1.2 christos clientpsk = serverpsk = NULL; 5629 1.2 christos SSL_free(serverssl); 5630 1.2 christos SSL_free(clientssl); 5631 1.2 christos SSL_CTX_free(sctx); 5632 1.2 christos SSL_CTX_free(cctx); 5633 1.2 christos return testresult; 5634 1.2 christos } 5635 1.2 christos 5636 1.2 christos static unsigned char cookie_magic_value[] = "cookie magic"; 5637 1.2 christos 5638 1.2 christos static int generate_cookie_callback(SSL *ssl, unsigned char *cookie, 5639 1.2 christos unsigned int *cookie_len) 5640 1.2 christos { 5641 1.2 christos /* 5642 1.2 christos * Not suitable as a real cookie generation function but good enough for 5643 1.2 christos * testing! 5644 1.2 christos */ 5645 1.2 christos memcpy(cookie, cookie_magic_value, sizeof(cookie_magic_value) - 1); 5646 1.2 christos *cookie_len = sizeof(cookie_magic_value) - 1; 5647 1.2 christos 5648 1.2 christos return 1; 5649 1.2 christos } 5650 1.2 christos 5651 1.2 christos static int verify_cookie_callback(SSL *ssl, const unsigned char *cookie, 5652 1.2 christos unsigned int cookie_len) 5653 1.2 christos { 5654 1.2 christos if (cookie_len == sizeof(cookie_magic_value) - 1 5655 1.2 christos && memcmp(cookie, cookie_magic_value, cookie_len) == 0) 5656 1.2 christos return 1; 5657 1.2 christos 5658 1.2 christos return 0; 5659 1.2 christos } 5660 1.2 christos 5661 1.2 christos static int generate_stateless_cookie_callback(SSL *ssl, unsigned char *cookie, 5662 1.2 christos size_t *cookie_len) 5663 1.2 christos { 5664 1.2 christos unsigned int temp; 5665 1.2 christos int res = generate_cookie_callback(ssl, cookie, &temp); 5666 1.2 christos *cookie_len = temp; 5667 1.2 christos return res; 5668 1.2 christos } 5669 1.2 christos 5670 1.2 christos static int verify_stateless_cookie_callback(SSL *ssl, const unsigned char *cookie, 5671 1.2 christos size_t cookie_len) 5672 1.2 christos { 5673 1.2 christos return verify_cookie_callback(ssl, cookie, cookie_len); 5674 1.2 christos } 5675 1.2 christos 5676 1.2 christos static int test_stateless(void) 5677 1.2 christos { 5678 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 5679 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 5680 1.2 christos int testresult = 0; 5681 1.2 christos 5682 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 5683 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 5684 1.2 christos &sctx, &cctx, cert, privkey))) 5685 1.2 christos goto end; 5686 1.2 christos 5687 1.2 christos /* The arrival of CCS messages can confuse the test */ 5688 1.2 christos SSL_CTX_clear_options(cctx, SSL_OP_ENABLE_MIDDLEBOX_COMPAT); 5689 1.2 christos 5690 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 5691 1.2 christos NULL, NULL)) 5692 1.2 christos /* Send the first ClientHello */ 5693 1.2 christos || !TEST_false(create_ssl_connection(serverssl, clientssl, 5694 1.2 christos SSL_ERROR_WANT_READ)) 5695 1.2 christos /* 5696 1.2 christos * This should fail with a -1 return because we have no callbacks 5697 1.2 christos * set up 5698 1.2 christos */ 5699 1.2 christos || !TEST_int_eq(SSL_stateless(serverssl), -1)) 5700 1.2 christos goto end; 5701 1.2 christos 5702 1.2 christos /* Fatal error so abandon the connection from this client */ 5703 1.2 christos SSL_free(clientssl); 5704 1.2 christos clientssl = NULL; 5705 1.2 christos 5706 1.2 christos /* Set up the cookie generation and verification callbacks */ 5707 1.2 christos SSL_CTX_set_stateless_cookie_generate_cb(sctx, generate_stateless_cookie_callback); 5708 1.2 christos SSL_CTX_set_stateless_cookie_verify_cb(sctx, verify_stateless_cookie_callback); 5709 1.2 christos 5710 1.2 christos /* 5711 1.2 christos * Create a new connection from the client (we can reuse the server SSL 5712 1.2 christos * object). 5713 1.2 christos */ 5714 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 5715 1.2 christos NULL, NULL)) 5716 1.2 christos /* Send the first ClientHello */ 5717 1.2 christos || !TEST_false(create_ssl_connection(serverssl, clientssl, 5718 1.2 christos SSL_ERROR_WANT_READ)) 5719 1.2 christos /* This should fail because there is no cookie */ 5720 1.2 christos || !TEST_int_eq(SSL_stateless(serverssl), 0)) 5721 1.2 christos goto end; 5722 1.2 christos 5723 1.2 christos /* Abandon the connection from this client */ 5724 1.2 christos SSL_free(clientssl); 5725 1.2 christos clientssl = NULL; 5726 1.2 christos 5727 1.2 christos /* 5728 1.2 christos * Now create a connection from a new client but with the same server SSL 5729 1.2 christos * object 5730 1.2 christos */ 5731 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 5732 1.2 christos NULL, NULL)) 5733 1.2 christos /* Send the first ClientHello */ 5734 1.2 christos || !TEST_false(create_ssl_connection(serverssl, clientssl, 5735 1.2 christos SSL_ERROR_WANT_READ)) 5736 1.2 christos /* This should fail because there is no cookie */ 5737 1.2 christos || !TEST_int_eq(SSL_stateless(serverssl), 0) 5738 1.2 christos /* Send the second ClientHello */ 5739 1.2 christos || !TEST_false(create_ssl_connection(serverssl, clientssl, 5740 1.2 christos SSL_ERROR_WANT_READ)) 5741 1.2 christos /* This should succeed because a cookie is now present */ 5742 1.2 christos || !TEST_int_eq(SSL_stateless(serverssl), 1) 5743 1.2 christos /* Complete the connection */ 5744 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 5745 1.2 christos SSL_ERROR_NONE))) 5746 1.2 christos goto end; 5747 1.2 christos 5748 1.2 christos shutdown_ssl_connection(serverssl, clientssl); 5749 1.2 christos serverssl = clientssl = NULL; 5750 1.2 christos testresult = 1; 5751 1.2 christos 5752 1.2 christos end: 5753 1.2 christos SSL_free(serverssl); 5754 1.2 christos SSL_free(clientssl); 5755 1.2 christos SSL_CTX_free(sctx); 5756 1.2 christos SSL_CTX_free(cctx); 5757 1.2 christos return testresult; 5758 1.2 christos 5759 1.2 christos } 5760 1.2 christos #endif /* OSSL_NO_USABLE_TLS1_3 */ 5761 1.2 christos 5762 1.2 christos static int clntaddoldcb = 0; 5763 1.2 christos static int clntparseoldcb = 0; 5764 1.2 christos static int srvaddoldcb = 0; 5765 1.2 christos static int srvparseoldcb = 0; 5766 1.2 christos static int clntaddnewcb = 0; 5767 1.2 christos static int clntparsenewcb = 0; 5768 1.2 christos static int srvaddnewcb = 0; 5769 1.2 christos static int srvparsenewcb = 0; 5770 1.2 christos static int snicb = 0; 5771 1.2 christos 5772 1.2 christos #define TEST_EXT_TYPE1 0xff00 5773 1.2 christos 5774 1.2 christos static int old_add_cb(SSL *s, unsigned int ext_type, const unsigned char **out, 5775 1.2 christos size_t *outlen, int *al, void *add_arg) 5776 1.2 christos { 5777 1.2 christos int *server = (int *)add_arg; 5778 1.2 christos unsigned char *data; 5779 1.2 christos 5780 1.2 christos if (SSL_is_server(s)) 5781 1.2 christos srvaddoldcb++; 5782 1.2 christos else 5783 1.2 christos clntaddoldcb++; 5784 1.2 christos 5785 1.2 christos if (*server != SSL_is_server(s) 5786 1.2 christos || (data = OPENSSL_malloc(sizeof(*data))) == NULL) 5787 1.2 christos return -1; 5788 1.2 christos 5789 1.2 christos *data = 1; 5790 1.2 christos *out = data; 5791 1.2 christos *outlen = sizeof(char); 5792 1.2 christos return 1; 5793 1.2 christos } 5794 1.2 christos 5795 1.2 christos static void old_free_cb(SSL *s, unsigned int ext_type, const unsigned char *out, 5796 1.2 christos void *add_arg) 5797 1.2 christos { 5798 1.2 christos OPENSSL_free((unsigned char *)out); 5799 1.2 christos } 5800 1.2 christos 5801 1.2 christos static int old_parse_cb(SSL *s, unsigned int ext_type, const unsigned char *in, 5802 1.2 christos size_t inlen, int *al, void *parse_arg) 5803 1.2 christos { 5804 1.2 christos int *server = (int *)parse_arg; 5805 1.2 christos 5806 1.2 christos if (SSL_is_server(s)) 5807 1.2 christos srvparseoldcb++; 5808 1.2 christos else 5809 1.2 christos clntparseoldcb++; 5810 1.2 christos 5811 1.2 christos if (*server != SSL_is_server(s) 5812 1.2 christos || inlen != sizeof(char) 5813 1.2 christos || *in != 1) 5814 1.2 christos return -1; 5815 1.2 christos 5816 1.2 christos return 1; 5817 1.2 christos } 5818 1.2 christos 5819 1.2 christos static int new_add_cb(SSL *s, unsigned int ext_type, unsigned int context, 5820 1.2 christos const unsigned char **out, size_t *outlen, X509 *x, 5821 1.2 christos size_t chainidx, int *al, void *add_arg) 5822 1.2 christos { 5823 1.2 christos int *server = (int *)add_arg; 5824 1.2 christos unsigned char *data; 5825 1.2 christos 5826 1.2 christos if (SSL_is_server(s)) 5827 1.2 christos srvaddnewcb++; 5828 1.2 christos else 5829 1.2 christos clntaddnewcb++; 5830 1.2 christos 5831 1.2 christos if (*server != SSL_is_server(s) 5832 1.2 christos || (data = OPENSSL_malloc(sizeof(*data))) == NULL) 5833 1.2 christos return -1; 5834 1.2 christos 5835 1.2 christos *data = 1; 5836 1.2 christos *out = data; 5837 1.2 christos *outlen = sizeof(*data); 5838 1.2 christos return 1; 5839 1.2 christos } 5840 1.2 christos 5841 1.2 christos static void new_free_cb(SSL *s, unsigned int ext_type, unsigned int context, 5842 1.2 christos const unsigned char *out, void *add_arg) 5843 1.2 christos { 5844 1.2 christos OPENSSL_free((unsigned char *)out); 5845 1.2 christos } 5846 1.2 christos 5847 1.2 christos static int new_parse_cb(SSL *s, unsigned int ext_type, unsigned int context, 5848 1.2 christos const unsigned char *in, size_t inlen, X509 *x, 5849 1.2 christos size_t chainidx, int *al, void *parse_arg) 5850 1.2 christos { 5851 1.2 christos int *server = (int *)parse_arg; 5852 1.2 christos 5853 1.2 christos if (SSL_is_server(s)) 5854 1.2 christos srvparsenewcb++; 5855 1.2 christos else 5856 1.2 christos clntparsenewcb++; 5857 1.2 christos 5858 1.2 christos if (*server != SSL_is_server(s) 5859 1.2 christos || inlen != sizeof(char) || *in != 1) 5860 1.2 christos return -1; 5861 1.2 christos 5862 1.2 christos return 1; 5863 1.2 christos } 5864 1.2 christos 5865 1.2 christos static int sni_cb(SSL *s, int *al, void *arg) 5866 1.2 christos { 5867 1.2 christos SSL_CTX *ctx = (SSL_CTX *)arg; 5868 1.2 christos 5869 1.2 christos if (SSL_set_SSL_CTX(s, ctx) == NULL) { 5870 1.2 christos *al = SSL_AD_INTERNAL_ERROR; 5871 1.2 christos return SSL_TLSEXT_ERR_ALERT_FATAL; 5872 1.2 christos } 5873 1.2 christos snicb++; 5874 1.2 christos return SSL_TLSEXT_ERR_OK; 5875 1.2 christos } 5876 1.2 christos 5877 1.2 christos static int verify_cb(int preverify_ok, X509_STORE_CTX *x509_ctx) 5878 1.2 christos { 5879 1.2 christos return 1; 5880 1.2 christos } 5881 1.2 christos 5882 1.2 christos /* 5883 1.2 christos * Custom call back tests. 5884 1.2 christos * Test 0: Old style callbacks in TLSv1.2 5885 1.2 christos * Test 1: New style callbacks in TLSv1.2 5886 1.2 christos * Test 2: New style callbacks in TLSv1.2 with SNI 5887 1.2 christos * Test 3: New style callbacks in TLSv1.3. Extensions in CH and EE 5888 1.2 christos * Test 4: New style callbacks in TLSv1.3. Extensions in CH, SH, EE, Cert + NST 5889 1.2 christos * Test 5: New style callbacks in TLSv1.3. Extensions in CR + Client Cert 5890 1.2 christos */ 5891 1.2 christos static int test_custom_exts(int tst) 5892 1.2 christos { 5893 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL, *sctx2 = NULL; 5894 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 5895 1.2 christos int testresult = 0; 5896 1.2 christos static int server = 1; 5897 1.2 christos static int client = 0; 5898 1.2 christos SSL_SESSION *sess = NULL; 5899 1.2 christos unsigned int context; 5900 1.2 christos 5901 1.2 christos #if defined(OPENSSL_NO_TLS1_2) && !defined(OSSL_NO_USABLE_TLS1_3) 5902 1.2 christos /* Skip tests for TLSv1.2 and below in this case */ 5903 1.2 christos if (tst < 3) 5904 1.2 christos return 1; 5905 1.2 christos #endif 5906 1.2 christos 5907 1.2 christos /* Reset callback counters */ 5908 1.2 christos clntaddoldcb = clntparseoldcb = srvaddoldcb = srvparseoldcb = 0; 5909 1.2 christos clntaddnewcb = clntparsenewcb = srvaddnewcb = srvparsenewcb = 0; 5910 1.2 christos snicb = 0; 5911 1.2 christos 5912 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 5913 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 5914 1.2 christos &sctx, &cctx, cert, privkey))) 5915 1.2 christos goto end; 5916 1.2 christos 5917 1.2 christos if (tst == 2 5918 1.2 christos && !TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), NULL, 5919 1.2 christos TLS1_VERSION, 0, 5920 1.2 christos &sctx2, NULL, cert, privkey))) 5921 1.2 christos goto end; 5922 1.2 christos 5923 1.2 christos 5924 1.2 christos if (tst < 3) { 5925 1.2 christos SSL_CTX_set_options(cctx, SSL_OP_NO_TLSv1_3); 5926 1.2 christos SSL_CTX_set_options(sctx, SSL_OP_NO_TLSv1_3); 5927 1.2 christos if (sctx2 != NULL) 5928 1.2 christos SSL_CTX_set_options(sctx2, SSL_OP_NO_TLSv1_3); 5929 1.2 christos } 5930 1.2 christos 5931 1.2 christos if (tst == 5) { 5932 1.2 christos context = SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 5933 1.2 christos | SSL_EXT_TLS1_3_CERTIFICATE; 5934 1.2 christos SSL_CTX_set_verify(sctx, 5935 1.2 christos SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 5936 1.2 christos verify_cb); 5937 1.2 christos if (!TEST_int_eq(SSL_CTX_use_certificate_file(cctx, cert, 5938 1.2 christos SSL_FILETYPE_PEM), 1) 5939 1.2 christos || !TEST_int_eq(SSL_CTX_use_PrivateKey_file(cctx, privkey, 5940 1.2 christos SSL_FILETYPE_PEM), 1) 5941 1.2 christos || !TEST_int_eq(SSL_CTX_check_private_key(cctx), 1)) 5942 1.2 christos goto end; 5943 1.2 christos } else if (tst == 4) { 5944 1.2 christos context = SSL_EXT_CLIENT_HELLO 5945 1.2 christos | SSL_EXT_TLS1_2_SERVER_HELLO 5946 1.2 christos | SSL_EXT_TLS1_3_SERVER_HELLO 5947 1.2 christos | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 5948 1.2 christos | SSL_EXT_TLS1_3_CERTIFICATE 5949 1.2 christos | SSL_EXT_TLS1_3_NEW_SESSION_TICKET; 5950 1.2 christos } else { 5951 1.2 christos context = SSL_EXT_CLIENT_HELLO 5952 1.2 christos | SSL_EXT_TLS1_2_SERVER_HELLO 5953 1.2 christos | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS; 5954 1.2 christos } 5955 1.2 christos 5956 1.2 christos /* Create a client side custom extension */ 5957 1.2 christos if (tst == 0) { 5958 1.2 christos if (!TEST_true(SSL_CTX_add_client_custom_ext(cctx, TEST_EXT_TYPE1, 5959 1.2 christos old_add_cb, old_free_cb, 5960 1.2 christos &client, old_parse_cb, 5961 1.2 christos &client))) 5962 1.2 christos goto end; 5963 1.2 christos } else { 5964 1.2 christos if (!TEST_true(SSL_CTX_add_custom_ext(cctx, TEST_EXT_TYPE1, context, 5965 1.2 christos new_add_cb, new_free_cb, 5966 1.2 christos &client, new_parse_cb, &client))) 5967 1.2 christos goto end; 5968 1.2 christos } 5969 1.2 christos 5970 1.2 christos /* Should not be able to add duplicates */ 5971 1.2 christos if (!TEST_false(SSL_CTX_add_client_custom_ext(cctx, TEST_EXT_TYPE1, 5972 1.2 christos old_add_cb, old_free_cb, 5973 1.2 christos &client, old_parse_cb, 5974 1.2 christos &client)) 5975 1.2 christos || !TEST_false(SSL_CTX_add_custom_ext(cctx, TEST_EXT_TYPE1, 5976 1.2 christos context, new_add_cb, 5977 1.2 christos new_free_cb, &client, 5978 1.2 christos new_parse_cb, &client))) 5979 1.2 christos goto end; 5980 1.2 christos 5981 1.2 christos /* Create a server side custom extension */ 5982 1.2 christos if (tst == 0) { 5983 1.2 christos if (!TEST_true(SSL_CTX_add_server_custom_ext(sctx, TEST_EXT_TYPE1, 5984 1.2 christos old_add_cb, old_free_cb, 5985 1.2 christos &server, old_parse_cb, 5986 1.2 christos &server))) 5987 1.2 christos goto end; 5988 1.2 christos } else { 5989 1.2 christos if (!TEST_true(SSL_CTX_add_custom_ext(sctx, TEST_EXT_TYPE1, context, 5990 1.2 christos new_add_cb, new_free_cb, 5991 1.2 christos &server, new_parse_cb, &server))) 5992 1.2 christos goto end; 5993 1.2 christos if (sctx2 != NULL 5994 1.2 christos && !TEST_true(SSL_CTX_add_custom_ext(sctx2, TEST_EXT_TYPE1, 5995 1.2 christos context, new_add_cb, 5996 1.2 christos new_free_cb, &server, 5997 1.2 christos new_parse_cb, &server))) 5998 1.2 christos goto end; 5999 1.2 christos } 6000 1.2 christos 6001 1.2 christos /* Should not be able to add duplicates */ 6002 1.2 christos if (!TEST_false(SSL_CTX_add_server_custom_ext(sctx, TEST_EXT_TYPE1, 6003 1.2 christos old_add_cb, old_free_cb, 6004 1.2 christos &server, old_parse_cb, 6005 1.2 christos &server)) 6006 1.2 christos || !TEST_false(SSL_CTX_add_custom_ext(sctx, TEST_EXT_TYPE1, 6007 1.2 christos context, new_add_cb, 6008 1.2 christos new_free_cb, &server, 6009 1.2 christos new_parse_cb, &server))) 6010 1.2 christos goto end; 6011 1.2 christos 6012 1.2 christos if (tst == 2) { 6013 1.2 christos /* Set up SNI */ 6014 1.2 christos if (!TEST_true(SSL_CTX_set_tlsext_servername_callback(sctx, sni_cb)) 6015 1.2 christos || !TEST_true(SSL_CTX_set_tlsext_servername_arg(sctx, sctx2))) 6016 1.2 christos goto end; 6017 1.2 christos } 6018 1.2 christos 6019 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 6020 1.2 christos &clientssl, NULL, NULL)) 6021 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 6022 1.2 christos SSL_ERROR_NONE))) 6023 1.2 christos goto end; 6024 1.2 christos 6025 1.2 christos if (tst == 0) { 6026 1.2 christos if (clntaddoldcb != 1 6027 1.2 christos || clntparseoldcb != 1 6028 1.2 christos || srvaddoldcb != 1 6029 1.2 christos || srvparseoldcb != 1) 6030 1.2 christos goto end; 6031 1.2 christos } else if (tst == 1 || tst == 2 || tst == 3) { 6032 1.2 christos if (clntaddnewcb != 1 6033 1.2 christos || clntparsenewcb != 1 6034 1.2 christos || srvaddnewcb != 1 6035 1.2 christos || srvparsenewcb != 1 6036 1.2 christos || (tst != 2 && snicb != 0) 6037 1.2 christos || (tst == 2 && snicb != 1)) 6038 1.2 christos goto end; 6039 1.2 christos } else if (tst == 5) { 6040 1.2 christos if (clntaddnewcb != 1 6041 1.2 christos || clntparsenewcb != 1 6042 1.2 christos || srvaddnewcb != 1 6043 1.2 christos || srvparsenewcb != 1) 6044 1.2 christos goto end; 6045 1.2 christos } else { 6046 1.2 christos /* In this case there 2 NewSessionTicket messages created */ 6047 1.2 christos if (clntaddnewcb != 1 6048 1.2 christos || clntparsenewcb != 5 6049 1.2 christos || srvaddnewcb != 5 6050 1.2 christos || srvparsenewcb != 1) 6051 1.2 christos goto end; 6052 1.2 christos } 6053 1.2 christos 6054 1.2 christos sess = SSL_get1_session(clientssl); 6055 1.2 christos SSL_shutdown(clientssl); 6056 1.2 christos SSL_shutdown(serverssl); 6057 1.2 christos SSL_free(serverssl); 6058 1.2 christos SSL_free(clientssl); 6059 1.2 christos serverssl = clientssl = NULL; 6060 1.2 christos 6061 1.2 christos if (tst == 3 || tst == 5) { 6062 1.2 christos /* We don't bother with the resumption aspects for these tests */ 6063 1.2 christos testresult = 1; 6064 1.2 christos goto end; 6065 1.2 christos } 6066 1.2 christos 6067 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 6068 1.2 christos NULL, NULL)) 6069 1.2 christos || !TEST_true(SSL_set_session(clientssl, sess)) 6070 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 6071 1.2 christos SSL_ERROR_NONE))) 6072 1.2 christos goto end; 6073 1.2 christos 6074 1.2 christos /* 6075 1.2 christos * For a resumed session we expect to add the ClientHello extension. For the 6076 1.2 christos * old style callbacks we ignore it on the server side because they set 6077 1.2 christos * SSL_EXT_IGNORE_ON_RESUMPTION. The new style callbacks do not ignore 6078 1.2 christos * them. 6079 1.2 christos */ 6080 1.2 christos if (tst == 0) { 6081 1.2 christos if (clntaddoldcb != 2 6082 1.2 christos || clntparseoldcb != 1 6083 1.2 christos || srvaddoldcb != 1 6084 1.2 christos || srvparseoldcb != 1) 6085 1.2 christos goto end; 6086 1.2 christos } else if (tst == 1 || tst == 2 || tst == 3) { 6087 1.2 christos if (clntaddnewcb != 2 6088 1.2 christos || clntparsenewcb != 2 6089 1.2 christos || srvaddnewcb != 2 6090 1.2 christos || srvparsenewcb != 2) 6091 1.2 christos goto end; 6092 1.2 christos } else { 6093 1.2 christos /* 6094 1.2 christos * No Certificate message extensions in the resumption handshake, 6095 1.2 christos * 2 NewSessionTickets in the initial handshake, 1 in the resumption 6096 1.2 christos */ 6097 1.2 christos if (clntaddnewcb != 2 6098 1.2 christos || clntparsenewcb != 8 6099 1.2 christos || srvaddnewcb != 8 6100 1.2 christos || srvparsenewcb != 2) 6101 1.2 christos goto end; 6102 1.2 christos } 6103 1.2 christos 6104 1.2 christos testresult = 1; 6105 1.2 christos 6106 1.2 christos end: 6107 1.2 christos SSL_SESSION_free(sess); 6108 1.2 christos SSL_free(serverssl); 6109 1.2 christos SSL_free(clientssl); 6110 1.2 christos SSL_CTX_free(sctx2); 6111 1.2 christos SSL_CTX_free(sctx); 6112 1.2 christos SSL_CTX_free(cctx); 6113 1.2 christos return testresult; 6114 1.2 christos } 6115 1.2 christos 6116 1.2 christos #if !defined(OPENSSL_NO_TLS1_2) && !defined(OSSL_NO_USABLE_TLS1_3) 6117 1.2 christos 6118 1.2 christos #define SYNTHV1CONTEXT (SSL_EXT_TLS1_2_AND_BELOW_ONLY \ 6119 1.2 christos | SSL_EXT_CLIENT_HELLO \ 6120 1.2 christos | SSL_EXT_TLS1_2_SERVER_HELLO \ 6121 1.2 christos | SSL_EXT_IGNORE_ON_RESUMPTION) 6122 1.2 christos 6123 1.2 christos #define TLS13CONTEXT (SSL_EXT_TLS1_3_CERTIFICATE \ 6124 1.2 christos | SSL_EXT_TLS1_2_SERVER_HELLO \ 6125 1.2 christos | SSL_EXT_CLIENT_HELLO) 6126 1.2 christos 6127 1.2 christos #define SERVERINFO_CUSTOM \ 6128 1.2 christos 0x00, (char)TLSEXT_TYPE_signed_certificate_timestamp, \ 6129 1.2 christos 0x00, 0x03, \ 6130 1.2 christos 0x04, 0x05, 0x06 \ 6131 1.2 christos 6132 1.2 christos static const unsigned char serverinfo_custom_tls13[] = { 6133 1.2 christos 0x00, 0x00, (TLS13CONTEXT >> 8) & 0xff, TLS13CONTEXT & 0xff, 6134 1.2 christos SERVERINFO_CUSTOM 6135 1.2 christos }; 6136 1.2 christos static const unsigned char serverinfo_custom_v2[] = { 6137 1.2 christos 0x00, 0x00, (SYNTHV1CONTEXT >> 8) & 0xff, SYNTHV1CONTEXT & 0xff, 6138 1.2 christos SERVERINFO_CUSTOM 6139 1.2 christos }; 6140 1.2 christos static const unsigned char serverinfo_custom_v1[] = { 6141 1.2 christos SERVERINFO_CUSTOM 6142 1.2 christos }; 6143 1.2 christos static const size_t serverinfo_custom_tls13_len = sizeof(serverinfo_custom_tls13); 6144 1.2 christos static const size_t serverinfo_custom_v2_len = sizeof(serverinfo_custom_v2); 6145 1.2 christos static const size_t serverinfo_custom_v1_len = sizeof(serverinfo_custom_v1); 6146 1.2 christos 6147 1.2 christos static int serverinfo_custom_parse_cb(SSL *s, unsigned int ext_type, 6148 1.2 christos unsigned int context, 6149 1.2 christos const unsigned char *in, 6150 1.2 christos size_t inlen, X509 *x, 6151 1.2 christos size_t chainidx, int *al, 6152 1.2 christos void *parse_arg) 6153 1.2 christos { 6154 1.2 christos const size_t len = serverinfo_custom_v1_len; 6155 1.2 christos const unsigned char *si = &serverinfo_custom_v1[len - 3]; 6156 1.2 christos int *p_cb_result = (int*)parse_arg; 6157 1.2 christos *p_cb_result = TEST_mem_eq(in, inlen, si, 3); 6158 1.2 christos return 1; 6159 1.2 christos } 6160 1.2 christos 6161 1.2 christos static int test_serverinfo_custom(const int idx) 6162 1.2 christos { 6163 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 6164 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 6165 1.2 christos int testresult = 0; 6166 1.2 christos int cb_result = 0; 6167 1.2 christos 6168 1.2 christos /* 6169 1.2 christos * Following variables are set in the switch statement 6170 1.2 christos * according to the test iteration. 6171 1.2 christos * Default values do not make much sense: test would fail with them. 6172 1.2 christos */ 6173 1.2 christos int serverinfo_version = 0; 6174 1.2 christos int protocol_version = 0; 6175 1.2 christos unsigned int extension_context = 0; 6176 1.2 christos const unsigned char *si = NULL; 6177 1.2 christos size_t si_len = 0; 6178 1.2 christos 6179 1.2 christos const int call_use_serverinfo_ex = idx > 0; 6180 1.2 christos switch (idx) { 6181 1.2 christos case 0: /* FALLTHROUGH */ 6182 1.2 christos case 1: 6183 1.2 christos serverinfo_version = SSL_SERVERINFOV1; 6184 1.2 christos protocol_version = TLS1_2_VERSION; 6185 1.2 christos extension_context = SYNTHV1CONTEXT; 6186 1.2 christos si = serverinfo_custom_v1; 6187 1.2 christos si_len = serverinfo_custom_v1_len; 6188 1.2 christos break; 6189 1.2 christos case 2: 6190 1.2 christos serverinfo_version = SSL_SERVERINFOV2; 6191 1.2 christos protocol_version = TLS1_2_VERSION; 6192 1.2 christos extension_context = SYNTHV1CONTEXT; 6193 1.2 christos si = serverinfo_custom_v2; 6194 1.2 christos si_len = serverinfo_custom_v2_len; 6195 1.2 christos break; 6196 1.2 christos case 3: 6197 1.2 christos serverinfo_version = SSL_SERVERINFOV2; 6198 1.2 christos protocol_version = TLS1_3_VERSION; 6199 1.2 christos extension_context = TLS13CONTEXT; 6200 1.2 christos si = serverinfo_custom_tls13; 6201 1.2 christos si_len = serverinfo_custom_tls13_len; 6202 1.2 christos break; 6203 1.2 christos } 6204 1.2 christos 6205 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, 6206 1.2 christos TLS_method(), 6207 1.2 christos TLS_method(), 6208 1.2 christos protocol_version, 6209 1.2 christos protocol_version, 6210 1.2 christos &sctx, &cctx, cert, privkey))) 6211 1.2 christos goto end; 6212 1.2 christos 6213 1.2 christos if (call_use_serverinfo_ex) { 6214 1.2 christos if (!TEST_true(SSL_CTX_use_serverinfo_ex(sctx, serverinfo_version, 6215 1.2 christos si, si_len))) 6216 1.2 christos goto end; 6217 1.2 christos } else { 6218 1.2 christos if (!TEST_true(SSL_CTX_use_serverinfo(sctx, si, si_len))) 6219 1.2 christos goto end; 6220 1.2 christos } 6221 1.2 christos 6222 1.2 christos if (!TEST_true(SSL_CTX_add_custom_ext(cctx, TLSEXT_TYPE_signed_certificate_timestamp, 6223 1.2 christos extension_context, 6224 1.2 christos NULL, NULL, NULL, 6225 1.2 christos serverinfo_custom_parse_cb, 6226 1.2 christos &cb_result)) 6227 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 6228 1.2 christos NULL, NULL)) 6229 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 6230 1.2 christos SSL_ERROR_NONE)) 6231 1.2 christos || !TEST_int_eq(SSL_do_handshake(clientssl), 1)) 6232 1.2 christos goto end; 6233 1.2 christos 6234 1.2 christos if (!TEST_true(cb_result)) 6235 1.2 christos goto end; 6236 1.2 christos 6237 1.2 christos testresult = 1; 6238 1.2 christos 6239 1.2 christos end: 6240 1.2 christos SSL_free(serverssl); 6241 1.2 christos SSL_free(clientssl); 6242 1.2 christos SSL_CTX_free(sctx); 6243 1.2 christos SSL_CTX_free(cctx); 6244 1.2 christos 6245 1.2 christos return testresult; 6246 1.2 christos } 6247 1.2 christos #endif 6248 1.2 christos 6249 1.2 christos /* 6250 1.2 christos * Test that SSL_export_keying_material() produces expected results. There are 6251 1.2 christos * no test vectors so all we do is test that both sides of the communication 6252 1.2 christos * produce the same results for different protocol versions. 6253 1.2 christos */ 6254 1.2 christos #define SMALL_LABEL_LEN 10 6255 1.2 christos #define LONG_LABEL_LEN 249 6256 1.2 christos static int test_export_key_mat(int tst) 6257 1.2 christos { 6258 1.2 christos int testresult = 0; 6259 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL, *sctx2 = NULL; 6260 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 6261 1.2 christos const char label[LONG_LABEL_LEN + 1] = "test label"; 6262 1.2 christos const unsigned char context[] = "context"; 6263 1.2 christos const unsigned char *emptycontext = NULL; 6264 1.2 christos unsigned char ckeymat1[80], ckeymat2[80], ckeymat3[80]; 6265 1.2 christos unsigned char skeymat1[80], skeymat2[80], skeymat3[80]; 6266 1.2 christos size_t labellen; 6267 1.2 christos const int protocols[] = { 6268 1.2 christos TLS1_VERSION, 6269 1.2 christos TLS1_1_VERSION, 6270 1.2 christos TLS1_2_VERSION, 6271 1.2 christos TLS1_3_VERSION, 6272 1.2 christos TLS1_3_VERSION, 6273 1.2 christos TLS1_3_VERSION 6274 1.2 christos }; 6275 1.2 christos 6276 1.2 christos #ifdef OPENSSL_NO_TLS1 6277 1.2 christos if (tst == 0) 6278 1.2 christos return 1; 6279 1.2 christos #endif 6280 1.2 christos #ifdef OPENSSL_NO_TLS1_1 6281 1.2 christos if (tst == 1) 6282 1.2 christos return 1; 6283 1.2 christos #endif 6284 1.2 christos if (is_fips && (tst == 0 || tst == 1)) 6285 1.2 christos return 1; 6286 1.2 christos #ifdef OPENSSL_NO_TLS1_2 6287 1.2 christos if (tst == 2) 6288 1.2 christos return 1; 6289 1.2 christos #endif 6290 1.2 christos #ifdef OSSL_NO_USABLE_TLS1_3 6291 1.2 christos if (tst >= 3) 6292 1.2 christos return 1; 6293 1.2 christos #endif 6294 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 6295 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 6296 1.2 christos &sctx, &cctx, cert, privkey))) 6297 1.2 christos goto end; 6298 1.2 christos 6299 1.2 christos OPENSSL_assert(tst >= 0 && (size_t)tst < OSSL_NELEM(protocols)); 6300 1.2 christos SSL_CTX_set_max_proto_version(cctx, protocols[tst]); 6301 1.2 christos SSL_CTX_set_min_proto_version(cctx, protocols[tst]); 6302 1.2 christos if ((protocols[tst] < TLS1_2_VERSION) && 6303 1.2 christos (!SSL_CTX_set_cipher_list(cctx, "DEFAULT:@SECLEVEL=0") 6304 1.2 christos || !SSL_CTX_set_cipher_list(sctx, "DEFAULT:@SECLEVEL=0"))) 6305 1.2 christos goto end; 6306 1.2 christos 6307 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL, 6308 1.2 christos NULL))) 6309 1.2 christos goto end; 6310 1.2 christos 6311 1.2 christos /* 6312 1.2 christos * Premature call of SSL_export_keying_material should just fail. 6313 1.2 christos */ 6314 1.2 christos if (!TEST_int_le(SSL_export_keying_material(clientssl, ckeymat1, 6315 1.2 christos sizeof(ckeymat1), label, 6316 1.2 christos SMALL_LABEL_LEN + 1, context, 6317 1.2 christos sizeof(context) - 1, 1), 0)) 6318 1.2 christos goto end; 6319 1.2 christos 6320 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 6321 1.2 christos SSL_ERROR_NONE))) 6322 1.2 christos goto end; 6323 1.2 christos 6324 1.2 christos if (tst == 5) { 6325 1.2 christos /* 6326 1.2 christos * TLSv1.3 imposes a maximum label len of 249 bytes. Check we fail if we 6327 1.2 christos * go over that. 6328 1.2 christos */ 6329 1.2 christos if (!TEST_int_le(SSL_export_keying_material(clientssl, ckeymat1, 6330 1.2 christos sizeof(ckeymat1), label, 6331 1.2 christos LONG_LABEL_LEN + 1, context, 6332 1.2 christos sizeof(context) - 1, 1), 0)) 6333 1.2 christos goto end; 6334 1.2 christos 6335 1.2 christos testresult = 1; 6336 1.2 christos goto end; 6337 1.2 christos } else if (tst == 4) { 6338 1.2 christos labellen = LONG_LABEL_LEN; 6339 1.2 christos } else { 6340 1.2 christos labellen = SMALL_LABEL_LEN; 6341 1.2 christos } 6342 1.2 christos 6343 1.2 christos if (!TEST_int_eq(SSL_export_keying_material(clientssl, ckeymat1, 6344 1.2 christos sizeof(ckeymat1), label, 6345 1.2 christos labellen, context, 6346 1.2 christos sizeof(context) - 1, 1), 1) 6347 1.2 christos || !TEST_int_eq(SSL_export_keying_material(clientssl, ckeymat2, 6348 1.2 christos sizeof(ckeymat2), label, 6349 1.2 christos labellen, 6350 1.2 christos emptycontext, 6351 1.2 christos 0, 1), 1) 6352 1.2 christos || !TEST_int_eq(SSL_export_keying_material(clientssl, ckeymat3, 6353 1.2 christos sizeof(ckeymat3), label, 6354 1.2 christos labellen, 6355 1.2 christos NULL, 0, 0), 1) 6356 1.2 christos || !TEST_int_eq(SSL_export_keying_material(serverssl, skeymat1, 6357 1.2 christos sizeof(skeymat1), label, 6358 1.2 christos labellen, 6359 1.2 christos context, 6360 1.2 christos sizeof(context) -1, 1), 6361 1.2 christos 1) 6362 1.2 christos || !TEST_int_eq(SSL_export_keying_material(serverssl, skeymat2, 6363 1.2 christos sizeof(skeymat2), label, 6364 1.2 christos labellen, 6365 1.2 christos emptycontext, 6366 1.2 christos 0, 1), 1) 6367 1.2 christos || !TEST_int_eq(SSL_export_keying_material(serverssl, skeymat3, 6368 1.2 christos sizeof(skeymat3), label, 6369 1.2 christos labellen, 6370 1.2 christos NULL, 0, 0), 1) 6371 1.2 christos /* 6372 1.2 christos * Check that both sides created the same key material with the 6373 1.2 christos * same context. 6374 1.2 christos */ 6375 1.2 christos || !TEST_mem_eq(ckeymat1, sizeof(ckeymat1), skeymat1, 6376 1.2 christos sizeof(skeymat1)) 6377 1.2 christos /* 6378 1.2 christos * Check that both sides created the same key material with an 6379 1.2 christos * empty context. 6380 1.2 christos */ 6381 1.2 christos || !TEST_mem_eq(ckeymat2, sizeof(ckeymat2), skeymat2, 6382 1.2 christos sizeof(skeymat2)) 6383 1.2 christos /* 6384 1.2 christos * Check that both sides created the same key material without a 6385 1.2 christos * context. 6386 1.2 christos */ 6387 1.2 christos || !TEST_mem_eq(ckeymat3, sizeof(ckeymat3), skeymat3, 6388 1.2 christos sizeof(skeymat3)) 6389 1.2 christos /* Different contexts should produce different results */ 6390 1.2 christos || !TEST_mem_ne(ckeymat1, sizeof(ckeymat1), ckeymat2, 6391 1.2 christos sizeof(ckeymat2))) 6392 1.2 christos goto end; 6393 1.2 christos 6394 1.2 christos /* 6395 1.2 christos * Check that an empty context and no context produce different results in 6396 1.2 christos * protocols less than TLSv1.3. In TLSv1.3 they should be the same. 6397 1.2 christos */ 6398 1.2 christos if ((tst < 3 && !TEST_mem_ne(ckeymat2, sizeof(ckeymat2), ckeymat3, 6399 1.2 christos sizeof(ckeymat3))) 6400 1.2 christos || (tst >= 3 && !TEST_mem_eq(ckeymat2, sizeof(ckeymat2), ckeymat3, 6401 1.2 christos sizeof(ckeymat3)))) 6402 1.2 christos goto end; 6403 1.2 christos 6404 1.2 christos testresult = 1; 6405 1.2 christos 6406 1.2 christos end: 6407 1.2 christos SSL_free(serverssl); 6408 1.2 christos SSL_free(clientssl); 6409 1.2 christos SSL_CTX_free(sctx2); 6410 1.2 christos SSL_CTX_free(sctx); 6411 1.2 christos SSL_CTX_free(cctx); 6412 1.2 christos 6413 1.2 christos return testresult; 6414 1.2 christos } 6415 1.2 christos 6416 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 6417 1.2 christos /* 6418 1.2 christos * Test that SSL_export_keying_material_early() produces expected 6419 1.2 christos * results. There are no test vectors so all we do is test that both 6420 1.2 christos * sides of the communication produce the same results for different 6421 1.2 christos * protocol versions. 6422 1.2 christos */ 6423 1.2 christos static int test_export_key_mat_early(int idx) 6424 1.2 christos { 6425 1.2 christos static const char label[] = "test label"; 6426 1.2 christos static const unsigned char context[] = "context"; 6427 1.2 christos int testresult = 0; 6428 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 6429 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 6430 1.2 christos SSL_SESSION *sess = NULL; 6431 1.2 christos const unsigned char *emptycontext = NULL; 6432 1.2 christos unsigned char ckeymat1[80], ckeymat2[80]; 6433 1.2 christos unsigned char skeymat1[80], skeymat2[80]; 6434 1.2 christos unsigned char buf[1]; 6435 1.2 christos size_t readbytes, written; 6436 1.2 christos 6437 1.2 christos if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl, &serverssl, 6438 1.2 christos &sess, idx, SHA384_DIGEST_LENGTH))) 6439 1.2 christos goto end; 6440 1.2 christos 6441 1.2 christos /* Here writing 0 length early data is enough. */ 6442 1.2 christos if (!TEST_true(SSL_write_early_data(clientssl, NULL, 0, &written)) 6443 1.2 christos || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf), 6444 1.2 christos &readbytes), 6445 1.2 christos SSL_READ_EARLY_DATA_ERROR) 6446 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(serverssl), 6447 1.2 christos SSL_EARLY_DATA_ACCEPTED)) 6448 1.2 christos goto end; 6449 1.2 christos 6450 1.2 christos if (!TEST_int_eq(SSL_export_keying_material_early( 6451 1.2 christos clientssl, ckeymat1, sizeof(ckeymat1), label, 6452 1.2 christos sizeof(label) - 1, context, sizeof(context) - 1), 1) 6453 1.2 christos || !TEST_int_eq(SSL_export_keying_material_early( 6454 1.2 christos clientssl, ckeymat2, sizeof(ckeymat2), label, 6455 1.2 christos sizeof(label) - 1, emptycontext, 0), 1) 6456 1.2 christos || !TEST_int_eq(SSL_export_keying_material_early( 6457 1.2 christos serverssl, skeymat1, sizeof(skeymat1), label, 6458 1.2 christos sizeof(label) - 1, context, sizeof(context) - 1), 1) 6459 1.2 christos || !TEST_int_eq(SSL_export_keying_material_early( 6460 1.2 christos serverssl, skeymat2, sizeof(skeymat2), label, 6461 1.2 christos sizeof(label) - 1, emptycontext, 0), 1) 6462 1.2 christos /* 6463 1.2 christos * Check that both sides created the same key material with the 6464 1.2 christos * same context. 6465 1.2 christos */ 6466 1.2 christos || !TEST_mem_eq(ckeymat1, sizeof(ckeymat1), skeymat1, 6467 1.2 christos sizeof(skeymat1)) 6468 1.2 christos /* 6469 1.2 christos * Check that both sides created the same key material with an 6470 1.2 christos * empty context. 6471 1.2 christos */ 6472 1.2 christos || !TEST_mem_eq(ckeymat2, sizeof(ckeymat2), skeymat2, 6473 1.2 christos sizeof(skeymat2)) 6474 1.2 christos /* Different contexts should produce different results */ 6475 1.2 christos || !TEST_mem_ne(ckeymat1, sizeof(ckeymat1), ckeymat2, 6476 1.2 christos sizeof(ckeymat2))) 6477 1.2 christos goto end; 6478 1.2 christos 6479 1.2 christos testresult = 1; 6480 1.2 christos 6481 1.2 christos end: 6482 1.2 christos SSL_SESSION_free(sess); 6483 1.2 christos SSL_SESSION_free(clientpsk); 6484 1.2 christos SSL_SESSION_free(serverpsk); 6485 1.2 christos clientpsk = serverpsk = NULL; 6486 1.2 christos SSL_free(serverssl); 6487 1.2 christos SSL_free(clientssl); 6488 1.2 christos SSL_CTX_free(sctx); 6489 1.2 christos SSL_CTX_free(cctx); 6490 1.2 christos 6491 1.2 christos return testresult; 6492 1.2 christos } 6493 1.2 christos 6494 1.2 christos #define NUM_KEY_UPDATE_MESSAGES 40 6495 1.2 christos /* 6496 1.2 christos * Test KeyUpdate. 6497 1.2 christos */ 6498 1.2 christos static int test_key_update(void) 6499 1.2 christos { 6500 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 6501 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 6502 1.2 christos int testresult = 0, i, j; 6503 1.2 christos char buf[20]; 6504 1.2 christos static char *mess = "A test message"; 6505 1.2 christos 6506 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 6507 1.2 christos TLS_client_method(), 6508 1.2 christos TLS1_3_VERSION, 6509 1.2 christos 0, 6510 1.2 christos &sctx, &cctx, cert, privkey)) 6511 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 6512 1.2 christos NULL, NULL)) 6513 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 6514 1.2 christos SSL_ERROR_NONE))) 6515 1.2 christos goto end; 6516 1.2 christos 6517 1.2 christos for (j = 0; j < 2; j++) { 6518 1.2 christos /* Send lots of KeyUpdate messages */ 6519 1.2 christos for (i = 0; i < NUM_KEY_UPDATE_MESSAGES; i++) { 6520 1.2 christos if (!TEST_true(SSL_key_update(clientssl, 6521 1.2 christos (j == 0) 6522 1.2 christos ? SSL_KEY_UPDATE_NOT_REQUESTED 6523 1.2 christos : SSL_KEY_UPDATE_REQUESTED)) 6524 1.2 christos || !TEST_true(SSL_do_handshake(clientssl))) 6525 1.2 christos goto end; 6526 1.2 christos } 6527 1.2 christos 6528 1.2 christos /* Check that sending and receiving app data is ok */ 6529 1.2 christos if (!TEST_int_eq(SSL_write(clientssl, mess, strlen(mess)), strlen(mess)) 6530 1.2 christos || !TEST_int_eq(SSL_read(serverssl, buf, sizeof(buf)), 6531 1.2 christos strlen(mess))) 6532 1.2 christos goto end; 6533 1.2 christos 6534 1.2 christos if (!TEST_int_eq(SSL_write(serverssl, mess, strlen(mess)), strlen(mess)) 6535 1.2 christos || !TEST_int_eq(SSL_read(clientssl, buf, sizeof(buf)), 6536 1.2 christos strlen(mess))) 6537 1.2 christos goto end; 6538 1.2 christos } 6539 1.2 christos 6540 1.2 christos testresult = 1; 6541 1.2 christos 6542 1.2 christos end: 6543 1.2 christos SSL_free(serverssl); 6544 1.2 christos SSL_free(clientssl); 6545 1.2 christos SSL_CTX_free(sctx); 6546 1.2 christos SSL_CTX_free(cctx); 6547 1.2 christos 6548 1.2 christos return testresult; 6549 1.2 christos } 6550 1.2 christos 6551 1.2 christos /* 6552 1.2 christos * Test we can handle a KeyUpdate (update requested) message while 6553 1.2 christos * write data is pending in peer. 6554 1.2 christos * Test 0: Client sends KeyUpdate while Server is writing 6555 1.2 christos * Test 1: Server sends KeyUpdate while Client is writing 6556 1.2 christos */ 6557 1.2 christos static int test_key_update_peer_in_write(int tst) 6558 1.2 christos { 6559 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 6560 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 6561 1.2 christos int testresult = 0; 6562 1.2 christos char buf[20]; 6563 1.2 christos static char *mess = "A test message"; 6564 1.2 christos BIO *bretry = BIO_new(bio_s_always_retry()); 6565 1.2 christos BIO *tmp = NULL; 6566 1.2 christos SSL *peerupdate = NULL, *peerwrite = NULL; 6567 1.2 christos 6568 1.2 christos if (!TEST_ptr(bretry) 6569 1.2 christos || !TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 6570 1.2 christos TLS_client_method(), 6571 1.2 christos TLS1_3_VERSION, 6572 1.2 christos 0, 6573 1.2 christos &sctx, &cctx, cert, privkey)) 6574 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 6575 1.2 christos NULL, NULL)) 6576 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 6577 1.2 christos SSL_ERROR_NONE))) 6578 1.2 christos goto end; 6579 1.2 christos 6580 1.2 christos peerupdate = tst == 0 ? clientssl : serverssl; 6581 1.2 christos peerwrite = tst == 0 ? serverssl : clientssl; 6582 1.2 christos 6583 1.2 christos if (!TEST_true(SSL_key_update(peerupdate, SSL_KEY_UPDATE_REQUESTED)) 6584 1.2 christos || !TEST_int_eq(SSL_do_handshake(peerupdate), 1)) 6585 1.2 christos goto end; 6586 1.2 christos 6587 1.2 christos /* Swap the writing endpoint's write BIO to force a retry */ 6588 1.2 christos tmp = SSL_get_wbio(peerwrite); 6589 1.2 christos if (!TEST_ptr(tmp) || !TEST_true(BIO_up_ref(tmp))) { 6590 1.2 christos tmp = NULL; 6591 1.2 christos goto end; 6592 1.2 christos } 6593 1.2 christos SSL_set0_wbio(peerwrite, bretry); 6594 1.2 christos bretry = NULL; 6595 1.2 christos 6596 1.2 christos /* Write data that we know will fail with SSL_ERROR_WANT_WRITE */ 6597 1.2 christos if (!TEST_int_eq(SSL_write(peerwrite, mess, strlen(mess)), -1) 6598 1.2 christos || !TEST_int_eq(SSL_get_error(peerwrite, 0), SSL_ERROR_WANT_WRITE)) 6599 1.2 christos goto end; 6600 1.2 christos 6601 1.2 christos /* Reinstate the original writing endpoint's write BIO */ 6602 1.2 christos SSL_set0_wbio(peerwrite, tmp); 6603 1.2 christos tmp = NULL; 6604 1.2 christos 6605 1.2 christos /* Now read some data - we will read the key update */ 6606 1.2 christos if (!TEST_int_eq(SSL_read(peerwrite, buf, sizeof(buf)), -1) 6607 1.2 christos || !TEST_int_eq(SSL_get_error(peerwrite, 0), SSL_ERROR_WANT_READ)) 6608 1.2 christos goto end; 6609 1.2 christos 6610 1.2 christos /* 6611 1.2 christos * Complete the write we started previously and read it from the other 6612 1.2 christos * endpoint 6613 1.2 christos */ 6614 1.2 christos if (!TEST_int_eq(SSL_write(peerwrite, mess, strlen(mess)), strlen(mess)) 6615 1.2 christos || !TEST_int_eq(SSL_read(peerupdate, buf, sizeof(buf)), strlen(mess))) 6616 1.2 christos goto end; 6617 1.2 christos 6618 1.2 christos /* Write more data to ensure we send the KeyUpdate message back */ 6619 1.2 christos if (!TEST_int_eq(SSL_write(peerwrite, mess, strlen(mess)), strlen(mess)) 6620 1.2 christos || !TEST_int_eq(SSL_read(peerupdate, buf, sizeof(buf)), strlen(mess))) 6621 1.2 christos goto end; 6622 1.2 christos 6623 1.2 christos testresult = 1; 6624 1.2 christos 6625 1.2 christos end: 6626 1.2 christos SSL_free(serverssl); 6627 1.2 christos SSL_free(clientssl); 6628 1.2 christos SSL_CTX_free(sctx); 6629 1.2 christos SSL_CTX_free(cctx); 6630 1.2 christos BIO_free(bretry); 6631 1.2 christos BIO_free(tmp); 6632 1.2 christos 6633 1.2 christos return testresult; 6634 1.2 christos } 6635 1.2 christos 6636 1.2 christos /* 6637 1.2 christos * Test we can handle a KeyUpdate (update requested) message while 6638 1.2 christos * peer read data is pending after peer accepted keyupdate(the msg header 6639 1.2 christos * had been read 5 bytes). 6640 1.2 christos * Test 0: Client sends KeyUpdate while Server is reading 6641 1.2 christos * Test 1: Server sends KeyUpdate while Client is reading 6642 1.2 christos */ 6643 1.2 christos static int test_key_update_peer_in_read(int tst) 6644 1.2 christos { 6645 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 6646 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 6647 1.2 christos int testresult = 0; 6648 1.2 christos char prbuf[515], lwbuf[515] = {0}; 6649 1.2 christos static char *mess = "A test message"; 6650 1.2 christos BIO *lbio = NULL, *pbio = NULL; 6651 1.2 christos SSL *local = NULL, *peer = NULL; 6652 1.2 christos 6653 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 6654 1.2 christos TLS_client_method(), 6655 1.2 christos TLS1_3_VERSION, 6656 1.2 christos 0, 6657 1.2 christos &sctx, &cctx, cert, privkey)) 6658 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 6659 1.2 christos NULL, NULL)) 6660 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 6661 1.2 christos SSL_ERROR_NONE))) 6662 1.2 christos goto end; 6663 1.2 christos 6664 1.2 christos local = tst == 0 ? clientssl : serverssl; 6665 1.2 christos peer = tst == 0 ? serverssl : clientssl; 6666 1.2 christos 6667 1.2 christos if (!TEST_int_eq(BIO_new_bio_pair(&lbio, 512, &pbio, 512), 1)) 6668 1.2 christos goto end; 6669 1.2 christos 6670 1.2 christos SSL_set_bio(local, lbio, lbio); 6671 1.2 christos SSL_set_bio(peer, pbio, pbio); 6672 1.2 christos 6673 1.2 christos /* 6674 1.2 christos * we first write keyupdate msg then appdata in local 6675 1.2 christos * write data in local will fail with SSL_ERROR_WANT_WRITE,because 6676 1.2 christos * lwbuf app data msg size + key updata msg size > 512(the size of 6677 1.2 christos * the bio pair buffer) 6678 1.2 christos */ 6679 1.2 christos if (!TEST_true(SSL_key_update(local, SSL_KEY_UPDATE_REQUESTED)) 6680 1.2 christos || !TEST_int_eq(SSL_write(local, lwbuf, sizeof(lwbuf)), -1) 6681 1.2 christos || !TEST_int_eq(SSL_get_error(local, -1), SSL_ERROR_WANT_WRITE)) 6682 1.2 christos goto end; 6683 1.2 christos 6684 1.2 christos /* 6685 1.2 christos * first read keyupdate msg in peer in peer 6686 1.2 christos * then read appdata that we know will fail with SSL_ERROR_WANT_READ 6687 1.2 christos */ 6688 1.2 christos if (!TEST_int_eq(SSL_read(peer, prbuf, sizeof(prbuf)), -1) 6689 1.2 christos || !TEST_int_eq(SSL_get_error(peer, -1), SSL_ERROR_WANT_READ)) 6690 1.2 christos goto end; 6691 1.2 christos 6692 1.2 christos /* Now write some data in peer - we will write the key update */ 6693 1.2 christos if (!TEST_int_eq(SSL_write(peer, mess, strlen(mess)), strlen(mess))) 6694 1.2 christos goto end; 6695 1.2 christos 6696 1.2 christos /* 6697 1.2 christos * write data in local previously that we will complete 6698 1.2 christos * read data in peer previously that we will complete 6699 1.2 christos */ 6700 1.2 christos if (!TEST_int_eq(SSL_write(local, lwbuf, sizeof(lwbuf)), sizeof(lwbuf)) 6701 1.2 christos || !TEST_int_eq(SSL_read(peer, prbuf, sizeof(prbuf)), sizeof(prbuf))) 6702 1.2 christos goto end; 6703 1.2 christos 6704 1.2 christos /* check that sending and receiving appdata ok */ 6705 1.2 christos if (!TEST_int_eq(SSL_write(local, mess, strlen(mess)), strlen(mess)) 6706 1.2 christos || !TEST_int_eq(SSL_read(peer, prbuf, sizeof(prbuf)), strlen(mess))) 6707 1.2 christos goto end; 6708 1.2 christos 6709 1.2 christos testresult = 1; 6710 1.2 christos 6711 1.2 christos end: 6712 1.2 christos SSL_free(serverssl); 6713 1.2 christos SSL_free(clientssl); 6714 1.2 christos SSL_CTX_free(sctx); 6715 1.2 christos SSL_CTX_free(cctx); 6716 1.2 christos 6717 1.2 christos return testresult; 6718 1.2 christos } 6719 1.2 christos 6720 1.2 christos /* 6721 1.2 christos * Test we can't send a KeyUpdate (update requested) message while 6722 1.2 christos * local write data is pending. 6723 1.2 christos * Test 0: Client sends KeyUpdate while Client is writing 6724 1.2 christos * Test 1: Server sends KeyUpdate while Server is writing 6725 1.2 christos */ 6726 1.2 christos static int test_key_update_local_in_write(int tst) 6727 1.2 christos { 6728 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 6729 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 6730 1.2 christos int testresult = 0; 6731 1.2 christos char buf[20]; 6732 1.2 christos static char *mess = "A test message"; 6733 1.2 christos BIO *bretry = BIO_new(bio_s_always_retry()); 6734 1.2 christos BIO *tmp = NULL; 6735 1.2 christos SSL *local = NULL, *peer = NULL; 6736 1.2 christos 6737 1.2 christos if (!TEST_ptr(bretry) 6738 1.2 christos || !TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 6739 1.2 christos TLS_client_method(), 6740 1.2 christos TLS1_3_VERSION, 6741 1.2 christos 0, 6742 1.2 christos &sctx, &cctx, cert, privkey)) 6743 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 6744 1.2 christos NULL, NULL)) 6745 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 6746 1.2 christos SSL_ERROR_NONE))) 6747 1.2 christos goto end; 6748 1.2 christos 6749 1.2 christos local = tst == 0 ? clientssl : serverssl; 6750 1.2 christos peer = tst == 0 ? serverssl : clientssl; 6751 1.2 christos 6752 1.2 christos /* Swap the writing endpoint's write BIO to force a retry */ 6753 1.2 christos tmp = SSL_get_wbio(local); 6754 1.2 christos if (!TEST_ptr(tmp) || !TEST_true(BIO_up_ref(tmp))) { 6755 1.2 christos tmp = NULL; 6756 1.2 christos goto end; 6757 1.2 christos } 6758 1.2 christos SSL_set0_wbio(local, bretry); 6759 1.2 christos bretry = NULL; 6760 1.2 christos 6761 1.2 christos /* write data in local will fail with SSL_ERROR_WANT_WRITE */ 6762 1.2 christos if (!TEST_int_eq(SSL_write(local, mess, strlen(mess)), -1) 6763 1.2 christos || !TEST_int_eq(SSL_get_error(local, -1), SSL_ERROR_WANT_WRITE)) 6764 1.2 christos goto end; 6765 1.2 christos 6766 1.2 christos /* Reinstate the original writing endpoint's write BIO */ 6767 1.2 christos SSL_set0_wbio(local, tmp); 6768 1.2 christos tmp = NULL; 6769 1.2 christos 6770 1.2 christos /* SSL_key_update will fail, because writing in local*/ 6771 1.2 christos if (!TEST_false(SSL_key_update(local, SSL_KEY_UPDATE_REQUESTED)) 6772 1.2 christos || !TEST_int_eq(ERR_GET_REASON(ERR_peek_error()), SSL_R_BAD_WRITE_RETRY)) 6773 1.2 christos goto end; 6774 1.2 christos 6775 1.2 christos ERR_clear_error(); 6776 1.2 christos /* write data in local previously that we will complete */ 6777 1.2 christos if (!TEST_int_eq(SSL_write(local, mess, strlen(mess)), strlen(mess))) 6778 1.2 christos goto end; 6779 1.2 christos 6780 1.2 christos /* SSL_key_update will succeed because there is no pending write data */ 6781 1.2 christos if (!TEST_true(SSL_key_update(local, SSL_KEY_UPDATE_REQUESTED)) 6782 1.2 christos || !TEST_int_eq(SSL_do_handshake(local), 1)) 6783 1.2 christos goto end; 6784 1.2 christos 6785 1.2 christos /* 6786 1.2 christos * we write some appdata in local 6787 1.2 christos * read data in peer - we will read the keyupdate msg 6788 1.2 christos */ 6789 1.2 christos if (!TEST_int_eq(SSL_write(local, mess, strlen(mess)), strlen(mess)) 6790 1.2 christos || !TEST_int_eq(SSL_read(peer, buf, sizeof(buf)), strlen(mess))) 6791 1.2 christos goto end; 6792 1.2 christos 6793 1.2 christos /* Write more peer more data to ensure we send the keyupdate message back */ 6794 1.2 christos if (!TEST_int_eq(SSL_write(peer, mess, strlen(mess)), strlen(mess)) 6795 1.2 christos || !TEST_int_eq(SSL_read(local, buf, sizeof(buf)), strlen(mess))) 6796 1.2 christos goto end; 6797 1.2 christos 6798 1.2 christos testresult = 1; 6799 1.2 christos 6800 1.2 christos end: 6801 1.2 christos SSL_free(serverssl); 6802 1.2 christos SSL_free(clientssl); 6803 1.2 christos SSL_CTX_free(sctx); 6804 1.2 christos SSL_CTX_free(cctx); 6805 1.2 christos BIO_free(bretry); 6806 1.2 christos BIO_free(tmp); 6807 1.2 christos 6808 1.2 christos return testresult; 6809 1.2 christos } 6810 1.2 christos 6811 1.2 christos /* 6812 1.2 christos * Test we can handle a KeyUpdate (update requested) message while 6813 1.2 christos * local read data is pending(the msg header had been read 5 bytes). 6814 1.2 christos * Test 0: Client sends KeyUpdate while Client is reading 6815 1.2 christos * Test 1: Server sends KeyUpdate while Server is reading 6816 1.2 christos */ 6817 1.2 christos static int test_key_update_local_in_read(int tst) 6818 1.2 christos { 6819 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 6820 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 6821 1.2 christos int testresult = 0; 6822 1.2 christos char lrbuf[515], pwbuf[515] = {0}, prbuf[20]; 6823 1.2 christos static char *mess = "A test message"; 6824 1.2 christos BIO *lbio = NULL, *pbio = NULL; 6825 1.2 christos SSL *local = NULL, *peer = NULL; 6826 1.2 christos 6827 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 6828 1.2 christos TLS_client_method(), 6829 1.2 christos TLS1_3_VERSION, 6830 1.2 christos 0, 6831 1.2 christos &sctx, &cctx, cert, privkey)) 6832 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 6833 1.2 christos NULL, NULL)) 6834 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 6835 1.2 christos SSL_ERROR_NONE))) 6836 1.2 christos goto end; 6837 1.2 christos 6838 1.2 christos local = tst == 0 ? clientssl : serverssl; 6839 1.2 christos peer = tst == 0 ? serverssl : clientssl; 6840 1.2 christos 6841 1.2 christos if (!TEST_int_eq(BIO_new_bio_pair(&lbio, 512, &pbio, 512), 1)) 6842 1.2 christos goto end; 6843 1.2 christos 6844 1.2 christos SSL_set_bio(local, lbio, lbio); 6845 1.2 christos SSL_set_bio(peer, pbio, pbio); 6846 1.2 christos 6847 1.2 christos /* write app data in peer will fail with SSL_ERROR_WANT_WRITE */ 6848 1.2 christos if (!TEST_int_eq(SSL_write(peer, pwbuf, sizeof(pwbuf)), -1) 6849 1.2 christos || !TEST_int_eq(SSL_get_error(peer, -1), SSL_ERROR_WANT_WRITE)) 6850 1.2 christos goto end; 6851 1.2 christos 6852 1.2 christos /* read appdata in local will fail with SSL_ERROR_WANT_READ */ 6853 1.2 christos if (!TEST_int_eq(SSL_read(local, lrbuf, sizeof(lrbuf)), -1) 6854 1.2 christos || !TEST_int_eq(SSL_get_error(local, -1), SSL_ERROR_WANT_READ)) 6855 1.2 christos goto end; 6856 1.2 christos 6857 1.2 christos /* SSL_do_handshake will send keyupdate msg */ 6858 1.2 christos if (!TEST_true(SSL_key_update(local, SSL_KEY_UPDATE_REQUESTED)) 6859 1.2 christos || !TEST_int_eq(SSL_do_handshake(local), 1)) 6860 1.2 christos goto end; 6861 1.2 christos 6862 1.2 christos /* 6863 1.2 christos * write data in peer previously that we will complete 6864 1.2 christos * read data in local previously that we will complete 6865 1.2 christos */ 6866 1.2 christos if (!TEST_int_eq(SSL_write(peer, pwbuf, sizeof(pwbuf)), sizeof(pwbuf)) 6867 1.2 christos || !TEST_int_eq(SSL_read(local, lrbuf, sizeof(lrbuf)), sizeof(lrbuf))) 6868 1.2 christos goto end; 6869 1.2 christos 6870 1.2 christos /* 6871 1.2 christos * write data in local 6872 1.2 christos * read data in peer - we will read the key update 6873 1.2 christos */ 6874 1.2 christos if (!TEST_int_eq(SSL_write(local, mess, strlen(mess)), strlen(mess)) 6875 1.2 christos || !TEST_int_eq(SSL_read(peer, prbuf, sizeof(prbuf)), strlen(mess))) 6876 1.2 christos goto end; 6877 1.2 christos 6878 1.2 christos /* Write more peer data to ensure we send the keyupdate message back */ 6879 1.2 christos if (!TEST_int_eq(SSL_write(peer, mess, strlen(mess)), strlen(mess)) 6880 1.2 christos || !TEST_int_eq(SSL_read(local, lrbuf, sizeof(lrbuf)), strlen(mess))) 6881 1.2 christos goto end; 6882 1.2 christos 6883 1.2 christos testresult = 1; 6884 1.2 christos 6885 1.2 christos end: 6886 1.2 christos SSL_free(serverssl); 6887 1.2 christos SSL_free(clientssl); 6888 1.2 christos SSL_CTX_free(sctx); 6889 1.2 christos SSL_CTX_free(cctx); 6890 1.2 christos 6891 1.2 christos return testresult; 6892 1.2 christos } 6893 1.2 christos #endif /* OSSL_NO_USABLE_TLS1_3 */ 6894 1.2 christos 6895 1.2 christos static int test_ssl_clear(int idx) 6896 1.2 christos { 6897 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 6898 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 6899 1.2 christos int testresult = 0; 6900 1.2 christos 6901 1.2 christos #ifdef OPENSSL_NO_TLS1_2 6902 1.2 christos if (idx == 1) 6903 1.2 christos return 1; 6904 1.2 christos #endif 6905 1.2 christos 6906 1.2 christos /* Create an initial connection */ 6907 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 6908 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 6909 1.2 christos &sctx, &cctx, cert, privkey)) 6910 1.2 christos || (idx == 1 6911 1.2 christos && !TEST_true(SSL_CTX_set_max_proto_version(cctx, 6912 1.2 christos TLS1_2_VERSION))) 6913 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 6914 1.2 christos &clientssl, NULL, NULL)) 6915 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 6916 1.2 christos SSL_ERROR_NONE))) 6917 1.2 christos goto end; 6918 1.2 christos 6919 1.2 christos SSL_shutdown(clientssl); 6920 1.2 christos SSL_shutdown(serverssl); 6921 1.2 christos SSL_free(serverssl); 6922 1.2 christos serverssl = NULL; 6923 1.2 christos 6924 1.2 christos /* Clear clientssl - we're going to reuse the object */ 6925 1.2 christos if (!TEST_true(SSL_clear(clientssl))) 6926 1.2 christos goto end; 6927 1.2 christos 6928 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 6929 1.2 christos NULL, NULL)) 6930 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 6931 1.2 christos SSL_ERROR_NONE)) 6932 1.2 christos || !TEST_true(SSL_session_reused(clientssl))) 6933 1.2 christos goto end; 6934 1.2 christos 6935 1.2 christos SSL_shutdown(clientssl); 6936 1.2 christos SSL_shutdown(serverssl); 6937 1.2 christos 6938 1.2 christos testresult = 1; 6939 1.2 christos 6940 1.2 christos end: 6941 1.2 christos SSL_free(serverssl); 6942 1.2 christos SSL_free(clientssl); 6943 1.2 christos SSL_CTX_free(sctx); 6944 1.2 christos SSL_CTX_free(cctx); 6945 1.2 christos 6946 1.2 christos return testresult; 6947 1.2 christos } 6948 1.2 christos 6949 1.2 christos /* Parse CH and retrieve any MFL extension value if present */ 6950 1.2 christos static int get_MFL_from_client_hello(BIO *bio, int *mfl_codemfl_code) 6951 1.2 christos { 6952 1.2 christos long len; 6953 1.2 christos unsigned char *data; 6954 1.2 christos PACKET pkt, pkt2, pkt3; 6955 1.2 christos unsigned int MFL_code = 0, type = 0; 6956 1.2 christos 6957 1.2 christos if (!TEST_uint_gt( len = BIO_get_mem_data( bio, (char **) &data ), 0 ) ) 6958 1.2 christos goto end; 6959 1.2 christos 6960 1.2 christos memset(&pkt, 0, sizeof(pkt)); 6961 1.2 christos memset(&pkt2, 0, sizeof(pkt2)); 6962 1.2 christos memset(&pkt3, 0, sizeof(pkt3)); 6963 1.2 christos 6964 1.2 christos if (!TEST_long_gt(len, 0) 6965 1.2 christos || !TEST_true( PACKET_buf_init( &pkt, data, len ) ) 6966 1.2 christos /* Skip the record header */ 6967 1.2 christos || !PACKET_forward(&pkt, SSL3_RT_HEADER_LENGTH) 6968 1.2 christos /* Skip the handshake message header */ 6969 1.2 christos || !TEST_true(PACKET_forward(&pkt, SSL3_HM_HEADER_LENGTH)) 6970 1.2 christos /* Skip client version and random */ 6971 1.2 christos || !TEST_true(PACKET_forward(&pkt, CLIENT_VERSION_LEN 6972 1.2 christos + SSL3_RANDOM_SIZE)) 6973 1.2 christos /* Skip session id */ 6974 1.2 christos || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &pkt2)) 6975 1.2 christos /* Skip ciphers */ 6976 1.2 christos || !TEST_true(PACKET_get_length_prefixed_2(&pkt, &pkt2)) 6977 1.2 christos /* Skip compression */ 6978 1.2 christos || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &pkt2)) 6979 1.2 christos /* Extensions len */ 6980 1.2 christos || !TEST_true(PACKET_as_length_prefixed_2(&pkt, &pkt2))) 6981 1.2 christos goto end; 6982 1.2 christos 6983 1.2 christos /* Loop through all extensions */ 6984 1.2 christos while (PACKET_remaining(&pkt2)) { 6985 1.2 christos if (!TEST_true(PACKET_get_net_2(&pkt2, &type)) 6986 1.2 christos || !TEST_true(PACKET_get_length_prefixed_2(&pkt2, &pkt3))) 6987 1.2 christos goto end; 6988 1.2 christos 6989 1.2 christos if (type == TLSEXT_TYPE_max_fragment_length) { 6990 1.2 christos if (!TEST_uint_ne(PACKET_remaining(&pkt3), 0) 6991 1.2 christos || !TEST_true(PACKET_get_1(&pkt3, &MFL_code))) 6992 1.2 christos goto end; 6993 1.2 christos 6994 1.2 christos *mfl_codemfl_code = MFL_code; 6995 1.2 christos return 1; 6996 1.2 christos } 6997 1.2 christos } 6998 1.2 christos 6999 1.2 christos end: 7000 1.2 christos return 0; 7001 1.2 christos } 7002 1.2 christos 7003 1.2 christos /* Maximum-Fragment-Length TLS extension mode to test */ 7004 1.2 christos static const unsigned char max_fragment_len_test[] = { 7005 1.2 christos TLSEXT_max_fragment_length_512, 7006 1.2 christos TLSEXT_max_fragment_length_1024, 7007 1.2 christos TLSEXT_max_fragment_length_2048, 7008 1.2 christos TLSEXT_max_fragment_length_4096 7009 1.2 christos }; 7010 1.2 christos 7011 1.2 christos static int test_max_fragment_len_ext(int idx_tst) 7012 1.2 christos { 7013 1.2 christos SSL_CTX *ctx = NULL; 7014 1.2 christos SSL *con = NULL; 7015 1.2 christos int testresult = 0, MFL_mode = 0; 7016 1.2 christos BIO *rbio, *wbio; 7017 1.2 christos 7018 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, NULL, TLS_client_method(), 7019 1.2 christos TLS1_VERSION, 0, NULL, &ctx, NULL, 7020 1.2 christos NULL))) 7021 1.2 christos return 0; 7022 1.2 christos 7023 1.2 christos if (!TEST_true(SSL_CTX_set_tlsext_max_fragment_length( 7024 1.2 christos ctx, max_fragment_len_test[idx_tst]))) 7025 1.2 christos goto end; 7026 1.2 christos 7027 1.2 christos con = SSL_new(ctx); 7028 1.2 christos if (!TEST_ptr(con)) 7029 1.2 christos goto end; 7030 1.2 christos 7031 1.2 christos rbio = BIO_new(BIO_s_mem()); 7032 1.2 christos wbio = BIO_new(BIO_s_mem()); 7033 1.2 christos if (!TEST_ptr(rbio)|| !TEST_ptr(wbio)) { 7034 1.2 christos BIO_free(rbio); 7035 1.2 christos BIO_free(wbio); 7036 1.2 christos goto end; 7037 1.2 christos } 7038 1.2 christos 7039 1.2 christos SSL_set_bio(con, rbio, wbio); 7040 1.2 christos 7041 1.2 christos if (!TEST_int_le(SSL_connect(con), 0)) { 7042 1.2 christos /* This shouldn't succeed because we don't have a server! */ 7043 1.2 christos goto end; 7044 1.2 christos } 7045 1.2 christos 7046 1.2 christos if (!TEST_true(get_MFL_from_client_hello(wbio, &MFL_mode))) 7047 1.2 christos /* no MFL in client hello */ 7048 1.2 christos goto end; 7049 1.2 christos if (!TEST_true(max_fragment_len_test[idx_tst] == MFL_mode)) 7050 1.2 christos goto end; 7051 1.2 christos 7052 1.2 christos testresult = 1; 7053 1.2 christos 7054 1.2 christos end: 7055 1.2 christos SSL_free(con); 7056 1.2 christos SSL_CTX_free(ctx); 7057 1.2 christos 7058 1.2 christos return testresult; 7059 1.2 christos } 7060 1.2 christos 7061 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 7062 1.2 christos static int test_pha_key_update(void) 7063 1.2 christos { 7064 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 7065 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 7066 1.2 christos int testresult = 0; 7067 1.2 christos 7068 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 7069 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 7070 1.2 christos &sctx, &cctx, cert, privkey))) 7071 1.2 christos return 0; 7072 1.2 christos 7073 1.2 christos if (!TEST_true(SSL_CTX_set_min_proto_version(sctx, TLS1_3_VERSION)) 7074 1.2 christos || !TEST_true(SSL_CTX_set_max_proto_version(sctx, TLS1_3_VERSION)) 7075 1.2 christos || !TEST_true(SSL_CTX_set_min_proto_version(cctx, TLS1_3_VERSION)) 7076 1.2 christos || !TEST_true(SSL_CTX_set_max_proto_version(cctx, TLS1_3_VERSION))) 7077 1.2 christos goto end; 7078 1.2 christos 7079 1.2 christos SSL_CTX_set_post_handshake_auth(cctx, 1); 7080 1.2 christos 7081 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 7082 1.2 christos NULL, NULL))) 7083 1.2 christos goto end; 7084 1.2 christos 7085 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 7086 1.2 christos SSL_ERROR_NONE))) 7087 1.2 christos goto end; 7088 1.2 christos 7089 1.2 christos SSL_set_verify(serverssl, SSL_VERIFY_PEER, NULL); 7090 1.2 christos if (!TEST_true(SSL_verify_client_post_handshake(serverssl))) 7091 1.2 christos goto end; 7092 1.2 christos 7093 1.2 christos if (!TEST_true(SSL_key_update(clientssl, SSL_KEY_UPDATE_NOT_REQUESTED))) 7094 1.2 christos goto end; 7095 1.2 christos 7096 1.2 christos /* Start handshake on the server */ 7097 1.2 christos if (!TEST_int_eq(SSL_do_handshake(serverssl), 1)) 7098 1.2 christos goto end; 7099 1.2 christos 7100 1.2 christos /* Starts with SSL_connect(), but it's really just SSL_do_handshake() */ 7101 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 7102 1.2 christos SSL_ERROR_NONE))) 7103 1.2 christos goto end; 7104 1.2 christos 7105 1.2 christos SSL_shutdown(clientssl); 7106 1.2 christos SSL_shutdown(serverssl); 7107 1.2 christos 7108 1.2 christos testresult = 1; 7109 1.2 christos 7110 1.2 christos end: 7111 1.2 christos SSL_free(serverssl); 7112 1.2 christos SSL_free(clientssl); 7113 1.2 christos SSL_CTX_free(sctx); 7114 1.2 christos SSL_CTX_free(cctx); 7115 1.2 christos return testresult; 7116 1.2 christos } 7117 1.2 christos #endif 7118 1.2 christos 7119 1.2 christos #if !defined(OPENSSL_NO_SRP) && !defined(OPENSSL_NO_TLS1_2) 7120 1.2 christos 7121 1.2 christos static SRP_VBASE *vbase = NULL; 7122 1.2 christos 7123 1.2 christos static int ssl_srp_cb(SSL *s, int *ad, void *arg) 7124 1.2 christos { 7125 1.2 christos int ret = SSL3_AL_FATAL; 7126 1.2 christos char *username; 7127 1.2 christos SRP_user_pwd *user = NULL; 7128 1.2 christos 7129 1.2 christos username = SSL_get_srp_username(s); 7130 1.2 christos if (username == NULL) { 7131 1.2 christos *ad = SSL_AD_INTERNAL_ERROR; 7132 1.2 christos goto err; 7133 1.2 christos } 7134 1.2 christos 7135 1.2 christos user = SRP_VBASE_get1_by_user(vbase, username); 7136 1.2 christos if (user == NULL) { 7137 1.2 christos *ad = SSL_AD_INTERNAL_ERROR; 7138 1.2 christos goto err; 7139 1.2 christos } 7140 1.2 christos 7141 1.2 christos if (SSL_set_srp_server_param(s, user->N, user->g, user->s, user->v, 7142 1.2 christos user->info) <= 0) { 7143 1.2 christos *ad = SSL_AD_INTERNAL_ERROR; 7144 1.2 christos goto err; 7145 1.2 christos } 7146 1.2 christos 7147 1.2 christos ret = 0; 7148 1.2 christos 7149 1.2 christos err: 7150 1.2 christos SRP_user_pwd_free(user); 7151 1.2 christos return ret; 7152 1.2 christos } 7153 1.2 christos 7154 1.2 christos static int create_new_vfile(char *userid, char *password, const char *filename) 7155 1.2 christos { 7156 1.2 christos char *gNid = NULL; 7157 1.2 christos OPENSSL_STRING *row = OPENSSL_zalloc(sizeof(row) * (DB_NUMBER + 1)); 7158 1.2 christos TXT_DB *db = NULL; 7159 1.2 christos int ret = 0; 7160 1.2 christos BIO *out = NULL, *dummy = BIO_new_mem_buf("", 0); 7161 1.2 christos size_t i; 7162 1.2 christos 7163 1.2 christos if (!TEST_ptr(dummy) || !TEST_ptr(row)) 7164 1.2 christos goto end; 7165 1.2 christos 7166 1.2 christos gNid = SRP_create_verifier_ex(userid, password, &row[DB_srpsalt], 7167 1.2 christos &row[DB_srpverifier], NULL, NULL, libctx, NULL); 7168 1.2 christos if (!TEST_ptr(gNid)) 7169 1.2 christos goto end; 7170 1.2 christos 7171 1.2 christos /* 7172 1.2 christos * The only way to create an empty TXT_DB is to provide a BIO with no data 7173 1.2 christos * in it! 7174 1.2 christos */ 7175 1.2 christos db = TXT_DB_read(dummy, DB_NUMBER); 7176 1.2 christos if (!TEST_ptr(db)) 7177 1.2 christos goto end; 7178 1.2 christos 7179 1.2 christos out = BIO_new_file(filename, "w"); 7180 1.2 christos if (!TEST_ptr(out)) 7181 1.2 christos goto end; 7182 1.2 christos 7183 1.2 christos row[DB_srpid] = OPENSSL_strdup(userid); 7184 1.2 christos row[DB_srptype] = OPENSSL_strdup("V"); 7185 1.2 christos row[DB_srpgN] = OPENSSL_strdup(gNid); 7186 1.2 christos 7187 1.2 christos if (!TEST_ptr(row[DB_srpid]) 7188 1.2 christos || !TEST_ptr(row[DB_srptype]) 7189 1.2 christos || !TEST_ptr(row[DB_srpgN]) 7190 1.2 christos || !TEST_true(TXT_DB_insert(db, row))) 7191 1.2 christos goto end; 7192 1.2 christos 7193 1.2 christos row = NULL; 7194 1.2 christos 7195 1.2 christos if (TXT_DB_write(out, db) <= 0) 7196 1.2 christos goto end; 7197 1.2 christos 7198 1.2 christos ret = 1; 7199 1.2 christos end: 7200 1.2 christos if (row != NULL) { 7201 1.2 christos for (i = 0; i < DB_NUMBER; i++) 7202 1.2 christos OPENSSL_free(row[i]); 7203 1.2 christos } 7204 1.2 christos OPENSSL_free(row); 7205 1.2 christos BIO_free(dummy); 7206 1.2 christos BIO_free(out); 7207 1.2 christos TXT_DB_free(db); 7208 1.2 christos 7209 1.2 christos return ret; 7210 1.2 christos } 7211 1.2 christos 7212 1.2 christos static int create_new_vbase(char *userid, char *password) 7213 1.2 christos { 7214 1.2 christos BIGNUM *verifier = NULL, *salt = NULL; 7215 1.2 christos const SRP_gN *lgN = NULL; 7216 1.2 christos SRP_user_pwd *user_pwd = NULL; 7217 1.2 christos int ret = 0; 7218 1.2 christos 7219 1.2 christos lgN = SRP_get_default_gN(NULL); 7220 1.2 christos if (!TEST_ptr(lgN)) 7221 1.2 christos goto end; 7222 1.2 christos 7223 1.2 christos if (!TEST_true(SRP_create_verifier_BN_ex(userid, password, &salt, &verifier, 7224 1.2 christos lgN->N, lgN->g, libctx, NULL))) 7225 1.2 christos goto end; 7226 1.2 christos 7227 1.2 christos user_pwd = OPENSSL_zalloc(sizeof(*user_pwd)); 7228 1.2 christos if (!TEST_ptr(user_pwd)) 7229 1.2 christos goto end; 7230 1.2 christos 7231 1.2 christos user_pwd->N = lgN->N; 7232 1.2 christos user_pwd->g = lgN->g; 7233 1.2 christos user_pwd->id = OPENSSL_strdup(userid); 7234 1.2 christos if (!TEST_ptr(user_pwd->id)) 7235 1.2 christos goto end; 7236 1.2 christos 7237 1.2 christos user_pwd->v = verifier; 7238 1.2 christos user_pwd->s = salt; 7239 1.2 christos verifier = salt = NULL; 7240 1.2 christos 7241 1.2 christos if (sk_SRP_user_pwd_insert(vbase->users_pwd, user_pwd, 0) == 0) 7242 1.2 christos goto end; 7243 1.2 christos user_pwd = NULL; 7244 1.2 christos 7245 1.2 christos ret = 1; 7246 1.2 christos end: 7247 1.2 christos SRP_user_pwd_free(user_pwd); 7248 1.2 christos BN_free(salt); 7249 1.2 christos BN_free(verifier); 7250 1.2 christos 7251 1.2 christos return ret; 7252 1.2 christos } 7253 1.2 christos 7254 1.2 christos /* 7255 1.2 christos * SRP tests 7256 1.2 christos * 7257 1.2 christos * Test 0: Simple successful SRP connection, new vbase 7258 1.2 christos * Test 1: Connection failure due to bad password, new vbase 7259 1.2 christos * Test 2: Simple successful SRP connection, vbase loaded from existing file 7260 1.2 christos * Test 3: Connection failure due to bad password, vbase loaded from existing 7261 1.2 christos * file 7262 1.2 christos * Test 4: Simple successful SRP connection, vbase loaded from new file 7263 1.2 christos * Test 5: Connection failure due to bad password, vbase loaded from new file 7264 1.2 christos */ 7265 1.2 christos static int test_srp(int tst) 7266 1.2 christos { 7267 1.2 christos char *userid = "test", *password = "password", *tstsrpfile; 7268 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 7269 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 7270 1.2 christos int ret, testresult = 0; 7271 1.2 christos 7272 1.2 christos vbase = SRP_VBASE_new(NULL); 7273 1.2 christos if (!TEST_ptr(vbase)) 7274 1.2 christos goto end; 7275 1.2 christos 7276 1.2 christos if (tst == 0 || tst == 1) { 7277 1.2 christos if (!TEST_true(create_new_vbase(userid, password))) 7278 1.2 christos goto end; 7279 1.2 christos } else { 7280 1.2 christos if (tst == 4 || tst == 5) { 7281 1.2 christos if (!TEST_true(create_new_vfile(userid, password, tmpfilename))) 7282 1.2 christos goto end; 7283 1.2 christos tstsrpfile = tmpfilename; 7284 1.2 christos } else { 7285 1.2 christos tstsrpfile = srpvfile; 7286 1.2 christos } 7287 1.2 christos if (!TEST_int_eq(SRP_VBASE_init(vbase, tstsrpfile), SRP_NO_ERROR)) 7288 1.2 christos goto end; 7289 1.2 christos } 7290 1.2 christos 7291 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 7292 1.2 christos TLS_client_method(), TLS1_VERSION, 0, 7293 1.2 christos &sctx, &cctx, cert, privkey))) 7294 1.2 christos goto end; 7295 1.2 christos 7296 1.2 christos if (!TEST_int_gt(SSL_CTX_set_srp_username_callback(sctx, ssl_srp_cb), 0) 7297 1.2 christos || !TEST_true(SSL_CTX_set_cipher_list(cctx, "SRP-AES-128-CBC-SHA")) 7298 1.2 christos || !TEST_true(SSL_CTX_set_max_proto_version(sctx, TLS1_2_VERSION)) 7299 1.2 christos || !TEST_true(SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION)) 7300 1.2 christos || !TEST_int_gt(SSL_CTX_set_srp_username(cctx, userid), 0)) 7301 1.2 christos goto end; 7302 1.2 christos 7303 1.2 christos if (tst % 2 == 1) { 7304 1.2 christos if (!TEST_int_gt(SSL_CTX_set_srp_password(cctx, "badpass"), 0)) 7305 1.2 christos goto end; 7306 1.2 christos } else { 7307 1.2 christos if (!TEST_int_gt(SSL_CTX_set_srp_password(cctx, password), 0)) 7308 1.2 christos goto end; 7309 1.2 christos } 7310 1.2 christos 7311 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 7312 1.2 christos NULL, NULL))) 7313 1.2 christos goto end; 7314 1.2 christos 7315 1.2 christos ret = create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE); 7316 1.2 christos if (ret) { 7317 1.2 christos if (!TEST_true(tst % 2 == 0)) 7318 1.2 christos goto end; 7319 1.2 christos } else { 7320 1.2 christos if (!TEST_true(tst % 2 == 1)) 7321 1.2 christos goto end; 7322 1.2 christos } 7323 1.2 christos 7324 1.2 christos testresult = 1; 7325 1.2 christos 7326 1.2 christos end: 7327 1.2 christos SRP_VBASE_free(vbase); 7328 1.2 christos vbase = NULL; 7329 1.2 christos SSL_free(serverssl); 7330 1.2 christos SSL_free(clientssl); 7331 1.2 christos SSL_CTX_free(sctx); 7332 1.2 christos SSL_CTX_free(cctx); 7333 1.2 christos 7334 1.2 christos return testresult; 7335 1.2 christos } 7336 1.2 christos #endif 7337 1.2 christos 7338 1.2 christos static int info_cb_failed = 0; 7339 1.2 christos static int info_cb_offset = 0; 7340 1.2 christos static int info_cb_this_state = -1; 7341 1.2 christos 7342 1.2 christos static struct info_cb_states_st { 7343 1.2 christos int where; 7344 1.2 christos const char *statestr; 7345 1.2 christos } info_cb_states[][60] = { 7346 1.2 christos { 7347 1.2 christos /* TLSv1.2 server followed by resumption */ 7348 1.2 christos {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"}, 7349 1.2 christos {SSL_CB_LOOP, "PINIT"}, {SSL_CB_LOOP, "TRCH"}, {SSL_CB_LOOP, "TWSH"}, 7350 1.2 christos {SSL_CB_LOOP, "TWSC"}, {SSL_CB_LOOP, "TWSKE"}, {SSL_CB_LOOP, "TWSD"}, 7351 1.2 christos {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWSD"}, {SSL_CB_LOOP, "TRCKE"}, 7352 1.2 christos {SSL_CB_LOOP, "TRCCS"}, {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_LOOP, "TWST"}, 7353 1.2 christos {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWFIN"}, 7354 1.2 christos {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL}, 7355 1.2 christos {SSL_CB_ALERT, NULL}, {SSL_CB_HANDSHAKE_START, NULL}, 7356 1.2 christos {SSL_CB_LOOP, "PINIT"}, {SSL_CB_LOOP, "PINIT"}, {SSL_CB_LOOP, "TRCH"}, 7357 1.2 christos {SSL_CB_LOOP, "TWSH"}, {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWFIN"}, 7358 1.2 christos {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWFIN"}, {SSL_CB_LOOP, "TRCCS"}, 7359 1.2 christos {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_HANDSHAKE_DONE, NULL}, 7360 1.2 christos {SSL_CB_EXIT, NULL}, {0, NULL}, 7361 1.2 christos }, { 7362 1.2 christos /* TLSv1.2 client followed by resumption */ 7363 1.2 christos {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"}, 7364 1.2 christos {SSL_CB_LOOP, "TWCH"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWCH"}, 7365 1.2 christos {SSL_CB_LOOP, "TRSH"}, {SSL_CB_LOOP, "TRSC"}, {SSL_CB_LOOP, "TRSKE"}, 7366 1.2 christos {SSL_CB_LOOP, "TRSD"}, {SSL_CB_LOOP, "TWCKE"}, {SSL_CB_LOOP, "TWCCS"}, 7367 1.2 christos {SSL_CB_LOOP, "TWFIN"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWFIN"}, 7368 1.2 christos {SSL_CB_LOOP, "TRST"}, {SSL_CB_LOOP, "TRCCS"}, {SSL_CB_LOOP, "TRFIN"}, 7369 1.2 christos {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL}, {SSL_CB_ALERT, NULL}, 7370 1.2 christos {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"}, 7371 1.2 christos {SSL_CB_LOOP, "TWCH"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWCH"}, 7372 1.2 christos {SSL_CB_LOOP, "TRSH"}, {SSL_CB_LOOP, "TRCCS"}, {SSL_CB_LOOP, "TRFIN"}, 7373 1.2 christos {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWFIN"}, 7374 1.2 christos {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL}, {0, NULL}, 7375 1.2 christos }, { 7376 1.2 christos /* TLSv1.3 server followed by resumption */ 7377 1.2 christos {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"}, 7378 1.2 christos {SSL_CB_LOOP, "PINIT"}, {SSL_CB_LOOP, "TRCH"}, {SSL_CB_LOOP, "TWSH"}, 7379 1.2 christos {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWEE"}, {SSL_CB_LOOP, "TWSC"}, 7380 1.2 christos {SSL_CB_LOOP, "TWSCV"}, {SSL_CB_LOOP, "TWFIN"}, {SSL_CB_LOOP, "TED"}, 7381 1.2 christos {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TED"}, {SSL_CB_LOOP, "TRFIN"}, 7382 1.2 christos {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_LOOP, "TWST"}, 7383 1.2 christos {SSL_CB_LOOP, "TWST"}, {SSL_CB_EXIT, NULL}, {SSL_CB_ALERT, NULL}, 7384 1.2 christos {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"}, 7385 1.2 christos {SSL_CB_LOOP, "PINIT"}, {SSL_CB_LOOP, "TRCH"}, {SSL_CB_LOOP, "TWSH"}, 7386 1.2 christos {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWEE"}, {SSL_CB_LOOP, "TWFIN"}, 7387 1.2 christos {SSL_CB_LOOP, "TED"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TED"}, 7388 1.2 christos {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_HANDSHAKE_DONE, NULL}, 7389 1.2 christos {SSL_CB_LOOP, "TWST"}, {SSL_CB_EXIT, NULL}, {0, NULL}, 7390 1.2 christos }, { 7391 1.2 christos /* TLSv1.3 client followed by resumption */ 7392 1.2 christos {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"}, 7393 1.2 christos {SSL_CB_LOOP, "TWCH"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWCH"}, 7394 1.2 christos {SSL_CB_LOOP, "TRSH"}, {SSL_CB_LOOP, "TREE"}, {SSL_CB_LOOP, "TRSC"}, 7395 1.2 christos {SSL_CB_LOOP, "TRSCV"}, {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_LOOP, "TWCCS"}, 7396 1.2 christos {SSL_CB_LOOP, "TWFIN"}, {SSL_CB_HANDSHAKE_DONE, NULL}, 7397 1.2 christos {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "SSLOK"}, {SSL_CB_LOOP, "SSLOK"}, 7398 1.2 christos {SSL_CB_LOOP, "TRST"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "SSLOK"}, 7399 1.2 christos {SSL_CB_LOOP, "SSLOK"}, {SSL_CB_LOOP, "TRST"}, {SSL_CB_EXIT, NULL}, 7400 1.2 christos {SSL_CB_ALERT, NULL}, {SSL_CB_HANDSHAKE_START, NULL}, 7401 1.2 christos {SSL_CB_LOOP, "PINIT"}, {SSL_CB_LOOP, "TWCH"}, {SSL_CB_EXIT, NULL}, 7402 1.2 christos {SSL_CB_LOOP, "TWCH"}, {SSL_CB_LOOP, "TRSH"}, {SSL_CB_LOOP, "TREE"}, 7403 1.2 christos {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWFIN"}, 7404 1.2 christos {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL}, 7405 1.2 christos {SSL_CB_LOOP, "SSLOK"}, {SSL_CB_LOOP, "SSLOK"}, {SSL_CB_LOOP, "TRST"}, 7406 1.2 christos {SSL_CB_EXIT, NULL}, {0, NULL}, 7407 1.2 christos }, { 7408 1.2 christos /* TLSv1.3 server, early_data */ 7409 1.2 christos {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"}, 7410 1.2 christos {SSL_CB_LOOP, "PINIT"}, {SSL_CB_LOOP, "TRCH"}, {SSL_CB_LOOP, "TWSH"}, 7411 1.2 christos {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWEE"}, {SSL_CB_LOOP, "TWFIN"}, 7412 1.2 christos {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL}, 7413 1.2 christos {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "TED"}, 7414 1.2 christos {SSL_CB_LOOP, "TED"}, {SSL_CB_LOOP, "TWEOED"}, {SSL_CB_LOOP, "TRFIN"}, 7415 1.2 christos {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_LOOP, "TWST"}, 7416 1.2 christos {SSL_CB_EXIT, NULL}, {0, NULL}, 7417 1.2 christos }, { 7418 1.2 christos /* TLSv1.3 client, early_data */ 7419 1.2 christos {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT"}, 7420 1.2 christos {SSL_CB_LOOP, "TWCH"}, {SSL_CB_LOOP, "TWCCS"}, 7421 1.2 christos {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL}, 7422 1.2 christos {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "TED"}, 7423 1.2 christos {SSL_CB_LOOP, "TED"}, {SSL_CB_LOOP, "TRSH"}, {SSL_CB_LOOP, "TREE"}, 7424 1.2 christos {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_LOOP, "TPEDE"}, {SSL_CB_LOOP, "TWEOED"}, 7425 1.2 christos {SSL_CB_LOOP, "TWFIN"}, {SSL_CB_HANDSHAKE_DONE, NULL}, 7426 1.2 christos {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "SSLOK"}, {SSL_CB_LOOP, "SSLOK"}, 7427 1.2 christos {SSL_CB_LOOP, "TRST"}, {SSL_CB_EXIT, NULL}, {0, NULL}, 7428 1.2 christos }, { 7429 1.2 christos {0, NULL}, 7430 1.2 christos } 7431 1.2 christos }; 7432 1.2 christos 7433 1.2 christos static void sslapi_info_callback(const SSL *s, int where, int ret) 7434 1.2 christos { 7435 1.2 christos struct info_cb_states_st *state = info_cb_states[info_cb_offset]; 7436 1.2 christos 7437 1.2 christos /* We do not ever expect a connection to fail in this test */ 7438 1.2 christos if (!TEST_false(ret == 0)) { 7439 1.2 christos info_cb_failed = 1; 7440 1.2 christos return; 7441 1.2 christos } 7442 1.2 christos 7443 1.2 christos /* 7444 1.2 christos * Do some sanity checks. We never expect these things to happen in this 7445 1.2 christos * test 7446 1.2 christos */ 7447 1.2 christos if (!TEST_false((SSL_is_server(s) && (where & SSL_ST_CONNECT) != 0)) 7448 1.2 christos || !TEST_false(!SSL_is_server(s) && (where & SSL_ST_ACCEPT) != 0) 7449 1.2 christos || !TEST_int_ne(state[++info_cb_this_state].where, 0)) { 7450 1.2 christos info_cb_failed = 1; 7451 1.2 christos return; 7452 1.2 christos } 7453 1.2 christos 7454 1.2 christos /* Now check we're in the right state */ 7455 1.2 christos if (!TEST_true((where & state[info_cb_this_state].where) != 0)) { 7456 1.2 christos info_cb_failed = 1; 7457 1.2 christos return; 7458 1.2 christos } 7459 1.2 christos if ((where & SSL_CB_LOOP) != 0 7460 1.2 christos && !TEST_int_eq(strcmp(SSL_state_string(s), 7461 1.2 christos state[info_cb_this_state].statestr), 0)) { 7462 1.2 christos info_cb_failed = 1; 7463 1.2 christos return; 7464 1.2 christos } 7465 1.2 christos 7466 1.2 christos /* 7467 1.2 christos * Check that, if we've got SSL_CB_HANDSHAKE_DONE we are not in init 7468 1.2 christos */ 7469 1.2 christos if ((where & SSL_CB_HANDSHAKE_DONE) 7470 1.2 christos && SSL_in_init((SSL *)s) != 0) { 7471 1.2 christos info_cb_failed = 1; 7472 1.2 christos return; 7473 1.2 christos } 7474 1.2 christos } 7475 1.2 christos 7476 1.2 christos /* 7477 1.2 christos * Test the info callback gets called when we expect it to. 7478 1.2 christos * 7479 1.2 christos * Test 0: TLSv1.2, server 7480 1.2 christos * Test 1: TLSv1.2, client 7481 1.2 christos * Test 2: TLSv1.3, server 7482 1.2 christos * Test 3: TLSv1.3, client 7483 1.2 christos * Test 4: TLSv1.3, server, early_data 7484 1.2 christos * Test 5: TLSv1.3, client, early_data 7485 1.2 christos */ 7486 1.2 christos static int test_info_callback(int tst) 7487 1.2 christos { 7488 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 7489 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 7490 1.2 christos SSL_SESSION *clntsess = NULL; 7491 1.2 christos int testresult = 0; 7492 1.2 christos int tlsvers; 7493 1.2 christos 7494 1.2 christos if (tst < 2) { 7495 1.2 christos /* We need either ECDHE or DHE for the TLSv1.2 test to work */ 7496 1.2 christos #if !defined(OPENSSL_NO_TLS1_2) && (!defined(OPENSSL_NO_EC) \ 7497 1.2 christos || !defined(OPENSSL_NO_DH)) 7498 1.2 christos tlsvers = TLS1_2_VERSION; 7499 1.2 christos #else 7500 1.2 christos return 1; 7501 1.2 christos #endif 7502 1.2 christos } else { 7503 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 7504 1.2 christos tlsvers = TLS1_3_VERSION; 7505 1.2 christos #else 7506 1.2 christos return 1; 7507 1.2 christos #endif 7508 1.2 christos } 7509 1.2 christos 7510 1.2 christos /* Reset globals */ 7511 1.2 christos info_cb_failed = 0; 7512 1.2 christos info_cb_this_state = -1; 7513 1.2 christos info_cb_offset = tst; 7514 1.2 christos 7515 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 7516 1.2 christos if (tst >= 4) { 7517 1.2 christos SSL_SESSION *sess = NULL; 7518 1.2 christos size_t written, readbytes; 7519 1.2 christos unsigned char buf[80]; 7520 1.2 christos time_t timer; 7521 1.2 christos 7522 1.2 christos /* early_data tests */ 7523 1.2 christos if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl, 7524 1.2 christos &serverssl, &sess, 0, 7525 1.2 christos SHA384_DIGEST_LENGTH))) 7526 1.2 christos goto end; 7527 1.2 christos 7528 1.2 christos /* We don't actually need this reference */ 7529 1.2 christos SSL_SESSION_free(sess); 7530 1.2 christos 7531 1.2 christos SSL_set_info_callback((tst % 2) == 0 ? serverssl : clientssl, 7532 1.2 christos sslapi_info_callback); 7533 1.2 christos 7534 1.2 christos /* Write and read some early data and then complete the connection */ 7535 1.2 christos timer = time(NULL); 7536 1.2 christos if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1), 7537 1.2 christos &written)) 7538 1.2 christos || !TEST_size_t_eq(written, strlen(MSG1))) 7539 1.2 christos goto end; 7540 1.2 christos 7541 1.2 christos if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, 7542 1.2 christos sizeof(buf), &readbytes), 7543 1.2 christos SSL_READ_EARLY_DATA_SUCCESS)) { 7544 1.2 christos testresult = check_early_data_timeout(timer); 7545 1.2 christos goto end; 7546 1.2 christos } 7547 1.2 christos 7548 1.2 christos if (!TEST_mem_eq(MSG1, readbytes, buf, strlen(MSG1)) 7549 1.2 christos || !TEST_int_eq(SSL_get_early_data_status(serverssl), 7550 1.2 christos SSL_EARLY_DATA_ACCEPTED) 7551 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 7552 1.2 christos SSL_ERROR_NONE)) 7553 1.2 christos || !TEST_false(info_cb_failed)) 7554 1.2 christos goto end; 7555 1.2 christos 7556 1.2 christos testresult = 1; 7557 1.2 christos goto end; 7558 1.2 christos } 7559 1.2 christos #endif 7560 1.2 christos 7561 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 7562 1.2 christos TLS_client_method(), 7563 1.2 christos tlsvers, tlsvers, &sctx, &cctx, cert, 7564 1.2 christos privkey))) 7565 1.2 christos goto end; 7566 1.2 christos 7567 1.2 christos if (!TEST_true(SSL_CTX_set_dh_auto(sctx, 1))) 7568 1.2 christos goto end; 7569 1.2 christos 7570 1.2 christos /* 7571 1.2 christos * For even numbered tests we check the server callbacks. For odd numbers we 7572 1.2 christos * check the client. 7573 1.2 christos */ 7574 1.2 christos SSL_CTX_set_info_callback((tst % 2) == 0 ? sctx : cctx, 7575 1.2 christos sslapi_info_callback); 7576 1.2 christos 7577 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 7578 1.2 christos &clientssl, NULL, NULL)) 7579 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 7580 1.2 christos SSL_ERROR_NONE)) 7581 1.2 christos || !TEST_false(info_cb_failed)) 7582 1.2 christos goto end; 7583 1.2 christos 7584 1.2 christos 7585 1.2 christos 7586 1.2 christos clntsess = SSL_get1_session(clientssl); 7587 1.2 christos SSL_shutdown(clientssl); 7588 1.2 christos SSL_shutdown(serverssl); 7589 1.2 christos SSL_free(serverssl); 7590 1.2 christos SSL_free(clientssl); 7591 1.2 christos serverssl = clientssl = NULL; 7592 1.2 christos 7593 1.2 christos /* Now do a resumption */ 7594 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL, 7595 1.2 christos NULL)) 7596 1.2 christos || !TEST_true(SSL_set_session(clientssl, clntsess)) 7597 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 7598 1.2 christos SSL_ERROR_NONE)) 7599 1.2 christos || !TEST_true(SSL_session_reused(clientssl)) 7600 1.2 christos || !TEST_false(info_cb_failed)) 7601 1.2 christos goto end; 7602 1.2 christos 7603 1.2 christos testresult = 1; 7604 1.2 christos 7605 1.2 christos end: 7606 1.2 christos SSL_free(serverssl); 7607 1.2 christos SSL_free(clientssl); 7608 1.2 christos SSL_SESSION_free(clntsess); 7609 1.2 christos SSL_CTX_free(sctx); 7610 1.2 christos SSL_CTX_free(cctx); 7611 1.2 christos return testresult; 7612 1.2 christos } 7613 1.2 christos 7614 1.2 christos static int test_ssl_pending(int tst) 7615 1.2 christos { 7616 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 7617 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 7618 1.2 christos int testresult = 0; 7619 1.2 christos char msg[] = "A test message"; 7620 1.2 christos char buf[5]; 7621 1.2 christos size_t written, readbytes; 7622 1.2 christos 7623 1.2 christos if (tst == 0) { 7624 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 7625 1.2 christos TLS_client_method(), 7626 1.2 christos TLS1_VERSION, 0, 7627 1.2 christos &sctx, &cctx, cert, privkey))) 7628 1.2 christos goto end; 7629 1.2 christos } else { 7630 1.2 christos #ifndef OPENSSL_NO_DTLS 7631 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, DTLS_server_method(), 7632 1.2 christos DTLS_client_method(), 7633 1.2 christos DTLS1_VERSION, 0, 7634 1.2 christos &sctx, &cctx, cert, privkey))) 7635 1.2 christos goto end; 7636 1.2 christos 7637 1.2 christos # ifdef OPENSSL_NO_DTLS1_2 7638 1.2 christos /* Not supported in the FIPS provider */ 7639 1.2 christos if (is_fips) { 7640 1.2 christos testresult = 1; 7641 1.2 christos goto end; 7642 1.2 christos }; 7643 1.2 christos /* 7644 1.2 christos * Default sigalgs are SHA1 based in <DTLS1.2 which is in security 7645 1.2 christos * level 0 7646 1.2 christos */ 7647 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(sctx, "DEFAULT:@SECLEVEL=0")) 7648 1.2 christos || !TEST_true(SSL_CTX_set_cipher_list(cctx, 7649 1.2 christos "DEFAULT:@SECLEVEL=0"))) 7650 1.2 christos goto end; 7651 1.2 christos # endif 7652 1.2 christos #else 7653 1.2 christos return 1; 7654 1.2 christos #endif 7655 1.2 christos } 7656 1.2 christos 7657 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 7658 1.2 christos NULL, NULL)) 7659 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 7660 1.2 christos SSL_ERROR_NONE))) 7661 1.2 christos goto end; 7662 1.2 christos 7663 1.2 christos if (!TEST_int_eq(SSL_pending(clientssl), 0) 7664 1.2 christos || !TEST_false(SSL_has_pending(clientssl)) 7665 1.2 christos || !TEST_int_eq(SSL_pending(serverssl), 0) 7666 1.2 christos || !TEST_false(SSL_has_pending(serverssl)) 7667 1.2 christos || !TEST_true(SSL_write_ex(serverssl, msg, sizeof(msg), &written)) 7668 1.2 christos || !TEST_size_t_eq(written, sizeof(msg)) 7669 1.2 christos || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes)) 7670 1.2 christos || !TEST_size_t_eq(readbytes, sizeof(buf)) 7671 1.2 christos || !TEST_int_eq(SSL_pending(clientssl), (int)(written - readbytes)) 7672 1.2 christos || !TEST_true(SSL_has_pending(clientssl))) 7673 1.2 christos goto end; 7674 1.2 christos 7675 1.2 christos testresult = 1; 7676 1.2 christos 7677 1.2 christos end: 7678 1.2 christos SSL_free(serverssl); 7679 1.2 christos SSL_free(clientssl); 7680 1.2 christos SSL_CTX_free(sctx); 7681 1.2 christos SSL_CTX_free(cctx); 7682 1.2 christos 7683 1.2 christos return testresult; 7684 1.2 christos } 7685 1.2 christos 7686 1.2 christos static struct { 7687 1.2 christos unsigned int maxprot; 7688 1.2 christos const char *clntciphers; 7689 1.2 christos const char *clnttls13ciphers; 7690 1.2 christos const char *srvrciphers; 7691 1.2 christos const char *srvrtls13ciphers; 7692 1.2 christos const char *shared; 7693 1.2 christos const char *fipsshared; 7694 1.2 christos } shared_ciphers_data[] = { 7695 1.2 christos /* 7696 1.2 christos * We can't establish a connection (even in TLSv1.1) with these ciphersuites if 7697 1.2 christos * TLSv1.3 is enabled but TLSv1.2 is disabled. 7698 1.2 christos */ 7699 1.2 christos #if defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2) 7700 1.2 christos { 7701 1.2 christos TLS1_2_VERSION, 7702 1.2 christos "AES128-SHA:AES256-SHA", 7703 1.2 christos NULL, 7704 1.2 christos "AES256-SHA:DHE-RSA-AES128-SHA", 7705 1.2 christos NULL, 7706 1.2 christos "AES256-SHA", 7707 1.2 christos "AES256-SHA" 7708 1.2 christos }, 7709 1.2 christos # if !defined(OPENSSL_NO_CHACHA) \ 7710 1.2 christos && !defined(OPENSSL_NO_POLY1305) \ 7711 1.2 christos && !defined(OPENSSL_NO_EC) 7712 1.2 christos { 7713 1.2 christos TLS1_2_VERSION, 7714 1.2 christos "AES128-SHA:ECDHE-RSA-CHACHA20-POLY1305", 7715 1.2 christos NULL, 7716 1.2 christos "AES128-SHA:ECDHE-RSA-CHACHA20-POLY1305", 7717 1.2 christos NULL, 7718 1.2 christos "AES128-SHA:ECDHE-RSA-CHACHA20-POLY1305", 7719 1.2 christos "AES128-SHA" 7720 1.2 christos }, 7721 1.2 christos # endif 7722 1.2 christos { 7723 1.2 christos TLS1_2_VERSION, 7724 1.2 christos "AES128-SHA:DHE-RSA-AES128-SHA:AES256-SHA", 7725 1.2 christos NULL, 7726 1.2 christos "AES128-SHA:DHE-RSA-AES256-SHA:AES256-SHA", 7727 1.2 christos NULL, 7728 1.2 christos "AES128-SHA:AES256-SHA", 7729 1.2 christos "AES128-SHA:AES256-SHA" 7730 1.2 christos }, 7731 1.2 christos { 7732 1.2 christos TLS1_2_VERSION, 7733 1.2 christos "AES128-SHA:AES256-SHA", 7734 1.2 christos NULL, 7735 1.2 christos "AES128-SHA:DHE-RSA-AES128-SHA", 7736 1.2 christos NULL, 7737 1.2 christos "AES128-SHA", 7738 1.2 christos "AES128-SHA" 7739 1.2 christos }, 7740 1.2 christos #endif 7741 1.2 christos /* 7742 1.2 christos * This test combines TLSv1.3 and TLSv1.2 ciphersuites so they must both be 7743 1.2 christos * enabled. 7744 1.2 christos */ 7745 1.2 christos #if !defined(OSSL_NO_USABLE_TLS1_3) && !defined(OPENSSL_NO_TLS1_2) \ 7746 1.2 christos && !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) 7747 1.2 christos { 7748 1.2 christos TLS1_3_VERSION, 7749 1.2 christos "AES128-SHA:AES256-SHA", 7750 1.2 christos NULL, 7751 1.2 christos "AES256-SHA:AES128-SHA256", 7752 1.2 christos NULL, 7753 1.2 christos "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:" 7754 1.2 christos "TLS_AES_128_GCM_SHA256:AES256-SHA", 7755 1.2 christos "TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:AES256-SHA" 7756 1.2 christos }, 7757 1.2 christos #endif 7758 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 7759 1.2 christos { 7760 1.2 christos TLS1_3_VERSION, 7761 1.2 christos "AES128-SHA", 7762 1.2 christos "TLS_AES_256_GCM_SHA384", 7763 1.2 christos "AES256-SHA", 7764 1.2 christos "TLS_AES_256_GCM_SHA384", 7765 1.2 christos "TLS_AES_256_GCM_SHA384", 7766 1.2 christos "TLS_AES_256_GCM_SHA384" 7767 1.2 christos }, 7768 1.2 christos #endif 7769 1.2 christos }; 7770 1.2 christos 7771 1.2 christos static int int_test_ssl_get_shared_ciphers(int tst, int clnt) 7772 1.2 christos { 7773 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 7774 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 7775 1.2 christos int testresult = 0; 7776 1.2 christos char buf[1024]; 7777 1.2 christos OSSL_LIB_CTX *tmplibctx = OSSL_LIB_CTX_new(); 7778 1.2 christos 7779 1.2 christos if (!TEST_ptr(tmplibctx)) 7780 1.2 christos goto end; 7781 1.2 christos 7782 1.2 christos /* 7783 1.2 christos * Regardless of whether we're testing with the FIPS provider loaded into 7784 1.2 christos * libctx, we want one peer to always use the full set of ciphersuites 7785 1.2 christos * available. Therefore we use a separate libctx with the default provider 7786 1.2 christos * loaded into it. We run the same tests twice - once with the client side 7787 1.2 christos * having the full set of ciphersuites and once with the server side. 7788 1.2 christos */ 7789 1.2 christos if (clnt) { 7790 1.2 christos cctx = SSL_CTX_new_ex(tmplibctx, NULL, TLS_client_method()); 7791 1.2 christos if (!TEST_ptr(cctx)) 7792 1.2 christos goto end; 7793 1.2 christos } else { 7794 1.2 christos sctx = SSL_CTX_new_ex(tmplibctx, NULL, TLS_server_method()); 7795 1.2 christos if (!TEST_ptr(sctx)) 7796 1.2 christos goto end; 7797 1.2 christos } 7798 1.2 christos 7799 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 7800 1.2 christos TLS_client_method(), 7801 1.2 christos TLS1_VERSION, 7802 1.2 christos shared_ciphers_data[tst].maxprot, 7803 1.2 christos &sctx, &cctx, cert, privkey))) 7804 1.2 christos goto end; 7805 1.2 christos 7806 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(cctx, 7807 1.2 christos shared_ciphers_data[tst].clntciphers)) 7808 1.2 christos || (shared_ciphers_data[tst].clnttls13ciphers != NULL 7809 1.2 christos && !TEST_true(SSL_CTX_set_ciphersuites(cctx, 7810 1.2 christos shared_ciphers_data[tst].clnttls13ciphers))) 7811 1.2 christos || !TEST_true(SSL_CTX_set_cipher_list(sctx, 7812 1.2 christos shared_ciphers_data[tst].srvrciphers)) 7813 1.2 christos || (shared_ciphers_data[tst].srvrtls13ciphers != NULL 7814 1.2 christos && !TEST_true(SSL_CTX_set_ciphersuites(sctx, 7815 1.2 christos shared_ciphers_data[tst].srvrtls13ciphers)))) 7816 1.2 christos goto end; 7817 1.2 christos 7818 1.2 christos 7819 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 7820 1.2 christos NULL, NULL)) 7821 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 7822 1.2 christos SSL_ERROR_NONE))) 7823 1.2 christos goto end; 7824 1.2 christos 7825 1.2 christos if (!TEST_ptr(SSL_get_shared_ciphers(serverssl, buf, sizeof(buf))) 7826 1.2 christos || !TEST_int_eq(strcmp(buf, 7827 1.2 christos is_fips 7828 1.2 christos ? shared_ciphers_data[tst].fipsshared 7829 1.2 christos : shared_ciphers_data[tst].shared), 7830 1.2 christos 0)) { 7831 1.2 christos TEST_info("Shared ciphers are: %s\n", buf); 7832 1.2 christos goto end; 7833 1.2 christos } 7834 1.2 christos 7835 1.2 christos testresult = 1; 7836 1.2 christos 7837 1.2 christos end: 7838 1.2 christos SSL_free(serverssl); 7839 1.2 christos SSL_free(clientssl); 7840 1.2 christos SSL_CTX_free(sctx); 7841 1.2 christos SSL_CTX_free(cctx); 7842 1.2 christos OSSL_LIB_CTX_free(tmplibctx); 7843 1.2 christos 7844 1.2 christos return testresult; 7845 1.2 christos } 7846 1.2 christos 7847 1.2 christos static int test_ssl_get_shared_ciphers(int tst) 7848 1.2 christos { 7849 1.2 christos return int_test_ssl_get_shared_ciphers(tst, 0) 7850 1.2 christos && int_test_ssl_get_shared_ciphers(tst, 1); 7851 1.2 christos } 7852 1.2 christos 7853 1.2 christos 7854 1.2 christos static const char *appdata = "Hello World"; 7855 1.2 christos static int gen_tick_called, dec_tick_called, tick_key_cb_called; 7856 1.2 christos static int tick_key_renew = 0; 7857 1.2 christos static SSL_TICKET_RETURN tick_dec_ret = SSL_TICKET_RETURN_ABORT; 7858 1.2 christos 7859 1.2 christos static int gen_tick_cb(SSL *s, void *arg) 7860 1.2 christos { 7861 1.2 christos gen_tick_called = 1; 7862 1.2 christos 7863 1.2 christos return SSL_SESSION_set1_ticket_appdata(SSL_get_session(s), appdata, 7864 1.2 christos strlen(appdata)); 7865 1.2 christos } 7866 1.2 christos 7867 1.2 christos static SSL_TICKET_RETURN dec_tick_cb(SSL *s, SSL_SESSION *ss, 7868 1.2 christos const unsigned char *keyname, 7869 1.2 christos size_t keyname_length, 7870 1.2 christos SSL_TICKET_STATUS status, 7871 1.2 christos void *arg) 7872 1.2 christos { 7873 1.2 christos void *tickdata; 7874 1.2 christos size_t tickdlen; 7875 1.2 christos 7876 1.2 christos dec_tick_called = 1; 7877 1.2 christos 7878 1.2 christos if (status == SSL_TICKET_EMPTY) 7879 1.2 christos return SSL_TICKET_RETURN_IGNORE_RENEW; 7880 1.2 christos 7881 1.2 christos if (!TEST_true(status == SSL_TICKET_SUCCESS 7882 1.2 christos || status == SSL_TICKET_SUCCESS_RENEW)) 7883 1.2 christos return SSL_TICKET_RETURN_ABORT; 7884 1.2 christos 7885 1.2 christos if (!TEST_true(SSL_SESSION_get0_ticket_appdata(ss, &tickdata, 7886 1.2 christos &tickdlen)) 7887 1.2 christos || !TEST_size_t_eq(tickdlen, strlen(appdata)) 7888 1.2 christos || !TEST_int_eq(memcmp(tickdata, appdata, tickdlen), 0)) 7889 1.2 christos return SSL_TICKET_RETURN_ABORT; 7890 1.2 christos 7891 1.2 christos if (tick_key_cb_called) { 7892 1.2 christos /* Don't change what the ticket key callback wanted to do */ 7893 1.2 christos switch (status) { 7894 1.2 christos case SSL_TICKET_NO_DECRYPT: 7895 1.2 christos return SSL_TICKET_RETURN_IGNORE_RENEW; 7896 1.2 christos 7897 1.2 christos case SSL_TICKET_SUCCESS: 7898 1.2 christos return SSL_TICKET_RETURN_USE; 7899 1.2 christos 7900 1.2 christos case SSL_TICKET_SUCCESS_RENEW: 7901 1.2 christos return SSL_TICKET_RETURN_USE_RENEW; 7902 1.2 christos 7903 1.2 christos default: 7904 1.2 christos return SSL_TICKET_RETURN_ABORT; 7905 1.2 christos } 7906 1.2 christos } 7907 1.2 christos return tick_dec_ret; 7908 1.2 christos 7909 1.2 christos } 7910 1.2 christos 7911 1.2 christos #ifndef OPENSSL_NO_DEPRECATED_3_0 7912 1.2 christos static int tick_key_cb(SSL *s, unsigned char key_name[16], 7913 1.2 christos unsigned char iv[EVP_MAX_IV_LENGTH], EVP_CIPHER_CTX *ctx, 7914 1.2 christos HMAC_CTX *hctx, int enc) 7915 1.2 christos { 7916 1.2 christos const unsigned char tick_aes_key[16] = "0123456789abcdef"; 7917 1.2 christos const unsigned char tick_hmac_key[16] = "0123456789abcdef"; 7918 1.2 christos EVP_CIPHER *aes128cbc; 7919 1.2 christos EVP_MD *sha256; 7920 1.2 christos int ret; 7921 1.2 christos 7922 1.2 christos tick_key_cb_called = 1; 7923 1.2 christos 7924 1.2 christos if (tick_key_renew == -1) 7925 1.2 christos return 0; 7926 1.2 christos 7927 1.2 christos aes128cbc = EVP_CIPHER_fetch(libctx, "AES-128-CBC", NULL); 7928 1.2 christos if (!TEST_ptr(aes128cbc)) 7929 1.2 christos return 0; 7930 1.2 christos sha256 = EVP_MD_fetch(libctx, "SHA-256", NULL); 7931 1.2 christos if (!TEST_ptr(sha256)) { 7932 1.2 christos EVP_CIPHER_free(aes128cbc); 7933 1.2 christos return 0; 7934 1.2 christos } 7935 1.2 christos 7936 1.2 christos memset(iv, 0, AES_BLOCK_SIZE); 7937 1.2 christos memset(key_name, 0, 16); 7938 1.2 christos if (aes128cbc == NULL 7939 1.2 christos || sha256 == NULL 7940 1.2 christos || !EVP_CipherInit_ex(ctx, aes128cbc, NULL, tick_aes_key, iv, enc) 7941 1.2 christos || !HMAC_Init_ex(hctx, tick_hmac_key, sizeof(tick_hmac_key), sha256, 7942 1.2 christos NULL)) 7943 1.2 christos ret = -1; 7944 1.2 christos else 7945 1.2 christos ret = tick_key_renew ? 2 : 1; 7946 1.2 christos 7947 1.2 christos EVP_CIPHER_free(aes128cbc); 7948 1.2 christos EVP_MD_free(sha256); 7949 1.2 christos 7950 1.2 christos return ret; 7951 1.2 christos } 7952 1.2 christos #endif 7953 1.2 christos 7954 1.2 christos static int tick_key_evp_cb(SSL *s, unsigned char key_name[16], 7955 1.2 christos unsigned char iv[EVP_MAX_IV_LENGTH], 7956 1.2 christos EVP_CIPHER_CTX *ctx, EVP_MAC_CTX *hctx, int enc) 7957 1.2 christos { 7958 1.2 christos const unsigned char tick_aes_key[16] = "0123456789abcdef"; 7959 1.2 christos unsigned char tick_hmac_key[16] = "0123456789abcdef"; 7960 1.2 christos OSSL_PARAM params[2]; 7961 1.2 christos EVP_CIPHER *aes128cbc; 7962 1.2 christos int ret; 7963 1.2 christos 7964 1.2 christos tick_key_cb_called = 1; 7965 1.2 christos 7966 1.2 christos if (tick_key_renew == -1) 7967 1.2 christos return 0; 7968 1.2 christos 7969 1.2 christos aes128cbc = EVP_CIPHER_fetch(libctx, "AES-128-CBC", NULL); 7970 1.2 christos if (!TEST_ptr(aes128cbc)) 7971 1.2 christos return 0; 7972 1.2 christos 7973 1.2 christos memset(iv, 0, AES_BLOCK_SIZE); 7974 1.2 christos memset(key_name, 0, 16); 7975 1.2 christos params[0] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, 7976 1.2 christos "SHA256", 0); 7977 1.2 christos params[1] = OSSL_PARAM_construct_end(); 7978 1.2 christos if (aes128cbc == NULL 7979 1.2 christos || !EVP_CipherInit_ex(ctx, aes128cbc, NULL, tick_aes_key, iv, enc) 7980 1.2 christos || !EVP_MAC_init(hctx, tick_hmac_key, sizeof(tick_hmac_key), 7981 1.2 christos params)) 7982 1.2 christos ret = -1; 7983 1.2 christos else 7984 1.2 christos ret = tick_key_renew ? 2 : 1; 7985 1.2 christos 7986 1.2 christos EVP_CIPHER_free(aes128cbc); 7987 1.2 christos 7988 1.2 christos return ret; 7989 1.2 christos } 7990 1.2 christos 7991 1.2 christos /* 7992 1.2 christos * Test the various ticket callbacks 7993 1.2 christos * Test 0: TLSv1.2, no ticket key callback, no ticket, no renewal 7994 1.2 christos * Test 1: TLSv1.3, no ticket key callback, no ticket, no renewal 7995 1.2 christos * Test 2: TLSv1.2, no ticket key callback, no ticket, renewal 7996 1.2 christos * Test 3: TLSv1.3, no ticket key callback, no ticket, renewal 7997 1.2 christos * Test 4: TLSv1.2, no ticket key callback, ticket, no renewal 7998 1.2 christos * Test 5: TLSv1.3, no ticket key callback, ticket, no renewal 7999 1.2 christos * Test 6: TLSv1.2, no ticket key callback, ticket, renewal 8000 1.2 christos * Test 7: TLSv1.3, no ticket key callback, ticket, renewal 8001 1.2 christos * Test 8: TLSv1.2, old ticket key callback, ticket, no renewal 8002 1.2 christos * Test 9: TLSv1.3, old ticket key callback, ticket, no renewal 8003 1.2 christos * Test 10: TLSv1.2, old ticket key callback, ticket, renewal 8004 1.2 christos * Test 11: TLSv1.3, old ticket key callback, ticket, renewal 8005 1.2 christos * Test 12: TLSv1.2, old ticket key callback, no ticket 8006 1.2 christos * Test 13: TLSv1.3, old ticket key callback, no ticket 8007 1.2 christos * Test 14: TLSv1.2, ticket key callback, ticket, no renewal 8008 1.2 christos * Test 15: TLSv1.3, ticket key callback, ticket, no renewal 8009 1.2 christos * Test 16: TLSv1.2, ticket key callback, ticket, renewal 8010 1.2 christos * Test 17: TLSv1.3, ticket key callback, ticket, renewal 8011 1.2 christos * Test 18: TLSv1.2, ticket key callback, no ticket 8012 1.2 christos * Test 19: TLSv1.3, ticket key callback, no ticket 8013 1.2 christos */ 8014 1.2 christos static int test_ticket_callbacks(int tst) 8015 1.2 christos { 8016 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 8017 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 8018 1.2 christos SSL_SESSION *clntsess = NULL; 8019 1.2 christos int testresult = 0; 8020 1.2 christos 8021 1.2 christos #ifdef OPENSSL_NO_TLS1_2 8022 1.2 christos if (tst % 2 == 0) 8023 1.2 christos return 1; 8024 1.2 christos #endif 8025 1.2 christos #ifdef OSSL_NO_USABLE_TLS1_3 8026 1.2 christos if (tst % 2 == 1) 8027 1.2 christos return 1; 8028 1.2 christos #endif 8029 1.2 christos #ifdef OPENSSL_NO_DEPRECATED_3_0 8030 1.2 christos if (tst >= 8 && tst <= 13) 8031 1.2 christos return 1; 8032 1.2 christos #endif 8033 1.2 christos 8034 1.2 christos gen_tick_called = dec_tick_called = tick_key_cb_called = 0; 8035 1.2 christos 8036 1.2 christos /* Which tests the ticket key callback should request renewal for */ 8037 1.2 christos 8038 1.2 christos if (tst == 10 || tst == 11 || tst == 16 || tst == 17) 8039 1.2 christos tick_key_renew = 1; 8040 1.2 christos else if (tst == 12 || tst == 13 || tst == 18 || tst == 19) 8041 1.2 christos tick_key_renew = -1; /* abort sending the ticket/0-length ticket */ 8042 1.2 christos else 8043 1.2 christos tick_key_renew = 0; 8044 1.2 christos 8045 1.2 christos /* Which tests the decrypt ticket callback should request renewal for */ 8046 1.2 christos switch (tst) { 8047 1.2 christos case 0: 8048 1.2 christos case 1: 8049 1.2 christos tick_dec_ret = SSL_TICKET_RETURN_IGNORE; 8050 1.2 christos break; 8051 1.2 christos 8052 1.2 christos case 2: 8053 1.2 christos case 3: 8054 1.2 christos tick_dec_ret = SSL_TICKET_RETURN_IGNORE_RENEW; 8055 1.2 christos break; 8056 1.2 christos 8057 1.2 christos case 4: 8058 1.2 christos case 5: 8059 1.2 christos tick_dec_ret = SSL_TICKET_RETURN_USE; 8060 1.2 christos break; 8061 1.2 christos 8062 1.2 christos case 6: 8063 1.2 christos case 7: 8064 1.2 christos tick_dec_ret = SSL_TICKET_RETURN_USE_RENEW; 8065 1.2 christos break; 8066 1.2 christos 8067 1.2 christos default: 8068 1.2 christos tick_dec_ret = SSL_TICKET_RETURN_ABORT; 8069 1.2 christos } 8070 1.2 christos 8071 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 8072 1.2 christos TLS_client_method(), 8073 1.2 christos TLS1_VERSION, 8074 1.2 christos ((tst % 2) == 0) ? TLS1_2_VERSION 8075 1.2 christos : TLS1_3_VERSION, 8076 1.2 christos &sctx, &cctx, cert, privkey))) 8077 1.2 christos goto end; 8078 1.2 christos 8079 1.2 christos /* 8080 1.2 christos * We only want sessions to resume from tickets - not the session cache. So 8081 1.2 christos * switch the cache off. 8082 1.2 christos */ 8083 1.2 christos if (!TEST_true(SSL_CTX_set_session_cache_mode(sctx, SSL_SESS_CACHE_OFF))) 8084 1.2 christos goto end; 8085 1.2 christos 8086 1.2 christos if (!TEST_true(SSL_CTX_set_session_ticket_cb(sctx, gen_tick_cb, dec_tick_cb, 8087 1.2 christos NULL))) 8088 1.2 christos goto end; 8089 1.2 christos 8090 1.2 christos if (tst >= 14) { 8091 1.2 christos if (!TEST_true(SSL_CTX_set_tlsext_ticket_key_evp_cb(sctx, tick_key_evp_cb))) 8092 1.2 christos goto end; 8093 1.2 christos #ifndef OPENSSL_NO_DEPRECATED_3_0 8094 1.2 christos } else if (tst >= 8) { 8095 1.2 christos if (!TEST_true(SSL_CTX_set_tlsext_ticket_key_cb(sctx, tick_key_cb))) 8096 1.2 christos goto end; 8097 1.2 christos #endif 8098 1.2 christos } 8099 1.2 christos 8100 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 8101 1.2 christos NULL, NULL)) 8102 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 8103 1.2 christos SSL_ERROR_NONE))) 8104 1.2 christos goto end; 8105 1.2 christos 8106 1.2 christos /* 8107 1.2 christos * The decrypt ticket key callback in TLSv1.2 should be called even though 8108 1.2 christos * we have no ticket yet, because it gets called with a status of 8109 1.2 christos * SSL_TICKET_EMPTY (the client indicates support for tickets but does not 8110 1.2 christos * actually send any ticket data). This does not happen in TLSv1.3 because 8111 1.2 christos * it is not valid to send empty ticket data in TLSv1.3. 8112 1.2 christos */ 8113 1.2 christos if (!TEST_int_eq(gen_tick_called, 1) 8114 1.2 christos || !TEST_int_eq(dec_tick_called, ((tst % 2) == 0) ? 1 : 0)) 8115 1.2 christos goto end; 8116 1.2 christos 8117 1.2 christos gen_tick_called = dec_tick_called = 0; 8118 1.2 christos 8119 1.2 christos clntsess = SSL_get1_session(clientssl); 8120 1.2 christos SSL_shutdown(clientssl); 8121 1.2 christos SSL_shutdown(serverssl); 8122 1.2 christos SSL_free(serverssl); 8123 1.2 christos SSL_free(clientssl); 8124 1.2 christos serverssl = clientssl = NULL; 8125 1.2 christos 8126 1.2 christos /* Now do a resumption */ 8127 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL, 8128 1.2 christos NULL)) 8129 1.2 christos || !TEST_true(SSL_set_session(clientssl, clntsess)) 8130 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 8131 1.2 christos SSL_ERROR_NONE))) 8132 1.2 christos goto end; 8133 1.2 christos 8134 1.2 christos if (tick_dec_ret == SSL_TICKET_RETURN_IGNORE 8135 1.2 christos || tick_dec_ret == SSL_TICKET_RETURN_IGNORE_RENEW 8136 1.2 christos || tick_key_renew == -1) { 8137 1.2 christos if (!TEST_false(SSL_session_reused(clientssl))) 8138 1.2 christos goto end; 8139 1.2 christos } else { 8140 1.2 christos if (!TEST_true(SSL_session_reused(clientssl))) 8141 1.2 christos goto end; 8142 1.2 christos } 8143 1.2 christos 8144 1.2 christos if (!TEST_int_eq(gen_tick_called, 8145 1.2 christos (tick_key_renew 8146 1.2 christos || tick_dec_ret == SSL_TICKET_RETURN_IGNORE_RENEW 8147 1.2 christos || tick_dec_ret == SSL_TICKET_RETURN_USE_RENEW) 8148 1.2 christos ? 1 : 0) 8149 1.2 christos /* There is no ticket to decrypt in tests 13 and 19 */ 8150 1.2 christos || !TEST_int_eq(dec_tick_called, (tst == 13 || tst == 19) ? 0 : 1)) 8151 1.2 christos goto end; 8152 1.2 christos 8153 1.2 christos testresult = 1; 8154 1.2 christos 8155 1.2 christos end: 8156 1.2 christos SSL_SESSION_free(clntsess); 8157 1.2 christos SSL_free(serverssl); 8158 1.2 christos SSL_free(clientssl); 8159 1.2 christos SSL_CTX_free(sctx); 8160 1.2 christos SSL_CTX_free(cctx); 8161 1.2 christos 8162 1.2 christos return testresult; 8163 1.2 christos } 8164 1.2 christos 8165 1.2 christos /* 8166 1.2 christos * Test incorrect shutdown. 8167 1.2 christos * Test 0: client does not shutdown properly, 8168 1.2 christos * server does not set SSL_OP_IGNORE_UNEXPECTED_EOF, 8169 1.2 christos * server should get SSL_ERROR_SSL 8170 1.2 christos * Test 1: client does not shutdown properly, 8171 1.2 christos * server sets SSL_OP_IGNORE_UNEXPECTED_EOF, 8172 1.2 christos * server should get SSL_ERROR_ZERO_RETURN 8173 1.2 christos */ 8174 1.2 christos static int test_incorrect_shutdown(int tst) 8175 1.2 christos { 8176 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 8177 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 8178 1.2 christos int testresult = 0; 8179 1.2 christos char buf[80]; 8180 1.2 christos BIO *c2s; 8181 1.2 christos 8182 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 8183 1.2 christos TLS_client_method(), 0, 0, 8184 1.2 christos &sctx, &cctx, cert, privkey))) 8185 1.2 christos goto end; 8186 1.2 christos 8187 1.2 christos if (tst == 1) 8188 1.2 christos SSL_CTX_set_options(sctx, SSL_OP_IGNORE_UNEXPECTED_EOF); 8189 1.2 christos 8190 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 8191 1.2 christos NULL, NULL))) 8192 1.2 christos goto end; 8193 1.2 christos 8194 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 8195 1.2 christos SSL_ERROR_NONE))) 8196 1.2 christos goto end; 8197 1.2 christos 8198 1.2 christos c2s = SSL_get_rbio(serverssl); 8199 1.2 christos BIO_set_mem_eof_return(c2s, 0); 8200 1.2 christos 8201 1.2 christos if (!TEST_false(SSL_read(serverssl, buf, sizeof(buf)))) 8202 1.2 christos goto end; 8203 1.2 christos 8204 1.2 christos if (tst == 0 && !TEST_int_eq(SSL_get_error(serverssl, 0), SSL_ERROR_SSL) ) 8205 1.2 christos goto end; 8206 1.2 christos if (tst == 1 && !TEST_int_eq(SSL_get_error(serverssl, 0), SSL_ERROR_ZERO_RETURN) ) 8207 1.2 christos goto end; 8208 1.2 christos 8209 1.2 christos testresult = 1; 8210 1.2 christos 8211 1.2 christos end: 8212 1.2 christos SSL_free(serverssl); 8213 1.2 christos SSL_free(clientssl); 8214 1.2 christos SSL_CTX_free(sctx); 8215 1.2 christos SSL_CTX_free(cctx); 8216 1.2 christos 8217 1.2 christos return testresult; 8218 1.2 christos } 8219 1.2 christos 8220 1.2 christos /* 8221 1.2 christos * Test bi-directional shutdown. 8222 1.2 christos * Test 0: TLSv1.2 8223 1.2 christos * Test 1: TLSv1.2, server continues to read/write after client shutdown 8224 1.2 christos * Test 2: TLSv1.3, no pending NewSessionTicket messages 8225 1.2 christos * Test 3: TLSv1.3, pending NewSessionTicket messages 8226 1.2 christos * Test 4: TLSv1.3, server continues to read/write after client shutdown, server 8227 1.2 christos * sends key update, client reads it 8228 1.2 christos * Test 5: TLSv1.3, server continues to read/write after client shutdown, server 8229 1.2 christos * sends CertificateRequest, client reads and ignores it 8230 1.2 christos * Test 6: TLSv1.3, server continues to read/write after client shutdown, client 8231 1.2 christos * doesn't read it 8232 1.2 christos */ 8233 1.2 christos static int test_shutdown(int tst) 8234 1.2 christos { 8235 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 8236 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 8237 1.2 christos int testresult = 0; 8238 1.2 christos char msg[] = "A test message"; 8239 1.2 christos char buf[80]; 8240 1.2 christos size_t written, readbytes; 8241 1.2 christos SSL_SESSION *sess; 8242 1.2 christos 8243 1.2 christos #ifdef OPENSSL_NO_TLS1_2 8244 1.2 christos if (tst <= 1) 8245 1.2 christos return 1; 8246 1.2 christos #endif 8247 1.2 christos #ifdef OSSL_NO_USABLE_TLS1_3 8248 1.2 christos if (tst >= 2) 8249 1.2 christos return 1; 8250 1.2 christos #endif 8251 1.2 christos 8252 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 8253 1.2 christos TLS_client_method(), 8254 1.2 christos TLS1_VERSION, 8255 1.2 christos (tst <= 1) ? TLS1_2_VERSION 8256 1.2 christos : TLS1_3_VERSION, 8257 1.2 christos &sctx, &cctx, cert, privkey))) 8258 1.2 christos goto end; 8259 1.2 christos 8260 1.2 christos if (tst == 5) 8261 1.2 christos SSL_CTX_set_post_handshake_auth(cctx, 1); 8262 1.2 christos 8263 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 8264 1.2 christos NULL, NULL))) 8265 1.2 christos goto end; 8266 1.2 christos 8267 1.2 christos if (tst == 3) { 8268 1.2 christos if (!TEST_true(create_bare_ssl_connection(serverssl, clientssl, 8269 1.2 christos SSL_ERROR_NONE, 1)) 8270 1.2 christos || !TEST_ptr_ne(sess = SSL_get_session(clientssl), NULL) 8271 1.2 christos || !TEST_false(SSL_SESSION_is_resumable(sess))) 8272 1.2 christos goto end; 8273 1.2 christos } else if (!TEST_true(create_ssl_connection(serverssl, clientssl, 8274 1.2 christos SSL_ERROR_NONE)) 8275 1.2 christos || !TEST_ptr_ne(sess = SSL_get_session(clientssl), NULL) 8276 1.2 christos || !TEST_true(SSL_SESSION_is_resumable(sess))) { 8277 1.2 christos goto end; 8278 1.2 christos } 8279 1.2 christos 8280 1.2 christos if (!TEST_int_eq(SSL_shutdown(clientssl), 0)) 8281 1.2 christos goto end; 8282 1.2 christos 8283 1.2 christos if (tst >= 4) { 8284 1.2 christos /* 8285 1.2 christos * Reading on the server after the client has sent close_notify should 8286 1.2 christos * fail and provide SSL_ERROR_ZERO_RETURN 8287 1.2 christos */ 8288 1.2 christos if (!TEST_false(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes)) 8289 1.2 christos || !TEST_int_eq(SSL_get_error(serverssl, 0), 8290 1.2 christos SSL_ERROR_ZERO_RETURN) 8291 1.2 christos || !TEST_int_eq(SSL_get_shutdown(serverssl), 8292 1.2 christos SSL_RECEIVED_SHUTDOWN) 8293 1.2 christos /* 8294 1.2 christos * Even though we're shutdown on receive we should still be 8295 1.2 christos * able to write. 8296 1.2 christos */ 8297 1.2 christos || !TEST_true(SSL_write(serverssl, msg, sizeof(msg)))) 8298 1.2 christos goto end; 8299 1.2 christos if (tst == 4 8300 1.2 christos && !TEST_true(SSL_key_update(serverssl, 8301 1.2 christos SSL_KEY_UPDATE_REQUESTED))) 8302 1.2 christos goto end; 8303 1.2 christos if (tst == 5) { 8304 1.2 christos SSL_set_verify(serverssl, SSL_VERIFY_PEER, NULL); 8305 1.2 christos if (!TEST_true(SSL_verify_client_post_handshake(serverssl))) 8306 1.2 christos goto end; 8307 1.2 christos } 8308 1.2 christos if ((tst == 4 || tst == 5) 8309 1.2 christos && !TEST_true(SSL_write(serverssl, msg, sizeof(msg)))) 8310 1.2 christos goto end; 8311 1.2 christos if (!TEST_int_eq(SSL_shutdown(serverssl), 1)) 8312 1.2 christos goto end; 8313 1.2 christos if (tst == 4 || tst == 5) { 8314 1.2 christos /* Should still be able to read data from server */ 8315 1.2 christos if (!TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), 8316 1.2 christos &readbytes)) 8317 1.2 christos || !TEST_size_t_eq(readbytes, sizeof(msg)) 8318 1.2 christos || !TEST_int_eq(memcmp(msg, buf, readbytes), 0) 8319 1.2 christos || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), 8320 1.2 christos &readbytes)) 8321 1.2 christos || !TEST_size_t_eq(readbytes, sizeof(msg)) 8322 1.2 christos || !TEST_int_eq(memcmp(msg, buf, readbytes), 0)) 8323 1.2 christos goto end; 8324 1.2 christos } 8325 1.2 christos } 8326 1.2 christos 8327 1.2 christos /* Writing on the client after sending close_notify shouldn't be possible */ 8328 1.2 christos if (!TEST_false(SSL_write_ex(clientssl, msg, sizeof(msg), &written))) 8329 1.2 christos goto end; 8330 1.2 christos 8331 1.2 christos if (tst < 4) { 8332 1.2 christos /* 8333 1.2 christos * For these tests the client has sent close_notify but it has not yet 8334 1.2 christos * been received by the server. The server has not sent close_notify 8335 1.2 christos * yet. 8336 1.2 christos */ 8337 1.2 christos if (!TEST_int_eq(SSL_shutdown(serverssl), 0) 8338 1.2 christos /* 8339 1.2 christos * Writing on the server after sending close_notify shouldn't 8340 1.2 christos * be possible. 8341 1.2 christos */ 8342 1.2 christos || !TEST_false(SSL_write_ex(serverssl, msg, sizeof(msg), &written)) 8343 1.2 christos || !TEST_int_eq(SSL_shutdown(clientssl), 1) 8344 1.2 christos || !TEST_ptr_ne(sess = SSL_get_session(clientssl), NULL) 8345 1.2 christos || !TEST_true(SSL_SESSION_is_resumable(sess)) 8346 1.2 christos || !TEST_int_eq(SSL_shutdown(serverssl), 1)) 8347 1.2 christos goto end; 8348 1.2 christos } else if (tst == 4 || tst == 5) { 8349 1.2 christos /* 8350 1.2 christos * In this test the client has sent close_notify and it has been 8351 1.2 christos * received by the server which has responded with a close_notify. The 8352 1.2 christos * client needs to read the close_notify sent by the server. 8353 1.2 christos */ 8354 1.2 christos if (!TEST_int_eq(SSL_shutdown(clientssl), 1) 8355 1.2 christos || !TEST_ptr_ne(sess = SSL_get_session(clientssl), NULL) 8356 1.2 christos || !TEST_true(SSL_SESSION_is_resumable(sess))) 8357 1.2 christos goto end; 8358 1.2 christos } else { 8359 1.2 christos /* 8360 1.2 christos * tst == 6 8361 1.2 christos * 8362 1.2 christos * The client has sent close_notify and is expecting a close_notify 8363 1.2 christos * back, but instead there is application data first. The shutdown 8364 1.2 christos * should fail with a fatal error. 8365 1.2 christos */ 8366 1.2 christos if (!TEST_int_eq(SSL_shutdown(clientssl), -1) 8367 1.2 christos || !TEST_int_eq(SSL_get_error(clientssl, -1), SSL_ERROR_SSL)) 8368 1.2 christos goto end; 8369 1.2 christos } 8370 1.2 christos 8371 1.2 christos testresult = 1; 8372 1.2 christos 8373 1.2 christos end: 8374 1.2 christos SSL_free(serverssl); 8375 1.2 christos SSL_free(clientssl); 8376 1.2 christos SSL_CTX_free(sctx); 8377 1.2 christos SSL_CTX_free(cctx); 8378 1.2 christos 8379 1.2 christos return testresult; 8380 1.2 christos } 8381 1.2 christos 8382 1.2 christos #if !defined(OPENSSL_NO_TLS1_2) || !defined(OSSL_NO_USABLE_TLS1_3) 8383 1.2 christos static int cert_cb_cnt; 8384 1.2 christos 8385 1.2 christos static int cert_cb(SSL *s, void *arg) 8386 1.2 christos { 8387 1.2 christos SSL_CTX *ctx = (SSL_CTX *)arg; 8388 1.2 christos BIO *in = NULL; 8389 1.2 christos EVP_PKEY *pkey = NULL; 8390 1.2 christos X509 *x509 = NULL, *rootx = NULL; 8391 1.2 christos STACK_OF(X509) *chain = NULL; 8392 1.2 christos char *rootfile = NULL, *ecdsacert = NULL, *ecdsakey = NULL; 8393 1.2 christos int ret = 0; 8394 1.2 christos 8395 1.2 christos if (cert_cb_cnt == 0) { 8396 1.2 christos /* Suspend the handshake */ 8397 1.2 christos cert_cb_cnt++; 8398 1.2 christos return -1; 8399 1.2 christos } else if (cert_cb_cnt == 1) { 8400 1.2 christos /* 8401 1.2 christos * Update the SSL_CTX, set the certificate and private key and then 8402 1.2 christos * continue the handshake normally. 8403 1.2 christos */ 8404 1.2 christos if (ctx != NULL && !TEST_ptr(SSL_set_SSL_CTX(s, ctx))) 8405 1.2 christos return 0; 8406 1.2 christos 8407 1.2 christos if (!TEST_true(SSL_use_certificate_file(s, cert, SSL_FILETYPE_PEM)) 8408 1.2 christos || !TEST_true(SSL_use_PrivateKey_file(s, privkey, 8409 1.2 christos SSL_FILETYPE_PEM)) 8410 1.2 christos || !TEST_true(SSL_check_private_key(s))) 8411 1.2 christos return 0; 8412 1.2 christos cert_cb_cnt++; 8413 1.2 christos return 1; 8414 1.2 christos } else if (cert_cb_cnt == 3) { 8415 1.2 christos int rv; 8416 1.2 christos 8417 1.2 christos rootfile = test_mk_file_path(certsdir, "rootcert.pem"); 8418 1.2 christos ecdsacert = test_mk_file_path(certsdir, "server-ecdsa-cert.pem"); 8419 1.2 christos ecdsakey = test_mk_file_path(certsdir, "server-ecdsa-key.pem"); 8420 1.2 christos if (!TEST_ptr(rootfile) || !TEST_ptr(ecdsacert) || !TEST_ptr(ecdsakey)) 8421 1.2 christos goto out; 8422 1.2 christos chain = sk_X509_new_null(); 8423 1.2 christos if (!TEST_ptr(chain)) 8424 1.2 christos goto out; 8425 1.2 christos if (!TEST_ptr(in = BIO_new(BIO_s_file())) 8426 1.2 christos || !TEST_int_gt(BIO_read_filename(in, rootfile), 0) 8427 1.2 christos || !TEST_ptr(rootx = X509_new_ex(libctx, NULL)) 8428 1.2 christos || !TEST_ptr(PEM_read_bio_X509(in, &rootx, NULL, NULL)) 8429 1.2 christos || !TEST_true(sk_X509_push(chain, rootx))) 8430 1.2 christos goto out; 8431 1.2 christos rootx = NULL; 8432 1.2 christos BIO_free(in); 8433 1.2 christos if (!TEST_ptr(in = BIO_new(BIO_s_file())) 8434 1.2 christos || !TEST_int_gt(BIO_read_filename(in, ecdsacert), 0) 8435 1.2 christos || !TEST_ptr(x509 = X509_new_ex(libctx, NULL)) 8436 1.2 christos || !TEST_ptr(PEM_read_bio_X509(in, &x509, NULL, NULL))) 8437 1.2 christos goto out; 8438 1.2 christos BIO_free(in); 8439 1.2 christos if (!TEST_ptr(in = BIO_new(BIO_s_file())) 8440 1.2 christos || !TEST_int_gt(BIO_read_filename(in, ecdsakey), 0) 8441 1.2 christos || !TEST_ptr(pkey = PEM_read_bio_PrivateKey_ex(in, NULL, 8442 1.2 christos NULL, NULL, 8443 1.2 christos libctx, NULL))) 8444 1.2 christos goto out; 8445 1.2 christos rv = SSL_check_chain(s, x509, pkey, chain); 8446 1.2 christos /* 8447 1.2 christos * If the cert doesn't show as valid here (e.g., because we don't 8448 1.2 christos * have any shared sigalgs), then we will not set it, and there will 8449 1.2 christos * be no certificate at all on the SSL or SSL_CTX. This, in turn, 8450 1.2 christos * will cause tls_choose_sigalgs() to fail the connection. 8451 1.2 christos */ 8452 1.2 christos if ((rv & (CERT_PKEY_VALID | CERT_PKEY_CA_SIGNATURE)) 8453 1.2 christos == (CERT_PKEY_VALID | CERT_PKEY_CA_SIGNATURE)) { 8454 1.2 christos if (!SSL_use_cert_and_key(s, x509, pkey, NULL, 1)) 8455 1.2 christos goto out; 8456 1.2 christos } 8457 1.2 christos 8458 1.2 christos ret = 1; 8459 1.2 christos } 8460 1.2 christos 8461 1.2 christos /* Abort the handshake */ 8462 1.2 christos out: 8463 1.2 christos OPENSSL_free(ecdsacert); 8464 1.2 christos OPENSSL_free(ecdsakey); 8465 1.2 christos OPENSSL_free(rootfile); 8466 1.2 christos BIO_free(in); 8467 1.2 christos EVP_PKEY_free(pkey); 8468 1.2 christos X509_free(x509); 8469 1.2 christos X509_free(rootx); 8470 1.2 christos sk_X509_pop_free(chain, X509_free); 8471 1.2 christos return ret; 8472 1.2 christos } 8473 1.2 christos 8474 1.2 christos /* 8475 1.2 christos * Test the certificate callback. 8476 1.2 christos * Test 0: Callback fails 8477 1.2 christos * Test 1: Success - no SSL_set_SSL_CTX() in the callback 8478 1.2 christos * Test 2: Success - SSL_set_SSL_CTX() in the callback 8479 1.2 christos * Test 3: Success - Call SSL_check_chain from the callback 8480 1.2 christos * Test 4: Failure - SSL_check_chain fails from callback due to bad cert in the 8481 1.2 christos * chain 8482 1.2 christos * Test 5: Failure - SSL_check_chain fails from callback due to bad ee cert 8483 1.2 christos */ 8484 1.2 christos static int test_cert_cb_int(int prot, int tst) 8485 1.2 christos { 8486 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL, *snictx = NULL; 8487 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 8488 1.2 christos int testresult = 0, ret; 8489 1.2 christos 8490 1.2 christos #ifdef OPENSSL_NO_EC 8491 1.2 christos /* We use an EC cert in these tests, so we skip in a no-ec build */ 8492 1.2 christos if (tst >= 3) 8493 1.2 christos return 1; 8494 1.2 christos #endif 8495 1.2 christos 8496 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 8497 1.2 christos TLS_client_method(), 8498 1.2 christos TLS1_VERSION, 8499 1.2 christos prot, 8500 1.2 christos &sctx, &cctx, NULL, NULL))) 8501 1.2 christos goto end; 8502 1.2 christos 8503 1.2 christos if (tst == 0) 8504 1.2 christos cert_cb_cnt = -1; 8505 1.2 christos else if (tst >= 3) 8506 1.2 christos cert_cb_cnt = 3; 8507 1.2 christos else 8508 1.2 christos cert_cb_cnt = 0; 8509 1.2 christos 8510 1.2 christos if (tst == 2) { 8511 1.2 christos snictx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method()); 8512 1.2 christos if (!TEST_ptr(snictx)) 8513 1.2 christos goto end; 8514 1.2 christos } 8515 1.2 christos 8516 1.2 christos SSL_CTX_set_cert_cb(sctx, cert_cb, snictx); 8517 1.2 christos 8518 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 8519 1.2 christos NULL, NULL))) 8520 1.2 christos goto end; 8521 1.2 christos 8522 1.2 christos if (tst == 4) { 8523 1.2 christos /* 8524 1.2 christos * We cause SSL_check_chain() to fail by specifying sig_algs that 8525 1.2 christos * the chain doesn't meet (the root uses an RSA cert) 8526 1.2 christos */ 8527 1.2 christos if (!TEST_true(SSL_set1_sigalgs_list(clientssl, 8528 1.2 christos "ecdsa_secp256r1_sha256"))) 8529 1.2 christos goto end; 8530 1.2 christos } else if (tst == 5) { 8531 1.2 christos /* 8532 1.2 christos * We cause SSL_check_chain() to fail by specifying sig_algs that 8533 1.2 christos * the ee cert doesn't meet (the ee uses an ECDSA cert) 8534 1.2 christos */ 8535 1.2 christos if (!TEST_true(SSL_set1_sigalgs_list(clientssl, 8536 1.2 christos "rsa_pss_rsae_sha256:rsa_pkcs1_sha256"))) 8537 1.2 christos goto end; 8538 1.2 christos } 8539 1.2 christos 8540 1.2 christos ret = create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE); 8541 1.2 christos if (!TEST_true(tst == 0 || tst == 4 || tst == 5 ? !ret : ret) 8542 1.2 christos || (tst > 0 8543 1.2 christos && !TEST_int_eq((cert_cb_cnt - 2) * (cert_cb_cnt - 3), 0))) { 8544 1.2 christos goto end; 8545 1.2 christos } 8546 1.2 christos 8547 1.2 christos testresult = 1; 8548 1.2 christos 8549 1.2 christos end: 8550 1.2 christos SSL_free(serverssl); 8551 1.2 christos SSL_free(clientssl); 8552 1.2 christos SSL_CTX_free(sctx); 8553 1.2 christos SSL_CTX_free(cctx); 8554 1.2 christos SSL_CTX_free(snictx); 8555 1.2 christos 8556 1.2 christos return testresult; 8557 1.2 christos } 8558 1.2 christos #endif 8559 1.2 christos 8560 1.2 christos static int test_cert_cb(int tst) 8561 1.2 christos { 8562 1.2 christos int testresult = 1; 8563 1.2 christos 8564 1.2 christos #ifndef OPENSSL_NO_TLS1_2 8565 1.2 christos testresult &= test_cert_cb_int(TLS1_2_VERSION, tst); 8566 1.2 christos #endif 8567 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 8568 1.2 christos testresult &= test_cert_cb_int(TLS1_3_VERSION, tst); 8569 1.2 christos #endif 8570 1.2 christos 8571 1.2 christos return testresult; 8572 1.2 christos } 8573 1.2 christos 8574 1.2 christos static int client_cert_cb(SSL *ssl, X509 **x509, EVP_PKEY **pkey) 8575 1.2 christos { 8576 1.2 christos X509 *xcert; 8577 1.2 christos EVP_PKEY *privpkey; 8578 1.2 christos BIO *in = NULL; 8579 1.2 christos BIO *priv_in = NULL; 8580 1.2 christos 8581 1.2 christos /* Check that SSL_get0_peer_certificate() returns something sensible */ 8582 1.2 christos if (!TEST_ptr(SSL_get0_peer_certificate(ssl))) 8583 1.2 christos return 0; 8584 1.2 christos 8585 1.2 christos in = BIO_new_file(cert, "r"); 8586 1.2 christos if (!TEST_ptr(in)) 8587 1.2 christos return 0; 8588 1.2 christos 8589 1.2 christos if (!TEST_ptr(xcert = X509_new_ex(libctx, NULL)) 8590 1.2 christos || !TEST_ptr(PEM_read_bio_X509(in, &xcert, NULL, NULL)) 8591 1.2 christos || !TEST_ptr(priv_in = BIO_new_file(privkey, "r")) 8592 1.2 christos || !TEST_ptr(privpkey = PEM_read_bio_PrivateKey_ex(priv_in, NULL, 8593 1.2 christos NULL, NULL, 8594 1.2 christos libctx, NULL))) 8595 1.2 christos goto err; 8596 1.2 christos 8597 1.2 christos *x509 = xcert; 8598 1.2 christos *pkey = privpkey; 8599 1.2 christos 8600 1.2 christos BIO_free(in); 8601 1.2 christos BIO_free(priv_in); 8602 1.2 christos return 1; 8603 1.2 christos err: 8604 1.2 christos X509_free(xcert); 8605 1.2 christos BIO_free(in); 8606 1.2 christos BIO_free(priv_in); 8607 1.2 christos return 0; 8608 1.2 christos } 8609 1.2 christos 8610 1.2 christos static int test_client_cert_cb(int tst) 8611 1.2 christos { 8612 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 8613 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 8614 1.2 christos int testresult = 0; 8615 1.2 christos 8616 1.2 christos #ifdef OPENSSL_NO_TLS1_2 8617 1.2 christos if (tst == 0) 8618 1.2 christos return 1; 8619 1.2 christos #endif 8620 1.2 christos #ifdef OSSL_NO_USABLE_TLS1_3 8621 1.2 christos if (tst == 1) 8622 1.2 christos return 1; 8623 1.2 christos #endif 8624 1.2 christos 8625 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 8626 1.2 christos TLS_client_method(), 8627 1.2 christos TLS1_VERSION, 8628 1.2 christos tst == 0 ? TLS1_2_VERSION 8629 1.2 christos : TLS1_3_VERSION, 8630 1.2 christos &sctx, &cctx, cert, privkey))) 8631 1.2 christos goto end; 8632 1.2 christos 8633 1.2 christos /* 8634 1.2 christos * Test that setting a client_cert_cb results in a client certificate being 8635 1.2 christos * sent. 8636 1.2 christos */ 8637 1.2 christos SSL_CTX_set_client_cert_cb(cctx, client_cert_cb); 8638 1.2 christos SSL_CTX_set_verify(sctx, 8639 1.2 christos SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 8640 1.2 christos verify_cb); 8641 1.2 christos 8642 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 8643 1.2 christos NULL, NULL)) 8644 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 8645 1.2 christos SSL_ERROR_NONE))) 8646 1.2 christos goto end; 8647 1.2 christos 8648 1.2 christos testresult = 1; 8649 1.2 christos 8650 1.2 christos end: 8651 1.2 christos SSL_free(serverssl); 8652 1.2 christos SSL_free(clientssl); 8653 1.2 christos SSL_CTX_free(sctx); 8654 1.2 christos SSL_CTX_free(cctx); 8655 1.2 christos 8656 1.2 christos return testresult; 8657 1.2 christos } 8658 1.2 christos 8659 1.2 christos #if !defined(OPENSSL_NO_TLS1_2) || !defined(OSSL_NO_USABLE_TLS1_3) 8660 1.2 christos /* 8661 1.2 christos * Test setting certificate authorities on both client and server. 8662 1.2 christos * 8663 1.2 christos * Test 0: SSL_CTX_set0_CA_list() only 8664 1.2 christos * Test 1: Both SSL_CTX_set0_CA_list() and SSL_CTX_set_client_CA_list() 8665 1.2 christos * Test 2: Only SSL_CTX_set_client_CA_list() 8666 1.2 christos */ 8667 1.2 christos static int test_ca_names_int(int prot, int tst) 8668 1.2 christos { 8669 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 8670 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 8671 1.2 christos int testresult = 0; 8672 1.2 christos size_t i; 8673 1.2 christos X509_NAME *name[] = { NULL, NULL, NULL, NULL }; 8674 1.2 christos char *strnames[] = { "Jack", "Jill", "John", "Joanne" }; 8675 1.2 christos STACK_OF(X509_NAME) *sk1 = NULL, *sk2 = NULL; 8676 1.2 christos const STACK_OF(X509_NAME) *sktmp = NULL; 8677 1.2 christos 8678 1.2 christos for (i = 0; i < OSSL_NELEM(name); i++) { 8679 1.2 christos name[i] = X509_NAME_new(); 8680 1.2 christos if (!TEST_ptr(name[i]) 8681 1.2 christos || !TEST_true(X509_NAME_add_entry_by_txt(name[i], "CN", 8682 1.2 christos MBSTRING_ASC, 8683 1.2 christos (unsigned char *) 8684 1.2 christos strnames[i], 8685 1.2 christos -1, -1, 0))) 8686 1.2 christos goto end; 8687 1.2 christos } 8688 1.2 christos 8689 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 8690 1.2 christos TLS_client_method(), 8691 1.2 christos TLS1_VERSION, 8692 1.2 christos prot, 8693 1.2 christos &sctx, &cctx, cert, privkey))) 8694 1.2 christos goto end; 8695 1.2 christos 8696 1.2 christos SSL_CTX_set_verify(sctx, SSL_VERIFY_PEER, NULL); 8697 1.2 christos 8698 1.2 christos if (tst == 0 || tst == 1) { 8699 1.2 christos if (!TEST_ptr(sk1 = sk_X509_NAME_new_null()) 8700 1.2 christos || !TEST_true(sk_X509_NAME_push(sk1, X509_NAME_dup(name[0]))) 8701 1.2 christos || !TEST_true(sk_X509_NAME_push(sk1, X509_NAME_dup(name[1]))) 8702 1.2 christos || !TEST_ptr(sk2 = sk_X509_NAME_new_null()) 8703 1.2 christos || !TEST_true(sk_X509_NAME_push(sk2, X509_NAME_dup(name[0]))) 8704 1.2 christos || !TEST_true(sk_X509_NAME_push(sk2, X509_NAME_dup(name[1])))) 8705 1.2 christos goto end; 8706 1.2 christos 8707 1.2 christos SSL_CTX_set0_CA_list(sctx, sk1); 8708 1.2 christos SSL_CTX_set0_CA_list(cctx, sk2); 8709 1.2 christos sk1 = sk2 = NULL; 8710 1.2 christos } 8711 1.2 christos if (tst == 1 || tst == 2) { 8712 1.2 christos if (!TEST_ptr(sk1 = sk_X509_NAME_new_null()) 8713 1.2 christos || !TEST_true(sk_X509_NAME_push(sk1, X509_NAME_dup(name[2]))) 8714 1.2 christos || !TEST_true(sk_X509_NAME_push(sk1, X509_NAME_dup(name[3]))) 8715 1.2 christos || !TEST_ptr(sk2 = sk_X509_NAME_new_null()) 8716 1.2 christos || !TEST_true(sk_X509_NAME_push(sk2, X509_NAME_dup(name[2]))) 8717 1.2 christos || !TEST_true(sk_X509_NAME_push(sk2, X509_NAME_dup(name[3])))) 8718 1.2 christos goto end; 8719 1.2 christos 8720 1.2 christos SSL_CTX_set_client_CA_list(sctx, sk1); 8721 1.2 christos SSL_CTX_set_client_CA_list(cctx, sk2); 8722 1.2 christos sk1 = sk2 = NULL; 8723 1.2 christos } 8724 1.2 christos 8725 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 8726 1.2 christos NULL, NULL)) 8727 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 8728 1.2 christos SSL_ERROR_NONE))) 8729 1.2 christos goto end; 8730 1.2 christos 8731 1.2 christos /* 8732 1.2 christos * We only expect certificate authorities to have been sent to the server 8733 1.2 christos * if we are using TLSv1.3 and SSL_set0_CA_list() was used 8734 1.2 christos */ 8735 1.2 christos sktmp = SSL_get0_peer_CA_list(serverssl); 8736 1.2 christos if (prot == TLS1_3_VERSION 8737 1.2 christos && (tst == 0 || tst == 1)) { 8738 1.2 christos if (!TEST_ptr(sktmp) 8739 1.2 christos || !TEST_int_eq(sk_X509_NAME_num(sktmp), 2) 8740 1.2 christos || !TEST_int_eq(X509_NAME_cmp(sk_X509_NAME_value(sktmp, 0), 8741 1.2 christos name[0]), 0) 8742 1.2 christos || !TEST_int_eq(X509_NAME_cmp(sk_X509_NAME_value(sktmp, 1), 8743 1.2 christos name[1]), 0)) 8744 1.2 christos goto end; 8745 1.2 christos } else if (!TEST_ptr_null(sktmp)) { 8746 1.2 christos goto end; 8747 1.2 christos } 8748 1.2 christos 8749 1.2 christos /* 8750 1.2 christos * In all tests we expect certificate authorities to have been sent to the 8751 1.2 christos * client. However, SSL_set_client_CA_list() should override 8752 1.2 christos * SSL_set0_CA_list() 8753 1.2 christos */ 8754 1.2 christos sktmp = SSL_get0_peer_CA_list(clientssl); 8755 1.2 christos if (!TEST_ptr(sktmp) 8756 1.2 christos || !TEST_int_eq(sk_X509_NAME_num(sktmp), 2) 8757 1.2 christos || !TEST_int_eq(X509_NAME_cmp(sk_X509_NAME_value(sktmp, 0), 8758 1.2 christos name[tst == 0 ? 0 : 2]), 0) 8759 1.2 christos || !TEST_int_eq(X509_NAME_cmp(sk_X509_NAME_value(sktmp, 1), 8760 1.2 christos name[tst == 0 ? 1 : 3]), 0)) 8761 1.2 christos goto end; 8762 1.2 christos 8763 1.2 christos testresult = 1; 8764 1.2 christos 8765 1.2 christos end: 8766 1.2 christos SSL_free(serverssl); 8767 1.2 christos SSL_free(clientssl); 8768 1.2 christos SSL_CTX_free(sctx); 8769 1.2 christos SSL_CTX_free(cctx); 8770 1.2 christos for (i = 0; i < OSSL_NELEM(name); i++) 8771 1.2 christos X509_NAME_free(name[i]); 8772 1.2 christos sk_X509_NAME_pop_free(sk1, X509_NAME_free); 8773 1.2 christos sk_X509_NAME_pop_free(sk2, X509_NAME_free); 8774 1.2 christos 8775 1.2 christos return testresult; 8776 1.2 christos } 8777 1.2 christos #endif 8778 1.2 christos 8779 1.2 christos static int test_ca_names(int tst) 8780 1.2 christos { 8781 1.2 christos int testresult = 1; 8782 1.2 christos 8783 1.2 christos #ifndef OPENSSL_NO_TLS1_2 8784 1.2 christos testresult &= test_ca_names_int(TLS1_2_VERSION, tst); 8785 1.2 christos #endif 8786 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 8787 1.2 christos testresult &= test_ca_names_int(TLS1_3_VERSION, tst); 8788 1.2 christos #endif 8789 1.2 christos 8790 1.2 christos return testresult; 8791 1.2 christos } 8792 1.2 christos 8793 1.2 christos #ifndef OPENSSL_NO_TLS1_2 8794 1.2 christos static const char *multiblock_cipherlist_data[]= 8795 1.2 christos { 8796 1.2 christos "AES128-SHA", 8797 1.2 christos "AES128-SHA256", 8798 1.2 christos "AES256-SHA", 8799 1.2 christos "AES256-SHA256", 8800 1.2 christos }; 8801 1.2 christos 8802 1.2 christos /* Reduce the fragment size - so the multiblock test buffer can be small */ 8803 1.2 christos # define MULTIBLOCK_FRAGSIZE 512 8804 1.2 christos 8805 1.2 christos static int test_multiblock_write(int test_index) 8806 1.2 christos { 8807 1.2 christos static const char *fetchable_ciphers[]= 8808 1.2 christos { 8809 1.2 christos "AES-128-CBC-HMAC-SHA1", 8810 1.2 christos "AES-128-CBC-HMAC-SHA256", 8811 1.2 christos "AES-256-CBC-HMAC-SHA1", 8812 1.2 christos "AES-256-CBC-HMAC-SHA256" 8813 1.2 christos }; 8814 1.2 christos const char *cipherlist = multiblock_cipherlist_data[test_index]; 8815 1.2 christos const SSL_METHOD *smeth = TLS_server_method(); 8816 1.2 christos const SSL_METHOD *cmeth = TLS_client_method(); 8817 1.2 christos int min_version = TLS1_VERSION; 8818 1.2 christos int max_version = TLS1_2_VERSION; /* Don't select TLS1_3 */ 8819 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 8820 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 8821 1.2 christos int testresult = 0; 8822 1.2 christos 8823 1.2 christos /* 8824 1.2 christos * Choose a buffer large enough to perform a multi-block operation 8825 1.2 christos * i.e: write_len >= 4 * frag_size 8826 1.2 christos * 9 * is chosen so that multiple multiblocks are used + some leftover. 8827 1.2 christos */ 8828 1.2 christos unsigned char msg[MULTIBLOCK_FRAGSIZE * 9]; 8829 1.2 christos unsigned char buf[sizeof(msg)], *p = buf; 8830 1.2 christos size_t readbytes, written, len; 8831 1.2 christos EVP_CIPHER *ciph = NULL; 8832 1.2 christos 8833 1.2 christos /* 8834 1.2 christos * Check if the cipher exists before attempting to use it since it only has 8835 1.2 christos * a hardware specific implementation. 8836 1.2 christos */ 8837 1.2 christos ciph = EVP_CIPHER_fetch(libctx, fetchable_ciphers[test_index], ""); 8838 1.2 christos if (ciph == NULL) { 8839 1.2 christos TEST_skip("Multiblock cipher is not available for %s", cipherlist); 8840 1.2 christos return 1; 8841 1.2 christos } 8842 1.2 christos EVP_CIPHER_free(ciph); 8843 1.2 christos 8844 1.2 christos /* Set up a buffer with some data that will be sent to the client */ 8845 1.2 christos RAND_bytes(msg, sizeof(msg)); 8846 1.2 christos 8847 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, smeth, cmeth, min_version, 8848 1.2 christos max_version, &sctx, &cctx, cert, 8849 1.2 christos privkey))) 8850 1.2 christos goto end; 8851 1.2 christos 8852 1.2 christos if (!TEST_true(SSL_CTX_set_max_send_fragment(sctx, MULTIBLOCK_FRAGSIZE))) 8853 1.2 christos goto end; 8854 1.2 christos 8855 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 8856 1.2 christos NULL, NULL))) 8857 1.2 christos goto end; 8858 1.2 christos 8859 1.2 christos /* settings to force it to use AES-CBC-HMAC_SHA */ 8860 1.2 christos SSL_set_options(serverssl, SSL_OP_NO_ENCRYPT_THEN_MAC); 8861 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(cctx, cipherlist))) 8862 1.2 christos goto end; 8863 1.2 christos 8864 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 8865 1.2 christos goto end; 8866 1.2 christos 8867 1.2 christos if (!TEST_true(SSL_write_ex(serverssl, msg, sizeof(msg), &written)) 8868 1.2 christos || !TEST_size_t_eq(written, sizeof(msg))) 8869 1.2 christos goto end; 8870 1.2 christos 8871 1.2 christos len = written; 8872 1.2 christos while (len > 0) { 8873 1.2 christos if (!TEST_true(SSL_read_ex(clientssl, p, MULTIBLOCK_FRAGSIZE, &readbytes))) 8874 1.2 christos goto end; 8875 1.2 christos p += readbytes; 8876 1.2 christos len -= readbytes; 8877 1.2 christos } 8878 1.2 christos if (!TEST_mem_eq(msg, sizeof(msg), buf, sizeof(buf))) 8879 1.2 christos goto end; 8880 1.2 christos 8881 1.2 christos testresult = 1; 8882 1.2 christos end: 8883 1.2 christos SSL_free(serverssl); 8884 1.2 christos SSL_free(clientssl); 8885 1.2 christos SSL_CTX_free(sctx); 8886 1.2 christos SSL_CTX_free(cctx); 8887 1.2 christos 8888 1.2 christos return testresult; 8889 1.2 christos } 8890 1.2 christos #endif /* OPENSSL_NO_TLS1_2 */ 8891 1.2 christos 8892 1.2 christos static int test_session_timeout(int test) 8893 1.2 christos { 8894 1.2 christos /* 8895 1.2 christos * Test session ordering and timeout 8896 1.2 christos * Can't explicitly test performance of the new code, 8897 1.2 christos * but can test to see if the ordering of the sessions 8898 1.2 christos * are correct, and they they are removed as expected 8899 1.2 christos */ 8900 1.2 christos SSL_SESSION *early = NULL; 8901 1.2 christos SSL_SESSION *middle = NULL; 8902 1.2 christos SSL_SESSION *late = NULL; 8903 1.2 christos SSL_CTX *ctx; 8904 1.2 christos int testresult = 0; 8905 1.2 christos long now = (long)time(NULL); 8906 1.2 christos #define TIMEOUT 10 8907 1.2 christos 8908 1.2 christos if (!TEST_ptr(ctx = SSL_CTX_new_ex(libctx, NULL, TLS_method())) 8909 1.2 christos || !TEST_ptr(early = SSL_SESSION_new()) 8910 1.2 christos || !TEST_ptr(middle = SSL_SESSION_new()) 8911 1.2 christos || !TEST_ptr(late = SSL_SESSION_new())) 8912 1.2 christos goto end; 8913 1.2 christos 8914 1.2 christos /* assign unique session ids */ 8915 1.2 christos early->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; 8916 1.2 christos memset(early->session_id, 1, SSL3_SSL_SESSION_ID_LENGTH); 8917 1.2 christos middle->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; 8918 1.2 christos memset(middle->session_id, 2, SSL3_SSL_SESSION_ID_LENGTH); 8919 1.2 christos late->session_id_length = SSL3_SSL_SESSION_ID_LENGTH; 8920 1.2 christos memset(late->session_id, 3, SSL3_SSL_SESSION_ID_LENGTH); 8921 1.2 christos 8922 1.2 christos if (!TEST_int_eq(SSL_CTX_add_session(ctx, early), 1) 8923 1.2 christos || !TEST_int_eq(SSL_CTX_add_session(ctx, middle), 1) 8924 1.2 christos || !TEST_int_eq(SSL_CTX_add_session(ctx, late), 1)) 8925 1.2 christos goto end; 8926 1.2 christos 8927 1.2 christos /* Make sure they are all added */ 8928 1.2 christos if (!TEST_ptr(early->prev) 8929 1.2 christos || !TEST_ptr(middle->prev) 8930 1.2 christos || !TEST_ptr(late->prev)) 8931 1.2 christos goto end; 8932 1.2 christos 8933 1.2 christos if (!TEST_int_ne(SSL_SESSION_set_time(early, now - 10), 0) 8934 1.2 christos || !TEST_int_ne(SSL_SESSION_set_time(middle, now), 0) 8935 1.2 christos || !TEST_int_ne(SSL_SESSION_set_time(late, now + 10), 0)) 8936 1.2 christos goto end; 8937 1.2 christos 8938 1.2 christos if (!TEST_int_ne(SSL_SESSION_set_timeout(early, TIMEOUT), 0) 8939 1.2 christos || !TEST_int_ne(SSL_SESSION_set_timeout(middle, TIMEOUT), 0) 8940 1.2 christos || !TEST_int_ne(SSL_SESSION_set_timeout(late, TIMEOUT), 0)) 8941 1.2 christos goto end; 8942 1.2 christos 8943 1.2 christos /* Make sure they are all still there */ 8944 1.2 christos if (!TEST_ptr(early->prev) 8945 1.2 christos || !TEST_ptr(middle->prev) 8946 1.2 christos || !TEST_ptr(late->prev)) 8947 1.2 christos goto end; 8948 1.2 christos 8949 1.2 christos /* Make sure they are in the expected order */ 8950 1.2 christos if (!TEST_ptr_eq(late->next, middle) 8951 1.2 christos || !TEST_ptr_eq(middle->next, early) 8952 1.2 christos || !TEST_ptr_eq(early->prev, middle) 8953 1.2 christos || !TEST_ptr_eq(middle->prev, late)) 8954 1.2 christos goto end; 8955 1.2 christos 8956 1.2 christos /* This should remove "early" */ 8957 1.2 christos SSL_CTX_flush_sessions(ctx, now + TIMEOUT - 1); 8958 1.2 christos if (!TEST_ptr_null(early->prev) 8959 1.2 christos || !TEST_ptr(middle->prev) 8960 1.2 christos || !TEST_ptr(late->prev)) 8961 1.2 christos goto end; 8962 1.2 christos 8963 1.2 christos /* This should remove "middle" */ 8964 1.2 christos SSL_CTX_flush_sessions(ctx, now + TIMEOUT + 1); 8965 1.2 christos if (!TEST_ptr_null(early->prev) 8966 1.2 christos || !TEST_ptr_null(middle->prev) 8967 1.2 christos || !TEST_ptr(late->prev)) 8968 1.2 christos goto end; 8969 1.2 christos 8970 1.2 christos /* This should remove "late" */ 8971 1.2 christos SSL_CTX_flush_sessions(ctx, now + TIMEOUT + 11); 8972 1.2 christos if (!TEST_ptr_null(early->prev) 8973 1.2 christos || !TEST_ptr_null(middle->prev) 8974 1.2 christos || !TEST_ptr_null(late->prev)) 8975 1.2 christos goto end; 8976 1.2 christos 8977 1.2 christos /* Add them back in again */ 8978 1.2 christos if (!TEST_int_eq(SSL_CTX_add_session(ctx, early), 1) 8979 1.2 christos || !TEST_int_eq(SSL_CTX_add_session(ctx, middle), 1) 8980 1.2 christos || !TEST_int_eq(SSL_CTX_add_session(ctx, late), 1)) 8981 1.2 christos goto end; 8982 1.2 christos 8983 1.2 christos /* Make sure they are all added */ 8984 1.2 christos if (!TEST_ptr(early->prev) 8985 1.2 christos || !TEST_ptr(middle->prev) 8986 1.2 christos || !TEST_ptr(late->prev)) 8987 1.2 christos goto end; 8988 1.2 christos 8989 1.2 christos /* This should remove all of them */ 8990 1.2 christos SSL_CTX_flush_sessions(ctx, 0); 8991 1.2 christos if (!TEST_ptr_null(early->prev) 8992 1.2 christos || !TEST_ptr_null(middle->prev) 8993 1.2 christos || !TEST_ptr_null(late->prev)) 8994 1.2 christos goto end; 8995 1.2 christos 8996 1.2 christos (void)SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_UPDATE_TIME 8997 1.2 christos | SSL_CTX_get_session_cache_mode(ctx)); 8998 1.2 christos 8999 1.2 christos /* make sure |now| is NOT equal to the current time */ 9000 1.2 christos now -= 10; 9001 1.2 christos if (!TEST_int_ne(SSL_SESSION_set_time(early, now), 0) 9002 1.2 christos || !TEST_int_eq(SSL_CTX_add_session(ctx, early), 1) 9003 1.2 christos || !TEST_long_ne(SSL_SESSION_get_time(early), now)) 9004 1.2 christos goto end; 9005 1.2 christos 9006 1.2 christos testresult = 1; 9007 1.2 christos end: 9008 1.2 christos SSL_CTX_free(ctx); 9009 1.2 christos SSL_SESSION_free(early); 9010 1.2 christos SSL_SESSION_free(middle); 9011 1.2 christos SSL_SESSION_free(late); 9012 1.2 christos return testresult; 9013 1.2 christos } 9014 1.2 christos 9015 1.2 christos /* 9016 1.2 christos * Test that a session cache overflow works as expected 9017 1.2 christos * Test 0: TLSv1.3, timeout on new session later than old session 9018 1.2 christos * Test 1: TLSv1.2, timeout on new session later than old session 9019 1.2 christos * Test 2: TLSv1.3, timeout on new session earlier than old session 9020 1.2 christos * Test 3: TLSv1.2, timeout on new session earlier than old session 9021 1.2 christos */ 9022 1.2 christos #if !defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2) 9023 1.2 christos static int test_session_cache_overflow(int idx) 9024 1.2 christos { 9025 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 9026 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 9027 1.2 christos int testresult = 0; 9028 1.2 christos SSL_SESSION *sess = NULL; 9029 1.2 christos 9030 1.2 christos #ifdef OSSL_NO_USABLE_TLS1_3 9031 1.2 christos /* If no TLSv1.3 available then do nothing in this case */ 9032 1.2 christos if (idx % 2 == 0) 9033 1.2 christos return TEST_skip("No TLSv1.3 available"); 9034 1.2 christos #endif 9035 1.2 christos #ifdef OPENSSL_NO_TLS1_2 9036 1.2 christos /* If no TLSv1.2 available then do nothing in this case */ 9037 1.2 christos if (idx % 2 == 1) 9038 1.2 christos return TEST_skip("No TLSv1.2 available"); 9039 1.2 christos #endif 9040 1.2 christos 9041 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 9042 1.2 christos TLS_client_method(), TLS1_VERSION, 9043 1.2 christos (idx % 2 == 0) ? TLS1_3_VERSION 9044 1.2 christos : TLS1_2_VERSION, 9045 1.2 christos &sctx, &cctx, cert, privkey)) 9046 1.2 christos || !TEST_true(SSL_CTX_set_options(sctx, SSL_OP_NO_TICKET))) 9047 1.2 christos goto end; 9048 1.2 christos 9049 1.2 christos SSL_CTX_sess_set_get_cb(sctx, get_session_cb); 9050 1.2 christos get_sess_val = NULL; 9051 1.2 christos 9052 1.2 christos SSL_CTX_sess_set_cache_size(sctx, 1); 9053 1.2 christos 9054 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 9055 1.2 christos NULL, NULL))) 9056 1.2 christos goto end; 9057 1.2 christos 9058 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 9059 1.2 christos goto end; 9060 1.2 christos 9061 1.2 christos if (idx > 1) { 9062 1.2 christos sess = SSL_get_session(serverssl); 9063 1.2 christos if (!TEST_ptr(sess)) 9064 1.2 christos goto end; 9065 1.2 christos 9066 1.2 christos /* 9067 1.2 christos * Cause this session to have a longer timeout than the next session to 9068 1.2 christos * be added. 9069 1.2 christos */ 9070 1.2 christos if (!TEST_true(SSL_SESSION_set_timeout(sess, LONG_MAX / 2))) { 9071 1.2 christos sess = NULL; 9072 1.2 christos goto end; 9073 1.2 christos } 9074 1.2 christos sess = NULL; 9075 1.2 christos } 9076 1.2 christos 9077 1.2 christos SSL_shutdown(serverssl); 9078 1.2 christos SSL_shutdown(clientssl); 9079 1.2 christos SSL_free(serverssl); 9080 1.2 christos SSL_free(clientssl); 9081 1.2 christos serverssl = clientssl = NULL; 9082 1.2 christos 9083 1.2 christos /* 9084 1.2 christos * Session cache size is 1 and we already populated the cache with a session 9085 1.2 christos * so the next connection should cause an overflow. 9086 1.2 christos */ 9087 1.2 christos 9088 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 9089 1.2 christos NULL, NULL))) 9090 1.2 christos goto end; 9091 1.2 christos 9092 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 9093 1.2 christos goto end; 9094 1.2 christos 9095 1.2 christos /* 9096 1.2 christos * The session we just negotiated may have been already removed from the 9097 1.2 christos * internal cache - but we will return it anyway from our external cache. 9098 1.2 christos */ 9099 1.2 christos get_sess_val = SSL_get_session(serverssl); 9100 1.2 christos if (!TEST_ptr(get_sess_val)) 9101 1.2 christos goto end; 9102 1.2 christos sess = SSL_get1_session(clientssl); 9103 1.2 christos if (!TEST_ptr(sess)) 9104 1.2 christos goto end; 9105 1.2 christos 9106 1.2 christos SSL_shutdown(serverssl); 9107 1.2 christos SSL_shutdown(clientssl); 9108 1.2 christos SSL_free(serverssl); 9109 1.2 christos SSL_free(clientssl); 9110 1.2 christos serverssl = clientssl = NULL; 9111 1.2 christos 9112 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 9113 1.2 christos NULL, NULL))) 9114 1.2 christos goto end; 9115 1.2 christos 9116 1.2 christos if (!TEST_true(SSL_set_session(clientssl, sess))) 9117 1.2 christos goto end; 9118 1.2 christos 9119 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 9120 1.2 christos goto end; 9121 1.2 christos 9122 1.2 christos testresult = 1; 9123 1.2 christos 9124 1.2 christos end: 9125 1.2 christos SSL_free(serverssl); 9126 1.2 christos SSL_free(clientssl); 9127 1.2 christos SSL_CTX_free(sctx); 9128 1.2 christos SSL_CTX_free(cctx); 9129 1.2 christos SSL_SESSION_free(sess); 9130 1.2 christos 9131 1.2 christos return testresult; 9132 1.2 christos } 9133 1.2 christos #endif /* !defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2) */ 9134 1.2 christos 9135 1.2 christos /* 9136 1.2 christos * Test 0: Client sets servername and server acknowledges it (TLSv1.2) 9137 1.2 christos * Test 1: Client sets servername and server does not acknowledge it (TLSv1.2) 9138 1.2 christos * Test 2: Client sets inconsistent servername on resumption (TLSv1.2) 9139 1.2 christos * Test 3: Client does not set servername on initial handshake (TLSv1.2) 9140 1.2 christos * Test 4: Client does not set servername on resumption handshake (TLSv1.2) 9141 1.2 christos * Test 5: Client sets servername and server acknowledges it (TLSv1.3) 9142 1.2 christos * Test 6: Client sets servername and server does not acknowledge it (TLSv1.3) 9143 1.2 christos * Test 7: Client sets inconsistent servername on resumption (TLSv1.3) 9144 1.2 christos * Test 8: Client does not set servername on initial handshake(TLSv1.3) 9145 1.2 christos * Test 9: Client does not set servername on resumption handshake (TLSv1.3) 9146 1.2 christos */ 9147 1.2 christos static int test_servername(int tst) 9148 1.2 christos { 9149 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 9150 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 9151 1.2 christos int testresult = 0; 9152 1.2 christos SSL_SESSION *sess = NULL; 9153 1.2 christos const char *sexpectedhost = NULL, *cexpectedhost = NULL; 9154 1.2 christos 9155 1.2 christos #ifdef OPENSSL_NO_TLS1_2 9156 1.2 christos if (tst <= 4) 9157 1.2 christos return 1; 9158 1.2 christos #endif 9159 1.2 christos #ifdef OSSL_NO_USABLE_TLS1_3 9160 1.2 christos if (tst >= 5) 9161 1.2 christos return 1; 9162 1.2 christos #endif 9163 1.2 christos 9164 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 9165 1.2 christos TLS_client_method(), 9166 1.2 christos TLS1_VERSION, 9167 1.2 christos (tst <= 4) ? TLS1_2_VERSION 9168 1.2 christos : TLS1_3_VERSION, 9169 1.2 christos &sctx, &cctx, cert, privkey)) 9170 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 9171 1.2 christos NULL, NULL))) 9172 1.2 christos goto end; 9173 1.2 christos 9174 1.2 christos if (tst != 1 && tst != 6) { 9175 1.2 christos if (!TEST_true(SSL_CTX_set_tlsext_servername_callback(sctx, 9176 1.2 christos hostname_cb))) 9177 1.2 christos goto end; 9178 1.2 christos } 9179 1.2 christos 9180 1.2 christos if (tst != 3 && tst != 8) { 9181 1.2 christos if (!TEST_true(SSL_set_tlsext_host_name(clientssl, "goodhost"))) 9182 1.2 christos goto end; 9183 1.2 christos sexpectedhost = cexpectedhost = "goodhost"; 9184 1.2 christos } 9185 1.2 christos 9186 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 9187 1.2 christos goto end; 9188 1.2 christos 9189 1.2 christos if (!TEST_str_eq(SSL_get_servername(clientssl, TLSEXT_NAMETYPE_host_name), 9190 1.2 christos cexpectedhost) 9191 1.2 christos || !TEST_str_eq(SSL_get_servername(serverssl, 9192 1.2 christos TLSEXT_NAMETYPE_host_name), 9193 1.2 christos sexpectedhost)) 9194 1.2 christos goto end; 9195 1.2 christos 9196 1.2 christos /* Now repeat with a resumption handshake */ 9197 1.2 christos 9198 1.2 christos if (!TEST_int_eq(SSL_shutdown(clientssl), 0) 9199 1.2 christos || !TEST_ptr_ne(sess = SSL_get1_session(clientssl), NULL) 9200 1.2 christos || !TEST_true(SSL_SESSION_is_resumable(sess)) 9201 1.2 christos || !TEST_int_eq(SSL_shutdown(serverssl), 0)) 9202 1.2 christos goto end; 9203 1.2 christos 9204 1.2 christos SSL_free(clientssl); 9205 1.2 christos SSL_free(serverssl); 9206 1.2 christos clientssl = serverssl = NULL; 9207 1.2 christos 9208 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL, 9209 1.2 christos NULL))) 9210 1.2 christos goto end; 9211 1.2 christos 9212 1.2 christos if (!TEST_true(SSL_set_session(clientssl, sess))) 9213 1.2 christos goto end; 9214 1.2 christos 9215 1.2 christos sexpectedhost = cexpectedhost = "goodhost"; 9216 1.2 christos if (tst == 2 || tst == 7) { 9217 1.2 christos /* Set an inconsistent hostname */ 9218 1.2 christos if (!TEST_true(SSL_set_tlsext_host_name(clientssl, "altgoodhost"))) 9219 1.2 christos goto end; 9220 1.2 christos /* 9221 1.2 christos * In TLSv1.2 we expect the hostname from the original handshake, in 9222 1.2 christos * TLSv1.3 we expect the hostname from this handshake 9223 1.2 christos */ 9224 1.2 christos if (tst == 7) 9225 1.2 christos sexpectedhost = cexpectedhost = "altgoodhost"; 9226 1.2 christos 9227 1.2 christos if (!TEST_str_eq(SSL_get_servername(clientssl, 9228 1.2 christos TLSEXT_NAMETYPE_host_name), 9229 1.2 christos "altgoodhost")) 9230 1.2 christos goto end; 9231 1.2 christos } else if (tst == 4 || tst == 9) { 9232 1.2 christos /* 9233 1.2 christos * A TLSv1.3 session does not associate a session with a servername, 9234 1.2 christos * but a TLSv1.2 session does. 9235 1.2 christos */ 9236 1.2 christos if (tst == 9) 9237 1.2 christos sexpectedhost = cexpectedhost = NULL; 9238 1.2 christos 9239 1.2 christos if (!TEST_str_eq(SSL_get_servername(clientssl, 9240 1.2 christos TLSEXT_NAMETYPE_host_name), 9241 1.2 christos cexpectedhost)) 9242 1.2 christos goto end; 9243 1.2 christos } else { 9244 1.2 christos if (!TEST_true(SSL_set_tlsext_host_name(clientssl, "goodhost"))) 9245 1.2 christos goto end; 9246 1.2 christos /* 9247 1.2 christos * In a TLSv1.2 resumption where the hostname was not acknowledged 9248 1.2 christos * we expect the hostname on the server to be empty. On the client we 9249 1.2 christos * return what was requested in this case. 9250 1.2 christos * 9251 1.2 christos * Similarly if the client didn't set a hostname on an original TLSv1.2 9252 1.2 christos * session but is now, the server hostname will be empty, but the client 9253 1.2 christos * is as we set it. 9254 1.2 christos */ 9255 1.2 christos if (tst == 1 || tst == 3) 9256 1.2 christos sexpectedhost = NULL; 9257 1.2 christos 9258 1.2 christos if (!TEST_str_eq(SSL_get_servername(clientssl, 9259 1.2 christos TLSEXT_NAMETYPE_host_name), 9260 1.2 christos "goodhost")) 9261 1.2 christos goto end; 9262 1.2 christos } 9263 1.2 christos 9264 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 9265 1.2 christos goto end; 9266 1.2 christos 9267 1.2 christos if (!TEST_true(SSL_session_reused(clientssl)) 9268 1.2 christos || !TEST_true(SSL_session_reused(serverssl)) 9269 1.2 christos || !TEST_str_eq(SSL_get_servername(clientssl, 9270 1.2 christos TLSEXT_NAMETYPE_host_name), 9271 1.2 christos cexpectedhost) 9272 1.2 christos || !TEST_str_eq(SSL_get_servername(serverssl, 9273 1.2 christos TLSEXT_NAMETYPE_host_name), 9274 1.2 christos sexpectedhost)) 9275 1.2 christos goto end; 9276 1.2 christos 9277 1.2 christos testresult = 1; 9278 1.2 christos 9279 1.2 christos end: 9280 1.2 christos SSL_SESSION_free(sess); 9281 1.2 christos SSL_free(serverssl); 9282 1.2 christos SSL_free(clientssl); 9283 1.2 christos SSL_CTX_free(sctx); 9284 1.2 christos SSL_CTX_free(cctx); 9285 1.2 christos 9286 1.2 christos return testresult; 9287 1.2 christos } 9288 1.2 christos 9289 1.2 christos #if !defined(OPENSSL_NO_EC) \ 9290 1.2 christos && (!defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2)) 9291 1.2 christos /* 9292 1.2 christos * Test that if signature algorithms are not available, then we do not offer or 9293 1.2 christos * accept them. 9294 1.2 christos * Test 0: Two RSA sig algs available: both RSA sig algs shared 9295 1.2 christos * Test 1: The client only has SHA2-256: only SHA2-256 algorithms shared 9296 1.2 christos * Test 2: The server only has SHA2-256: only SHA2-256 algorithms shared 9297 1.2 christos * Test 3: An RSA and an ECDSA sig alg available: both sig algs shared 9298 1.2 christos * Test 4: The client only has an ECDSA sig alg: only ECDSA algorithms shared 9299 1.2 christos * Test 5: The server only has an ECDSA sig alg: only ECDSA algorithms shared 9300 1.2 christos */ 9301 1.2 christos static int test_sigalgs_available(int idx) 9302 1.2 christos { 9303 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 9304 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 9305 1.2 christos int testresult = 0; 9306 1.2 christos OSSL_LIB_CTX *tmpctx = OSSL_LIB_CTX_new(); 9307 1.2 christos OSSL_LIB_CTX *clientctx = libctx, *serverctx = libctx; 9308 1.2 christos OSSL_PROVIDER *filterprov = NULL; 9309 1.2 christos int sig, hash; 9310 1.2 christos 9311 1.2 christos if (!TEST_ptr(tmpctx)) 9312 1.2 christos goto end; 9313 1.2 christos 9314 1.2 christos if (idx != 0 && idx != 3) { 9315 1.2 christos if (!TEST_true(OSSL_PROVIDER_add_builtin(tmpctx, "filter", 9316 1.2 christos filter_provider_init))) 9317 1.2 christos goto end; 9318 1.2 christos 9319 1.2 christos filterprov = OSSL_PROVIDER_load(tmpctx, "filter"); 9320 1.2 christos if (!TEST_ptr(filterprov)) 9321 1.2 christos goto end; 9322 1.2 christos 9323 1.2 christos if (idx < 3) { 9324 1.2 christos /* 9325 1.2 christos * Only enable SHA2-256 so rsa_pss_rsae_sha384 should not be offered 9326 1.2 christos * or accepted for the peer that uses this libctx. Note that libssl 9327 1.2 christos * *requires* SHA2-256 to be available so we cannot disable that. We 9328 1.2 christos * also need SHA1 for our certificate. 9329 1.2 christos */ 9330 1.2 christos if (!TEST_true(filter_provider_set_filter(OSSL_OP_DIGEST, 9331 1.2 christos "SHA2-256:SHA1"))) 9332 1.2 christos goto end; 9333 1.2 christos } else { 9334 1.2 christos if (!TEST_true(filter_provider_set_filter(OSSL_OP_SIGNATURE, 9335 1.2 christos "ECDSA")) 9336 1.2 christos || !TEST_true(filter_provider_set_filter(OSSL_OP_KEYMGMT, 9337 1.2 christos "EC:X25519:X448"))) 9338 1.2 christos goto end; 9339 1.2 christos } 9340 1.2 christos 9341 1.2 christos if (idx == 1 || idx == 4) 9342 1.2 christos clientctx = tmpctx; 9343 1.2 christos else 9344 1.2 christos serverctx = tmpctx; 9345 1.2 christos } 9346 1.2 christos 9347 1.2 christos cctx = SSL_CTX_new_ex(clientctx, NULL, TLS_client_method()); 9348 1.2 christos sctx = SSL_CTX_new_ex(serverctx, NULL, TLS_server_method()); 9349 1.2 christos if (!TEST_ptr(cctx) || !TEST_ptr(sctx)) 9350 1.2 christos goto end; 9351 1.2 christos 9352 1.2 christos if (idx != 5) { 9353 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 9354 1.2 christos TLS_client_method(), 9355 1.2 christos TLS1_VERSION, 9356 1.2 christos 0, 9357 1.2 christos &sctx, &cctx, cert, privkey))) 9358 1.2 christos goto end; 9359 1.2 christos } else { 9360 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 9361 1.2 christos TLS_client_method(), 9362 1.2 christos TLS1_VERSION, 9363 1.2 christos 0, 9364 1.2 christos &sctx, &cctx, cert2, privkey2))) 9365 1.2 christos goto end; 9366 1.2 christos } 9367 1.2 christos 9368 1.2 christos /* Ensure we only use TLSv1.2 ciphersuites based on SHA256 */ 9369 1.2 christos if (idx < 4) { 9370 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(cctx, 9371 1.2 christos "ECDHE-RSA-AES128-GCM-SHA256"))) 9372 1.2 christos goto end; 9373 1.2 christos } else { 9374 1.2 christos if (!TEST_true(SSL_CTX_set_cipher_list(cctx, 9375 1.2 christos "ECDHE-ECDSA-AES128-GCM-SHA256"))) 9376 1.2 christos goto end; 9377 1.2 christos } 9378 1.2 christos 9379 1.2 christos if (idx < 3) { 9380 1.2 christos if (!SSL_CTX_set1_sigalgs_list(cctx, 9381 1.2 christos "rsa_pss_rsae_sha384" 9382 1.2 christos ":rsa_pss_rsae_sha256") 9383 1.2 christos || !SSL_CTX_set1_sigalgs_list(sctx, 9384 1.2 christos "rsa_pss_rsae_sha384" 9385 1.2 christos ":rsa_pss_rsae_sha256")) 9386 1.2 christos goto end; 9387 1.2 christos } else { 9388 1.2 christos if (!SSL_CTX_set1_sigalgs_list(cctx, "rsa_pss_rsae_sha256:ECDSA+SHA256") 9389 1.2 christos || !SSL_CTX_set1_sigalgs_list(sctx, 9390 1.2 christos "rsa_pss_rsae_sha256:ECDSA+SHA256")) 9391 1.2 christos goto end; 9392 1.2 christos } 9393 1.2 christos 9394 1.2 christos if (idx != 5 9395 1.2 christos && (!TEST_int_eq(SSL_CTX_use_certificate_file(sctx, cert2, 9396 1.2 christos SSL_FILETYPE_PEM), 1) 9397 1.2 christos || !TEST_int_eq(SSL_CTX_use_PrivateKey_file(sctx, 9398 1.2 christos privkey2, 9399 1.2 christos SSL_FILETYPE_PEM), 1) 9400 1.2 christos || !TEST_int_eq(SSL_CTX_check_private_key(sctx), 1))) 9401 1.2 christos goto end; 9402 1.2 christos 9403 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 9404 1.2 christos NULL, NULL))) 9405 1.2 christos goto end; 9406 1.2 christos 9407 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 9408 1.2 christos goto end; 9409 1.2 christos 9410 1.2 christos /* For tests 0 and 3 we expect 2 shared sigalgs, otherwise exactly 1 */ 9411 1.2 christos if (!TEST_int_eq(SSL_get_shared_sigalgs(serverssl, 0, &sig, &hash, NULL, 9412 1.2 christos NULL, NULL), 9413 1.2 christos (idx == 0 || idx == 3) ? 2 : 1)) 9414 1.2 christos goto end; 9415 1.2 christos 9416 1.2 christos if (!TEST_int_eq(hash, idx == 0 ? NID_sha384 : NID_sha256)) 9417 1.2 christos goto end; 9418 1.2 christos 9419 1.2 christos if (!TEST_int_eq(sig, (idx == 4 || idx == 5) ? EVP_PKEY_EC 9420 1.2 christos : NID_rsassaPss)) 9421 1.2 christos goto end; 9422 1.2 christos 9423 1.2 christos testresult = filter_provider_check_clean_finish(); 9424 1.2 christos 9425 1.2 christos end: 9426 1.2 christos SSL_free(serverssl); 9427 1.2 christos SSL_free(clientssl); 9428 1.2 christos SSL_CTX_free(sctx); 9429 1.2 christos SSL_CTX_free(cctx); 9430 1.2 christos OSSL_PROVIDER_unload(filterprov); 9431 1.2 christos OSSL_LIB_CTX_free(tmpctx); 9432 1.2 christos 9433 1.2 christos return testresult; 9434 1.2 christos } 9435 1.2 christos #endif /* 9436 1.2 christos * !defined(OPENSSL_NO_EC) \ 9437 1.2 christos * && (!defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2)) 9438 1.2 christos */ 9439 1.2 christos 9440 1.2 christos #ifndef OPENSSL_NO_TLS1_3 9441 1.2 christos /* This test can run in TLSv1.3 even if ec and dh are disabled */ 9442 1.2 christos static int test_pluggable_group(int idx) 9443 1.2 christos { 9444 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 9445 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 9446 1.2 christos int testresult = 0; 9447 1.2 christos OSSL_PROVIDER *tlsprov = OSSL_PROVIDER_load(libctx, "tls-provider"); 9448 1.2 christos /* Check that we are not impacted by a provider without any groups */ 9449 1.2 christos OSSL_PROVIDER *legacyprov = OSSL_PROVIDER_load(libctx, "legacy"); 9450 1.2 christos const char *group_name = idx == 0 ? "xorkemgroup" : "xorgroup"; 9451 1.2 christos 9452 1.2 christos if (!TEST_ptr(tlsprov)) 9453 1.2 christos goto end; 9454 1.2 christos 9455 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 9456 1.2 christos TLS_client_method(), 9457 1.2 christos TLS1_3_VERSION, 9458 1.2 christos TLS1_3_VERSION, 9459 1.2 christos &sctx, &cctx, cert, privkey)) 9460 1.2 christos || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 9461 1.2 christos NULL, NULL))) 9462 1.2 christos goto end; 9463 1.2 christos 9464 1.2 christos /* ensure GROUPLIST_INCREMENT (=40) logic triggers: */ 9465 1.2 christos if (!TEST_true(SSL_set1_groups_list(serverssl, "xorgroup:xorkemgroup:dummy1:dummy2:dummy3:dummy4:dummy5:dummy6:dummy7:dummy8:dummy9:dummy10:dummy11:dummy12:dummy13:dummy14:dummy15:dummy16:dummy17:dummy18:dummy19:dummy20:dummy21:dummy22:dummy23:dummy24:dummy25:dummy26:dummy27:dummy28:dummy29:dummy30:dummy31:dummy32:dummy33:dummy34:dummy35:dummy36:dummy37:dummy38:dummy39:dummy40:dummy41:dummy42:dummy43")) 9466 1.2 christos /* removing a single algorithm from the list makes the test pass */ 9467 1.2 christos || !TEST_true(SSL_set1_groups_list(clientssl, group_name))) 9468 1.2 christos goto end; 9469 1.2 christos 9470 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 9471 1.2 christos goto end; 9472 1.2 christos 9473 1.2 christos if (!TEST_str_eq(group_name, 9474 1.2 christos SSL_group_to_name(serverssl, SSL_get_shared_group(serverssl, 0)))) 9475 1.2 christos goto end; 9476 1.2 christos 9477 1.2 christos testresult = 1; 9478 1.2 christos 9479 1.2 christos end: 9480 1.2 christos SSL_free(serverssl); 9481 1.2 christos SSL_free(clientssl); 9482 1.2 christos SSL_CTX_free(sctx); 9483 1.2 christos SSL_CTX_free(cctx); 9484 1.2 christos OSSL_PROVIDER_unload(tlsprov); 9485 1.2 christos OSSL_PROVIDER_unload(legacyprov); 9486 1.2 christos 9487 1.2 christos return testresult; 9488 1.2 christos } 9489 1.2 christos #endif 9490 1.2 christos 9491 1.2 christos #ifndef OPENSSL_NO_TLS1_2 9492 1.2 christos static int test_ssl_dup(void) 9493 1.2 christos { 9494 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 9495 1.2 christos SSL *clientssl = NULL, *serverssl = NULL, *client2ssl = NULL; 9496 1.2 christos int testresult = 0; 9497 1.2 christos BIO *rbio = NULL, *wbio = NULL; 9498 1.2 christos 9499 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 9500 1.2 christos TLS_client_method(), 9501 1.2 christos 0, 9502 1.2 christos 0, 9503 1.2 christos &sctx, &cctx, cert, privkey))) 9504 1.2 christos goto end; 9505 1.2 christos 9506 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 9507 1.2 christos NULL, NULL))) 9508 1.2 christos goto end; 9509 1.2 christos 9510 1.2 christos if (!TEST_true(SSL_set_min_proto_version(clientssl, TLS1_2_VERSION)) 9511 1.2 christos || !TEST_true(SSL_set_max_proto_version(clientssl, TLS1_2_VERSION))) 9512 1.2 christos goto end; 9513 1.2 christos 9514 1.2 christos client2ssl = SSL_dup(clientssl); 9515 1.2 christos rbio = SSL_get_rbio(clientssl); 9516 1.2 christos if (!TEST_ptr(rbio) 9517 1.2 christos || !TEST_true(BIO_up_ref(rbio))) 9518 1.2 christos goto end; 9519 1.2 christos SSL_set0_rbio(client2ssl, rbio); 9520 1.2 christos rbio = NULL; 9521 1.2 christos 9522 1.2 christos wbio = SSL_get_wbio(clientssl); 9523 1.2 christos if (!TEST_ptr(wbio) || !TEST_true(BIO_up_ref(wbio))) 9524 1.2 christos goto end; 9525 1.2 christos SSL_set0_wbio(client2ssl, wbio); 9526 1.2 christos rbio = NULL; 9527 1.2 christos 9528 1.2 christos if (!TEST_ptr(client2ssl) 9529 1.2 christos /* Handshake not started so pointers should be different */ 9530 1.2 christos || !TEST_ptr_ne(clientssl, client2ssl)) 9531 1.2 christos goto end; 9532 1.2 christos 9533 1.2 christos if (!TEST_int_eq(SSL_get_min_proto_version(client2ssl), TLS1_2_VERSION) 9534 1.2 christos || !TEST_int_eq(SSL_get_max_proto_version(client2ssl), TLS1_2_VERSION)) 9535 1.2 christos goto end; 9536 1.2 christos 9537 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, client2ssl, SSL_ERROR_NONE))) 9538 1.2 christos goto end; 9539 1.2 christos 9540 1.2 christos SSL_free(clientssl); 9541 1.2 christos clientssl = SSL_dup(client2ssl); 9542 1.2 christos if (!TEST_ptr(clientssl) 9543 1.2 christos /* Handshake has finished so pointers should be the same */ 9544 1.2 christos || !TEST_ptr_eq(clientssl, client2ssl)) 9545 1.2 christos goto end; 9546 1.2 christos 9547 1.2 christos testresult = 1; 9548 1.2 christos 9549 1.2 christos end: 9550 1.2 christos SSL_free(serverssl); 9551 1.2 christos SSL_free(clientssl); 9552 1.2 christos SSL_free(client2ssl); 9553 1.2 christos SSL_CTX_free(sctx); 9554 1.2 christos SSL_CTX_free(cctx); 9555 1.2 christos 9556 1.2 christos return testresult; 9557 1.2 christos } 9558 1.2 christos 9559 1.2 christos # ifndef OPENSSL_NO_DH 9560 1.2 christos 9561 1.2 christos static EVP_PKEY *tmp_dh_params = NULL; 9562 1.2 christos 9563 1.2 christos /* Helper function for the test_set_tmp_dh() tests */ 9564 1.2 christos static EVP_PKEY *get_tmp_dh_params(void) 9565 1.2 christos { 9566 1.2 christos if (tmp_dh_params == NULL) { 9567 1.2 christos BIGNUM *p = NULL; 9568 1.2 christos OSSL_PARAM_BLD *tmpl = NULL; 9569 1.2 christos EVP_PKEY_CTX *pctx = NULL; 9570 1.2 christos OSSL_PARAM *params = NULL; 9571 1.2 christos EVP_PKEY *dhpkey = NULL; 9572 1.2 christos 9573 1.2 christos p = BN_get_rfc3526_prime_2048(NULL); 9574 1.2 christos if (!TEST_ptr(p)) 9575 1.2 christos goto end; 9576 1.2 christos 9577 1.2 christos pctx = EVP_PKEY_CTX_new_from_name(libctx, "DH", NULL); 9578 1.2 christos if (!TEST_ptr(pctx) 9579 1.2 christos || !TEST_int_eq(EVP_PKEY_fromdata_init(pctx), 1)) 9580 1.2 christos goto end; 9581 1.2 christos 9582 1.2 christos tmpl = OSSL_PARAM_BLD_new(); 9583 1.2 christos if (!TEST_ptr(tmpl) 9584 1.2 christos || !TEST_true(OSSL_PARAM_BLD_push_BN(tmpl, 9585 1.2 christos OSSL_PKEY_PARAM_FFC_P, 9586 1.2 christos p)) 9587 1.2 christos || !TEST_true(OSSL_PARAM_BLD_push_uint(tmpl, 9588 1.2 christos OSSL_PKEY_PARAM_FFC_G, 9589 1.2 christos 2))) 9590 1.2 christos goto end; 9591 1.2 christos 9592 1.2 christos params = OSSL_PARAM_BLD_to_param(tmpl); 9593 1.2 christos if (!TEST_ptr(params) 9594 1.2 christos || !TEST_int_eq(EVP_PKEY_fromdata(pctx, &dhpkey, 9595 1.2 christos EVP_PKEY_KEY_PARAMETERS, 9596 1.2 christos params), 1)) 9597 1.2 christos goto end; 9598 1.2 christos 9599 1.2 christos tmp_dh_params = dhpkey; 9600 1.2 christos end: 9601 1.2 christos BN_free(p); 9602 1.2 christos EVP_PKEY_CTX_free(pctx); 9603 1.2 christos OSSL_PARAM_BLD_free(tmpl); 9604 1.2 christos OSSL_PARAM_free(params); 9605 1.2 christos } 9606 1.2 christos 9607 1.2 christos if (tmp_dh_params != NULL && !EVP_PKEY_up_ref(tmp_dh_params)) 9608 1.2 christos return NULL; 9609 1.2 christos 9610 1.2 christos return tmp_dh_params; 9611 1.2 christos } 9612 1.2 christos 9613 1.2 christos # ifndef OPENSSL_NO_DEPRECATED_3_0 9614 1.2 christos /* Callback used by test_set_tmp_dh() */ 9615 1.2 christos static DH *tmp_dh_callback(SSL *s, int is_export, int keylen) 9616 1.2 christos { 9617 1.2 christos EVP_PKEY *dhpkey = get_tmp_dh_params(); 9618 1.2 christos DH *ret = NULL; 9619 1.2 christos 9620 1.2 christos if (!TEST_ptr(dhpkey)) 9621 1.2 christos return NULL; 9622 1.2 christos 9623 1.2 christos /* 9624 1.2 christos * libssl does not free the returned DH, so we free it now knowing that even 9625 1.2 christos * after we free dhpkey, there will still be a reference to the owning 9626 1.2 christos * EVP_PKEY in tmp_dh_params, and so the DH object will live for the length 9627 1.2 christos * of time we need it for. 9628 1.2 christos */ 9629 1.2 christos ret = EVP_PKEY_get1_DH(dhpkey); 9630 1.2 christos DH_free(ret); 9631 1.2 christos 9632 1.2 christos EVP_PKEY_free(dhpkey); 9633 1.2 christos 9634 1.2 christos return ret; 9635 1.2 christos } 9636 1.2 christos # endif 9637 1.2 christos 9638 1.2 christos /* 9639 1.2 christos * Test the various methods for setting temporary DH parameters 9640 1.2 christos * 9641 1.2 christos * Test 0: Default (no auto) setting 9642 1.2 christos * Test 1: Explicit SSL_CTX auto off 9643 1.2 christos * Test 2: Explicit SSL auto off 9644 1.2 christos * Test 3: Explicit SSL_CTX auto on 9645 1.2 christos * Test 4: Explicit SSL auto on 9646 1.2 christos * Test 5: Explicit SSL_CTX auto off, custom DH params via EVP_PKEY 9647 1.2 christos * Test 6: Explicit SSL auto off, custom DH params via EVP_PKEY 9648 1.2 christos * 9649 1.2 christos * The following are testing deprecated APIs, so we only run them if available 9650 1.2 christos * Test 7: Explicit SSL_CTX auto off, custom DH params via DH 9651 1.2 christos * Test 8: Explicit SSL auto off, custom DH params via DH 9652 1.2 christos * Test 9: Explicit SSL_CTX auto off, custom DH params via callback 9653 1.2 christos * Test 10: Explicit SSL auto off, custom DH params via callback 9654 1.2 christos */ 9655 1.2 christos static int test_set_tmp_dh(int idx) 9656 1.2 christos { 9657 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 9658 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 9659 1.2 christos int testresult = 0; 9660 1.2 christos int dhauto = (idx == 3 || idx == 4) ? 1 : 0; 9661 1.2 christos int expected = (idx <= 2) ? 0 : 1; 9662 1.2 christos EVP_PKEY *dhpkey = NULL; 9663 1.2 christos # ifndef OPENSSL_NO_DEPRECATED_3_0 9664 1.2 christos DH *dh = NULL; 9665 1.2 christos # else 9666 1.2 christos 9667 1.2 christos if (idx >= 7) 9668 1.2 christos return 1; 9669 1.2 christos # endif 9670 1.2 christos 9671 1.2 christos if (idx >= 5 && idx <= 8) { 9672 1.2 christos dhpkey = get_tmp_dh_params(); 9673 1.2 christos if (!TEST_ptr(dhpkey)) 9674 1.2 christos goto end; 9675 1.2 christos } 9676 1.2 christos # ifndef OPENSSL_NO_DEPRECATED_3_0 9677 1.2 christos if (idx == 7 || idx == 8) { 9678 1.2 christos dh = EVP_PKEY_get1_DH(dhpkey); 9679 1.2 christos if (!TEST_ptr(dh)) 9680 1.2 christos goto end; 9681 1.2 christos } 9682 1.2 christos # endif 9683 1.2 christos 9684 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 9685 1.2 christos TLS_client_method(), 9686 1.2 christos 0, 9687 1.2 christos 0, 9688 1.2 christos &sctx, &cctx, cert, privkey))) 9689 1.2 christos goto end; 9690 1.2 christos 9691 1.2 christos if ((idx & 1) == 1) { 9692 1.2 christos if (!TEST_true(SSL_CTX_set_dh_auto(sctx, dhauto))) 9693 1.2 christos goto end; 9694 1.2 christos } 9695 1.2 christos 9696 1.2 christos if (idx == 5) { 9697 1.2 christos if (!TEST_true(SSL_CTX_set0_tmp_dh_pkey(sctx, dhpkey))) 9698 1.2 christos goto end; 9699 1.2 christos dhpkey = NULL; 9700 1.2 christos } 9701 1.2 christos # ifndef OPENSSL_NO_DEPRECATED_3_0 9702 1.2 christos else if (idx == 7) { 9703 1.2 christos if (!TEST_true(SSL_CTX_set_tmp_dh(sctx, dh))) 9704 1.2 christos goto end; 9705 1.2 christos } else if (idx == 9) { 9706 1.2 christos SSL_CTX_set_tmp_dh_callback(sctx, tmp_dh_callback); 9707 1.2 christos } 9708 1.2 christos # endif 9709 1.2 christos 9710 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 9711 1.2 christos NULL, NULL))) 9712 1.2 christos goto end; 9713 1.2 christos 9714 1.2 christos if ((idx & 1) == 0 && idx != 0) { 9715 1.2 christos if (!TEST_true(SSL_set_dh_auto(serverssl, dhauto))) 9716 1.2 christos goto end; 9717 1.2 christos } 9718 1.2 christos if (idx == 6) { 9719 1.2 christos if (!TEST_true(SSL_set0_tmp_dh_pkey(serverssl, dhpkey))) 9720 1.2 christos goto end; 9721 1.2 christos dhpkey = NULL; 9722 1.2 christos } 9723 1.2 christos # ifndef OPENSSL_NO_DEPRECATED_3_0 9724 1.2 christos else if (idx == 8) { 9725 1.2 christos if (!TEST_true(SSL_set_tmp_dh(serverssl, dh))) 9726 1.2 christos goto end; 9727 1.2 christos } else if (idx == 10) { 9728 1.2 christos SSL_set_tmp_dh_callback(serverssl, tmp_dh_callback); 9729 1.2 christos } 9730 1.2 christos # endif 9731 1.2 christos 9732 1.2 christos if (!TEST_true(SSL_set_min_proto_version(serverssl, TLS1_2_VERSION)) 9733 1.2 christos || !TEST_true(SSL_set_max_proto_version(serverssl, TLS1_2_VERSION)) 9734 1.2 christos || !TEST_true(SSL_set_cipher_list(serverssl, "DHE-RSA-AES128-SHA"))) 9735 1.2 christos goto end; 9736 1.2 christos 9737 1.2 christos /* 9738 1.2 christos * If autoon then we should succeed. Otherwise we expect failure because 9739 1.2 christos * there are no parameters 9740 1.2 christos */ 9741 1.2 christos if (!TEST_int_eq(create_ssl_connection(serverssl, clientssl, 9742 1.2 christos SSL_ERROR_NONE), expected)) 9743 1.2 christos goto end; 9744 1.2 christos 9745 1.2 christos testresult = 1; 9746 1.2 christos 9747 1.2 christos end: 9748 1.2 christos # ifndef OPENSSL_NO_DEPRECATED_3_0 9749 1.2 christos DH_free(dh); 9750 1.2 christos # endif 9751 1.2 christos SSL_free(serverssl); 9752 1.2 christos SSL_free(clientssl); 9753 1.2 christos SSL_CTX_free(sctx); 9754 1.2 christos SSL_CTX_free(cctx); 9755 1.2 christos EVP_PKEY_free(dhpkey); 9756 1.2 christos 9757 1.2 christos return testresult; 9758 1.2 christos } 9759 1.2 christos 9760 1.2 christos /* 9761 1.2 christos * Test the auto DH keys are appropriately sized 9762 1.2 christos */ 9763 1.2 christos static int test_dh_auto(int idx) 9764 1.2 christos { 9765 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 9766 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 9767 1.2 christos int testresult = 0; 9768 1.2 christos EVP_PKEY *tmpkey = NULL; 9769 1.2 christos char *thiscert = NULL, *thiskey = NULL; 9770 1.2 christos size_t expdhsize = 0; 9771 1.2 christos const char *ciphersuite = "DHE-RSA-AES128-SHA"; 9772 1.2 christos 9773 1.2 christos switch (idx) { 9774 1.2 christos case 0: 9775 1.2 christos /* The FIPS provider doesn't support this DH size - so we ignore it */ 9776 1.2 christos if (is_fips) 9777 1.2 christos return 1; 9778 1.2 christos thiscert = cert1024; 9779 1.2 christos thiskey = privkey1024; 9780 1.2 christos expdhsize = 1024; 9781 1.2 christos break; 9782 1.2 christos case 1: 9783 1.2 christos /* 2048 bit prime */ 9784 1.2 christos thiscert = cert; 9785 1.2 christos thiskey = privkey; 9786 1.2 christos expdhsize = 2048; 9787 1.2 christos break; 9788 1.2 christos case 2: 9789 1.2 christos thiscert = cert3072; 9790 1.2 christos thiskey = privkey3072; 9791 1.2 christos expdhsize = 3072; 9792 1.2 christos break; 9793 1.2 christos case 3: 9794 1.2 christos thiscert = cert4096; 9795 1.2 christos thiskey = privkey4096; 9796 1.2 christos expdhsize = 4096; 9797 1.2 christos break; 9798 1.2 christos case 4: 9799 1.2 christos thiscert = cert8192; 9800 1.2 christos thiskey = privkey8192; 9801 1.2 christos expdhsize = 8192; 9802 1.2 christos break; 9803 1.2 christos /* No certificate cases */ 9804 1.2 christos case 5: 9805 1.2 christos /* The FIPS provider doesn't support this DH size - so we ignore it */ 9806 1.2 christos if (is_fips) 9807 1.2 christos return 1; 9808 1.2 christos ciphersuite = "ADH-AES128-SHA256:@SECLEVEL=0"; 9809 1.2 christos expdhsize = 1024; 9810 1.2 christos break; 9811 1.2 christos case 6: 9812 1.2 christos ciphersuite = "ADH-AES256-SHA256:@SECLEVEL=0"; 9813 1.2 christos expdhsize = 3072; 9814 1.2 christos break; 9815 1.2 christos default: 9816 1.2 christos TEST_error("Invalid text index"); 9817 1.2 christos goto end; 9818 1.2 christos } 9819 1.2 christos 9820 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 9821 1.2 christos TLS_client_method(), 9822 1.2 christos 0, 9823 1.2 christos 0, 9824 1.2 christos &sctx, &cctx, thiscert, thiskey))) 9825 1.2 christos goto end; 9826 1.2 christos 9827 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 9828 1.2 christos NULL, NULL))) 9829 1.2 christos goto end; 9830 1.2 christos 9831 1.2 christos if (!TEST_true(SSL_set_dh_auto(serverssl, 1)) 9832 1.2 christos || !TEST_true(SSL_set_min_proto_version(serverssl, TLS1_2_VERSION)) 9833 1.2 christos || !TEST_true(SSL_set_max_proto_version(serverssl, TLS1_2_VERSION)) 9834 1.2 christos || !TEST_true(SSL_set_cipher_list(serverssl, ciphersuite)) 9835 1.2 christos || !TEST_true(SSL_set_cipher_list(clientssl, ciphersuite))) 9836 1.2 christos goto end; 9837 1.2 christos 9838 1.2 christos /* 9839 1.2 christos * Send the server's first flight. At this point the server has created the 9840 1.2 christos * temporary DH key but hasn't finished using it yet. Once used it is 9841 1.2 christos * removed, so we cannot test it. 9842 1.2 christos */ 9843 1.2 christos if (!TEST_int_le(SSL_connect(clientssl), 0) 9844 1.2 christos || !TEST_int_le(SSL_accept(serverssl), 0)) 9845 1.2 christos goto end; 9846 1.2 christos 9847 1.2 christos if (!TEST_int_gt(SSL_get_tmp_key(serverssl, &tmpkey), 0)) 9848 1.2 christos goto end; 9849 1.2 christos if (!TEST_size_t_eq(EVP_PKEY_get_bits(tmpkey), expdhsize)) 9850 1.2 christos goto end; 9851 1.2 christos 9852 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 9853 1.2 christos goto end; 9854 1.2 christos 9855 1.2 christos testresult = 1; 9856 1.2 christos 9857 1.2 christos end: 9858 1.2 christos SSL_free(serverssl); 9859 1.2 christos SSL_free(clientssl); 9860 1.2 christos SSL_CTX_free(sctx); 9861 1.2 christos SSL_CTX_free(cctx); 9862 1.2 christos EVP_PKEY_free(tmpkey); 9863 1.2 christos 9864 1.2 christos return testresult; 9865 1.2 christos 9866 1.2 christos } 9867 1.2 christos # endif /* OPENSSL_NO_DH */ 9868 1.2 christos #endif /* OPENSSL_NO_TLS1_2 */ 9869 1.2 christos 9870 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 9871 1.2 christos /* 9872 1.2 christos * Test that setting an SNI callback works with TLSv1.3. Specifically we check 9873 1.2 christos * that it works even without a certificate configured for the original 9874 1.2 christos * SSL_CTX 9875 1.2 christos */ 9876 1.2 christos static int test_sni_tls13(void) 9877 1.2 christos { 9878 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL, *sctx2 = NULL; 9879 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 9880 1.2 christos int testresult = 0; 9881 1.2 christos 9882 1.2 christos /* Reset callback counter */ 9883 1.2 christos snicb = 0; 9884 1.2 christos 9885 1.2 christos /* Create an initial SSL_CTX with no certificate configured */ 9886 1.2 christos sctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method()); 9887 1.2 christos if (!TEST_ptr(sctx)) 9888 1.2 christos goto end; 9889 1.2 christos /* Require TLSv1.3 as a minimum */ 9890 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 9891 1.2 christos TLS_client_method(), TLS1_3_VERSION, 0, 9892 1.2 christos &sctx2, &cctx, cert, privkey))) 9893 1.2 christos goto end; 9894 1.2 christos 9895 1.2 christos /* Set up SNI */ 9896 1.2 christos if (!TEST_true(SSL_CTX_set_tlsext_servername_callback(sctx, sni_cb)) 9897 1.2 christos || !TEST_true(SSL_CTX_set_tlsext_servername_arg(sctx, sctx2))) 9898 1.2 christos goto end; 9899 1.2 christos 9900 1.2 christos /* 9901 1.2 christos * Connection should still succeed because the final SSL_CTX has the right 9902 1.2 christos * certificates configured. 9903 1.2 christos */ 9904 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 9905 1.2 christos &clientssl, NULL, NULL)) 9906 1.2 christos || !TEST_true(create_ssl_connection(serverssl, clientssl, 9907 1.2 christos SSL_ERROR_NONE))) 9908 1.2 christos goto end; 9909 1.2 christos 9910 1.2 christos /* We should have had the SNI callback called exactly once */ 9911 1.2 christos if (!TEST_int_eq(snicb, 1)) 9912 1.2 christos goto end; 9913 1.2 christos 9914 1.2 christos testresult = 1; 9915 1.2 christos 9916 1.2 christos end: 9917 1.2 christos SSL_free(serverssl); 9918 1.2 christos SSL_free(clientssl); 9919 1.2 christos SSL_CTX_free(sctx2); 9920 1.2 christos SSL_CTX_free(sctx); 9921 1.2 christos SSL_CTX_free(cctx); 9922 1.2 christos return testresult; 9923 1.2 christos } 9924 1.2 christos 9925 1.2 christos /* 9926 1.2 christos * Test that the lifetime hint of a TLSv1.3 ticket is no more than 1 week 9927 1.2 christos * 0 = TLSv1.2 9928 1.2 christos * 1 = TLSv1.3 9929 1.2 christos */ 9930 1.2 christos static int test_ticket_lifetime(int idx) 9931 1.2 christos { 9932 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 9933 1.2 christos SSL *clientssl = NULL, *serverssl = NULL; 9934 1.2 christos int testresult = 0; 9935 1.2 christos int version = TLS1_3_VERSION; 9936 1.2 christos 9937 1.2 christos #define ONE_WEEK_SEC (7 * 24 * 60 * 60) 9938 1.2 christos #define TWO_WEEK_SEC (2 * ONE_WEEK_SEC) 9939 1.2 christos 9940 1.2 christos if (idx == 0) { 9941 1.2 christos #ifdef OPENSSL_NO_TLS1_2 9942 1.2 christos return TEST_skip("TLS 1.2 is disabled."); 9943 1.2 christos #else 9944 1.2 christos version = TLS1_2_VERSION; 9945 1.2 christos #endif 9946 1.2 christos } 9947 1.2 christos 9948 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 9949 1.2 christos TLS_client_method(), version, version, 9950 1.2 christos &sctx, &cctx, cert, privkey))) 9951 1.2 christos goto end; 9952 1.2 christos 9953 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 9954 1.2 christos &clientssl, NULL, NULL))) 9955 1.2 christos goto end; 9956 1.2 christos 9957 1.2 christos /* 9958 1.2 christos * Set the timeout to be more than 1 week 9959 1.2 christos * make sure the returned value is the default 9960 1.2 christos */ 9961 1.2 christos if (!TEST_long_eq(SSL_CTX_set_timeout(sctx, TWO_WEEK_SEC), 9962 1.2 christos SSL_get_default_timeout(serverssl))) 9963 1.2 christos goto end; 9964 1.2 christos 9965 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 9966 1.2 christos goto end; 9967 1.2 christos 9968 1.2 christos if (idx == 0) { 9969 1.2 christos /* TLSv1.2 uses the set value */ 9970 1.2 christos if (!TEST_ulong_eq(SSL_SESSION_get_ticket_lifetime_hint(SSL_get_session(clientssl)), TWO_WEEK_SEC)) 9971 1.2 christos goto end; 9972 1.2 christos } else { 9973 1.2 christos /* TLSv1.3 uses the limited value */ 9974 1.2 christos if (!TEST_ulong_le(SSL_SESSION_get_ticket_lifetime_hint(SSL_get_session(clientssl)), ONE_WEEK_SEC)) 9975 1.2 christos goto end; 9976 1.2 christos } 9977 1.2 christos testresult = 1; 9978 1.2 christos 9979 1.2 christos end: 9980 1.2 christos SSL_free(serverssl); 9981 1.2 christos SSL_free(clientssl); 9982 1.2 christos SSL_CTX_free(sctx); 9983 1.2 christos SSL_CTX_free(cctx); 9984 1.2 christos return testresult; 9985 1.2 christos } 9986 1.2 christos #endif 9987 1.2 christos /* 9988 1.2 christos * Test that setting an ALPN does not violate RFC 9989 1.2 christos */ 9990 1.2 christos static int test_set_alpn(void) 9991 1.2 christos { 9992 1.2 christos SSL_CTX *ctx = NULL; 9993 1.2 christos SSL *ssl = NULL; 9994 1.2 christos int testresult = 0; 9995 1.2 christos 9996 1.2 christos unsigned char bad0[] = { 0x00, 'b', 'a', 'd' }; 9997 1.2 christos unsigned char good[] = { 0x04, 'g', 'o', 'o', 'd' }; 9998 1.2 christos unsigned char bad1[] = { 0x01, 'b', 'a', 'd' }; 9999 1.2 christos unsigned char bad2[] = { 0x03, 'b', 'a', 'd', 0x00}; 10000 1.2 christos unsigned char bad3[] = { 0x03, 'b', 'a', 'd', 0x01, 'b', 'a', 'd'}; 10001 1.2 christos unsigned char bad4[] = { 0x03, 'b', 'a', 'd', 0x06, 'b', 'a', 'd'}; 10002 1.2 christos 10003 1.2 christos /* Create an initial SSL_CTX with no certificate configured */ 10004 1.2 christos ctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method()); 10005 1.2 christos if (!TEST_ptr(ctx)) 10006 1.2 christos goto end; 10007 1.2 christos 10008 1.2 christos /* the set_alpn functions return 0 (false) on success, non-zero (true) on failure */ 10009 1.2 christos if (!TEST_false(SSL_CTX_set_alpn_protos(ctx, NULL, 2))) 10010 1.2 christos goto end; 10011 1.2 christos if (!TEST_false(SSL_CTX_set_alpn_protos(ctx, good, 0))) 10012 1.2 christos goto end; 10013 1.2 christos if (!TEST_false(SSL_CTX_set_alpn_protos(ctx, good, sizeof(good)))) 10014 1.2 christos goto end; 10015 1.2 christos if (!TEST_true(SSL_CTX_set_alpn_protos(ctx, good, 1))) 10016 1.2 christos goto end; 10017 1.2 christos if (!TEST_true(SSL_CTX_set_alpn_protos(ctx, bad0, sizeof(bad0)))) 10018 1.2 christos goto end; 10019 1.2 christos if (!TEST_true(SSL_CTX_set_alpn_protos(ctx, bad1, sizeof(bad1)))) 10020 1.2 christos goto end; 10021 1.2 christos if (!TEST_true(SSL_CTX_set_alpn_protos(ctx, bad2, sizeof(bad2)))) 10022 1.2 christos goto end; 10023 1.2 christos if (!TEST_true(SSL_CTX_set_alpn_protos(ctx, bad3, sizeof(bad3)))) 10024 1.2 christos goto end; 10025 1.2 christos if (!TEST_true(SSL_CTX_set_alpn_protos(ctx, bad4, sizeof(bad4)))) 10026 1.2 christos goto end; 10027 1.2 christos 10028 1.2 christos ssl = SSL_new(ctx); 10029 1.2 christos if (!TEST_ptr(ssl)) 10030 1.2 christos goto end; 10031 1.2 christos 10032 1.2 christos if (!TEST_false(SSL_set_alpn_protos(ssl, NULL, 2))) 10033 1.2 christos goto end; 10034 1.2 christos if (!TEST_false(SSL_set_alpn_protos(ssl, good, 0))) 10035 1.2 christos goto end; 10036 1.2 christos if (!TEST_false(SSL_set_alpn_protos(ssl, good, sizeof(good)))) 10037 1.2 christos goto end; 10038 1.2 christos if (!TEST_true(SSL_set_alpn_protos(ssl, good, 1))) 10039 1.2 christos goto end; 10040 1.2 christos if (!TEST_true(SSL_set_alpn_protos(ssl, bad0, sizeof(bad0)))) 10041 1.2 christos goto end; 10042 1.2 christos if (!TEST_true(SSL_set_alpn_protos(ssl, bad1, sizeof(bad1)))) 10043 1.2 christos goto end; 10044 1.2 christos if (!TEST_true(SSL_set_alpn_protos(ssl, bad2, sizeof(bad2)))) 10045 1.2 christos goto end; 10046 1.2 christos if (!TEST_true(SSL_set_alpn_protos(ssl, bad3, sizeof(bad3)))) 10047 1.2 christos goto end; 10048 1.2 christos if (!TEST_true(SSL_set_alpn_protos(ssl, bad4, sizeof(bad4)))) 10049 1.2 christos goto end; 10050 1.2 christos 10051 1.2 christos testresult = 1; 10052 1.2 christos 10053 1.2 christos end: 10054 1.2 christos SSL_free(ssl); 10055 1.2 christos SSL_CTX_free(ctx); 10056 1.2 christos return testresult; 10057 1.2 christos } 10058 1.2 christos 10059 1.2 christos /* 10060 1.2 christos * Test SSL_CTX_set1_verify/chain_cert_store and SSL_CTX_get_verify/chain_cert_store. 10061 1.2 christos */ 10062 1.2 christos static int test_set_verify_cert_store_ssl_ctx(void) 10063 1.2 christos { 10064 1.2 christos SSL_CTX *ctx = NULL; 10065 1.2 christos int testresult = 0; 10066 1.2 christos X509_STORE *store = NULL, *new_store = NULL, 10067 1.2 christos *cstore = NULL, *new_cstore = NULL; 10068 1.2 christos 10069 1.2 christos /* Create an initial SSL_CTX. */ 10070 1.2 christos ctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method()); 10071 1.2 christos if (!TEST_ptr(ctx)) 10072 1.2 christos goto end; 10073 1.2 christos 10074 1.2 christos /* Retrieve verify store pointer. */ 10075 1.2 christos if (!TEST_true(SSL_CTX_get0_verify_cert_store(ctx, &store))) 10076 1.2 christos goto end; 10077 1.2 christos 10078 1.2 christos /* Retrieve chain store pointer. */ 10079 1.2 christos if (!TEST_true(SSL_CTX_get0_chain_cert_store(ctx, &cstore))) 10080 1.2 christos goto end; 10081 1.2 christos 10082 1.2 christos /* We haven't set any yet, so this should be NULL. */ 10083 1.2 christos if (!TEST_ptr_null(store) || !TEST_ptr_null(cstore)) 10084 1.2 christos goto end; 10085 1.2 christos 10086 1.2 christos /* Create stores. We use separate stores so pointers are different. */ 10087 1.2 christos new_store = X509_STORE_new(); 10088 1.2 christos if (!TEST_ptr(new_store)) 10089 1.2 christos goto end; 10090 1.2 christos 10091 1.2 christos new_cstore = X509_STORE_new(); 10092 1.2 christos if (!TEST_ptr(new_cstore)) 10093 1.2 christos goto end; 10094 1.2 christos 10095 1.2 christos /* Set stores. */ 10096 1.2 christos if (!TEST_true(SSL_CTX_set1_verify_cert_store(ctx, new_store))) 10097 1.2 christos goto end; 10098 1.2 christos 10099 1.2 christos if (!TEST_true(SSL_CTX_set1_chain_cert_store(ctx, new_cstore))) 10100 1.2 christos goto end; 10101 1.2 christos 10102 1.2 christos /* Should be able to retrieve the same pointer. */ 10103 1.2 christos if (!TEST_true(SSL_CTX_get0_verify_cert_store(ctx, &store))) 10104 1.2 christos goto end; 10105 1.2 christos 10106 1.2 christos if (!TEST_true(SSL_CTX_get0_chain_cert_store(ctx, &cstore))) 10107 1.2 christos goto end; 10108 1.2 christos 10109 1.2 christos if (!TEST_ptr_eq(store, new_store) || !TEST_ptr_eq(cstore, new_cstore)) 10110 1.2 christos goto end; 10111 1.2 christos 10112 1.2 christos /* Should be able to unset again. */ 10113 1.2 christos if (!TEST_true(SSL_CTX_set1_verify_cert_store(ctx, NULL))) 10114 1.2 christos goto end; 10115 1.2 christos 10116 1.2 christos if (!TEST_true(SSL_CTX_set1_chain_cert_store(ctx, NULL))) 10117 1.2 christos goto end; 10118 1.2 christos 10119 1.2 christos /* Should now be NULL. */ 10120 1.2 christos if (!TEST_true(SSL_CTX_get0_verify_cert_store(ctx, &store))) 10121 1.2 christos goto end; 10122 1.2 christos 10123 1.2 christos if (!TEST_true(SSL_CTX_get0_chain_cert_store(ctx, &cstore))) 10124 1.2 christos goto end; 10125 1.2 christos 10126 1.2 christos if (!TEST_ptr_null(store) || !TEST_ptr_null(cstore)) 10127 1.2 christos goto end; 10128 1.2 christos 10129 1.2 christos testresult = 1; 10130 1.2 christos 10131 1.2 christos end: 10132 1.2 christos X509_STORE_free(new_store); 10133 1.2 christos X509_STORE_free(new_cstore); 10134 1.2 christos SSL_CTX_free(ctx); 10135 1.2 christos return testresult; 10136 1.2 christos } 10137 1.2 christos 10138 1.2 christos /* 10139 1.2 christos * Test SSL_set1_verify/chain_cert_store and SSL_get_verify/chain_cert_store. 10140 1.2 christos */ 10141 1.2 christos static int test_set_verify_cert_store_ssl(void) 10142 1.2 christos { 10143 1.2 christos SSL_CTX *ctx = NULL; 10144 1.2 christos SSL *ssl = NULL; 10145 1.2 christos int testresult = 0; 10146 1.2 christos X509_STORE *store = NULL, *new_store = NULL, 10147 1.2 christos *cstore = NULL, *new_cstore = NULL; 10148 1.2 christos 10149 1.2 christos /* Create an initial SSL_CTX. */ 10150 1.2 christos ctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method()); 10151 1.2 christos if (!TEST_ptr(ctx)) 10152 1.2 christos goto end; 10153 1.2 christos 10154 1.2 christos /* Create an SSL object. */ 10155 1.2 christos ssl = SSL_new(ctx); 10156 1.2 christos if (!TEST_ptr(ssl)) 10157 1.2 christos goto end; 10158 1.2 christos 10159 1.2 christos /* Retrieve verify store pointer. */ 10160 1.2 christos if (!TEST_true(SSL_get0_verify_cert_store(ssl, &store))) 10161 1.2 christos goto end; 10162 1.2 christos 10163 1.2 christos /* Retrieve chain store pointer. */ 10164 1.2 christos if (!TEST_true(SSL_get0_chain_cert_store(ssl, &cstore))) 10165 1.2 christos goto end; 10166 1.2 christos 10167 1.2 christos /* We haven't set any yet, so this should be NULL. */ 10168 1.2 christos if (!TEST_ptr_null(store) || !TEST_ptr_null(cstore)) 10169 1.2 christos goto end; 10170 1.2 christos 10171 1.2 christos /* Create stores. We use separate stores so pointers are different. */ 10172 1.2 christos new_store = X509_STORE_new(); 10173 1.2 christos if (!TEST_ptr(new_store)) 10174 1.2 christos goto end; 10175 1.2 christos 10176 1.2 christos new_cstore = X509_STORE_new(); 10177 1.2 christos if (!TEST_ptr(new_cstore)) 10178 1.2 christos goto end; 10179 1.2 christos 10180 1.2 christos /* Set stores. */ 10181 1.2 christos if (!TEST_true(SSL_set1_verify_cert_store(ssl, new_store))) 10182 1.2 christos goto end; 10183 1.2 christos 10184 1.2 christos if (!TEST_true(SSL_set1_chain_cert_store(ssl, new_cstore))) 10185 1.2 christos goto end; 10186 1.2 christos 10187 1.2 christos /* Should be able to retrieve the same pointer. */ 10188 1.2 christos if (!TEST_true(SSL_get0_verify_cert_store(ssl, &store))) 10189 1.2 christos goto end; 10190 1.2 christos 10191 1.2 christos if (!TEST_true(SSL_get0_chain_cert_store(ssl, &cstore))) 10192 1.2 christos goto end; 10193 1.2 christos 10194 1.2 christos if (!TEST_ptr_eq(store, new_store) || !TEST_ptr_eq(cstore, new_cstore)) 10195 1.2 christos goto end; 10196 1.2 christos 10197 1.2 christos /* Should be able to unset again. */ 10198 1.2 christos if (!TEST_true(SSL_set1_verify_cert_store(ssl, NULL))) 10199 1.2 christos goto end; 10200 1.2 christos 10201 1.2 christos if (!TEST_true(SSL_set1_chain_cert_store(ssl, NULL))) 10202 1.2 christos goto end; 10203 1.2 christos 10204 1.2 christos /* Should now be NULL. */ 10205 1.2 christos if (!TEST_true(SSL_get0_verify_cert_store(ssl, &store))) 10206 1.2 christos goto end; 10207 1.2 christos 10208 1.2 christos if (!TEST_true(SSL_get0_chain_cert_store(ssl, &cstore))) 10209 1.2 christos goto end; 10210 1.2 christos 10211 1.2 christos if (!TEST_ptr_null(store) || !TEST_ptr_null(cstore)) 10212 1.2 christos goto end; 10213 1.2 christos 10214 1.2 christos testresult = 1; 10215 1.2 christos 10216 1.2 christos end: 10217 1.2 christos X509_STORE_free(new_store); 10218 1.2 christos X509_STORE_free(new_cstore); 10219 1.2 christos SSL_free(ssl); 10220 1.2 christos SSL_CTX_free(ctx); 10221 1.2 christos return testresult; 10222 1.2 christos } 10223 1.2 christos 10224 1.2 christos 10225 1.2 christos static int test_inherit_verify_param(void) 10226 1.2 christos { 10227 1.2 christos int testresult = 0; 10228 1.2 christos 10229 1.2 christos SSL_CTX *ctx = NULL; 10230 1.2 christos X509_VERIFY_PARAM *cp = NULL; 10231 1.2 christos SSL *ssl = NULL; 10232 1.2 christos X509_VERIFY_PARAM *sp = NULL; 10233 1.2 christos int hostflags = X509_CHECK_FLAG_NEVER_CHECK_SUBJECT; 10234 1.2 christos 10235 1.2 christos ctx = SSL_CTX_new_ex(libctx, NULL, TLS_server_method()); 10236 1.2 christos if (!TEST_ptr(ctx)) 10237 1.2 christos goto end; 10238 1.2 christos 10239 1.2 christos cp = SSL_CTX_get0_param(ctx); 10240 1.2 christos if (!TEST_ptr(cp)) 10241 1.2 christos goto end; 10242 1.2 christos if (!TEST_int_eq(X509_VERIFY_PARAM_get_hostflags(cp), 0)) 10243 1.2 christos goto end; 10244 1.2 christos 10245 1.2 christos X509_VERIFY_PARAM_set_hostflags(cp, hostflags); 10246 1.2 christos 10247 1.2 christos ssl = SSL_new(ctx); 10248 1.2 christos if (!TEST_ptr(ssl)) 10249 1.2 christos goto end; 10250 1.2 christos 10251 1.2 christos sp = SSL_get0_param(ssl); 10252 1.2 christos if (!TEST_ptr(sp)) 10253 1.2 christos goto end; 10254 1.2 christos if (!TEST_int_eq(X509_VERIFY_PARAM_get_hostflags(sp), hostflags)) 10255 1.2 christos goto end; 10256 1.2 christos 10257 1.2 christos testresult = 1; 10258 1.2 christos 10259 1.2 christos end: 10260 1.2 christos SSL_free(ssl); 10261 1.2 christos SSL_CTX_free(ctx); 10262 1.2 christos 10263 1.2 christos return testresult; 10264 1.2 christos } 10265 1.2 christos 10266 1.2 christos static int test_load_dhfile(void) 10267 1.2 christos { 10268 1.2 christos #ifndef OPENSSL_NO_DH 10269 1.2 christos int testresult = 0; 10270 1.2 christos 10271 1.2 christos SSL_CTX *ctx = NULL; 10272 1.2 christos SSL_CONF_CTX *cctx = NULL; 10273 1.2 christos 10274 1.2 christos if (dhfile == NULL) 10275 1.2 christos return 1; 10276 1.2 christos 10277 1.2 christos if (!TEST_ptr(ctx = SSL_CTX_new_ex(libctx, NULL, TLS_client_method())) 10278 1.2 christos || !TEST_ptr(cctx = SSL_CONF_CTX_new())) 10279 1.2 christos goto end; 10280 1.2 christos 10281 1.2 christos SSL_CONF_CTX_set_ssl_ctx(cctx, ctx); 10282 1.2 christos SSL_CONF_CTX_set_flags(cctx, 10283 1.2 christos SSL_CONF_FLAG_CERTIFICATE 10284 1.2 christos | SSL_CONF_FLAG_SERVER 10285 1.2 christos | SSL_CONF_FLAG_FILE); 10286 1.2 christos 10287 1.2 christos if (!TEST_int_eq(SSL_CONF_cmd(cctx, "DHParameters", dhfile), 2)) 10288 1.2 christos goto end; 10289 1.2 christos 10290 1.2 christos testresult = 1; 10291 1.2 christos end: 10292 1.2 christos SSL_CONF_CTX_free(cctx); 10293 1.2 christos SSL_CTX_free(ctx); 10294 1.2 christos 10295 1.2 christos return testresult; 10296 1.2 christos #else 10297 1.2 christos return TEST_skip("DH not supported by this build"); 10298 1.2 christos #endif 10299 1.2 christos } 10300 1.2 christos 10301 1.2 christos #if !defined(OPENSSL_NO_TLS1_2) && !defined(OPENSSL_NO_DYNAMIC_ENGINE) 10302 1.2 christos /* 10303 1.2 christos * Test TLSv1.2 with a pipeline capable cipher. TLSv1.3 and DTLS do not 10304 1.2 christos * support this yet. The only pipeline capable cipher that we have is in the 10305 1.2 christos * dasync engine (providers don't support this yet), so we have to use 10306 1.2 christos * deprecated APIs for this test. 10307 1.2 christos * 10308 1.2 christos * Test 0: Client has pipelining enabled, server does not 10309 1.2 christos * Test 1: Server has pipelining enabled, client does not 10310 1.2 christos * Test 2: Client has pipelining enabled, server does not: not enough data to 10311 1.2 christos * fill all the pipelines 10312 1.2 christos * Test 3: Client has pipelining enabled, server does not: not enough data to 10313 1.2 christos * fill all the pipelines by more than a full pipeline's worth 10314 1.2 christos * Test 4: Client has pipelining enabled, server does not: more data than all 10315 1.2 christos * the available pipelines can take 10316 1.2 christos * Test 5: Client has pipelining enabled, server does not: Maximum size pipeline 10317 1.2 christos * Test 6: Repeat of test 0, but the engine is loaded late (after the SSL_CTX 10318 1.2 christos * is created) 10319 1.2 christos */ 10320 1.2 christos static int test_pipelining(int idx) 10321 1.2 christos { 10322 1.2 christos SSL_CTX *cctx = NULL, *sctx = NULL; 10323 1.2 christos SSL *clientssl = NULL, *serverssl = NULL, *peera, *peerb; 10324 1.2 christos int testresult = 0, numreads; 10325 1.2 christos /* A 55 byte message */ 10326 1.2 christos unsigned char *msg = (unsigned char *) 10327 1.2 christos "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123"; 10328 1.2 christos size_t written, readbytes, offset, msglen, fragsize = 10, numpipes = 5; 10329 1.2 christos size_t expectedreads; 10330 1.2 christos unsigned char *buf = NULL; 10331 1.2 christos ENGINE *e = NULL; 10332 1.2 christos 10333 1.2 christos if (idx != 6) { 10334 1.2 christos e = load_dasync(); 10335 1.2 christos if (e == NULL) 10336 1.2 christos return 0; 10337 1.2 christos } 10338 1.2 christos 10339 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 10340 1.2 christos TLS_client_method(), 0, 10341 1.2 christos TLS1_2_VERSION, &sctx, &cctx, cert, 10342 1.2 christos privkey))) 10343 1.2 christos goto end; 10344 1.2 christos 10345 1.2 christos if (idx == 6) { 10346 1.2 christos e = load_dasync(); 10347 1.2 christos if (e == NULL) 10348 1.2 christos goto end; 10349 1.2 christos /* Now act like test 0 */ 10350 1.2 christos idx = 0; 10351 1.2 christos } 10352 1.2 christos 10353 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 10354 1.2 christos &clientssl, NULL, NULL))) 10355 1.2 christos goto end; 10356 1.2 christos 10357 1.2 christos if (!TEST_true(SSL_set_cipher_list(clientssl, "AES128-SHA"))) 10358 1.2 christos goto end; 10359 1.2 christos 10360 1.2 christos /* peera is always configured for pipelining, while peerb is not. */ 10361 1.2 christos if (idx == 1) { 10362 1.2 christos peera = serverssl; 10363 1.2 christos peerb = clientssl; 10364 1.2 christos 10365 1.2 christos } else { 10366 1.2 christos peera = clientssl; 10367 1.2 christos peerb = serverssl; 10368 1.2 christos } 10369 1.2 christos 10370 1.2 christos if (idx == 5) { 10371 1.2 christos numpipes = 2; 10372 1.2 christos /* Maximum allowed fragment size */ 10373 1.2 christos fragsize = SSL3_RT_MAX_PLAIN_LENGTH; 10374 1.2 christos msglen = fragsize * numpipes; 10375 1.2 christos msg = OPENSSL_malloc(msglen); 10376 1.2 christos if (!TEST_ptr(msg)) 10377 1.2 christos goto end; 10378 1.2 christos if (!TEST_int_gt(RAND_bytes_ex(libctx, msg, msglen, 0), 0)) 10379 1.2 christos goto end; 10380 1.2 christos } else if (idx == 4) { 10381 1.2 christos msglen = 55; 10382 1.2 christos } else { 10383 1.2 christos msglen = 50; 10384 1.2 christos } 10385 1.2 christos if (idx == 2) 10386 1.2 christos msglen -= 2; /* Send 2 less bytes */ 10387 1.2 christos else if (idx == 3) 10388 1.2 christos msglen -= 12; /* Send 12 less bytes */ 10389 1.2 christos 10390 1.2 christos buf = OPENSSL_malloc(msglen); 10391 1.2 christos if (!TEST_ptr(buf)) 10392 1.2 christos goto end; 10393 1.2 christos 10394 1.2 christos if (idx == 5) { 10395 1.2 christos /* 10396 1.2 christos * Test that setting a split send fragment longer than the maximum 10397 1.2 christos * allowed fails 10398 1.2 christos */ 10399 1.2 christos if (!TEST_false(SSL_set_split_send_fragment(peera, fragsize + 1))) 10400 1.2 christos goto end; 10401 1.2 christos } 10402 1.2 christos 10403 1.2 christos /* 10404 1.2 christos * In the normal case. We have 5 pipelines with 10 bytes per pipeline 10405 1.2 christos * (50 bytes in total). This is a ridiculously small number of bytes - 10406 1.2 christos * but sufficient for our purposes 10407 1.2 christos */ 10408 1.2 christos if (!TEST_true(SSL_set_max_pipelines(peera, numpipes)) 10409 1.2 christos || !TEST_true(SSL_set_split_send_fragment(peera, fragsize))) 10410 1.2 christos goto end; 10411 1.2 christos 10412 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 10413 1.2 christos goto end; 10414 1.2 christos 10415 1.2 christos /* Write some data from peera to peerb */ 10416 1.2 christos if (!TEST_true(SSL_write_ex(peera, msg, msglen, &written)) 10417 1.2 christos || !TEST_size_t_eq(written, msglen)) 10418 1.2 christos goto end; 10419 1.2 christos 10420 1.2 christos /* 10421 1.2 christos * If the pipelining code worked, then we expect all |numpipes| pipelines to 10422 1.2 christos * have been used - except in test 3 where only |numpipes - 1| pipelines 10423 1.2 christos * will be used. This will result in |numpipes| records (|numpipes - 1| for 10424 1.2 christos * test 3) having been sent to peerb. Since peerb is not using read_ahead we 10425 1.2 christos * expect this to be read in |numpipes| or |numpipes - 1| separate 10426 1.2 christos * SSL_read_ex calls. In the case of test 4, there is then one additional 10427 1.2 christos * read for left over data that couldn't fit in the previous pipelines 10428 1.2 christos */ 10429 1.2 christos for (offset = 0, numreads = 0; 10430 1.2 christos offset < msglen; 10431 1.2 christos offset += readbytes, numreads++) { 10432 1.2 christos if (!TEST_true(SSL_read_ex(peerb, buf + offset, 10433 1.2 christos msglen - offset, &readbytes))) 10434 1.2 christos goto end; 10435 1.2 christos } 10436 1.2 christos 10437 1.2 christos expectedreads = idx == 4 ? numpipes + 1 10438 1.2 christos : (idx == 3 ? numpipes - 1 : numpipes); 10439 1.2 christos if (!TEST_mem_eq(msg, msglen, buf, offset) 10440 1.2 christos || !TEST_int_eq(numreads, expectedreads)) 10441 1.2 christos goto end; 10442 1.2 christos 10443 1.2 christos /* 10444 1.2 christos * Write some data from peerb to peera. We do this in up to |numpipes + 1| 10445 1.2 christos * chunks to exercise the read pipelining code on peera. 10446 1.2 christos */ 10447 1.2 christos for (offset = 0; offset < msglen; offset += fragsize) { 10448 1.2 christos size_t sendlen = msglen - offset; 10449 1.2 christos 10450 1.2 christos if (sendlen > fragsize) 10451 1.2 christos sendlen = fragsize; 10452 1.2 christos if (!TEST_true(SSL_write_ex(peerb, msg + offset, sendlen, &written)) 10453 1.2 christos || !TEST_size_t_eq(written, sendlen)) 10454 1.2 christos goto end; 10455 1.2 christos } 10456 1.2 christos 10457 1.2 christos /* 10458 1.2 christos * The data was written in |numpipes|, |numpipes - 1| or |numpipes + 1| 10459 1.2 christos * separate chunks (depending on which test we are running). If the 10460 1.2 christos * pipelining is working then we expect peera to read up to numpipes chunks 10461 1.2 christos * and process them in parallel, giving back the complete result in a single 10462 1.2 christos * call to SSL_read_ex 10463 1.2 christos */ 10464 1.2 christos if (!TEST_true(SSL_read_ex(peera, buf, msglen, &readbytes)) 10465 1.2 christos || !TEST_size_t_le(readbytes, msglen)) 10466 1.2 christos goto end; 10467 1.2 christos 10468 1.2 christos if (idx == 4) { 10469 1.2 christos size_t readbytes2; 10470 1.2 christos 10471 1.2 christos if (!TEST_true(SSL_read_ex(peera, buf + readbytes, 10472 1.2 christos msglen - readbytes, &readbytes2))) 10473 1.2 christos goto end; 10474 1.2 christos readbytes += readbytes2; 10475 1.2 christos if (!TEST_size_t_le(readbytes, msglen)) 10476 1.2 christos goto end; 10477 1.2 christos } 10478 1.2 christos 10479 1.2 christos if (!TEST_mem_eq(msg, msglen, buf, readbytes)) 10480 1.2 christos goto end; 10481 1.1 christos 10482 1.2 christos testresult = 1; 10483 1.2 christos end: 10484 1.2 christos SSL_free(serverssl); 10485 1.2 christos SSL_free(clientssl); 10486 1.2 christos SSL_CTX_free(sctx); 10487 1.2 christos SSL_CTX_free(cctx); 10488 1.2 christos if (e != NULL) { 10489 1.2 christos ENGINE_unregister_ciphers(e); 10490 1.2 christos ENGINE_finish(e); 10491 1.2 christos ENGINE_free(e); 10492 1.2 christos } 10493 1.2 christos OPENSSL_free(buf); 10494 1.2 christos if (fragsize == SSL3_RT_MAX_PLAIN_LENGTH) 10495 1.2 christos OPENSSL_free(msg); 10496 1.2 christos return testresult; 10497 1.2 christos } 10498 1.2 christos #endif /* !defined(OPENSSL_NO_TLS1_2) && !defined(OPENSSL_NO_DYNAMIC_ENGINE) */ 10499 1.1 christos 10500 1.2 christos /* 10501 1.2 christos * Force a write retry during handshaking. We test various combinations of 10502 1.2 christos * scenarios. We test a large certificate message which will fill the buffering 10503 1.2 christos * BIO used in the handshake. We try with client auth on and off. Finally we 10504 1.2 christos * also try a BIO that indicates retry via a 0 return. BIO_write() is documented 10505 1.2 christos * to indicate retry via -1 - but sometimes BIOs don't do that. 10506 1.2 christos * 10507 1.2 christos * Test 0: Standard certificate message 10508 1.2 christos * Test 1: Large certificate message 10509 1.2 christos * Test 2: Standard cert, verify peer 10510 1.2 christos * Test 3: Large cert, verify peer 10511 1.2 christos * Test 4: Standard cert, BIO returns 0 on retry 10512 1.2 christos * Test 5: Large cert, BIO returns 0 on retry 10513 1.2 christos * Test 6: Standard cert, verify peer, BIO returns 0 on retry 10514 1.2 christos * Test 7: Large cert, verify peer, BIO returns 0 on retry 10515 1.2 christos * Test 8-15: Repeat of above with TLSv1.2 10516 1.2 christos */ 10517 1.2 christos static int test_handshake_retry(int idx) 10518 1.1 christos { 10519 1.1 christos SSL_CTX *cctx = NULL, *sctx = NULL; 10520 1.1 christos SSL *clientssl = NULL, *serverssl = NULL; 10521 1.1 christos int testresult = 0; 10522 1.2 christos BIO *tmp = NULL, *bretry = BIO_new(bio_s_always_retry()); 10523 1.2 christos int maxversion = 0; 10524 1.2 christos 10525 1.2 christos if (!TEST_ptr(bretry)) 10526 1.2 christos goto end; 10527 1.2 christos 10528 1.2 christos #ifndef OPENSSL_NO_TLS1_2 10529 1.2 christos if ((idx & 8) == 8) 10530 1.2 christos maxversion = TLS1_2_VERSION; 10531 1.2 christos #else 10532 1.2 christos if ((idx & 8) == 8) 10533 1.2 christos return TEST_skip("No TLSv1.2"); 10534 1.2 christos #endif 10535 1.2 christos 10536 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 10537 1.2 christos TLS_client_method(), 0, maxversion, 10538 1.2 christos &sctx, &cctx, cert, privkey))) 10539 1.2 christos goto end; 10540 1.2 christos 10541 1.2 christos /* 10542 1.2 christos * Add a large amount of data to fill the buffering BIO used by the SSL 10543 1.2 christos * object 10544 1.2 christos */ 10545 1.2 christos if ((idx & 1) == 1 && !add_large_cert_chain(sctx)) 10546 1.2 christos goto end; 10547 1.2 christos 10548 1.2 christos /* 10549 1.2 christos * We don't actually configure a client cert, but neither do we fail if one 10550 1.2 christos * isn't present. 10551 1.2 christos */ 10552 1.2 christos if ((idx & 2) == 2) 10553 1.2 christos SSL_CTX_set_verify(sctx, SSL_VERIFY_PEER, NULL); 10554 1.2 christos 10555 1.2 christos if ((idx & 4) == 4) 10556 1.2 christos set_always_retry_err_val(0); 10557 1.2 christos 10558 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, 10559 1.2 christos &clientssl, NULL, NULL))) 10560 1.2 christos goto end; 10561 1.2 christos 10562 1.2 christos tmp = SSL_get_wbio(serverssl); 10563 1.2 christos if (!TEST_ptr(tmp) || !TEST_true(BIO_up_ref(tmp))) { 10564 1.2 christos tmp = NULL; 10565 1.2 christos goto end; 10566 1.2 christos } 10567 1.2 christos SSL_set0_wbio(serverssl, bretry); 10568 1.2 christos bretry = NULL; 10569 1.2 christos 10570 1.2 christos if (!TEST_int_eq(SSL_connect(clientssl), -1)) 10571 1.2 christos goto end; 10572 1.2 christos 10573 1.2 christos if (!TEST_int_eq(SSL_accept(serverssl), -1) 10574 1.2 christos || !TEST_int_eq(SSL_get_error(serverssl, -1), SSL_ERROR_WANT_WRITE)) 10575 1.2 christos goto end; 10576 1.2 christos 10577 1.2 christos /* Restore a BIO that will let the write succeed */ 10578 1.2 christos SSL_set0_wbio(serverssl, tmp); 10579 1.2 christos tmp = NULL; 10580 1.2 christos 10581 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 10582 1.2 christos goto end; 10583 1.2 christos 10584 1.2 christos testresult = 1; 10585 1.2 christos end: 10586 1.2 christos SSL_free(serverssl); 10587 1.2 christos SSL_free(clientssl); 10588 1.2 christos SSL_CTX_free(sctx); 10589 1.2 christos SSL_CTX_free(cctx); 10590 1.2 christos BIO_free(bretry); 10591 1.2 christos BIO_free(tmp); 10592 1.2 christos set_always_retry_err_val(-1); 10593 1.2 christos return testresult; 10594 1.2 christos } 10595 1.2 christos 10596 1.2 christos struct resume_servername_cb_data { 10597 1.2 christos int i; 10598 1.2 christos SSL_CTX *cctx; 10599 1.2 christos SSL_CTX *sctx; 10600 1.2 christos SSL_SESSION *sess; 10601 1.2 christos int recurse; 10602 1.2 christos }; 10603 1.2 christos 10604 1.2 christos /* 10605 1.2 christos * Servername callback. We use it here to run another complete handshake using 10606 1.2 christos * the same session - and mark the session as not_resuamble at the end 10607 1.2 christos */ 10608 1.2 christos static int resume_servername_cb(SSL *s, int *ad, void *arg) 10609 1.2 christos { 10610 1.2 christos struct resume_servername_cb_data *cbdata = arg; 10611 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 10612 1.2 christos int ret = SSL_TLSEXT_ERR_ALERT_FATAL; 10613 1.2 christos 10614 1.2 christos if (cbdata->recurse) 10615 1.2 christos return SSL_TLSEXT_ERR_ALERT_FATAL; 10616 1.2 christos 10617 1.2 christos if ((cbdata->i % 3) != 1) 10618 1.2 christos return SSL_TLSEXT_ERR_OK; 10619 1.1 christos 10620 1.2 christos cbdata->recurse = 1; 10621 1.1 christos 10622 1.2 christos if (!TEST_true(create_ssl_objects(cbdata->sctx, cbdata->cctx, &serverssl, 10623 1.2 christos &clientssl, NULL, NULL)) 10624 1.2 christos || !TEST_true(SSL_set_session(clientssl, cbdata->sess))) 10625 1.2 christos goto end; 10626 1.1 christos 10627 1.2 christos ERR_set_mark(); 10628 1.2 christos /* 10629 1.2 christos * We expect this to fail - because the servername cb will fail. This will 10630 1.2 christos * mark the session as not_resumable. 10631 1.2 christos */ 10632 1.2 christos if (!TEST_false(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) { 10633 1.2 christos ERR_clear_last_mark(); 10634 1.2 christos goto end; 10635 1.1 christos } 10636 1.2 christos ERR_pop_to_mark(); 10637 1.1 christos 10638 1.2 christos ret = SSL_TLSEXT_ERR_OK; 10639 1.2 christos end: 10640 1.2 christos SSL_free(serverssl); 10641 1.2 christos SSL_free(clientssl); 10642 1.2 christos cbdata->recurse = 0; 10643 1.2 christos return ret; 10644 1.2 christos } 10645 1.1 christos 10646 1.2 christos /* 10647 1.2 christos * Test multiple resumptions and cache size handling 10648 1.2 christos * Test 0: TLSv1.3 (max_early_data set) 10649 1.2 christos * Test 1: TLSv1.3 (SSL_OP_NO_TICKET set) 10650 1.2 christos * Test 2: TLSv1.3 (max_early_data and SSL_OP_NO_TICKET set) 10651 1.2 christos * Test 3: TLSv1.3 (SSL_OP_NO_TICKET, simultaneous resumes) 10652 1.2 christos * Test 4: TLSv1.2 10653 1.2 christos */ 10654 1.2 christos static int test_multi_resume(int idx) 10655 1.2 christos { 10656 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 10657 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 10658 1.2 christos SSL_SESSION *sess = NULL; 10659 1.2 christos int max_version = TLS1_3_VERSION; 10660 1.2 christos int i, testresult = 0; 10661 1.2 christos struct resume_servername_cb_data cbdata; 10662 1.2 christos 10663 1.2 christos #if defined(OPENSSL_NO_TLS1_2) 10664 1.2 christos if (idx == 4) 10665 1.2 christos return TEST_skip("TLSv1.2 is disabled in this build"); 10666 1.2 christos #else 10667 1.2 christos if (idx == 4) 10668 1.2 christos max_version = TLS1_2_VERSION; 10669 1.2 christos #endif 10670 1.2 christos #if defined(OSSL_NO_USABLE_TLS1_3) 10671 1.2 christos if (idx != 4) 10672 1.2 christos return TEST_skip("No usable TLSv1.3 in this build"); 10673 1.2 christos #endif 10674 1.1 christos 10675 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 10676 1.2 christos TLS_client_method(), TLS1_VERSION, 10677 1.2 christos max_version, &sctx, &cctx, cert, 10678 1.2 christos privkey))) 10679 1.1 christos goto end; 10680 1.2 christos 10681 1.2 christos /* 10682 1.2 christos * TLSv1.3 only uses a session cache if either max_early_data > 0 (used for 10683 1.2 christos * replay protection), or if SSL_OP_NO_TICKET is in use 10684 1.2 christos */ 10685 1.2 christos if (idx == 0 || idx == 2) { 10686 1.2 christos if (!TEST_true(SSL_CTX_set_max_early_data(sctx, 1024))) 10687 1.2 christos goto end; 10688 1.1 christos } 10689 1.2 christos if (idx == 1 || idx == 2 || idx == 3) 10690 1.2 christos SSL_CTX_set_options(sctx, SSL_OP_NO_TICKET); 10691 1.1 christos 10692 1.2 christos SSL_CTX_sess_set_cache_size(sctx, 5); 10693 1.1 christos 10694 1.2 christos if (idx == 3) { 10695 1.2 christos SSL_CTX_set_tlsext_servername_callback(sctx, resume_servername_cb); 10696 1.2 christos SSL_CTX_set_tlsext_servername_arg(sctx, &cbdata); 10697 1.2 christos cbdata.cctx = cctx; 10698 1.2 christos cbdata.sctx = sctx; 10699 1.2 christos cbdata.recurse = 0; 10700 1.2 christos } 10701 1.2 christos 10702 1.2 christos for (i = 0; i < 30; i++) { 10703 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, 10704 1.2 christos NULL, NULL)) 10705 1.2 christos || !TEST_true(SSL_set_session(clientssl, sess))) 10706 1.1 christos goto end; 10707 1.2 christos 10708 1.2 christos /* 10709 1.2 christos * Check simultaneous resumes. We pause the connection part way through 10710 1.2 christos * the handshake by (mis)using the servername_cb. The pause occurs after 10711 1.2 christos * session resumption has already occurred, but before any session 10712 1.2 christos * tickets have been issued. While paused we run another complete 10713 1.2 christos * handshake resuming the same session. 10714 1.2 christos */ 10715 1.2 christos if (idx == 3) { 10716 1.2 christos cbdata.i = i; 10717 1.2 christos cbdata.sess = sess; 10718 1.1 christos } 10719 1.2 christos 10720 1.2 christos /* 10721 1.2 christos * Recreate a bug where dynamically changing the max_early_data value 10722 1.2 christos * can cause sessions in the session cache which cannot be deleted. 10723 1.2 christos */ 10724 1.2 christos if ((idx == 0 || idx == 2) && (i % 3) == 2) 10725 1.2 christos SSL_set_max_early_data(serverssl, 0); 10726 1.2 christos 10727 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))) 10728 1.1 christos goto end; 10729 1.2 christos 10730 1.2 christos if (sess == NULL || (idx == 0 && (i % 3) == 2)) { 10731 1.2 christos if (!TEST_false(SSL_session_reused(clientssl))) 10732 1.2 christos goto end; 10733 1.2 christos } else { 10734 1.2 christos if (!TEST_true(SSL_session_reused(clientssl))) 10735 1.2 christos goto end; 10736 1.2 christos } 10737 1.2 christos SSL_SESSION_free(sess); 10738 1.2 christos 10739 1.2 christos /* Do a full handshake, followed by two resumptions */ 10740 1.2 christos if ((i % 3) == 2) { 10741 1.2 christos sess = NULL; 10742 1.2 christos } else { 10743 1.2 christos if (!TEST_ptr((sess = SSL_get1_session(clientssl)))) 10744 1.2 christos goto end; 10745 1.1 christos } 10746 1.2 christos 10747 1.2 christos SSL_shutdown(clientssl); 10748 1.2 christos SSL_shutdown(serverssl); 10749 1.2 christos SSL_free(serverssl); 10750 1.2 christos SSL_free(clientssl); 10751 1.2 christos serverssl = clientssl = NULL; 10752 1.1 christos } 10753 1.1 christos 10754 1.2 christos /* We should never exceed the session cache size limit */ 10755 1.2 christos if (!TEST_long_le(SSL_CTX_sess_number(sctx), 5)) 10756 1.1 christos goto end; 10757 1.1 christos 10758 1.1 christos testresult = 1; 10759 1.1 christos end: 10760 1.1 christos SSL_free(serverssl); 10761 1.1 christos SSL_free(clientssl); 10762 1.1 christos SSL_CTX_free(sctx); 10763 1.1 christos SSL_CTX_free(cctx); 10764 1.2 christos SSL_SESSION_free(sess); 10765 1.1 christos return testresult; 10766 1.1 christos } 10767 1.1 christos 10768 1.2 christos static struct next_proto_st { 10769 1.2 christos int serverlen; 10770 1.2 christos unsigned char server[40]; 10771 1.2 christos int clientlen; 10772 1.2 christos unsigned char client[40]; 10773 1.2 christos int expected_ret; 10774 1.2 christos size_t selectedlen; 10775 1.2 christos unsigned char selected[40]; 10776 1.2 christos } next_proto_tests[] = { 10777 1.2 christos { 10778 1.2 christos 4, { 3, 'a', 'b', 'c' }, 10779 1.2 christos 4, { 3, 'a', 'b', 'c' }, 10780 1.2 christos OPENSSL_NPN_NEGOTIATED, 10781 1.2 christos 3, { 'a', 'b', 'c' } 10782 1.2 christos }, 10783 1.2 christos { 10784 1.2 christos 7, { 3, 'a', 'b', 'c', 2, 'a', 'b' }, 10785 1.2 christos 4, { 3, 'a', 'b', 'c' }, 10786 1.2 christos OPENSSL_NPN_NEGOTIATED, 10787 1.2 christos 3, { 'a', 'b', 'c' } 10788 1.2 christos }, 10789 1.2 christos { 10790 1.2 christos 7, { 2, 'a', 'b', 3, 'a', 'b', 'c', }, 10791 1.2 christos 4, { 3, 'a', 'b', 'c' }, 10792 1.2 christos OPENSSL_NPN_NEGOTIATED, 10793 1.2 christos 3, { 'a', 'b', 'c' } 10794 1.2 christos }, 10795 1.2 christos { 10796 1.2 christos 4, { 3, 'a', 'b', 'c' }, 10797 1.2 christos 7, { 3, 'a', 'b', 'c', 2, 'a', 'b', }, 10798 1.2 christos OPENSSL_NPN_NEGOTIATED, 10799 1.2 christos 3, { 'a', 'b', 'c' } 10800 1.2 christos }, 10801 1.2 christos { 10802 1.2 christos 4, { 3, 'a', 'b', 'c' }, 10803 1.2 christos 7, { 2, 'a', 'b', 3, 'a', 'b', 'c'}, 10804 1.2 christos OPENSSL_NPN_NEGOTIATED, 10805 1.2 christos 3, { 'a', 'b', 'c' } 10806 1.2 christos }, 10807 1.2 christos { 10808 1.2 christos 7, { 2, 'b', 'c', 3, 'a', 'b', 'c' }, 10809 1.2 christos 7, { 2, 'a', 'b', 3, 'a', 'b', 'c'}, 10810 1.2 christos OPENSSL_NPN_NEGOTIATED, 10811 1.2 christos 3, { 'a', 'b', 'c' } 10812 1.2 christos }, 10813 1.2 christos { 10814 1.2 christos 10, { 2, 'b', 'c', 3, 'a', 'b', 'c', 2, 'a', 'b' }, 10815 1.2 christos 7, { 2, 'a', 'b', 3, 'a', 'b', 'c'}, 10816 1.2 christos OPENSSL_NPN_NEGOTIATED, 10817 1.2 christos 3, { 'a', 'b', 'c' } 10818 1.2 christos }, 10819 1.2 christos { 10820 1.2 christos 4, { 3, 'b', 'c', 'd' }, 10821 1.2 christos 4, { 3, 'a', 'b', 'c' }, 10822 1.2 christos OPENSSL_NPN_NO_OVERLAP, 10823 1.2 christos 3, { 'a', 'b', 'c' } 10824 1.2 christos }, 10825 1.2 christos { 10826 1.2 christos 0, { 0 }, 10827 1.2 christos 4, { 3, 'a', 'b', 'c' }, 10828 1.2 christos OPENSSL_NPN_NO_OVERLAP, 10829 1.2 christos 3, { 'a', 'b', 'c' } 10830 1.2 christos }, 10831 1.2 christos { 10832 1.2 christos -1, { 0 }, 10833 1.2 christos 4, { 3, 'a', 'b', 'c' }, 10834 1.2 christos OPENSSL_NPN_NO_OVERLAP, 10835 1.2 christos 3, { 'a', 'b', 'c' } 10836 1.2 christos }, 10837 1.2 christos { 10838 1.2 christos 4, { 3, 'a', 'b', 'c' }, 10839 1.2 christos 0, { 0 }, 10840 1.2 christos OPENSSL_NPN_NO_OVERLAP, 10841 1.2 christos 0, { 0 } 10842 1.2 christos }, 10843 1.2 christos { 10844 1.2 christos 4, { 3, 'a', 'b', 'c' }, 10845 1.2 christos -1, { 0 }, 10846 1.2 christos OPENSSL_NPN_NO_OVERLAP, 10847 1.2 christos 0, { 0 } 10848 1.2 christos }, 10849 1.2 christos { 10850 1.2 christos 3, { 3, 'a', 'b', 'c' }, 10851 1.2 christos 4, { 3, 'a', 'b', 'c' }, 10852 1.2 christos OPENSSL_NPN_NO_OVERLAP, 10853 1.2 christos 3, { 'a', 'b', 'c' } 10854 1.2 christos }, 10855 1.2 christos { 10856 1.2 christos 4, { 3, 'a', 'b', 'c' }, 10857 1.2 christos 3, { 3, 'a', 'b', 'c' }, 10858 1.2 christos OPENSSL_NPN_NO_OVERLAP, 10859 1.2 christos 0, { 0 } 10860 1.2 christos } 10861 1.2 christos }; 10862 1.1 christos 10863 1.2 christos static int test_select_next_proto(int idx) 10864 1.1 christos { 10865 1.2 christos struct next_proto_st *np = &next_proto_tests[idx]; 10866 1.2 christos int ret = 0; 10867 1.2 christos unsigned char *out, *client, *server; 10868 1.2 christos unsigned char outlen; 10869 1.2 christos unsigned int clientlen, serverlen; 10870 1.2 christos 10871 1.2 christos if (np->clientlen == -1) { 10872 1.2 christos client = NULL; 10873 1.2 christos clientlen = 0; 10874 1.2 christos } else { 10875 1.2 christos client = np->client; 10876 1.2 christos clientlen = (unsigned int)np->clientlen; 10877 1.2 christos } 10878 1.2 christos if (np->serverlen == -1) { 10879 1.2 christos server = NULL; 10880 1.2 christos serverlen = 0; 10881 1.2 christos } else { 10882 1.2 christos server = np->server; 10883 1.2 christos serverlen = (unsigned int)np->serverlen; 10884 1.2 christos } 10885 1.1 christos 10886 1.2 christos if (!TEST_int_eq(SSL_select_next_proto(&out, &outlen, server, serverlen, 10887 1.2 christos client, clientlen), 10888 1.2 christos np->expected_ret)) 10889 1.2 christos goto err; 10890 1.2 christos 10891 1.2 christos if (np->selectedlen == 0) { 10892 1.2 christos if (!TEST_ptr_null(out) || !TEST_uchar_eq(outlen, 0)) 10893 1.2 christos goto err; 10894 1.2 christos } else { 10895 1.2 christos if (!TEST_mem_eq(out, outlen, np->selected, np->selectedlen)) 10896 1.2 christos goto err; 10897 1.2 christos } 10898 1.1 christos 10899 1.2 christos ret = 1; 10900 1.2 christos err: 10901 1.2 christos return ret; 10902 1.1 christos } 10903 1.1 christos 10904 1.2 christos static const unsigned char fooprot[] = {3, 'f', 'o', 'o' }; 10905 1.2 christos static const unsigned char barprot[] = {3, 'b', 'a', 'r' }; 10906 1.1 christos 10907 1.2 christos #if !defined(OPENSSL_NO_TLS1_2) && !defined(OPENSSL_NO_NEXTPROTONEG) 10908 1.2 christos static int npn_advert_cb(SSL *ssl, const unsigned char **out, 10909 1.2 christos unsigned int *outlen, void *arg) 10910 1.1 christos { 10911 1.2 christos int *idx = (int *)arg; 10912 1.1 christos 10913 1.2 christos switch (*idx) { 10914 1.2 christos default: 10915 1.2 christos case 0: 10916 1.2 christos *out = fooprot; 10917 1.2 christos *outlen = sizeof(fooprot); 10918 1.2 christos return SSL_TLSEXT_ERR_OK; 10919 1.2 christos 10920 1.2 christos case 1: 10921 1.3 christos *out = NULL; 10922 1.2 christos *outlen = 0; 10923 1.2 christos return SSL_TLSEXT_ERR_OK; 10924 1.1 christos 10925 1.2 christos case 2: 10926 1.2 christos return SSL_TLSEXT_ERR_NOACK; 10927 1.2 christos } 10928 1.1 christos } 10929 1.1 christos 10930 1.2 christos static int npn_select_cb(SSL *s, unsigned char **out, unsigned char *outlen, 10931 1.2 christos const unsigned char *in, unsigned int inlen, void *arg) 10932 1.1 christos { 10933 1.2 christos int *idx = (int *)arg; 10934 1.2 christos 10935 1.2 christos switch (*idx) { 10936 1.2 christos case 0: 10937 1.2 christos case 1: 10938 1.2 christos *out = (unsigned char *)(fooprot + 1); 10939 1.2 christos *outlen = *fooprot; 10940 1.2 christos return SSL_TLSEXT_ERR_OK; 10941 1.2 christos 10942 1.2 christos case 3: 10943 1.2 christos *out = (unsigned char *)(barprot + 1); 10944 1.2 christos *outlen = *barprot; 10945 1.2 christos return SSL_TLSEXT_ERR_OK; 10946 1.2 christos 10947 1.2 christos case 4: 10948 1.2 christos *outlen = 0; 10949 1.2 christos return SSL_TLSEXT_ERR_OK; 10950 1.1 christos 10951 1.2 christos default: 10952 1.2 christos case 2: 10953 1.1 christos return SSL_TLSEXT_ERR_ALERT_FATAL; 10954 1.1 christos } 10955 1.1 christos } 10956 1.1 christos 10957 1.1 christos /* 10958 1.2 christos * Test the NPN callbacks 10959 1.2 christos * Test 0: advert = foo, select = foo 10960 1.2 christos * Test 1: advert = <empty>, select = foo 10961 1.2 christos * Test 2: no advert 10962 1.2 christos * Test 3: advert = foo, select = bar 10963 1.2 christos * Test 4: advert = foo, select = <empty> (should fail) 10964 1.1 christos */ 10965 1.2 christos static int test_npn(int idx) 10966 1.1 christos { 10967 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 10968 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 10969 1.1 christos int testresult = 0; 10970 1.1 christos 10971 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 10972 1.2 christos TLS_client_method(), 0, TLS1_2_VERSION, 10973 1.2 christos &sctx, &cctx, cert, privkey))) 10974 1.1 christos goto end; 10975 1.1 christos 10976 1.2 christos SSL_CTX_set_next_protos_advertised_cb(sctx, npn_advert_cb, &idx); 10977 1.2 christos SSL_CTX_set_next_proto_select_cb(cctx, npn_select_cb, &idx); 10978 1.1 christos 10979 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL, 10980 1.2 christos NULL))) 10981 1.1 christos goto end; 10982 1.1 christos 10983 1.2 christos if (idx == 4) { 10984 1.2 christos /* We don't allow empty selection of NPN, so this should fail */ 10985 1.2 christos if (!TEST_false(create_ssl_connection(serverssl, clientssl, 10986 1.2 christos SSL_ERROR_NONE))) 10987 1.2 christos goto end; 10988 1.2 christos } else { 10989 1.2 christos const unsigned char *prot; 10990 1.2 christos unsigned int protlen; 10991 1.1 christos 10992 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 10993 1.2 christos SSL_ERROR_NONE))) 10994 1.2 christos goto end; 10995 1.1 christos 10996 1.2 christos SSL_get0_next_proto_negotiated(serverssl, &prot, &protlen); 10997 1.2 christos switch (idx) { 10998 1.2 christos case 0: 10999 1.2 christos case 1: 11000 1.2 christos if (!TEST_mem_eq(prot, protlen, fooprot + 1, *fooprot)) 11001 1.2 christos goto end; 11002 1.2 christos break; 11003 1.2 christos case 2: 11004 1.2 christos if (!TEST_uint_eq(protlen, 0)) 11005 1.2 christos goto end; 11006 1.2 christos break; 11007 1.2 christos case 3: 11008 1.2 christos if (!TEST_mem_eq(prot, protlen, barprot + 1, *barprot)) 11009 1.2 christos goto end; 11010 1.2 christos break; 11011 1.2 christos default: 11012 1.2 christos TEST_error("Should not get here"); 11013 1.1 christos goto end; 11014 1.1 christos } 11015 1.1 christos } 11016 1.1 christos 11017 1.2 christos testresult = 1; 11018 1.2 christos end: 11019 1.2 christos SSL_free(serverssl); 11020 1.2 christos SSL_free(clientssl); 11021 1.2 christos SSL_CTX_free(sctx); 11022 1.2 christos SSL_CTX_free(cctx); 11023 1.2 christos 11024 1.2 christos return testresult; 11025 1.2 christos } 11026 1.2 christos #endif /* !defined(OPENSSL_NO_TLS1_2) && !defined(OPENSSL_NO_NEXTPROTONEG) */ 11027 1.2 christos 11028 1.2 christos static int alpn_select_cb2(SSL *ssl, const unsigned char **out, 11029 1.2 christos unsigned char *outlen, const unsigned char *in, 11030 1.2 christos unsigned int inlen, void *arg) 11031 1.2 christos { 11032 1.2 christos int *idx = (int *)arg; 11033 1.2 christos 11034 1.2 christos switch (*idx) { 11035 1.2 christos case 0: 11036 1.2 christos *out = (unsigned char *)(fooprot + 1); 11037 1.2 christos *outlen = *fooprot; 11038 1.2 christos return SSL_TLSEXT_ERR_OK; 11039 1.2 christos 11040 1.2 christos case 2: 11041 1.2 christos *out = (unsigned char *)(barprot + 1); 11042 1.2 christos *outlen = *barprot; 11043 1.2 christos return SSL_TLSEXT_ERR_OK; 11044 1.2 christos 11045 1.2 christos case 3: 11046 1.2 christos *outlen = 0; 11047 1.2 christos return SSL_TLSEXT_ERR_OK; 11048 1.2 christos 11049 1.2 christos default: 11050 1.2 christos case 1: 11051 1.2 christos return SSL_TLSEXT_ERR_ALERT_FATAL; 11052 1.1 christos } 11053 1.2 christos return 0; 11054 1.2 christos } 11055 1.2 christos 11056 1.2 christos /* 11057 1.2 christos * Test the ALPN callbacks 11058 1.2 christos * Test 0: client = foo, select = foo 11059 1.2 christos * Test 1: client = <empty>, select = none 11060 1.2 christos * Test 2: client = foo, select = bar (should fail) 11061 1.2 christos * Test 3: client = foo, select = <empty> (should fail) 11062 1.2 christos */ 11063 1.2 christos static int test_alpn(int idx) 11064 1.2 christos { 11065 1.2 christos SSL_CTX *sctx = NULL, *cctx = NULL; 11066 1.2 christos SSL *serverssl = NULL, *clientssl = NULL; 11067 1.2 christos int testresult = 0; 11068 1.2 christos const unsigned char *prots = fooprot; 11069 1.2 christos unsigned int protslen = sizeof(fooprot); 11070 1.1 christos 11071 1.2 christos if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(), 11072 1.2 christos TLS_client_method(), 0, 0, 11073 1.2 christos &sctx, &cctx, cert, privkey))) 11074 1.1 christos goto end; 11075 1.1 christos 11076 1.2 christos SSL_CTX_set_alpn_select_cb(sctx, alpn_select_cb2, &idx); 11077 1.1 christos 11078 1.2 christos if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL, 11079 1.2 christos NULL))) 11080 1.1 christos goto end; 11081 1.2 christos 11082 1.2 christos if (idx == 1) { 11083 1.2 christos prots = NULL; 11084 1.2 christos protslen = 0; 11085 1.1 christos } 11086 1.1 christos 11087 1.2 christos /* SSL_set_alpn_protos returns 0 for success! */ 11088 1.2 christos if (!TEST_false(SSL_set_alpn_protos(clientssl, prots, protslen))) 11089 1.1 christos goto end; 11090 1.1 christos 11091 1.2 christos if (idx == 2 || idx == 3) { 11092 1.2 christos /* We don't allow empty selection of NPN, so this should fail */ 11093 1.2 christos if (!TEST_false(create_ssl_connection(serverssl, clientssl, 11094 1.2 christos SSL_ERROR_NONE))) 11095 1.2 christos goto end; 11096 1.2 christos } else { 11097 1.2 christos const unsigned char *prot; 11098 1.2 christos unsigned int protlen; 11099 1.2 christos 11100 1.2 christos if (!TEST_true(create_ssl_connection(serverssl, clientssl, 11101 1.2 christos SSL_ERROR_NONE))) 11102 1.2 christos goto end; 11103 1.2 christos 11104 1.2 christos SSL_get0_alpn_selected(clientssl, &prot, &protlen); 11105 1.2 christos switch (idx) { 11106 1.2 christos case 0: 11107 1.2 christos if (!TEST_mem_eq(prot, protlen, fooprot + 1, *fooprot)) 11108 1.2 christos goto end; 11109 1.2 christos break; 11110 1.2 christos case 1: 11111 1.2 christos if (!TEST_uint_eq(protlen, 0)) 11112 1.2 christos goto end; 11113 1.2 christos break; 11114 1.2 christos default: 11115 1.2 christos TEST_error("Should not get here"); 11116 1.2 christos goto end; 11117 1.2 christos } 11118 1.1 christos } 11119 1.1 christos 11120 1.1 christos testresult = 1; 11121 1.2 christos end: 11122 1.1 christos SSL_free(serverssl); 11123 1.1 christos SSL_free(clientssl); 11124 1.1 christos SSL_CTX_free(sctx); 11125 1.1 christos SSL_CTX_free(cctx); 11126 1.2 christos 11127 1.1 christos return testresult; 11128 1.1 christos } 11129 1.1 christos 11130 1.2 christos OPT_TEST_DECLARE_USAGE("certfile privkeyfile srpvfile tmpfile provider config dhfile\n") 11131 1.2 christos 11132 1.2 christos int setup_tests(void) 11133 1.1 christos { 11134 1.2 christos char *modulename; 11135 1.2 christos char *configfile; 11136 1.2 christos 11137 1.2 christos libctx = OSSL_LIB_CTX_new(); 11138 1.2 christos if (!TEST_ptr(libctx)) 11139 1.2 christos return 0; 11140 1.2 christos 11141 1.2 christos defctxnull = OSSL_PROVIDER_load(NULL, "null"); 11142 1.2 christos 11143 1.2 christos /* 11144 1.2 christos * Verify that the default and fips providers in the default libctx are not 11145 1.2 christos * available 11146 1.2 christos */ 11147 1.2 christos if (!TEST_false(OSSL_PROVIDER_available(NULL, "default")) 11148 1.2 christos || !TEST_false(OSSL_PROVIDER_available(NULL, "fips"))) 11149 1.2 christos return 0; 11150 1.1 christos 11151 1.2 christos if (!test_skip_common_options()) { 11152 1.2 christos TEST_error("Error parsing test options\n"); 11153 1.2 christos return 0; 11154 1.1 christos } 11155 1.1 christos 11156 1.2 christos if (!TEST_ptr(certsdir = test_get_argument(0)) 11157 1.2 christos || !TEST_ptr(srpvfile = test_get_argument(1)) 11158 1.2 christos || !TEST_ptr(tmpfilename = test_get_argument(2)) 11159 1.2 christos || !TEST_ptr(modulename = test_get_argument(3)) 11160 1.2 christos || !TEST_ptr(configfile = test_get_argument(4)) 11161 1.2 christos || !TEST_ptr(dhfile = test_get_argument(5))) 11162 1.2 christos return 0; 11163 1.2 christos 11164 1.2 christos if (!TEST_true(OSSL_LIB_CTX_load_config(libctx, configfile))) 11165 1.2 christos return 0; 11166 1.2 christos 11167 1.2 christos /* Check we have the expected provider available */ 11168 1.2 christos if (!TEST_true(OSSL_PROVIDER_available(libctx, modulename))) 11169 1.2 christos return 0; 11170 1.2 christos 11171 1.2 christos /* Check the default provider is not available */ 11172 1.2 christos if (strcmp(modulename, "default") != 0 11173 1.2 christos && !TEST_false(OSSL_PROVIDER_available(libctx, "default"))) 11174 1.2 christos return 0; 11175 1.2 christos 11176 1.2 christos if (strcmp(modulename, "fips") == 0) 11177 1.2 christos is_fips = 1; 11178 1.2 christos 11179 1.2 christos /* 11180 1.2 christos * We add, but don't load the test "tls-provider". We'll load it when we 11181 1.2 christos * need it. 11182 1.2 christos */ 11183 1.2 christos if (!TEST_true(OSSL_PROVIDER_add_builtin(libctx, "tls-provider", 11184 1.2 christos tls_provider_init))) 11185 1.2 christos return 0; 11186 1.1 christos 11187 1.1 christos 11188 1.2 christos if (getenv("OPENSSL_TEST_GETCOUNTS") != NULL) { 11189 1.2 christos #ifdef OPENSSL_NO_CRYPTO_MDEBUG 11190 1.2 christos TEST_error("not supported in this build"); 11191 1.2 christos return 0; 11192 1.2 christos #else 11193 1.2 christos int i, mcount, rcount, fcount; 11194 1.2 christos 11195 1.2 christos for (i = 0; i < 4; i++) 11196 1.2 christos test_export_key_mat(i); 11197 1.2 christos CRYPTO_get_alloc_counts(&mcount, &rcount, &fcount); 11198 1.2 christos test_printf_stdout("malloc %d realloc %d free %d\n", 11199 1.2 christos mcount, rcount, fcount); 11200 1.2 christos return 1; 11201 1.2 christos #endif 11202 1.2 christos } 11203 1.1 christos 11204 1.2 christos cert = test_mk_file_path(certsdir, "servercert.pem"); 11205 1.2 christos if (cert == NULL) 11206 1.2 christos goto err; 11207 1.2 christos 11208 1.2 christos privkey = test_mk_file_path(certsdir, "serverkey.pem"); 11209 1.2 christos if (privkey == NULL) 11210 1.2 christos goto err; 11211 1.2 christos 11212 1.2 christos cert2 = test_mk_file_path(certsdir, "server-ecdsa-cert.pem"); 11213 1.2 christos if (cert2 == NULL) 11214 1.2 christos goto err; 11215 1.2 christos 11216 1.2 christos privkey2 = test_mk_file_path(certsdir, "server-ecdsa-key.pem"); 11217 1.2 christos if (privkey2 == NULL) 11218 1.2 christos goto err; 11219 1.2 christos 11220 1.2 christos cert1024 = test_mk_file_path(certsdir, "ee-cert-1024.pem"); 11221 1.2 christos if (cert1024 == NULL) 11222 1.2 christos goto err; 11223 1.2 christos 11224 1.2 christos privkey1024 = test_mk_file_path(certsdir, "ee-key-1024.pem"); 11225 1.2 christos if (privkey1024 == NULL) 11226 1.2 christos goto err; 11227 1.2 christos 11228 1.2 christos cert3072 = test_mk_file_path(certsdir, "ee-cert-3072.pem"); 11229 1.2 christos if (cert3072 == NULL) 11230 1.2 christos goto err; 11231 1.2 christos 11232 1.2 christos privkey3072 = test_mk_file_path(certsdir, "ee-key-3072.pem"); 11233 1.2 christos if (privkey3072 == NULL) 11234 1.2 christos goto err; 11235 1.2 christos 11236 1.2 christos cert4096 = test_mk_file_path(certsdir, "ee-cert-4096.pem"); 11237 1.2 christos if (cert4096 == NULL) 11238 1.2 christos goto err; 11239 1.2 christos 11240 1.2 christos privkey4096 = test_mk_file_path(certsdir, "ee-key-4096.pem"); 11241 1.2 christos if (privkey4096 == NULL) 11242 1.2 christos goto err; 11243 1.2 christos 11244 1.2 christos cert8192 = test_mk_file_path(certsdir, "ee-cert-8192.pem"); 11245 1.2 christos if (cert8192 == NULL) 11246 1.2 christos goto err; 11247 1.2 christos 11248 1.2 christos privkey8192 = test_mk_file_path(certsdir, "ee-key-8192.pem"); 11249 1.2 christos if (privkey8192 == NULL) 11250 1.2 christos goto err; 11251 1.2 christos 11252 1.2 christos #if !defined(OPENSSL_NO_KTLS) && !defined(OPENSSL_NO_SOCK) 11253 1.2 christos # if !defined(OPENSSL_NO_TLS1_2) || !defined(OSSL_NO_USABLE_TLS1_3) 11254 1.2 christos ADD_ALL_TESTS(test_ktls, NUM_KTLS_TEST_CIPHERS * 4); 11255 1.2 christos ADD_ALL_TESTS(test_ktls_sendfile, NUM_KTLS_TEST_CIPHERS); 11256 1.2 christos # endif 11257 1.2 christos #endif 11258 1.1 christos ADD_TEST(test_large_message_tls); 11259 1.1 christos ADD_TEST(test_large_message_tls_read_ahead); 11260 1.1 christos #ifndef OPENSSL_NO_DTLS 11261 1.1 christos ADD_TEST(test_large_message_dtls); 11262 1.1 christos #endif 11263 1.2 christos ADD_ALL_TESTS(test_large_app_data, 28); 11264 1.2 christos ADD_TEST(test_cleanse_plaintext); 11265 1.1 christos #ifndef OPENSSL_NO_OCSP 11266 1.1 christos ADD_TEST(test_tlsext_status_type); 11267 1.1 christos #endif 11268 1.1 christos ADD_TEST(test_session_with_only_int_cache); 11269 1.1 christos ADD_TEST(test_session_with_only_ext_cache); 11270 1.1 christos ADD_TEST(test_session_with_both_cache); 11271 1.2 christos ADD_TEST(test_session_wo_ca_names); 11272 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 11273 1.2 christos ADD_ALL_TESTS(test_stateful_tickets, 3); 11274 1.2 christos ADD_ALL_TESTS(test_stateless_tickets, 3); 11275 1.2 christos ADD_TEST(test_psk_tickets); 11276 1.2 christos ADD_ALL_TESTS(test_extra_tickets, 6); 11277 1.2 christos #endif 11278 1.1 christos ADD_ALL_TESTS(test_ssl_set_bio, TOTAL_SSL_SET_BIO_TESTS); 11279 1.1 christos ADD_TEST(test_ssl_bio_pop_next_bio); 11280 1.1 christos ADD_TEST(test_ssl_bio_pop_ssl_bio); 11281 1.1 christos ADD_TEST(test_ssl_bio_change_rbio); 11282 1.1 christos ADD_TEST(test_ssl_bio_change_wbio); 11283 1.2 christos #if !defined(OPENSSL_NO_TLS1_2) || defined(OSSL_NO_USABLE_TLS1_3) 11284 1.1 christos ADD_ALL_TESTS(test_set_sigalgs, OSSL_NELEM(testsigalgs) * 2); 11285 1.2 christos ADD_TEST(test_keylog); 11286 1.2 christos #endif 11287 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 11288 1.2 christos ADD_TEST(test_keylog_no_master_key); 11289 1.2 christos #endif 11290 1.2 christos ADD_TEST(test_client_cert_verify_cb); 11291 1.2 christos ADD_TEST(test_ssl_build_cert_chain); 11292 1.2 christos ADD_TEST(test_ssl_ctx_build_cert_chain); 11293 1.2 christos #ifndef OPENSSL_NO_TLS1_2 11294 1.2 christos ADD_TEST(test_client_hello_cb); 11295 1.2 christos ADD_TEST(test_no_ems); 11296 1.2 christos ADD_TEST(test_ccs_change_cipher); 11297 1.2 christos #endif 11298 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 11299 1.2 christos ADD_ALL_TESTS(test_early_data_read_write, 6); 11300 1.2 christos /* 11301 1.2 christos * We don't do replay tests for external PSK. Replay protection isn't used 11302 1.2 christos * in that scenario. 11303 1.2 christos */ 11304 1.2 christos ADD_ALL_TESTS(test_early_data_replay, 2); 11305 1.2 christos ADD_ALL_TESTS(test_early_data_skip, OSSL_NELEM(ciphersuites) * 3); 11306 1.2 christos ADD_ALL_TESTS(test_early_data_skip_hrr, OSSL_NELEM(ciphersuites) * 3); 11307 1.2 christos ADD_ALL_TESTS(test_early_data_skip_hrr_fail, OSSL_NELEM(ciphersuites) * 3); 11308 1.2 christos ADD_ALL_TESTS(test_early_data_skip_abort, OSSL_NELEM(ciphersuites) * 3); 11309 1.2 christos ADD_ALL_TESTS(test_early_data_not_sent, 3); 11310 1.2 christos ADD_ALL_TESTS(test_early_data_psk, 8); 11311 1.2 christos ADD_ALL_TESTS(test_early_data_psk_with_all_ciphers, 5); 11312 1.2 christos ADD_ALL_TESTS(test_early_data_not_expected, 3); 11313 1.2 christos # ifndef OPENSSL_NO_TLS1_2 11314 1.2 christos ADD_ALL_TESTS(test_early_data_tls1_2, 3); 11315 1.2 christos # endif 11316 1.2 christos #endif 11317 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 11318 1.2 christos ADD_ALL_TESTS(test_set_ciphersuite, 10); 11319 1.2 christos ADD_TEST(test_ciphersuite_change); 11320 1.2 christos ADD_ALL_TESTS(test_tls13_ciphersuite, 4); 11321 1.2 christos # ifdef OPENSSL_NO_PSK 11322 1.2 christos ADD_ALL_TESTS(test_tls13_psk, 1); 11323 1.2 christos # else 11324 1.2 christos ADD_ALL_TESTS(test_tls13_psk, 4); 11325 1.2 christos # endif /* OPENSSL_NO_PSK */ 11326 1.2 christos # ifndef OPENSSL_NO_TLS1_2 11327 1.2 christos /* Test with both TLSv1.3 and 1.2 versions */ 11328 1.2 christos ADD_ALL_TESTS(test_key_exchange, 14); 11329 1.2 christos # if !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_DH) 11330 1.2 christos ADD_ALL_TESTS(test_negotiated_group, 11331 1.2 christos 4 * (OSSL_NELEM(ecdhe_kexch_groups) 11332 1.2 christos + OSSL_NELEM(ffdhe_kexch_groups))); 11333 1.2 christos # endif 11334 1.2 christos # else 11335 1.2 christos /* Test with only TLSv1.3 versions */ 11336 1.2 christos ADD_ALL_TESTS(test_key_exchange, 12); 11337 1.2 christos # endif 11338 1.2 christos ADD_ALL_TESTS(test_custom_exts, 6); 11339 1.2 christos ADD_TEST(test_stateless); 11340 1.2 christos ADD_TEST(test_pha_key_update); 11341 1.2 christos #else 11342 1.2 christos ADD_ALL_TESTS(test_custom_exts, 3); 11343 1.2 christos #endif 11344 1.2 christos ADD_ALL_TESTS(test_export_key_mat, 6); 11345 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 11346 1.2 christos ADD_ALL_TESTS(test_export_key_mat_early, 3); 11347 1.2 christos ADD_TEST(test_key_update); 11348 1.2 christos ADD_ALL_TESTS(test_key_update_peer_in_write, 2); 11349 1.2 christos ADD_ALL_TESTS(test_key_update_peer_in_read, 2); 11350 1.2 christos ADD_ALL_TESTS(test_key_update_local_in_write, 2); 11351 1.2 christos ADD_ALL_TESTS(test_key_update_local_in_read, 2); 11352 1.2 christos #endif 11353 1.2 christos ADD_ALL_TESTS(test_ssl_clear, 2); 11354 1.2 christos ADD_ALL_TESTS(test_max_fragment_len_ext, OSSL_NELEM(max_fragment_len_test)); 11355 1.2 christos #if !defined(OPENSSL_NO_SRP) && !defined(OPENSSL_NO_TLS1_2) 11356 1.2 christos ADD_ALL_TESTS(test_srp, 6); 11357 1.2 christos #endif 11358 1.2 christos ADD_ALL_TESTS(test_info_callback, 6); 11359 1.2 christos ADD_ALL_TESTS(test_ssl_pending, 2); 11360 1.2 christos ADD_ALL_TESTS(test_ssl_get_shared_ciphers, OSSL_NELEM(shared_ciphers_data)); 11361 1.2 christos ADD_ALL_TESTS(test_ticket_callbacks, 20); 11362 1.2 christos ADD_ALL_TESTS(test_shutdown, 7); 11363 1.2 christos ADD_ALL_TESTS(test_incorrect_shutdown, 2); 11364 1.2 christos ADD_ALL_TESTS(test_cert_cb, 6); 11365 1.2 christos ADD_ALL_TESTS(test_client_cert_cb, 2); 11366 1.2 christos ADD_ALL_TESTS(test_ca_names, 3); 11367 1.2 christos #ifndef OPENSSL_NO_TLS1_2 11368 1.2 christos ADD_ALL_TESTS(test_multiblock_write, OSSL_NELEM(multiblock_cipherlist_data)); 11369 1.2 christos #endif 11370 1.2 christos ADD_ALL_TESTS(test_servername, 10); 11371 1.2 christos #if !defined(OPENSSL_NO_EC) \ 11372 1.2 christos && (!defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2)) 11373 1.2 christos ADD_ALL_TESTS(test_sigalgs_available, 6); 11374 1.2 christos #endif 11375 1.2 christos #ifndef OPENSSL_NO_TLS1_3 11376 1.2 christos ADD_ALL_TESTS(test_pluggable_group, 2); 11377 1.2 christos #endif 11378 1.2 christos #ifndef OPENSSL_NO_TLS1_2 11379 1.2 christos ADD_TEST(test_ssl_dup); 11380 1.2 christos # ifndef OPENSSL_NO_DH 11381 1.2 christos ADD_ALL_TESTS(test_set_tmp_dh, 11); 11382 1.2 christos ADD_ALL_TESTS(test_dh_auto, 7); 11383 1.2 christos # endif 11384 1.2 christos #endif 11385 1.2 christos #ifndef OSSL_NO_USABLE_TLS1_3 11386 1.2 christos ADD_TEST(test_sni_tls13); 11387 1.2 christos ADD_ALL_TESTS(test_ticket_lifetime, 2); 11388 1.2 christos #endif 11389 1.2 christos ADD_TEST(test_inherit_verify_param); 11390 1.2 christos ADD_TEST(test_set_alpn); 11391 1.2 christos ADD_TEST(test_set_verify_cert_store_ssl_ctx); 11392 1.2 christos ADD_TEST(test_set_verify_cert_store_ssl); 11393 1.2 christos ADD_ALL_TESTS(test_session_timeout, 1); 11394 1.2 christos #if !defined(OSSL_NO_USABLE_TLS1_3) || !defined(OPENSSL_NO_TLS1_2) 11395 1.2 christos ADD_ALL_TESTS(test_session_cache_overflow, 4); 11396 1.2 christos #endif 11397 1.2 christos ADD_TEST(test_load_dhfile); 11398 1.2 christos #if !defined(OPENSSL_NO_TLS1_2) && !defined(OSSL_NO_USABLE_TLS1_3) 11399 1.2 christos ADD_ALL_TESTS(test_serverinfo_custom, 4); 11400 1.2 christos #endif 11401 1.2 christos #if !defined(OPENSSL_NO_TLS1_2) && !defined(OPENSSL_NO_DYNAMIC_ENGINE) 11402 1.2 christos ADD_ALL_TESTS(test_pipelining, 7); 11403 1.2 christos #endif 11404 1.2 christos ADD_ALL_TESTS(test_handshake_retry, 16); 11405 1.2 christos ADD_ALL_TESTS(test_multi_resume, 5); 11406 1.2 christos ADD_ALL_TESTS(test_select_next_proto, OSSL_NELEM(next_proto_tests)); 11407 1.2 christos #if !defined(OPENSSL_NO_TLS1_2) && !defined(OPENSSL_NO_NEXTPROTONEG) 11408 1.2 christos ADD_ALL_TESTS(test_npn, 5); 11409 1.2 christos #endif 11410 1.2 christos ADD_ALL_TESTS(test_alpn, 4); 11411 1.2 christos return 1; 11412 1.1 christos 11413 1.2 christos err: 11414 1.2 christos OPENSSL_free(cert); 11415 1.2 christos OPENSSL_free(privkey); 11416 1.2 christos OPENSSL_free(cert2); 11417 1.2 christos OPENSSL_free(privkey2); 11418 1.2 christos return 0; 11419 1.2 christos } 11420 1.1 christos 11421 1.2 christos void cleanup_tests(void) 11422 1.2 christos { 11423 1.2 christos # if !defined(OPENSSL_NO_TLS1_2) && !defined(OPENSSL_NO_DH) 11424 1.2 christos EVP_PKEY_free(tmp_dh_params); 11425 1.2 christos #endif 11426 1.2 christos OPENSSL_free(cert); 11427 1.2 christos OPENSSL_free(privkey); 11428 1.2 christos OPENSSL_free(cert2); 11429 1.2 christos OPENSSL_free(privkey2); 11430 1.2 christos OPENSSL_free(cert1024); 11431 1.2 christos OPENSSL_free(privkey1024); 11432 1.2 christos OPENSSL_free(cert3072); 11433 1.2 christos OPENSSL_free(privkey3072); 11434 1.2 christos OPENSSL_free(cert4096); 11435 1.2 christos OPENSSL_free(privkey4096); 11436 1.2 christos OPENSSL_free(cert8192); 11437 1.2 christos OPENSSL_free(privkey8192); 11438 1.1 christos bio_s_mempacket_test_free(); 11439 1.2 christos bio_s_always_retry_free(); 11440 1.2 christos OSSL_PROVIDER_unload(defctxnull); 11441 1.2 christos OSSL_LIB_CTX_free(libctx); 11442 1.1 christos } 11443