Home | History | Annotate | Line # | Download | only in test
sslapitest.c revision 1.1.1.2.2.1
      1 /*
      2  * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
      3  *
      4  * Licensed under the OpenSSL license (the "License").  You may not use
      5  * this file except in compliance with the License.  You can obtain a copy
      6  * in the file LICENSE in the source distribution or at
      7  * https://www.openssl.org/source/license.html
      8  */
      9 
     10 #include <string.h>
     11 
     12 #include <openssl/opensslconf.h>
     13 #include <openssl/bio.h>
     14 #include <openssl/crypto.h>
     15 #include <openssl/ssl.h>
     16 #include <openssl/ocsp.h>
     17 #include <openssl/srp.h>
     18 #include <openssl/txt_db.h>
     19 #include <openssl/aes.h>
     20 
     21 #include "ssltestlib.h"
     22 #include "testutil.h"
     23 #include "testutil/output.h"
     24 #include "internal/nelem.h"
     25 #include "../ssl/ssl_locl.h"
     26 
     27 #ifndef OPENSSL_NO_TLS1_3
     28 
     29 static SSL_SESSION *clientpsk = NULL;
     30 static SSL_SESSION *serverpsk = NULL;
     31 static const char *pskid = "Identity";
     32 static const char *srvid;
     33 
     34 static int use_session_cb(SSL *ssl, const EVP_MD *md, const unsigned char **id,
     35                           size_t *idlen, SSL_SESSION **sess);
     36 static int find_session_cb(SSL *ssl, const unsigned char *identity,
     37                            size_t identity_len, SSL_SESSION **sess);
     38 
     39 static int use_session_cb_cnt = 0;
     40 static int find_session_cb_cnt = 0;
     41 
     42 static SSL_SESSION *create_a_psk(SSL *ssl);
     43 #endif
     44 
     45 static char *cert = NULL;
     46 static char *privkey = NULL;
     47 static char *srpvfile = NULL;
     48 static char *tmpfilename = NULL;
     49 
     50 #define LOG_BUFFER_SIZE 2048
     51 static char server_log_buffer[LOG_BUFFER_SIZE + 1] = {0};
     52 static size_t server_log_buffer_index = 0;
     53 static char client_log_buffer[LOG_BUFFER_SIZE + 1] = {0};
     54 static size_t client_log_buffer_index = 0;
     55 static int error_writing_log = 0;
     56 
     57 #ifndef OPENSSL_NO_OCSP
     58 static const unsigned char orespder[] = "Dummy OCSP Response";
     59 static int ocsp_server_called = 0;
     60 static int ocsp_client_called = 0;
     61 
     62 static int cdummyarg = 1;
     63 static X509 *ocspcert = NULL;
     64 #endif
     65 
     66 #define NUM_EXTRA_CERTS 40
     67 #define CLIENT_VERSION_LEN      2
     68 
     69 /*
     70  * This structure is used to validate that the correct number of log messages
     71  * of various types are emitted when emitting secret logs.
     72  */
     73 struct sslapitest_log_counts {
     74     unsigned int rsa_key_exchange_count;
     75     unsigned int master_secret_count;
     76     unsigned int client_early_secret_count;
     77     unsigned int client_handshake_secret_count;
     78     unsigned int server_handshake_secret_count;
     79     unsigned int client_application_secret_count;
     80     unsigned int server_application_secret_count;
     81     unsigned int early_exporter_secret_count;
     82     unsigned int exporter_secret_count;
     83 };
     84 
     85 
     86 static unsigned char serverinfov1[] = {
     87     0xff, 0xff, /* Dummy extension type */
     88     0x00, 0x01, /* Extension length is 1 byte */
     89     0xff        /* Dummy extension data */
     90 };
     91 
     92 static unsigned char serverinfov2[] = {
     93     0x00, 0x00, 0x00,
     94     (unsigned char)(SSL_EXT_CLIENT_HELLO & 0xff), /* Dummy context - 4 bytes */
     95     0xff, 0xff, /* Dummy extension type */
     96     0x00, 0x01, /* Extension length is 1 byte */
     97     0xff        /* Dummy extension data */
     98 };
     99 
    100 static void client_keylog_callback(const SSL *ssl, const char *line)
    101 {
    102     int line_length = strlen(line);
    103 
    104     /* If the log doesn't fit, error out. */
    105     if (client_log_buffer_index + line_length > sizeof(client_log_buffer) - 1) {
    106         TEST_info("Client log too full");
    107         error_writing_log = 1;
    108         return;
    109     }
    110 
    111     strcat(client_log_buffer, line);
    112     client_log_buffer_index += line_length;
    113     client_log_buffer[client_log_buffer_index++] = '\n';
    114 }
    115 
    116 static void server_keylog_callback(const SSL *ssl, const char *line)
    117 {
    118     int line_length = strlen(line);
    119 
    120     /* If the log doesn't fit, error out. */
    121     if (server_log_buffer_index + line_length > sizeof(server_log_buffer) - 1) {
    122         TEST_info("Server log too full");
    123         error_writing_log = 1;
    124         return;
    125     }
    126 
    127     strcat(server_log_buffer, line);
    128     server_log_buffer_index += line_length;
    129     server_log_buffer[server_log_buffer_index++] = '\n';
    130 }
    131 
    132 static int compare_hex_encoded_buffer(const char *hex_encoded,
    133                                       size_t hex_length,
    134                                       const uint8_t *raw,
    135                                       size_t raw_length)
    136 {
    137     size_t i, j;
    138     char hexed[3];
    139 
    140     if (!TEST_size_t_eq(raw_length * 2, hex_length))
    141         return 1;
    142 
    143     for (i = j = 0; i < raw_length && j + 1 < hex_length; i++, j += 2) {
    144         sprintf(hexed, "%02x", raw[i]);
    145         if (!TEST_int_eq(hexed[0], hex_encoded[j])
    146                 || !TEST_int_eq(hexed[1], hex_encoded[j + 1]))
    147             return 1;
    148     }
    149 
    150     return 0;
    151 }
    152 
    153 static int test_keylog_output(char *buffer, const SSL *ssl,
    154                               const SSL_SESSION *session,
    155                               struct sslapitest_log_counts *expected)
    156 {
    157     char *token = NULL;
    158     unsigned char actual_client_random[SSL3_RANDOM_SIZE] = {0};
    159     size_t client_random_size = SSL3_RANDOM_SIZE;
    160     unsigned char actual_master_key[SSL_MAX_MASTER_KEY_LENGTH] = {0};
    161     size_t master_key_size = SSL_MAX_MASTER_KEY_LENGTH;
    162     unsigned int rsa_key_exchange_count = 0;
    163     unsigned int master_secret_count = 0;
    164     unsigned int client_early_secret_count = 0;
    165     unsigned int client_handshake_secret_count = 0;
    166     unsigned int server_handshake_secret_count = 0;
    167     unsigned int client_application_secret_count = 0;
    168     unsigned int server_application_secret_count = 0;
    169     unsigned int early_exporter_secret_count = 0;
    170     unsigned int exporter_secret_count = 0;
    171 
    172     for (token = strtok(buffer, " \n"); token != NULL;
    173          token = strtok(NULL, " \n")) {
    174         if (strcmp(token, "RSA") == 0) {
    175             /*
    176              * Premaster secret. Tokens should be: 16 ASCII bytes of
    177              * hex-encoded encrypted secret, then the hex-encoded pre-master
    178              * secret.
    179              */
    180             if (!TEST_ptr(token = strtok(NULL, " \n")))
    181                 return 0;
    182             if (!TEST_size_t_eq(strlen(token), 16))
    183                 return 0;
    184             if (!TEST_ptr(token = strtok(NULL, " \n")))
    185                 return 0;
    186             /*
    187              * We can't sensibly check the log because the premaster secret is
    188              * transient, and OpenSSL doesn't keep hold of it once the master
    189              * secret is generated.
    190              */
    191             rsa_key_exchange_count++;
    192         } else if (strcmp(token, "CLIENT_RANDOM") == 0) {
    193             /*
    194              * Master secret. Tokens should be: 64 ASCII bytes of hex-encoded
    195              * client random, then the hex-encoded master secret.
    196              */
    197             client_random_size = SSL_get_client_random(ssl,
    198                                                        actual_client_random,
    199                                                        SSL3_RANDOM_SIZE);
    200             if (!TEST_size_t_eq(client_random_size, SSL3_RANDOM_SIZE))
    201                 return 0;
    202 
    203             if (!TEST_ptr(token = strtok(NULL, " \n")))
    204                 return 0;
    205             if (!TEST_size_t_eq(strlen(token), 64))
    206                 return 0;
    207             if (!TEST_false(compare_hex_encoded_buffer(token, 64,
    208                                                        actual_client_random,
    209                                                        client_random_size)))
    210                 return 0;
    211 
    212             if (!TEST_ptr(token = strtok(NULL, " \n")))
    213                 return 0;
    214             master_key_size = SSL_SESSION_get_master_key(session,
    215                                                          actual_master_key,
    216                                                          master_key_size);
    217             if (!TEST_size_t_ne(master_key_size, 0))
    218                 return 0;
    219             if (!TEST_false(compare_hex_encoded_buffer(token, strlen(token),
    220                                                        actual_master_key,
    221                                                        master_key_size)))
    222                 return 0;
    223             master_secret_count++;
    224         } else if (strcmp(token, "CLIENT_EARLY_TRAFFIC_SECRET") == 0
    225                     || strcmp(token, "CLIENT_HANDSHAKE_TRAFFIC_SECRET") == 0
    226                     || strcmp(token, "SERVER_HANDSHAKE_TRAFFIC_SECRET") == 0
    227                     || strcmp(token, "CLIENT_TRAFFIC_SECRET_0") == 0
    228                     || strcmp(token, "SERVER_TRAFFIC_SECRET_0") == 0
    229                     || strcmp(token, "EARLY_EXPORTER_SECRET") == 0
    230                     || strcmp(token, "EXPORTER_SECRET") == 0) {
    231             /*
    232              * TLSv1.3 secret. Tokens should be: 64 ASCII bytes of hex-encoded
    233              * client random, and then the hex-encoded secret. In this case,
    234              * we treat all of these secrets identically and then just
    235              * distinguish between them when counting what we saw.
    236              */
    237             if (strcmp(token, "CLIENT_EARLY_TRAFFIC_SECRET") == 0)
    238                 client_early_secret_count++;
    239             else if (strcmp(token, "CLIENT_HANDSHAKE_TRAFFIC_SECRET") == 0)
    240                 client_handshake_secret_count++;
    241             else if (strcmp(token, "SERVER_HANDSHAKE_TRAFFIC_SECRET") == 0)
    242                 server_handshake_secret_count++;
    243             else if (strcmp(token, "CLIENT_TRAFFIC_SECRET_0") == 0)
    244                 client_application_secret_count++;
    245             else if (strcmp(token, "SERVER_TRAFFIC_SECRET_0") == 0)
    246                 server_application_secret_count++;
    247             else if (strcmp(token, "EARLY_EXPORTER_SECRET") == 0)
    248                 early_exporter_secret_count++;
    249             else if (strcmp(token, "EXPORTER_SECRET") == 0)
    250                 exporter_secret_count++;
    251 
    252             client_random_size = SSL_get_client_random(ssl,
    253                                                        actual_client_random,
    254                                                        SSL3_RANDOM_SIZE);
    255             if (!TEST_size_t_eq(client_random_size, SSL3_RANDOM_SIZE))
    256                 return 0;
    257 
    258             if (!TEST_ptr(token = strtok(NULL, " \n")))
    259                 return 0;
    260             if (!TEST_size_t_eq(strlen(token), 64))
    261                 return 0;
    262             if (!TEST_false(compare_hex_encoded_buffer(token, 64,
    263                                                        actual_client_random,
    264                                                        client_random_size)))
    265                 return 0;
    266 
    267             if (!TEST_ptr(token = strtok(NULL, " \n")))
    268                 return 0;
    269 
    270             /*
    271              * TODO(TLS1.3): test that application traffic secrets are what
    272              * we expect */
    273         } else {
    274             TEST_info("Unexpected token %s\n", token);
    275             return 0;
    276         }
    277     }
    278 
    279     /* Got what we expected? */
    280     if (!TEST_size_t_eq(rsa_key_exchange_count,
    281                         expected->rsa_key_exchange_count)
    282             || !TEST_size_t_eq(master_secret_count,
    283                                expected->master_secret_count)
    284             || !TEST_size_t_eq(client_early_secret_count,
    285                                expected->client_early_secret_count)
    286             || !TEST_size_t_eq(client_handshake_secret_count,
    287                                expected->client_handshake_secret_count)
    288             || !TEST_size_t_eq(server_handshake_secret_count,
    289                                expected->server_handshake_secret_count)
    290             || !TEST_size_t_eq(client_application_secret_count,
    291                                expected->client_application_secret_count)
    292             || !TEST_size_t_eq(server_application_secret_count,
    293                                expected->server_application_secret_count)
    294             || !TEST_size_t_eq(early_exporter_secret_count,
    295                                expected->early_exporter_secret_count)
    296             || !TEST_size_t_eq(exporter_secret_count,
    297                                expected->exporter_secret_count))
    298         return 0;
    299     return 1;
    300 }
    301 
    302 #if !defined(OPENSSL_NO_TLS1_2) || defined(OPENSSL_NO_TLS1_3)
    303 static int test_keylog(void)
    304 {
    305     SSL_CTX *cctx = NULL, *sctx = NULL;
    306     SSL *clientssl = NULL, *serverssl = NULL;
    307     int testresult = 0;
    308     struct sslapitest_log_counts expected = {0};
    309 
    310     /* Clean up logging space */
    311     memset(client_log_buffer, 0, sizeof(client_log_buffer));
    312     memset(server_log_buffer, 0, sizeof(server_log_buffer));
    313     client_log_buffer_index = 0;
    314     server_log_buffer_index = 0;
    315     error_writing_log = 0;
    316 
    317     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
    318                                        TLS_client_method(),
    319                                        TLS1_VERSION, TLS_MAX_VERSION,
    320                                        &sctx, &cctx, cert, privkey)))
    321         return 0;
    322 
    323     /* We cannot log the master secret for TLSv1.3, so we should forbid it. */
    324     SSL_CTX_set_options(cctx, SSL_OP_NO_TLSv1_3);
    325     SSL_CTX_set_options(sctx, SSL_OP_NO_TLSv1_3);
    326 
    327     /* We also want to ensure that we use RSA-based key exchange. */
    328     if (!TEST_true(SSL_CTX_set_cipher_list(cctx, "RSA")))
    329         goto end;
    330 
    331     if (!TEST_true(SSL_CTX_get_keylog_callback(cctx) == NULL)
    332             || !TEST_true(SSL_CTX_get_keylog_callback(sctx) == NULL))
    333         goto end;
    334     SSL_CTX_set_keylog_callback(cctx, client_keylog_callback);
    335     if (!TEST_true(SSL_CTX_get_keylog_callback(cctx)
    336                    == client_keylog_callback))
    337         goto end;
    338     SSL_CTX_set_keylog_callback(sctx, server_keylog_callback);
    339     if (!TEST_true(SSL_CTX_get_keylog_callback(sctx)
    340                    == server_keylog_callback))
    341         goto end;
    342 
    343     /* Now do a handshake and check that the logs have been written to. */
    344     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
    345                                       &clientssl, NULL, NULL))
    346             || !TEST_true(create_ssl_connection(serverssl, clientssl,
    347                                                 SSL_ERROR_NONE))
    348             || !TEST_false(error_writing_log)
    349             || !TEST_int_gt(client_log_buffer_index, 0)
    350             || !TEST_int_gt(server_log_buffer_index, 0))
    351         goto end;
    352 
    353     /*
    354      * Now we want to test that our output data was vaguely sensible. We
    355      * do that by using strtok and confirming that we have more or less the
    356      * data we expect. For both client and server, we expect to see one master
    357      * secret. The client should also see a RSA key exchange.
    358      */
    359     expected.rsa_key_exchange_count = 1;
    360     expected.master_secret_count = 1;
    361     if (!TEST_true(test_keylog_output(client_log_buffer, clientssl,
    362                                       SSL_get_session(clientssl), &expected)))
    363         goto end;
    364 
    365     expected.rsa_key_exchange_count = 0;
    366     if (!TEST_true(test_keylog_output(server_log_buffer, serverssl,
    367                                       SSL_get_session(serverssl), &expected)))
    368         goto end;
    369 
    370     testresult = 1;
    371 
    372 end:
    373     SSL_free(serverssl);
    374     SSL_free(clientssl);
    375     SSL_CTX_free(sctx);
    376     SSL_CTX_free(cctx);
    377 
    378     return testresult;
    379 }
    380 #endif
    381 
    382 #ifndef OPENSSL_NO_TLS1_3
    383 static int test_keylog_no_master_key(void)
    384 {
    385     SSL_CTX *cctx = NULL, *sctx = NULL;
    386     SSL *clientssl = NULL, *serverssl = NULL;
    387     SSL_SESSION *sess = NULL;
    388     int testresult = 0;
    389     struct sslapitest_log_counts expected = {0};
    390     unsigned char buf[1];
    391     size_t readbytes, written;
    392 
    393     /* Clean up logging space */
    394     memset(client_log_buffer, 0, sizeof(client_log_buffer));
    395     memset(server_log_buffer, 0, sizeof(server_log_buffer));
    396     client_log_buffer_index = 0;
    397     server_log_buffer_index = 0;
    398     error_writing_log = 0;
    399 
    400     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
    401                                        TLS1_VERSION, TLS_MAX_VERSION,
    402                                        &sctx, &cctx, cert, privkey))
    403         || !TEST_true(SSL_CTX_set_max_early_data(sctx,
    404                                                  SSL3_RT_MAX_PLAIN_LENGTH)))
    405         return 0;
    406 
    407     if (!TEST_true(SSL_CTX_get_keylog_callback(cctx) == NULL)
    408             || !TEST_true(SSL_CTX_get_keylog_callback(sctx) == NULL))
    409         goto end;
    410 
    411     SSL_CTX_set_keylog_callback(cctx, client_keylog_callback);
    412     if (!TEST_true(SSL_CTX_get_keylog_callback(cctx)
    413                    == client_keylog_callback))
    414         goto end;
    415 
    416     SSL_CTX_set_keylog_callback(sctx, server_keylog_callback);
    417     if (!TEST_true(SSL_CTX_get_keylog_callback(sctx)
    418                    == server_keylog_callback))
    419         goto end;
    420 
    421     /* Now do a handshake and check that the logs have been written to. */
    422     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
    423                                       &clientssl, NULL, NULL))
    424             || !TEST_true(create_ssl_connection(serverssl, clientssl,
    425                                                 SSL_ERROR_NONE))
    426             || !TEST_false(error_writing_log))
    427         goto end;
    428 
    429     /*
    430      * Now we want to test that our output data was vaguely sensible. For this
    431      * test, we expect no CLIENT_RANDOM entry because it doesn't make sense for
    432      * TLSv1.3, but we do expect both client and server to emit keys.
    433      */
    434     expected.client_handshake_secret_count = 1;
    435     expected.server_handshake_secret_count = 1;
    436     expected.client_application_secret_count = 1;
    437     expected.server_application_secret_count = 1;
    438     expected.exporter_secret_count = 1;
    439     if (!TEST_true(test_keylog_output(client_log_buffer, clientssl,
    440                                       SSL_get_session(clientssl), &expected))
    441             || !TEST_true(test_keylog_output(server_log_buffer, serverssl,
    442                                              SSL_get_session(serverssl),
    443                                              &expected)))
    444         goto end;
    445 
    446     /* Terminate old session and resume with early data. */
    447     sess = SSL_get1_session(clientssl);
    448     SSL_shutdown(clientssl);
    449     SSL_shutdown(serverssl);
    450     SSL_free(serverssl);
    451     SSL_free(clientssl);
    452     serverssl = clientssl = NULL;
    453 
    454     /* Reset key log */
    455     memset(client_log_buffer, 0, sizeof(client_log_buffer));
    456     memset(server_log_buffer, 0, sizeof(server_log_buffer));
    457     client_log_buffer_index = 0;
    458     server_log_buffer_index = 0;
    459 
    460     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
    461                                       &clientssl, NULL, NULL))
    462             || !TEST_true(SSL_set_session(clientssl, sess))
    463             /* Here writing 0 length early data is enough. */
    464             || !TEST_true(SSL_write_early_data(clientssl, NULL, 0, &written))
    465             || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
    466                                                 &readbytes),
    467                             SSL_READ_EARLY_DATA_ERROR)
    468             || !TEST_int_eq(SSL_get_early_data_status(serverssl),
    469                             SSL_EARLY_DATA_ACCEPTED)
    470             || !TEST_true(create_ssl_connection(serverssl, clientssl,
    471                           SSL_ERROR_NONE))
    472             || !TEST_true(SSL_session_reused(clientssl)))
    473         goto end;
    474 
    475     /* In addition to the previous entries, expect early secrets. */
    476     expected.client_early_secret_count = 1;
    477     expected.early_exporter_secret_count = 1;
    478     if (!TEST_true(test_keylog_output(client_log_buffer, clientssl,
    479                                       SSL_get_session(clientssl), &expected))
    480             || !TEST_true(test_keylog_output(server_log_buffer, serverssl,
    481                                              SSL_get_session(serverssl),
    482                                              &expected)))
    483         goto end;
    484 
    485     testresult = 1;
    486 
    487 end:
    488     SSL_SESSION_free(sess);
    489     SSL_free(serverssl);
    490     SSL_free(clientssl);
    491     SSL_CTX_free(sctx);
    492     SSL_CTX_free(cctx);
    493 
    494     return testresult;
    495 }
    496 #endif
    497 
    498 #ifndef OPENSSL_NO_TLS1_2
    499 static int full_client_hello_callback(SSL *s, int *al, void *arg)
    500 {
    501     int *ctr = arg;
    502     const unsigned char *p;
    503     int *exts;
    504     /* We only configure two ciphers, but the SCSV is added automatically. */
    505 #ifdef OPENSSL_NO_EC
    506     const unsigned char expected_ciphers[] = {0x00, 0x9d, 0x00, 0xff};
    507 #else
    508     const unsigned char expected_ciphers[] = {0x00, 0x9d, 0xc0,
    509                                               0x2c, 0x00, 0xff};
    510 #endif
    511     const int expected_extensions[] = {
    512 #ifndef OPENSSL_NO_EC
    513                                        11, 10,
    514 #endif
    515                                        35, 22, 23, 13};
    516     size_t len;
    517 
    518     /* Make sure we can defer processing and get called back. */
    519     if ((*ctr)++ == 0)
    520         return SSL_CLIENT_HELLO_RETRY;
    521 
    522     len = SSL_client_hello_get0_ciphers(s, &p);
    523     if (!TEST_mem_eq(p, len, expected_ciphers, sizeof(expected_ciphers))
    524             || !TEST_size_t_eq(
    525                        SSL_client_hello_get0_compression_methods(s, &p), 1)
    526             || !TEST_int_eq(*p, 0))
    527         return SSL_CLIENT_HELLO_ERROR;
    528     if (!SSL_client_hello_get1_extensions_present(s, &exts, &len))
    529         return SSL_CLIENT_HELLO_ERROR;
    530     if (len != OSSL_NELEM(expected_extensions) ||
    531         memcmp(exts, expected_extensions, len * sizeof(*exts)) != 0) {
    532         printf("ClientHello callback expected extensions mismatch\n");
    533         OPENSSL_free(exts);
    534         return SSL_CLIENT_HELLO_ERROR;
    535     }
    536     OPENSSL_free(exts);
    537     return SSL_CLIENT_HELLO_SUCCESS;
    538 }
    539 
    540 static int test_client_hello_cb(void)
    541 {
    542     SSL_CTX *cctx = NULL, *sctx = NULL;
    543     SSL *clientssl = NULL, *serverssl = NULL;
    544     int testctr = 0, testresult = 0;
    545 
    546     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
    547                                        TLS1_VERSION, TLS_MAX_VERSION,
    548                                        &sctx, &cctx, cert, privkey)))
    549         goto end;
    550     SSL_CTX_set_client_hello_cb(sctx, full_client_hello_callback, &testctr);
    551 
    552     /* The gimpy cipher list we configure can't do TLS 1.3. */
    553     SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION);
    554 
    555     if (!TEST_true(SSL_CTX_set_cipher_list(cctx,
    556                         "AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384"))
    557             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
    558                                              &clientssl, NULL, NULL))
    559             || !TEST_false(create_ssl_connection(serverssl, clientssl,
    560                         SSL_ERROR_WANT_CLIENT_HELLO_CB))
    561                 /*
    562                  * Passing a -1 literal is a hack since
    563                  * the real value was lost.
    564                  * */
    565             || !TEST_int_eq(SSL_get_error(serverssl, -1),
    566                             SSL_ERROR_WANT_CLIENT_HELLO_CB)
    567             || !TEST_true(create_ssl_connection(serverssl, clientssl,
    568                                                 SSL_ERROR_NONE)))
    569         goto end;
    570 
    571     testresult = 1;
    572 
    573 end:
    574     SSL_free(serverssl);
    575     SSL_free(clientssl);
    576     SSL_CTX_free(sctx);
    577     SSL_CTX_free(cctx);
    578 
    579     return testresult;
    580 }
    581 #endif
    582 
    583 static int execute_test_large_message(const SSL_METHOD *smeth,
    584                                       const SSL_METHOD *cmeth,
    585                                       int min_version, int max_version,
    586                                       int read_ahead)
    587 {
    588     SSL_CTX *cctx = NULL, *sctx = NULL;
    589     SSL *clientssl = NULL, *serverssl = NULL;
    590     int testresult = 0;
    591     int i;
    592     BIO *certbio = NULL;
    593     X509 *chaincert = NULL;
    594     int certlen;
    595 
    596     if (!TEST_ptr(certbio = BIO_new_file(cert, "r")))
    597         goto end;
    598     chaincert = PEM_read_bio_X509(certbio, NULL, NULL, NULL);
    599     BIO_free(certbio);
    600     certbio = NULL;
    601     if (!TEST_ptr(chaincert))
    602         goto end;
    603 
    604     if (!TEST_true(create_ssl_ctx_pair(smeth, cmeth, min_version, max_version,
    605                                        &sctx, &cctx, cert, privkey)))
    606         goto end;
    607 
    608     if (read_ahead) {
    609         /*
    610          * Test that read_ahead works correctly when dealing with large
    611          * records
    612          */
    613         SSL_CTX_set_read_ahead(cctx, 1);
    614     }
    615 
    616     /*
    617      * We assume the supplied certificate is big enough so that if we add
    618      * NUM_EXTRA_CERTS it will make the overall message large enough. The
    619      * default buffer size is requested to be 16k, but due to the way BUF_MEM
    620      * works, it ends up allocating a little over 21k (16 * 4/3). So, in this
    621      * test we need to have a message larger than that.
    622      */
    623     certlen = i2d_X509(chaincert, NULL);
    624     OPENSSL_assert(certlen * NUM_EXTRA_CERTS >
    625                    (SSL3_RT_MAX_PLAIN_LENGTH * 4) / 3);
    626     for (i = 0; i < NUM_EXTRA_CERTS; i++) {
    627         if (!X509_up_ref(chaincert))
    628             goto end;
    629         if (!SSL_CTX_add_extra_chain_cert(sctx, chaincert)) {
    630             X509_free(chaincert);
    631             goto end;
    632         }
    633     }
    634 
    635     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
    636                                       NULL, NULL))
    637             || !TEST_true(create_ssl_connection(serverssl, clientssl,
    638                                                 SSL_ERROR_NONE)))
    639         goto end;
    640 
    641     /*
    642      * Calling SSL_clear() first is not required but this tests that SSL_clear()
    643      * doesn't leak (when using enable-crypto-mdebug).
    644      */
    645     if (!TEST_true(SSL_clear(serverssl)))
    646         goto end;
    647 
    648     testresult = 1;
    649  end:
    650     X509_free(chaincert);
    651     SSL_free(serverssl);
    652     SSL_free(clientssl);
    653     SSL_CTX_free(sctx);
    654     SSL_CTX_free(cctx);
    655 
    656     return testresult;
    657 }
    658 
    659 static int test_large_message_tls(void)
    660 {
    661     return execute_test_large_message(TLS_server_method(), TLS_client_method(),
    662                                       TLS1_VERSION, TLS_MAX_VERSION,
    663                                       0);
    664 }
    665 
    666 static int test_large_message_tls_read_ahead(void)
    667 {
    668     return execute_test_large_message(TLS_server_method(), TLS_client_method(),
    669                                       TLS1_VERSION, TLS_MAX_VERSION,
    670                                       1);
    671 }
    672 
    673 #ifndef OPENSSL_NO_DTLS
    674 static int test_large_message_dtls(void)
    675 {
    676     /*
    677      * read_ahead is not relevant to DTLS because DTLS always acts as if
    678      * read_ahead is set.
    679      */
    680     return execute_test_large_message(DTLS_server_method(),
    681                                       DTLS_client_method(),
    682                                       DTLS1_VERSION, DTLS_MAX_VERSION,
    683                                       0);
    684 }
    685 #endif
    686 
    687 #ifndef OPENSSL_NO_OCSP
    688 static int ocsp_server_cb(SSL *s, void *arg)
    689 {
    690     int *argi = (int *)arg;
    691     unsigned char *copy = NULL;
    692     STACK_OF(OCSP_RESPID) *ids = NULL;
    693     OCSP_RESPID *id = NULL;
    694 
    695     if (*argi == 2) {
    696         /* In this test we are expecting exactly 1 OCSP_RESPID */
    697         SSL_get_tlsext_status_ids(s, &ids);
    698         if (ids == NULL || sk_OCSP_RESPID_num(ids) != 1)
    699             return SSL_TLSEXT_ERR_ALERT_FATAL;
    700 
    701         id = sk_OCSP_RESPID_value(ids, 0);
    702         if (id == NULL || !OCSP_RESPID_match(id, ocspcert))
    703             return SSL_TLSEXT_ERR_ALERT_FATAL;
    704     } else if (*argi != 1) {
    705         return SSL_TLSEXT_ERR_ALERT_FATAL;
    706     }
    707 
    708     if (!TEST_ptr(copy = OPENSSL_memdup(orespder, sizeof(orespder))))
    709         return SSL_TLSEXT_ERR_ALERT_FATAL;
    710 
    711     SSL_set_tlsext_status_ocsp_resp(s, copy, sizeof(orespder));
    712     ocsp_server_called = 1;
    713     return SSL_TLSEXT_ERR_OK;
    714 }
    715 
    716 static int ocsp_client_cb(SSL *s, void *arg)
    717 {
    718     int *argi = (int *)arg;
    719     const unsigned char *respderin;
    720     size_t len;
    721 
    722     if (*argi != 1 && *argi != 2)
    723         return 0;
    724 
    725     len = SSL_get_tlsext_status_ocsp_resp(s, &respderin);
    726     if (!TEST_mem_eq(orespder, len, respderin, len))
    727         return 0;
    728 
    729     ocsp_client_called = 1;
    730     return 1;
    731 }
    732 
    733 static int test_tlsext_status_type(void)
    734 {
    735     SSL_CTX *cctx = NULL, *sctx = NULL;
    736     SSL *clientssl = NULL, *serverssl = NULL;
    737     int testresult = 0;
    738     STACK_OF(OCSP_RESPID) *ids = NULL;
    739     OCSP_RESPID *id = NULL;
    740     BIO *certbio = NULL;
    741 
    742     if (!create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
    743                              TLS1_VERSION, TLS_MAX_VERSION,
    744                              &sctx, &cctx, cert, privkey))
    745         return 0;
    746 
    747     if (SSL_CTX_get_tlsext_status_type(cctx) != -1)
    748         goto end;
    749 
    750     /* First just do various checks getting and setting tlsext_status_type */
    751 
    752     clientssl = SSL_new(cctx);
    753     if (!TEST_int_eq(SSL_get_tlsext_status_type(clientssl), -1)
    754             || !TEST_true(SSL_set_tlsext_status_type(clientssl,
    755                                                       TLSEXT_STATUSTYPE_ocsp))
    756             || !TEST_int_eq(SSL_get_tlsext_status_type(clientssl),
    757                             TLSEXT_STATUSTYPE_ocsp))
    758         goto end;
    759 
    760     SSL_free(clientssl);
    761     clientssl = NULL;
    762 
    763     if (!SSL_CTX_set_tlsext_status_type(cctx, TLSEXT_STATUSTYPE_ocsp)
    764      || SSL_CTX_get_tlsext_status_type(cctx) != TLSEXT_STATUSTYPE_ocsp)
    765         goto end;
    766 
    767     clientssl = SSL_new(cctx);
    768     if (SSL_get_tlsext_status_type(clientssl) != TLSEXT_STATUSTYPE_ocsp)
    769         goto end;
    770     SSL_free(clientssl);
    771     clientssl = NULL;
    772 
    773     /*
    774      * Now actually do a handshake and check OCSP information is exchanged and
    775      * the callbacks get called
    776      */
    777     SSL_CTX_set_tlsext_status_cb(cctx, ocsp_client_cb);
    778     SSL_CTX_set_tlsext_status_arg(cctx, &cdummyarg);
    779     SSL_CTX_set_tlsext_status_cb(sctx, ocsp_server_cb);
    780     SSL_CTX_set_tlsext_status_arg(sctx, &cdummyarg);
    781     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
    782                                       &clientssl, NULL, NULL))
    783             || !TEST_true(create_ssl_connection(serverssl, clientssl,
    784                                                 SSL_ERROR_NONE))
    785             || !TEST_true(ocsp_client_called)
    786             || !TEST_true(ocsp_server_called))
    787         goto end;
    788     SSL_free(serverssl);
    789     SSL_free(clientssl);
    790     serverssl = NULL;
    791     clientssl = NULL;
    792 
    793     /* Try again but this time force the server side callback to fail */
    794     ocsp_client_called = 0;
    795     ocsp_server_called = 0;
    796     cdummyarg = 0;
    797     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
    798                                       &clientssl, NULL, NULL))
    799                 /* This should fail because the callback will fail */
    800             || !TEST_false(create_ssl_connection(serverssl, clientssl,
    801                                                  SSL_ERROR_NONE))
    802             || !TEST_false(ocsp_client_called)
    803             || !TEST_false(ocsp_server_called))
    804         goto end;
    805     SSL_free(serverssl);
    806     SSL_free(clientssl);
    807     serverssl = NULL;
    808     clientssl = NULL;
    809 
    810     /*
    811      * This time we'll get the client to send an OCSP_RESPID that it will
    812      * accept.
    813      */
    814     ocsp_client_called = 0;
    815     ocsp_server_called = 0;
    816     cdummyarg = 2;
    817     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
    818                                       &clientssl, NULL, NULL)))
    819         goto end;
    820 
    821     /*
    822      * We'll just use any old cert for this test - it doesn't have to be an OCSP
    823      * specific one. We'll use the server cert.
    824      */
    825     if (!TEST_ptr(certbio = BIO_new_file(cert, "r"))
    826             || !TEST_ptr(id = OCSP_RESPID_new())
    827             || !TEST_ptr(ids = sk_OCSP_RESPID_new_null())
    828             || !TEST_ptr(ocspcert = PEM_read_bio_X509(certbio,
    829                                                       NULL, NULL, NULL))
    830             || !TEST_true(OCSP_RESPID_set_by_key(id, ocspcert))
    831             || !TEST_true(sk_OCSP_RESPID_push(ids, id)))
    832         goto end;
    833     id = NULL;
    834     SSL_set_tlsext_status_ids(clientssl, ids);
    835     /* Control has been transferred */
    836     ids = NULL;
    837 
    838     BIO_free(certbio);
    839     certbio = NULL;
    840 
    841     if (!TEST_true(create_ssl_connection(serverssl, clientssl,
    842                                          SSL_ERROR_NONE))
    843             || !TEST_true(ocsp_client_called)
    844             || !TEST_true(ocsp_server_called))
    845         goto end;
    846 
    847     testresult = 1;
    848 
    849  end:
    850     SSL_free(serverssl);
    851     SSL_free(clientssl);
    852     SSL_CTX_free(sctx);
    853     SSL_CTX_free(cctx);
    854     sk_OCSP_RESPID_pop_free(ids, OCSP_RESPID_free);
    855     OCSP_RESPID_free(id);
    856     BIO_free(certbio);
    857     X509_free(ocspcert);
    858     ocspcert = NULL;
    859 
    860     return testresult;
    861 }
    862 #endif
    863 
    864 #if !defined(OPENSSL_NO_TLS1_3) || !defined(OPENSSL_NO_TLS1_2)
    865 static int new_called, remove_called, get_called;
    866 
    867 static int new_session_cb(SSL *ssl, SSL_SESSION *sess)
    868 {
    869     new_called++;
    870     /*
    871      * sess has been up-refed for us, but we don't actually need it so free it
    872      * immediately.
    873      */
    874     SSL_SESSION_free(sess);
    875     return 1;
    876 }
    877 
    878 static void remove_session_cb(SSL_CTX *ctx, SSL_SESSION *sess)
    879 {
    880     remove_called++;
    881 }
    882 
    883 static SSL_SESSION *get_sess_val = NULL;
    884 
    885 static SSL_SESSION *get_session_cb(SSL *ssl, const unsigned char *id, int len,
    886                                    int *copy)
    887 {
    888     get_called++;
    889     *copy = 1;
    890     return get_sess_val;
    891 }
    892 
    893 static int execute_test_session(int maxprot, int use_int_cache,
    894                                 int use_ext_cache)
    895 {
    896     SSL_CTX *sctx = NULL, *cctx = NULL;
    897     SSL *serverssl1 = NULL, *clientssl1 = NULL;
    898     SSL *serverssl2 = NULL, *clientssl2 = NULL;
    899 # ifndef OPENSSL_NO_TLS1_1
    900     SSL *serverssl3 = NULL, *clientssl3 = NULL;
    901 # endif
    902     SSL_SESSION *sess1 = NULL, *sess2 = NULL;
    903     int testresult = 0, numnewsesstick = 1;
    904 
    905     new_called = remove_called = 0;
    906 
    907     /* TLSv1.3 sends 2 NewSessionTickets */
    908     if (maxprot == TLS1_3_VERSION)
    909         numnewsesstick = 2;
    910 
    911     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
    912                                        TLS1_VERSION, TLS_MAX_VERSION,
    913                                        &sctx, &cctx, cert, privkey)))
    914         return 0;
    915 
    916     /*
    917      * Only allow the max protocol version so we can force a connection failure
    918      * later
    919      */
    920     SSL_CTX_set_min_proto_version(cctx, maxprot);
    921     SSL_CTX_set_max_proto_version(cctx, maxprot);
    922 
    923     /* Set up session cache */
    924     if (use_ext_cache) {
    925         SSL_CTX_sess_set_new_cb(cctx, new_session_cb);
    926         SSL_CTX_sess_set_remove_cb(cctx, remove_session_cb);
    927     }
    928     if (use_int_cache) {
    929         /* Also covers instance where both are set */
    930         SSL_CTX_set_session_cache_mode(cctx, SSL_SESS_CACHE_CLIENT);
    931     } else {
    932         SSL_CTX_set_session_cache_mode(cctx,
    933                                        SSL_SESS_CACHE_CLIENT
    934                                        | SSL_SESS_CACHE_NO_INTERNAL_STORE);
    935     }
    936 
    937     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl1, &clientssl1,
    938                                       NULL, NULL))
    939             || !TEST_true(create_ssl_connection(serverssl1, clientssl1,
    940                                                 SSL_ERROR_NONE))
    941             || !TEST_ptr(sess1 = SSL_get1_session(clientssl1)))
    942         goto end;
    943 
    944     /* Should fail because it should already be in the cache */
    945     if (use_int_cache && !TEST_false(SSL_CTX_add_session(cctx, sess1)))
    946         goto end;
    947     if (use_ext_cache
    948             && (!TEST_int_eq(new_called, numnewsesstick)
    949 
    950                 || !TEST_int_eq(remove_called, 0)))
    951         goto end;
    952 
    953     new_called = remove_called = 0;
    954     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl2,
    955                                       &clientssl2, NULL, NULL))
    956             || !TEST_true(SSL_set_session(clientssl2, sess1))
    957             || !TEST_true(create_ssl_connection(serverssl2, clientssl2,
    958                                                 SSL_ERROR_NONE))
    959             || !TEST_true(SSL_session_reused(clientssl2)))
    960         goto end;
    961 
    962     if (maxprot == TLS1_3_VERSION) {
    963         /*
    964          * In TLSv1.3 we should have created a new session even though we have
    965          * resumed. Since we attempted a resume we should also have removed the
    966          * old ticket from the cache so that we try to only use tickets once.
    967          */
    968         if (use_ext_cache
    969                 && (!TEST_int_eq(new_called, 1)
    970                     || !TEST_int_eq(remove_called, 1)))
    971             goto end;
    972     } else {
    973         /*
    974          * In TLSv1.2 we expect to have resumed so no sessions added or
    975          * removed.
    976          */
    977         if (use_ext_cache
    978                 && (!TEST_int_eq(new_called, 0)
    979                     || !TEST_int_eq(remove_called, 0)))
    980             goto end;
    981     }
    982 
    983     SSL_SESSION_free(sess1);
    984     if (!TEST_ptr(sess1 = SSL_get1_session(clientssl2)))
    985         goto end;
    986     shutdown_ssl_connection(serverssl2, clientssl2);
    987     serverssl2 = clientssl2 = NULL;
    988 
    989     new_called = remove_called = 0;
    990     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl2,
    991                                       &clientssl2, NULL, NULL))
    992             || !TEST_true(create_ssl_connection(serverssl2, clientssl2,
    993                                                 SSL_ERROR_NONE)))
    994         goto end;
    995 
    996     if (!TEST_ptr(sess2 = SSL_get1_session(clientssl2)))
    997         goto end;
    998 
    999     if (use_ext_cache
   1000             && (!TEST_int_eq(new_called, numnewsesstick)
   1001                 || !TEST_int_eq(remove_called, 0)))
   1002         goto end;
   1003 
   1004     new_called = remove_called = 0;
   1005     /*
   1006      * This should clear sess2 from the cache because it is a "bad" session.
   1007      * See SSL_set_session() documentation.
   1008      */
   1009     if (!TEST_true(SSL_set_session(clientssl2, sess1)))
   1010         goto end;
   1011     if (use_ext_cache
   1012             && (!TEST_int_eq(new_called, 0) || !TEST_int_eq(remove_called, 1)))
   1013         goto end;
   1014     if (!TEST_ptr_eq(SSL_get_session(clientssl2), sess1))
   1015         goto end;
   1016 
   1017     if (use_int_cache) {
   1018         /* Should succeeded because it should not already be in the cache */
   1019         if (!TEST_true(SSL_CTX_add_session(cctx, sess2))
   1020                 || !TEST_true(SSL_CTX_remove_session(cctx, sess2)))
   1021             goto end;
   1022     }
   1023 
   1024     new_called = remove_called = 0;
   1025     /* This shouldn't be in the cache so should fail */
   1026     if (!TEST_false(SSL_CTX_remove_session(cctx, sess2)))
   1027         goto end;
   1028 
   1029     if (use_ext_cache
   1030             && (!TEST_int_eq(new_called, 0) || !TEST_int_eq(remove_called, 1)))
   1031         goto end;
   1032 
   1033 # if !defined(OPENSSL_NO_TLS1_1)
   1034     new_called = remove_called = 0;
   1035     /* Force a connection failure */
   1036     SSL_CTX_set_max_proto_version(sctx, TLS1_1_VERSION);
   1037     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl3,
   1038                                       &clientssl3, NULL, NULL))
   1039             || !TEST_true(SSL_set_session(clientssl3, sess1))
   1040             /* This should fail because of the mismatched protocol versions */
   1041             || !TEST_false(create_ssl_connection(serverssl3, clientssl3,
   1042                                                  SSL_ERROR_NONE)))
   1043         goto end;
   1044 
   1045     /* We should have automatically removed the session from the cache */
   1046     if (use_ext_cache
   1047             && (!TEST_int_eq(new_called, 0) || !TEST_int_eq(remove_called, 1)))
   1048         goto end;
   1049 
   1050     /* Should succeed because it should not already be in the cache */
   1051     if (use_int_cache && !TEST_true(SSL_CTX_add_session(cctx, sess2)))
   1052         goto end;
   1053 # endif
   1054 
   1055     /* Now do some tests for server side caching */
   1056     if (use_ext_cache) {
   1057         SSL_CTX_sess_set_new_cb(cctx, NULL);
   1058         SSL_CTX_sess_set_remove_cb(cctx, NULL);
   1059         SSL_CTX_sess_set_new_cb(sctx, new_session_cb);
   1060         SSL_CTX_sess_set_remove_cb(sctx, remove_session_cb);
   1061         SSL_CTX_sess_set_get_cb(sctx, get_session_cb);
   1062         get_sess_val = NULL;
   1063     }
   1064 
   1065     SSL_CTX_set_session_cache_mode(cctx, 0);
   1066     /* Internal caching is the default on the server side */
   1067     if (!use_int_cache)
   1068         SSL_CTX_set_session_cache_mode(sctx,
   1069                                        SSL_SESS_CACHE_SERVER
   1070                                        | SSL_SESS_CACHE_NO_INTERNAL_STORE);
   1071 
   1072     SSL_free(serverssl1);
   1073     SSL_free(clientssl1);
   1074     serverssl1 = clientssl1 = NULL;
   1075     SSL_free(serverssl2);
   1076     SSL_free(clientssl2);
   1077     serverssl2 = clientssl2 = NULL;
   1078     SSL_SESSION_free(sess1);
   1079     sess1 = NULL;
   1080     SSL_SESSION_free(sess2);
   1081     sess2 = NULL;
   1082 
   1083     SSL_CTX_set_max_proto_version(sctx, maxprot);
   1084     if (maxprot == TLS1_2_VERSION)
   1085         SSL_CTX_set_options(sctx, SSL_OP_NO_TICKET);
   1086     new_called = remove_called = get_called = 0;
   1087     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl1, &clientssl1,
   1088                                       NULL, NULL))
   1089             || !TEST_true(create_ssl_connection(serverssl1, clientssl1,
   1090                                                 SSL_ERROR_NONE))
   1091             || !TEST_ptr(sess1 = SSL_get1_session(clientssl1))
   1092             || !TEST_ptr(sess2 = SSL_get1_session(serverssl1)))
   1093         goto end;
   1094 
   1095     if (use_int_cache) {
   1096         if (maxprot == TLS1_3_VERSION && !use_ext_cache) {
   1097             /*
   1098              * In TLSv1.3 it should not have been added to the internal cache,
   1099              * except in the case where we also have an external cache (in that
   1100              * case it gets added to the cache in order to generate remove
   1101              * events after timeout).
   1102              */
   1103             if (!TEST_false(SSL_CTX_remove_session(sctx, sess2)))
   1104                 goto end;
   1105         } else {
   1106             /* Should fail because it should already be in the cache */
   1107             if (!TEST_false(SSL_CTX_add_session(sctx, sess2)))
   1108                 goto end;
   1109         }
   1110     }
   1111 
   1112     if (use_ext_cache) {
   1113         SSL_SESSION *tmp = sess2;
   1114 
   1115         if (!TEST_int_eq(new_called, numnewsesstick)
   1116                 || !TEST_int_eq(remove_called, 0)
   1117                 || !TEST_int_eq(get_called, 0))
   1118             goto end;
   1119         /*
   1120          * Delete the session from the internal cache to force a lookup from
   1121          * the external cache. We take a copy first because
   1122          * SSL_CTX_remove_session() also marks the session as non-resumable.
   1123          */
   1124         if (use_int_cache && maxprot != TLS1_3_VERSION) {
   1125             if (!TEST_ptr(tmp = SSL_SESSION_dup(sess2))
   1126                     || !TEST_true(SSL_CTX_remove_session(sctx, sess2)))
   1127                 goto end;
   1128             SSL_SESSION_free(sess2);
   1129         }
   1130         sess2 = tmp;
   1131     }
   1132 
   1133     new_called = remove_called = get_called = 0;
   1134     get_sess_val = sess2;
   1135     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl2,
   1136                                       &clientssl2, NULL, NULL))
   1137             || !TEST_true(SSL_set_session(clientssl2, sess1))
   1138             || !TEST_true(create_ssl_connection(serverssl2, clientssl2,
   1139                                                 SSL_ERROR_NONE))
   1140             || !TEST_true(SSL_session_reused(clientssl2)))
   1141         goto end;
   1142 
   1143     if (use_ext_cache) {
   1144         if (!TEST_int_eq(remove_called, 0))
   1145             goto end;
   1146 
   1147         if (maxprot == TLS1_3_VERSION) {
   1148             if (!TEST_int_eq(new_called, 1)
   1149                     || !TEST_int_eq(get_called, 0))
   1150                 goto end;
   1151         } else {
   1152             if (!TEST_int_eq(new_called, 0)
   1153                     || !TEST_int_eq(get_called, 1))
   1154                 goto end;
   1155         }
   1156     }
   1157 
   1158     testresult = 1;
   1159 
   1160  end:
   1161     SSL_free(serverssl1);
   1162     SSL_free(clientssl1);
   1163     SSL_free(serverssl2);
   1164     SSL_free(clientssl2);
   1165 # ifndef OPENSSL_NO_TLS1_1
   1166     SSL_free(serverssl3);
   1167     SSL_free(clientssl3);
   1168 # endif
   1169     SSL_SESSION_free(sess1);
   1170     SSL_SESSION_free(sess2);
   1171     SSL_CTX_free(sctx);
   1172     SSL_CTX_free(cctx);
   1173 
   1174     return testresult;
   1175 }
   1176 #endif /* !defined(OPENSSL_NO_TLS1_3) || !defined(OPENSSL_NO_TLS1_2) */
   1177 
   1178 static int test_session_with_only_int_cache(void)
   1179 {
   1180 #ifndef OPENSSL_NO_TLS1_3
   1181     if (!execute_test_session(TLS1_3_VERSION, 1, 0))
   1182         return 0;
   1183 #endif
   1184 
   1185 #ifndef OPENSSL_NO_TLS1_2
   1186     return execute_test_session(TLS1_2_VERSION, 1, 0);
   1187 #else
   1188     return 1;
   1189 #endif
   1190 }
   1191 
   1192 static int test_session_with_only_ext_cache(void)
   1193 {
   1194 #ifndef OPENSSL_NO_TLS1_3
   1195     if (!execute_test_session(TLS1_3_VERSION, 0, 1))
   1196         return 0;
   1197 #endif
   1198 
   1199 #ifndef OPENSSL_NO_TLS1_2
   1200     return execute_test_session(TLS1_2_VERSION, 0, 1);
   1201 #else
   1202     return 1;
   1203 #endif
   1204 }
   1205 
   1206 static int test_session_with_both_cache(void)
   1207 {
   1208 #ifndef OPENSSL_NO_TLS1_3
   1209     if (!execute_test_session(TLS1_3_VERSION, 1, 1))
   1210         return 0;
   1211 #endif
   1212 
   1213 #ifndef OPENSSL_NO_TLS1_2
   1214     return execute_test_session(TLS1_2_VERSION, 1, 1);
   1215 #else
   1216     return 1;
   1217 #endif
   1218 }
   1219 
   1220 #ifndef OPENSSL_NO_TLS1_3
   1221 static SSL_SESSION *sesscache[6];
   1222 static int do_cache;
   1223 
   1224 static int new_cachesession_cb(SSL *ssl, SSL_SESSION *sess)
   1225 {
   1226     if (do_cache) {
   1227         sesscache[new_called] = sess;
   1228     } else {
   1229         /* We don't need the reference to the session, so free it */
   1230         SSL_SESSION_free(sess);
   1231     }
   1232     new_called++;
   1233 
   1234     return 1;
   1235 }
   1236 
   1237 static int post_handshake_verify(SSL *sssl, SSL *cssl)
   1238 {
   1239     SSL_set_verify(sssl, SSL_VERIFY_PEER, NULL);
   1240     if (!TEST_true(SSL_verify_client_post_handshake(sssl)))
   1241         return 0;
   1242 
   1243     /* Start handshake on the server and client */
   1244     if (!TEST_int_eq(SSL_do_handshake(sssl), 1)
   1245             || !TEST_int_le(SSL_read(cssl, NULL, 0), 0)
   1246             || !TEST_int_le(SSL_read(sssl, NULL, 0), 0)
   1247             || !TEST_true(create_ssl_connection(sssl, cssl,
   1248                                                 SSL_ERROR_NONE)))
   1249         return 0;
   1250 
   1251     return 1;
   1252 }
   1253 
   1254 static int setup_ticket_test(int stateful, int idx, SSL_CTX **sctx,
   1255                              SSL_CTX **cctx)
   1256 {
   1257     int sess_id_ctx = 1;
   1258 
   1259     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
   1260                                        TLS1_VERSION, TLS_MAX_VERSION, sctx,
   1261                                        cctx, cert, privkey))
   1262             || !TEST_true(SSL_CTX_set_num_tickets(*sctx, idx))
   1263             || !TEST_true(SSL_CTX_set_session_id_context(*sctx,
   1264                                                          (void *)&sess_id_ctx,
   1265                                                          sizeof(sess_id_ctx))))
   1266         return 0;
   1267 
   1268     if (stateful)
   1269         SSL_CTX_set_options(*sctx, SSL_OP_NO_TICKET);
   1270 
   1271     SSL_CTX_set_session_cache_mode(*cctx, SSL_SESS_CACHE_CLIENT
   1272                                           | SSL_SESS_CACHE_NO_INTERNAL_STORE);
   1273     SSL_CTX_sess_set_new_cb(*cctx, new_cachesession_cb);
   1274 
   1275     return 1;
   1276 }
   1277 
   1278 static int check_resumption(int idx, SSL_CTX *sctx, SSL_CTX *cctx, int succ)
   1279 {
   1280     SSL *serverssl = NULL, *clientssl = NULL;
   1281     int i;
   1282 
   1283     /* Test that we can resume with all the tickets we got given */
   1284     for (i = 0; i < idx * 2; i++) {
   1285         new_called = 0;
   1286         if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
   1287                                               &clientssl, NULL, NULL))
   1288                 || !TEST_true(SSL_set_session(clientssl, sesscache[i])))
   1289             goto end;
   1290 
   1291         SSL_set_post_handshake_auth(clientssl, 1);
   1292 
   1293         if (!TEST_true(create_ssl_connection(serverssl, clientssl,
   1294                                                     SSL_ERROR_NONE)))
   1295             goto end;
   1296 
   1297         /*
   1298          * Following a successful resumption we only get 1 ticket. After a
   1299          * failed one we should get idx tickets.
   1300          */
   1301         if (succ) {
   1302             if (!TEST_true(SSL_session_reused(clientssl))
   1303                     || !TEST_int_eq(new_called, 1))
   1304                 goto end;
   1305         } else {
   1306             if (!TEST_false(SSL_session_reused(clientssl))
   1307                     || !TEST_int_eq(new_called, idx))
   1308                 goto end;
   1309         }
   1310 
   1311         new_called = 0;
   1312         /* After a post-handshake authentication we should get 1 new ticket */
   1313         if (succ
   1314                 && (!post_handshake_verify(serverssl, clientssl)
   1315                     || !TEST_int_eq(new_called, 1)))
   1316             goto end;
   1317 
   1318         SSL_shutdown(clientssl);
   1319         SSL_shutdown(serverssl);
   1320         SSL_free(serverssl);
   1321         SSL_free(clientssl);
   1322         serverssl = clientssl = NULL;
   1323         SSL_SESSION_free(sesscache[i]);
   1324         sesscache[i] = NULL;
   1325     }
   1326 
   1327     return 1;
   1328 
   1329  end:
   1330     SSL_free(clientssl);
   1331     SSL_free(serverssl);
   1332     return 0;
   1333 }
   1334 
   1335 static int test_tickets(int stateful, int idx)
   1336 {
   1337     SSL_CTX *sctx = NULL, *cctx = NULL;
   1338     SSL *serverssl = NULL, *clientssl = NULL;
   1339     int testresult = 0;
   1340     size_t j;
   1341 
   1342     /* idx is the test number, but also the number of tickets we want */
   1343 
   1344     new_called = 0;
   1345     do_cache = 1;
   1346 
   1347     if (!setup_ticket_test(stateful, idx, &sctx, &cctx))
   1348         goto end;
   1349 
   1350     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
   1351                                           &clientssl, NULL, NULL)))
   1352         goto end;
   1353 
   1354     if (!TEST_true(create_ssl_connection(serverssl, clientssl,
   1355                                                 SSL_ERROR_NONE))
   1356                /* Check we got the number of tickets we were expecting */
   1357             || !TEST_int_eq(idx, new_called))
   1358         goto end;
   1359 
   1360     SSL_shutdown(clientssl);
   1361     SSL_shutdown(serverssl);
   1362     SSL_free(serverssl);
   1363     SSL_free(clientssl);
   1364     SSL_CTX_free(sctx);
   1365     SSL_CTX_free(cctx);
   1366     clientssl = serverssl = NULL;
   1367     sctx = cctx = NULL;
   1368 
   1369     /*
   1370      * Now we try to resume with the tickets we previously created. The
   1371      * resumption attempt is expected to fail (because we're now using a new
   1372      * SSL_CTX). We should see idx number of tickets issued again.
   1373      */
   1374 
   1375     /* Stop caching sessions - just count them */
   1376     do_cache = 0;
   1377 
   1378     if (!setup_ticket_test(stateful, idx, &sctx, &cctx))
   1379         goto end;
   1380 
   1381     if (!check_resumption(idx, sctx, cctx, 0))
   1382         goto end;
   1383 
   1384     /* Start again with caching sessions */
   1385     new_called = 0;
   1386     do_cache = 1;
   1387     SSL_CTX_free(sctx);
   1388     SSL_CTX_free(cctx);
   1389     sctx = cctx = NULL;
   1390 
   1391     if (!setup_ticket_test(stateful, idx, &sctx, &cctx))
   1392         goto end;
   1393 
   1394     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
   1395                                           &clientssl, NULL, NULL)))
   1396         goto end;
   1397 
   1398     SSL_set_post_handshake_auth(clientssl, 1);
   1399 
   1400     if (!TEST_true(create_ssl_connection(serverssl, clientssl,
   1401                                                 SSL_ERROR_NONE))
   1402                /* Check we got the number of tickets we were expecting */
   1403             || !TEST_int_eq(idx, new_called))
   1404         goto end;
   1405 
   1406     /* After a post-handshake authentication we should get new tickets issued */
   1407     if (!post_handshake_verify(serverssl, clientssl)
   1408             || !TEST_int_eq(idx * 2, new_called))
   1409         goto end;
   1410 
   1411     SSL_shutdown(clientssl);
   1412     SSL_shutdown(serverssl);
   1413     SSL_free(serverssl);
   1414     SSL_free(clientssl);
   1415     serverssl = clientssl = NULL;
   1416 
   1417     /* Stop caching sessions - just count them */
   1418     do_cache = 0;
   1419 
   1420     /*
   1421      * Check we can resume with all the tickets we created. This time around the
   1422      * resumptions should all be successful.
   1423      */
   1424     if (!check_resumption(idx, sctx, cctx, 1))
   1425         goto end;
   1426 
   1427     testresult = 1;
   1428 
   1429  end:
   1430     SSL_free(serverssl);
   1431     SSL_free(clientssl);
   1432     for (j = 0; j < OSSL_NELEM(sesscache); j++) {
   1433         SSL_SESSION_free(sesscache[j]);
   1434         sesscache[j] = NULL;
   1435     }
   1436     SSL_CTX_free(sctx);
   1437     SSL_CTX_free(cctx);
   1438 
   1439     return testresult;
   1440 }
   1441 
   1442 static int test_stateless_tickets(int idx)
   1443 {
   1444     return test_tickets(0, idx);
   1445 }
   1446 
   1447 static int test_stateful_tickets(int idx)
   1448 {
   1449     return test_tickets(1, idx);
   1450 }
   1451 
   1452 static int test_psk_tickets(void)
   1453 {
   1454     SSL_CTX *sctx = NULL, *cctx = NULL;
   1455     SSL *serverssl = NULL, *clientssl = NULL;
   1456     int testresult = 0;
   1457     int sess_id_ctx = 1;
   1458 
   1459     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
   1460                                        TLS1_VERSION, TLS_MAX_VERSION, &sctx,
   1461                                        &cctx, NULL, NULL))
   1462             || !TEST_true(SSL_CTX_set_session_id_context(sctx,
   1463                                                          (void *)&sess_id_ctx,
   1464                                                          sizeof(sess_id_ctx))))
   1465         goto end;
   1466 
   1467     SSL_CTX_set_session_cache_mode(cctx, SSL_SESS_CACHE_CLIENT
   1468                                          | SSL_SESS_CACHE_NO_INTERNAL_STORE);
   1469     SSL_CTX_set_psk_use_session_callback(cctx, use_session_cb);
   1470     SSL_CTX_set_psk_find_session_callback(sctx, find_session_cb);
   1471     SSL_CTX_sess_set_new_cb(cctx, new_session_cb);
   1472     use_session_cb_cnt = 0;
   1473     find_session_cb_cnt = 0;
   1474     srvid = pskid;
   1475     new_called = 0;
   1476 
   1477     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   1478                                       NULL, NULL)))
   1479         goto end;
   1480     clientpsk = serverpsk = create_a_psk(clientssl);
   1481     if (!TEST_ptr(clientpsk))
   1482         goto end;
   1483     SSL_SESSION_up_ref(clientpsk);
   1484 
   1485     if (!TEST_true(create_ssl_connection(serverssl, clientssl,
   1486                                                 SSL_ERROR_NONE))
   1487             || !TEST_int_eq(1, find_session_cb_cnt)
   1488             || !TEST_int_eq(1, use_session_cb_cnt)
   1489                /* We should always get 1 ticket when using external PSK */
   1490             || !TEST_int_eq(1, new_called))
   1491         goto end;
   1492 
   1493     testresult = 1;
   1494 
   1495  end:
   1496     SSL_free(serverssl);
   1497     SSL_free(clientssl);
   1498     SSL_CTX_free(sctx);
   1499     SSL_CTX_free(cctx);
   1500     SSL_SESSION_free(clientpsk);
   1501     SSL_SESSION_free(serverpsk);
   1502     clientpsk = serverpsk = NULL;
   1503 
   1504     return testresult;
   1505 }
   1506 #endif
   1507 
   1508 #define USE_NULL            0
   1509 #define USE_BIO_1           1
   1510 #define USE_BIO_2           2
   1511 #define USE_DEFAULT         3
   1512 
   1513 #define CONNTYPE_CONNECTION_SUCCESS  0
   1514 #define CONNTYPE_CONNECTION_FAIL     1
   1515 #define CONNTYPE_NO_CONNECTION       2
   1516 
   1517 #define TOTAL_NO_CONN_SSL_SET_BIO_TESTS         (3 * 3 * 3 * 3)
   1518 #define TOTAL_CONN_SUCCESS_SSL_SET_BIO_TESTS    (2 * 2)
   1519 #if !defined(OPENSSL_NO_TLS1_3) && !defined(OPENSSL_NO_TLS1_2)
   1520 # define TOTAL_CONN_FAIL_SSL_SET_BIO_TESTS       (2 * 2)
   1521 #else
   1522 # define TOTAL_CONN_FAIL_SSL_SET_BIO_TESTS       0
   1523 #endif
   1524 
   1525 #define TOTAL_SSL_SET_BIO_TESTS TOTAL_NO_CONN_SSL_SET_BIO_TESTS \
   1526                                 + TOTAL_CONN_SUCCESS_SSL_SET_BIO_TESTS \
   1527                                 + TOTAL_CONN_FAIL_SSL_SET_BIO_TESTS
   1528 
   1529 static void setupbio(BIO **res, BIO *bio1, BIO *bio2, int type)
   1530 {
   1531     switch (type) {
   1532     case USE_NULL:
   1533         *res = NULL;
   1534         break;
   1535     case USE_BIO_1:
   1536         *res = bio1;
   1537         break;
   1538     case USE_BIO_2:
   1539         *res = bio2;
   1540         break;
   1541     }
   1542 }
   1543 
   1544 
   1545 /*
   1546  * Tests calls to SSL_set_bio() under various conditions.
   1547  *
   1548  * For the first 3 * 3 * 3 * 3 = 81 tests we do 2 calls to SSL_set_bio() with
   1549  * various combinations of valid BIOs or NULL being set for the rbio/wbio. We
   1550  * then do more tests where we create a successful connection first using our
   1551  * standard connection setup functions, and then call SSL_set_bio() with
   1552  * various combinations of valid BIOs or NULL. We then repeat these tests
   1553  * following a failed connection. In this last case we are looking to check that
   1554  * SSL_set_bio() functions correctly in the case where s->bbio is not NULL.
   1555  */
   1556 static int test_ssl_set_bio(int idx)
   1557 {
   1558     SSL_CTX *sctx = NULL, *cctx = NULL;
   1559     BIO *bio1 = NULL;
   1560     BIO *bio2 = NULL;
   1561     BIO *irbio = NULL, *iwbio = NULL, *nrbio = NULL, *nwbio = NULL;
   1562     SSL *serverssl = NULL, *clientssl = NULL;
   1563     int initrbio, initwbio, newrbio, newwbio, conntype;
   1564     int testresult = 0;
   1565 
   1566     if (idx < TOTAL_NO_CONN_SSL_SET_BIO_TESTS) {
   1567         initrbio = idx % 3;
   1568         idx /= 3;
   1569         initwbio = idx % 3;
   1570         idx /= 3;
   1571         newrbio = idx % 3;
   1572         idx /= 3;
   1573         newwbio = idx % 3;
   1574         conntype = CONNTYPE_NO_CONNECTION;
   1575     } else {
   1576         idx -= TOTAL_NO_CONN_SSL_SET_BIO_TESTS;
   1577         initrbio = initwbio = USE_DEFAULT;
   1578         newrbio = idx % 2;
   1579         idx /= 2;
   1580         newwbio = idx % 2;
   1581         idx /= 2;
   1582         conntype = idx % 2;
   1583     }
   1584 
   1585     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
   1586                                        TLS1_VERSION, TLS_MAX_VERSION,
   1587                                        &sctx, &cctx, cert, privkey)))
   1588         goto end;
   1589 
   1590     if (conntype == CONNTYPE_CONNECTION_FAIL) {
   1591         /*
   1592          * We won't ever get here if either TLSv1.3 or TLSv1.2 is disabled
   1593          * because we reduced the number of tests in the definition of
   1594          * TOTAL_CONN_FAIL_SSL_SET_BIO_TESTS to avoid this scenario. By setting
   1595          * mismatched protocol versions we will force a connection failure.
   1596          */
   1597         SSL_CTX_set_min_proto_version(sctx, TLS1_3_VERSION);
   1598         SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION);
   1599     }
   1600 
   1601     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   1602                                       NULL, NULL)))
   1603         goto end;
   1604 
   1605     if (initrbio == USE_BIO_1
   1606             || initwbio == USE_BIO_1
   1607             || newrbio == USE_BIO_1
   1608             || newwbio == USE_BIO_1) {
   1609         if (!TEST_ptr(bio1 = BIO_new(BIO_s_mem())))
   1610             goto end;
   1611     }
   1612 
   1613     if (initrbio == USE_BIO_2
   1614             || initwbio == USE_BIO_2
   1615             || newrbio == USE_BIO_2
   1616             || newwbio == USE_BIO_2) {
   1617         if (!TEST_ptr(bio2 = BIO_new(BIO_s_mem())))
   1618             goto end;
   1619     }
   1620 
   1621     if (initrbio != USE_DEFAULT) {
   1622         setupbio(&irbio, bio1, bio2, initrbio);
   1623         setupbio(&iwbio, bio1, bio2, initwbio);
   1624         SSL_set_bio(clientssl, irbio, iwbio);
   1625 
   1626         /*
   1627          * We want to maintain our own refs to these BIO, so do an up ref for
   1628          * each BIO that will have ownership transferred in the SSL_set_bio()
   1629          * call
   1630          */
   1631         if (irbio != NULL)
   1632             BIO_up_ref(irbio);
   1633         if (iwbio != NULL && iwbio != irbio)
   1634             BIO_up_ref(iwbio);
   1635     }
   1636 
   1637     if (conntype != CONNTYPE_NO_CONNECTION
   1638             && !TEST_true(create_ssl_connection(serverssl, clientssl,
   1639                                                 SSL_ERROR_NONE)
   1640                           == (conntype == CONNTYPE_CONNECTION_SUCCESS)))
   1641         goto end;
   1642 
   1643     setupbio(&nrbio, bio1, bio2, newrbio);
   1644     setupbio(&nwbio, bio1, bio2, newwbio);
   1645 
   1646     /*
   1647      * We will (maybe) transfer ownership again so do more up refs.
   1648      * SSL_set_bio() has some really complicated ownership rules where BIOs have
   1649      * already been set!
   1650      */
   1651     if (nrbio != NULL
   1652             && nrbio != irbio
   1653             && (nwbio != iwbio || nrbio != nwbio))
   1654         BIO_up_ref(nrbio);
   1655     if (nwbio != NULL
   1656             && nwbio != nrbio
   1657             && (nwbio != iwbio || (nwbio == iwbio && irbio == iwbio)))
   1658         BIO_up_ref(nwbio);
   1659 
   1660     SSL_set_bio(clientssl, nrbio, nwbio);
   1661 
   1662     testresult = 1;
   1663 
   1664  end:
   1665     BIO_free(bio1);
   1666     BIO_free(bio2);
   1667 
   1668     /*
   1669      * This test is checking that the ref counting for SSL_set_bio is correct.
   1670      * If we get here and we did too many frees then we will fail in the above
   1671      * functions. If we haven't done enough then this will only be detected in
   1672      * a crypto-mdebug build
   1673      */
   1674     SSL_free(serverssl);
   1675     SSL_free(clientssl);
   1676     SSL_CTX_free(sctx);
   1677     SSL_CTX_free(cctx);
   1678     return testresult;
   1679 }
   1680 
   1681 typedef enum { NO_BIO_CHANGE, CHANGE_RBIO, CHANGE_WBIO } bio_change_t;
   1682 
   1683 static int execute_test_ssl_bio(int pop_ssl, bio_change_t change_bio)
   1684 {
   1685     BIO *sslbio = NULL, *membio1 = NULL, *membio2 = NULL;
   1686     SSL_CTX *ctx;
   1687     SSL *ssl = NULL;
   1688     int testresult = 0;
   1689 
   1690     if (!TEST_ptr(ctx = SSL_CTX_new(TLS_method()))
   1691             || !TEST_ptr(ssl = SSL_new(ctx))
   1692             || !TEST_ptr(sslbio = BIO_new(BIO_f_ssl()))
   1693             || !TEST_ptr(membio1 = BIO_new(BIO_s_mem())))
   1694         goto end;
   1695 
   1696     BIO_set_ssl(sslbio, ssl, BIO_CLOSE);
   1697 
   1698     /*
   1699      * If anything goes wrong here then we could leak memory, so this will
   1700      * be caught in a crypto-mdebug build
   1701      */
   1702     BIO_push(sslbio, membio1);
   1703 
   1704     /* Verify changing the rbio/wbio directly does not cause leaks */
   1705     if (change_bio != NO_BIO_CHANGE) {
   1706         if (!TEST_ptr(membio2 = BIO_new(BIO_s_mem())))
   1707             goto end;
   1708         if (change_bio == CHANGE_RBIO)
   1709             SSL_set0_rbio(ssl, membio2);
   1710         else
   1711             SSL_set0_wbio(ssl, membio2);
   1712     }
   1713     ssl = NULL;
   1714 
   1715     if (pop_ssl)
   1716         BIO_pop(sslbio);
   1717     else
   1718         BIO_pop(membio1);
   1719 
   1720     testresult = 1;
   1721  end:
   1722     BIO_free(membio1);
   1723     BIO_free(sslbio);
   1724     SSL_free(ssl);
   1725     SSL_CTX_free(ctx);
   1726 
   1727     return testresult;
   1728 }
   1729 
   1730 static int test_ssl_bio_pop_next_bio(void)
   1731 {
   1732     return execute_test_ssl_bio(0, NO_BIO_CHANGE);
   1733 }
   1734 
   1735 static int test_ssl_bio_pop_ssl_bio(void)
   1736 {
   1737     return execute_test_ssl_bio(1, NO_BIO_CHANGE);
   1738 }
   1739 
   1740 static int test_ssl_bio_change_rbio(void)
   1741 {
   1742     return execute_test_ssl_bio(0, CHANGE_RBIO);
   1743 }
   1744 
   1745 static int test_ssl_bio_change_wbio(void)
   1746 {
   1747     return execute_test_ssl_bio(0, CHANGE_WBIO);
   1748 }
   1749 
   1750 #if !defined(OPENSSL_NO_TLS1_2) || defined(OPENSSL_NO_TLS1_3)
   1751 typedef struct {
   1752     /* The list of sig algs */
   1753     const int *list;
   1754     /* The length of the list */
   1755     size_t listlen;
   1756     /* A sigalgs list in string format */
   1757     const char *liststr;
   1758     /* Whether setting the list should succeed */
   1759     int valid;
   1760     /* Whether creating a connection with the list should succeed */
   1761     int connsuccess;
   1762 } sigalgs_list;
   1763 
   1764 static const int validlist1[] = {NID_sha256, EVP_PKEY_RSA};
   1765 # ifndef OPENSSL_NO_EC
   1766 static const int validlist2[] = {NID_sha256, EVP_PKEY_RSA, NID_sha512, EVP_PKEY_EC};
   1767 static const int validlist3[] = {NID_sha512, EVP_PKEY_EC};
   1768 # endif
   1769 static const int invalidlist1[] = {NID_undef, EVP_PKEY_RSA};
   1770 static const int invalidlist2[] = {NID_sha256, NID_undef};
   1771 static const int invalidlist3[] = {NID_sha256, EVP_PKEY_RSA, NID_sha256};
   1772 static const int invalidlist4[] = {NID_sha256};
   1773 static const sigalgs_list testsigalgs[] = {
   1774     {validlist1, OSSL_NELEM(validlist1), NULL, 1, 1},
   1775 # ifndef OPENSSL_NO_EC
   1776     {validlist2, OSSL_NELEM(validlist2), NULL, 1, 1},
   1777     {validlist3, OSSL_NELEM(validlist3), NULL, 1, 0},
   1778 # endif
   1779     {NULL, 0, "RSA+SHA256", 1, 1},
   1780 # ifndef OPENSSL_NO_EC
   1781     {NULL, 0, "RSA+SHA256:ECDSA+SHA512", 1, 1},
   1782     {NULL, 0, "ECDSA+SHA512", 1, 0},
   1783 # endif
   1784     {invalidlist1, OSSL_NELEM(invalidlist1), NULL, 0, 0},
   1785     {invalidlist2, OSSL_NELEM(invalidlist2), NULL, 0, 0},
   1786     {invalidlist3, OSSL_NELEM(invalidlist3), NULL, 0, 0},
   1787     {invalidlist4, OSSL_NELEM(invalidlist4), NULL, 0, 0},
   1788     {NULL, 0, "RSA", 0, 0},
   1789     {NULL, 0, "SHA256", 0, 0},
   1790     {NULL, 0, "RSA+SHA256:SHA256", 0, 0},
   1791     {NULL, 0, "Invalid", 0, 0}
   1792 };
   1793 
   1794 static int test_set_sigalgs(int idx)
   1795 {
   1796     SSL_CTX *cctx = NULL, *sctx = NULL;
   1797     SSL *clientssl = NULL, *serverssl = NULL;
   1798     int testresult = 0;
   1799     const sigalgs_list *curr;
   1800     int testctx;
   1801 
   1802     /* Should never happen */
   1803     if (!TEST_size_t_le((size_t)idx, OSSL_NELEM(testsigalgs) * 2))
   1804         return 0;
   1805 
   1806     testctx = ((size_t)idx < OSSL_NELEM(testsigalgs));
   1807     curr = testctx ? &testsigalgs[idx]
   1808                    : &testsigalgs[idx - OSSL_NELEM(testsigalgs)];
   1809 
   1810     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
   1811                                        TLS1_VERSION, TLS_MAX_VERSION,
   1812                                        &sctx, &cctx, cert, privkey)))
   1813         return 0;
   1814 
   1815     /*
   1816      * TODO(TLS1.3): These APIs cannot set TLSv1.3 sig algs so we just test it
   1817      * for TLSv1.2 for now until we add a new API.
   1818      */
   1819     SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION);
   1820 
   1821     if (testctx) {
   1822         int ret;
   1823 
   1824         if (curr->list != NULL)
   1825             ret = SSL_CTX_set1_sigalgs(cctx, curr->list, curr->listlen);
   1826         else
   1827             ret = SSL_CTX_set1_sigalgs_list(cctx, curr->liststr);
   1828 
   1829         if (!ret) {
   1830             if (curr->valid)
   1831                 TEST_info("Failure setting sigalgs in SSL_CTX (%d)\n", idx);
   1832             else
   1833                 testresult = 1;
   1834             goto end;
   1835         }
   1836         if (!curr->valid) {
   1837             TEST_info("Not-failed setting sigalgs in SSL_CTX (%d)\n", idx);
   1838             goto end;
   1839         }
   1840     }
   1841 
   1842     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
   1843                                       &clientssl, NULL, NULL)))
   1844         goto end;
   1845 
   1846     if (!testctx) {
   1847         int ret;
   1848 
   1849         if (curr->list != NULL)
   1850             ret = SSL_set1_sigalgs(clientssl, curr->list, curr->listlen);
   1851         else
   1852             ret = SSL_set1_sigalgs_list(clientssl, curr->liststr);
   1853         if (!ret) {
   1854             if (curr->valid)
   1855                 TEST_info("Failure setting sigalgs in SSL (%d)\n", idx);
   1856             else
   1857                 testresult = 1;
   1858             goto end;
   1859         }
   1860         if (!curr->valid)
   1861             goto end;
   1862     }
   1863 
   1864     if (!TEST_int_eq(create_ssl_connection(serverssl, clientssl,
   1865                                            SSL_ERROR_NONE),
   1866                 curr->connsuccess))
   1867         goto end;
   1868 
   1869     testresult = 1;
   1870 
   1871  end:
   1872     SSL_free(serverssl);
   1873     SSL_free(clientssl);
   1874     SSL_CTX_free(sctx);
   1875     SSL_CTX_free(cctx);
   1876 
   1877     return testresult;
   1878 }
   1879 #endif
   1880 
   1881 #ifndef OPENSSL_NO_TLS1_3
   1882 static int psk_client_cb_cnt = 0;
   1883 static int psk_server_cb_cnt = 0;
   1884 
   1885 static int use_session_cb(SSL *ssl, const EVP_MD *md, const unsigned char **id,
   1886                           size_t *idlen, SSL_SESSION **sess)
   1887 {
   1888     switch (++use_session_cb_cnt) {
   1889     case 1:
   1890         /* The first call should always have a NULL md */
   1891         if (md != NULL)
   1892             return 0;
   1893         break;
   1894 
   1895     case 2:
   1896         /* The second call should always have an md */
   1897         if (md == NULL)
   1898             return 0;
   1899         break;
   1900 
   1901     default:
   1902         /* We should only be called a maximum of twice */
   1903         return 0;
   1904     }
   1905 
   1906     if (clientpsk != NULL)
   1907         SSL_SESSION_up_ref(clientpsk);
   1908 
   1909     *sess = clientpsk;
   1910     *id = (const unsigned char *)pskid;
   1911     *idlen = strlen(pskid);
   1912 
   1913     return 1;
   1914 }
   1915 
   1916 #ifndef OPENSSL_NO_PSK
   1917 static unsigned int psk_client_cb(SSL *ssl, const char *hint, char *id,
   1918                                   unsigned int max_id_len,
   1919                                   unsigned char *psk,
   1920                                   unsigned int max_psk_len)
   1921 {
   1922     unsigned int psklen = 0;
   1923 
   1924     psk_client_cb_cnt++;
   1925 
   1926     if (strlen(pskid) + 1 > max_id_len)
   1927         return 0;
   1928 
   1929     /* We should only ever be called a maximum of twice per connection */
   1930     if (psk_client_cb_cnt > 2)
   1931         return 0;
   1932 
   1933     if (clientpsk == NULL)
   1934         return 0;
   1935 
   1936     /* We'll reuse the PSK we set up for TLSv1.3 */
   1937     if (SSL_SESSION_get_master_key(clientpsk, NULL, 0) > max_psk_len)
   1938         return 0;
   1939     psklen = SSL_SESSION_get_master_key(clientpsk, psk, max_psk_len);
   1940     strncpy(id, pskid, max_id_len);
   1941 
   1942     return psklen;
   1943 }
   1944 #endif /* OPENSSL_NO_PSK */
   1945 
   1946 static int find_session_cb(SSL *ssl, const unsigned char *identity,
   1947                            size_t identity_len, SSL_SESSION **sess)
   1948 {
   1949     find_session_cb_cnt++;
   1950 
   1951     /* We should only ever be called a maximum of twice per connection */
   1952     if (find_session_cb_cnt > 2)
   1953         return 0;
   1954 
   1955     if (serverpsk == NULL)
   1956         return 0;
   1957 
   1958     /* Identity should match that set by the client */
   1959     if (strlen(srvid) != identity_len
   1960             || strncmp(srvid, (const char *)identity, identity_len) != 0) {
   1961         /* No PSK found, continue but without a PSK */
   1962         *sess = NULL;
   1963         return 1;
   1964     }
   1965 
   1966     SSL_SESSION_up_ref(serverpsk);
   1967     *sess = serverpsk;
   1968 
   1969     return 1;
   1970 }
   1971 
   1972 #ifndef OPENSSL_NO_PSK
   1973 static unsigned int psk_server_cb(SSL *ssl, const char *identity,
   1974                                   unsigned char *psk, unsigned int max_psk_len)
   1975 {
   1976     unsigned int psklen = 0;
   1977 
   1978     psk_server_cb_cnt++;
   1979 
   1980     /* We should only ever be called a maximum of twice per connection */
   1981     if (find_session_cb_cnt > 2)
   1982         return 0;
   1983 
   1984     if (serverpsk == NULL)
   1985         return 0;
   1986 
   1987     /* Identity should match that set by the client */
   1988     if (strcmp(srvid, identity) != 0) {
   1989         return 0;
   1990     }
   1991 
   1992     /* We'll reuse the PSK we set up for TLSv1.3 */
   1993     if (SSL_SESSION_get_master_key(serverpsk, NULL, 0) > max_psk_len)
   1994         return 0;
   1995     psklen = SSL_SESSION_get_master_key(serverpsk, psk, max_psk_len);
   1996 
   1997     return psklen;
   1998 }
   1999 #endif /* OPENSSL_NO_PSK */
   2000 
   2001 #define MSG1    "Hello"
   2002 #define MSG2    "World."
   2003 #define MSG3    "This"
   2004 #define MSG4    "is"
   2005 #define MSG5    "a"
   2006 #define MSG6    "test"
   2007 #define MSG7    "message."
   2008 
   2009 #define TLS13_AES_256_GCM_SHA384_BYTES  ((const unsigned char *)"\x13\x02")
   2010 #define TLS13_AES_128_GCM_SHA256_BYTES  ((const unsigned char *)"\x13\x01")
   2011 
   2012 
   2013 static SSL_SESSION *create_a_psk(SSL *ssl)
   2014 {
   2015     const SSL_CIPHER *cipher = NULL;
   2016     const unsigned char key[] = {
   2017         0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
   2018         0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
   2019         0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
   2020         0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,
   2021         0x2c, 0x2d, 0x2e, 0x2f
   2022     };
   2023     SSL_SESSION *sess = NULL;
   2024 
   2025     cipher = SSL_CIPHER_find(ssl, TLS13_AES_256_GCM_SHA384_BYTES);
   2026     sess = SSL_SESSION_new();
   2027     if (!TEST_ptr(sess)
   2028             || !TEST_ptr(cipher)
   2029             || !TEST_true(SSL_SESSION_set1_master_key(sess, key,
   2030                                                       sizeof(key)))
   2031             || !TEST_true(SSL_SESSION_set_cipher(sess, cipher))
   2032             || !TEST_true(
   2033                     SSL_SESSION_set_protocol_version(sess,
   2034                                                      TLS1_3_VERSION))) {
   2035         SSL_SESSION_free(sess);
   2036         return NULL;
   2037     }
   2038     return sess;
   2039 }
   2040 
   2041 /*
   2042  * Helper method to setup objects for early data test. Caller frees objects on
   2043  * error.
   2044  */
   2045 static int setupearly_data_test(SSL_CTX **cctx, SSL_CTX **sctx, SSL **clientssl,
   2046                                 SSL **serverssl, SSL_SESSION **sess, int idx)
   2047 {
   2048     if (*sctx == NULL
   2049             && !TEST_true(create_ssl_ctx_pair(TLS_server_method(),
   2050                                               TLS_client_method(),
   2051                                               TLS1_VERSION, TLS_MAX_VERSION,
   2052                                               sctx, cctx, cert, privkey)))
   2053         return 0;
   2054 
   2055     if (!TEST_true(SSL_CTX_set_max_early_data(*sctx, SSL3_RT_MAX_PLAIN_LENGTH)))
   2056         return 0;
   2057 
   2058     if (idx == 1) {
   2059         /* When idx == 1 we repeat the tests with read_ahead set */
   2060         SSL_CTX_set_read_ahead(*cctx, 1);
   2061         SSL_CTX_set_read_ahead(*sctx, 1);
   2062     } else if (idx == 2) {
   2063         /* When idx == 2 we are doing early_data with a PSK. Set up callbacks */
   2064         SSL_CTX_set_psk_use_session_callback(*cctx, use_session_cb);
   2065         SSL_CTX_set_psk_find_session_callback(*sctx, find_session_cb);
   2066         use_session_cb_cnt = 0;
   2067         find_session_cb_cnt = 0;
   2068         srvid = pskid;
   2069     }
   2070 
   2071     if (!TEST_true(create_ssl_objects(*sctx, *cctx, serverssl, clientssl,
   2072                                       NULL, NULL)))
   2073         return 0;
   2074 
   2075     /*
   2076      * For one of the run throughs (doesn't matter which one), we'll try sending
   2077      * some SNI data in the initial ClientHello. This will be ignored (because
   2078      * there is no SNI cb set up by the server), so it should not impact
   2079      * early_data.
   2080      */
   2081     if (idx == 1
   2082             && !TEST_true(SSL_set_tlsext_host_name(*clientssl, "localhost")))
   2083         return 0;
   2084 
   2085     if (idx == 2) {
   2086         clientpsk = create_a_psk(*clientssl);
   2087         if (!TEST_ptr(clientpsk)
   2088                    /*
   2089                     * We just choose an arbitrary value for max_early_data which
   2090                     * should be big enough for testing purposes.
   2091                     */
   2092                 || !TEST_true(SSL_SESSION_set_max_early_data(clientpsk,
   2093                                                              0x100))
   2094                 || !TEST_true(SSL_SESSION_up_ref(clientpsk))) {
   2095             SSL_SESSION_free(clientpsk);
   2096             clientpsk = NULL;
   2097             return 0;
   2098         }
   2099         serverpsk = clientpsk;
   2100 
   2101         if (sess != NULL) {
   2102             if (!TEST_true(SSL_SESSION_up_ref(clientpsk))) {
   2103                 SSL_SESSION_free(clientpsk);
   2104                 SSL_SESSION_free(serverpsk);
   2105                 clientpsk = serverpsk = NULL;
   2106                 return 0;
   2107             }
   2108             *sess = clientpsk;
   2109         }
   2110         return 1;
   2111     }
   2112 
   2113     if (sess == NULL)
   2114         return 1;
   2115 
   2116     if (!TEST_true(create_ssl_connection(*serverssl, *clientssl,
   2117                                          SSL_ERROR_NONE)))
   2118         return 0;
   2119 
   2120     *sess = SSL_get1_session(*clientssl);
   2121     SSL_shutdown(*clientssl);
   2122     SSL_shutdown(*serverssl);
   2123     SSL_free(*serverssl);
   2124     SSL_free(*clientssl);
   2125     *serverssl = *clientssl = NULL;
   2126 
   2127     if (!TEST_true(create_ssl_objects(*sctx, *cctx, serverssl,
   2128                                       clientssl, NULL, NULL))
   2129             || !TEST_true(SSL_set_session(*clientssl, *sess)))
   2130         return 0;
   2131 
   2132     return 1;
   2133 }
   2134 
   2135 static int test_early_data_read_write(int idx)
   2136 {
   2137     SSL_CTX *cctx = NULL, *sctx = NULL;
   2138     SSL *clientssl = NULL, *serverssl = NULL;
   2139     int testresult = 0;
   2140     SSL_SESSION *sess = NULL;
   2141     unsigned char buf[20], data[1024];
   2142     size_t readbytes, written, eoedlen, rawread, rawwritten;
   2143     BIO *rbio;
   2144 
   2145     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
   2146                                         &serverssl, &sess, idx)))
   2147         goto end;
   2148 
   2149     /* Write and read some early data */
   2150     if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
   2151                                         &written))
   2152             || !TEST_size_t_eq(written, strlen(MSG1))
   2153             || !TEST_int_eq(SSL_read_early_data(serverssl, buf,
   2154                                                 sizeof(buf), &readbytes),
   2155                             SSL_READ_EARLY_DATA_SUCCESS)
   2156             || !TEST_mem_eq(MSG1, readbytes, buf, strlen(MSG1))
   2157             || !TEST_int_eq(SSL_get_early_data_status(serverssl),
   2158                             SSL_EARLY_DATA_ACCEPTED))
   2159         goto end;
   2160 
   2161     /*
   2162      * Server should be able to write data, and client should be able to
   2163      * read it.
   2164      */
   2165     if (!TEST_true(SSL_write_early_data(serverssl, MSG2, strlen(MSG2),
   2166                                         &written))
   2167             || !TEST_size_t_eq(written, strlen(MSG2))
   2168             || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
   2169             || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
   2170         goto end;
   2171 
   2172     /* Even after reading normal data, client should be able write early data */
   2173     if (!TEST_true(SSL_write_early_data(clientssl, MSG3, strlen(MSG3),
   2174                                         &written))
   2175             || !TEST_size_t_eq(written, strlen(MSG3)))
   2176         goto end;
   2177 
   2178     /* Server should still be able read early data after writing data */
   2179     if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
   2180                                          &readbytes),
   2181                      SSL_READ_EARLY_DATA_SUCCESS)
   2182             || !TEST_mem_eq(buf, readbytes, MSG3, strlen(MSG3)))
   2183         goto end;
   2184 
   2185     /* Write more data from server and read it from client */
   2186     if (!TEST_true(SSL_write_early_data(serverssl, MSG4, strlen(MSG4),
   2187                                         &written))
   2188             || !TEST_size_t_eq(written, strlen(MSG4))
   2189             || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
   2190             || !TEST_mem_eq(buf, readbytes, MSG4, strlen(MSG4)))
   2191         goto end;
   2192 
   2193     /*
   2194      * If client writes normal data it should mean writing early data is no
   2195      * longer possible.
   2196      */
   2197     if (!TEST_true(SSL_write_ex(clientssl, MSG5, strlen(MSG5), &written))
   2198             || !TEST_size_t_eq(written, strlen(MSG5))
   2199             || !TEST_int_eq(SSL_get_early_data_status(clientssl),
   2200                             SSL_EARLY_DATA_ACCEPTED))
   2201         goto end;
   2202 
   2203     /*
   2204      * At this point the client has written EndOfEarlyData, ClientFinished and
   2205      * normal (fully protected) data. We are going to cause a delay between the
   2206      * arrival of EndOfEarlyData and ClientFinished. We read out all the data
   2207      * in the read BIO, and then just put back the EndOfEarlyData message.
   2208      */
   2209     rbio = SSL_get_rbio(serverssl);
   2210     if (!TEST_true(BIO_read_ex(rbio, data, sizeof(data), &rawread))
   2211             || !TEST_size_t_lt(rawread, sizeof(data))
   2212             || !TEST_size_t_gt(rawread, SSL3_RT_HEADER_LENGTH))
   2213         goto end;
   2214 
   2215     /* Record length is in the 4th and 5th bytes of the record header */
   2216     eoedlen = SSL3_RT_HEADER_LENGTH + (data[3] << 8 | data[4]);
   2217     if (!TEST_true(BIO_write_ex(rbio, data, eoedlen, &rawwritten))
   2218             || !TEST_size_t_eq(rawwritten, eoedlen))
   2219         goto end;
   2220 
   2221     /* Server should be told that there is no more early data */
   2222     if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
   2223                                          &readbytes),
   2224                      SSL_READ_EARLY_DATA_FINISH)
   2225             || !TEST_size_t_eq(readbytes, 0))
   2226         goto end;
   2227 
   2228     /*
   2229      * Server has not finished init yet, so should still be able to write early
   2230      * data.
   2231      */
   2232     if (!TEST_true(SSL_write_early_data(serverssl, MSG6, strlen(MSG6),
   2233                                         &written))
   2234             || !TEST_size_t_eq(written, strlen(MSG6)))
   2235         goto end;
   2236 
   2237     /* Push the ClientFinished and the normal data back into the server rbio */
   2238     if (!TEST_true(BIO_write_ex(rbio, data + eoedlen, rawread - eoedlen,
   2239                                 &rawwritten))
   2240             || !TEST_size_t_eq(rawwritten, rawread - eoedlen))
   2241         goto end;
   2242 
   2243     /* Server should be able to read normal data */
   2244     if (!TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
   2245             || !TEST_size_t_eq(readbytes, strlen(MSG5)))
   2246         goto end;
   2247 
   2248     /* Client and server should not be able to write/read early data now */
   2249     if (!TEST_false(SSL_write_early_data(clientssl, MSG6, strlen(MSG6),
   2250                                          &written)))
   2251         goto end;
   2252     ERR_clear_error();
   2253     if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
   2254                                          &readbytes),
   2255                      SSL_READ_EARLY_DATA_ERROR))
   2256         goto end;
   2257     ERR_clear_error();
   2258 
   2259     /* Client should be able to read the data sent by the server */
   2260     if (!TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
   2261             || !TEST_mem_eq(buf, readbytes, MSG6, strlen(MSG6)))
   2262         goto end;
   2263 
   2264     /*
   2265      * Make sure we process the two NewSessionTickets. These arrive
   2266      * post-handshake. We attempt reads which we do not expect to return any
   2267      * data.
   2268      */
   2269     if (!TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
   2270             || !TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf),
   2271                            &readbytes)))
   2272         goto end;
   2273 
   2274     /* Server should be able to write normal data */
   2275     if (!TEST_true(SSL_write_ex(serverssl, MSG7, strlen(MSG7), &written))
   2276             || !TEST_size_t_eq(written, strlen(MSG7))
   2277             || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
   2278             || !TEST_mem_eq(buf, readbytes, MSG7, strlen(MSG7)))
   2279         goto end;
   2280 
   2281     SSL_SESSION_free(sess);
   2282     sess = SSL_get1_session(clientssl);
   2283     use_session_cb_cnt = 0;
   2284     find_session_cb_cnt = 0;
   2285 
   2286     SSL_shutdown(clientssl);
   2287     SSL_shutdown(serverssl);
   2288     SSL_free(serverssl);
   2289     SSL_free(clientssl);
   2290     serverssl = clientssl = NULL;
   2291     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
   2292                                       &clientssl, NULL, NULL))
   2293             || !TEST_true(SSL_set_session(clientssl, sess)))
   2294         goto end;
   2295 
   2296     /* Write and read some early data */
   2297     if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
   2298                                         &written))
   2299             || !TEST_size_t_eq(written, strlen(MSG1))
   2300             || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
   2301                                                 &readbytes),
   2302                             SSL_READ_EARLY_DATA_SUCCESS)
   2303             || !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1)))
   2304         goto end;
   2305 
   2306     if (!TEST_int_gt(SSL_connect(clientssl), 0)
   2307             || !TEST_int_gt(SSL_accept(serverssl), 0))
   2308         goto end;
   2309 
   2310     /* Client and server should not be able to write/read early data now */
   2311     if (!TEST_false(SSL_write_early_data(clientssl, MSG6, strlen(MSG6),
   2312                                          &written)))
   2313         goto end;
   2314     ERR_clear_error();
   2315     if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
   2316                                          &readbytes),
   2317                      SSL_READ_EARLY_DATA_ERROR))
   2318         goto end;
   2319     ERR_clear_error();
   2320 
   2321     /* Client and server should be able to write/read normal data */
   2322     if (!TEST_true(SSL_write_ex(clientssl, MSG5, strlen(MSG5), &written))
   2323             || !TEST_size_t_eq(written, strlen(MSG5))
   2324             || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
   2325             || !TEST_size_t_eq(readbytes, strlen(MSG5)))
   2326         goto end;
   2327 
   2328     testresult = 1;
   2329 
   2330  end:
   2331     SSL_SESSION_free(sess);
   2332     SSL_SESSION_free(clientpsk);
   2333     SSL_SESSION_free(serverpsk);
   2334     clientpsk = serverpsk = NULL;
   2335     SSL_free(serverssl);
   2336     SSL_free(clientssl);
   2337     SSL_CTX_free(sctx);
   2338     SSL_CTX_free(cctx);
   2339     return testresult;
   2340 }
   2341 
   2342 static int allow_ed_cb_called = 0;
   2343 
   2344 static int allow_early_data_cb(SSL *s, void *arg)
   2345 {
   2346     int *usecb = (int *)arg;
   2347 
   2348     allow_ed_cb_called++;
   2349 
   2350     if (*usecb == 1)
   2351         return 0;
   2352 
   2353     return 1;
   2354 }
   2355 
   2356 /*
   2357  * idx == 0: Standard early_data setup
   2358  * idx == 1: early_data setup using read_ahead
   2359  * usecb == 0: Don't use a custom early data callback
   2360  * usecb == 1: Use a custom early data callback and reject the early data
   2361  * usecb == 2: Use a custom early data callback and accept the early data
   2362  * confopt == 0: Configure anti-replay directly
   2363  * confopt == 1: Configure anti-replay using SSL_CONF
   2364  */
   2365 static int test_early_data_replay_int(int idx, int usecb, int confopt)
   2366 {
   2367     SSL_CTX *cctx = NULL, *sctx = NULL;
   2368     SSL *clientssl = NULL, *serverssl = NULL;
   2369     int testresult = 0;
   2370     SSL_SESSION *sess = NULL;
   2371     size_t readbytes, written;
   2372     unsigned char buf[20];
   2373 
   2374     allow_ed_cb_called = 0;
   2375 
   2376     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
   2377                                        TLS1_VERSION, TLS_MAX_VERSION, &sctx,
   2378                                        &cctx, cert, privkey)))
   2379         return 0;
   2380 
   2381     if (usecb > 0) {
   2382         if (confopt == 0) {
   2383             SSL_CTX_set_options(sctx, SSL_OP_NO_ANTI_REPLAY);
   2384         } else {
   2385             SSL_CONF_CTX *confctx = SSL_CONF_CTX_new();
   2386 
   2387             if (!TEST_ptr(confctx))
   2388                 goto end;
   2389             SSL_CONF_CTX_set_flags(confctx, SSL_CONF_FLAG_FILE
   2390                                             | SSL_CONF_FLAG_SERVER);
   2391             SSL_CONF_CTX_set_ssl_ctx(confctx, sctx);
   2392             if (!TEST_int_eq(SSL_CONF_cmd(confctx, "Options", "-AntiReplay"),
   2393                              2)) {
   2394                 SSL_CONF_CTX_free(confctx);
   2395                 goto end;
   2396             }
   2397             SSL_CONF_CTX_free(confctx);
   2398         }
   2399         SSL_CTX_set_allow_early_data_cb(sctx, allow_early_data_cb, &usecb);
   2400     }
   2401 
   2402     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
   2403                                         &serverssl, &sess, idx)))
   2404         goto end;
   2405 
   2406     /*
   2407      * The server is configured to accept early data. Create a connection to
   2408      * "use up" the ticket
   2409      */
   2410     if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))
   2411             || !TEST_true(SSL_session_reused(clientssl)))
   2412         goto end;
   2413 
   2414     SSL_shutdown(clientssl);
   2415     SSL_shutdown(serverssl);
   2416     SSL_free(serverssl);
   2417     SSL_free(clientssl);
   2418     serverssl = clientssl = NULL;
   2419 
   2420     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
   2421                                       &clientssl, NULL, NULL))
   2422             || !TEST_true(SSL_set_session(clientssl, sess)))
   2423         goto end;
   2424 
   2425     /* Write and read some early data */
   2426     if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
   2427                                         &written))
   2428             || !TEST_size_t_eq(written, strlen(MSG1)))
   2429         goto end;
   2430 
   2431     if (usecb <= 1) {
   2432         if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
   2433                                              &readbytes),
   2434                          SSL_READ_EARLY_DATA_FINISH)
   2435                    /*
   2436                     * The ticket was reused, so the we should have rejected the
   2437                     * early data
   2438                     */
   2439                 || !TEST_int_eq(SSL_get_early_data_status(serverssl),
   2440                                 SSL_EARLY_DATA_REJECTED))
   2441             goto end;
   2442     } else {
   2443         /* In this case the callback decides to accept the early data */
   2444         if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
   2445                                              &readbytes),
   2446                          SSL_READ_EARLY_DATA_SUCCESS)
   2447                 || !TEST_mem_eq(MSG1, strlen(MSG1), buf, readbytes)
   2448                    /*
   2449                     * Server will have sent its flight so client can now send
   2450                     * end of early data and complete its half of the handshake
   2451                     */
   2452                 || !TEST_int_gt(SSL_connect(clientssl), 0)
   2453                 || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
   2454                                              &readbytes),
   2455                                 SSL_READ_EARLY_DATA_FINISH)
   2456                 || !TEST_int_eq(SSL_get_early_data_status(serverssl),
   2457                                 SSL_EARLY_DATA_ACCEPTED))
   2458             goto end;
   2459     }
   2460 
   2461     /* Complete the connection */
   2462     if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))
   2463             || !TEST_int_eq(SSL_session_reused(clientssl), (usecb > 0) ? 1 : 0)
   2464             || !TEST_int_eq(allow_ed_cb_called, usecb > 0 ? 1 : 0))
   2465         goto end;
   2466 
   2467     testresult = 1;
   2468 
   2469  end:
   2470     SSL_SESSION_free(sess);
   2471     SSL_SESSION_free(clientpsk);
   2472     SSL_SESSION_free(serverpsk);
   2473     clientpsk = serverpsk = NULL;
   2474     SSL_free(serverssl);
   2475     SSL_free(clientssl);
   2476     SSL_CTX_free(sctx);
   2477     SSL_CTX_free(cctx);
   2478     return testresult;
   2479 }
   2480 
   2481 static int test_early_data_replay(int idx)
   2482 {
   2483     int ret = 1, usecb, confopt;
   2484 
   2485     for (usecb = 0; usecb < 3; usecb++) {
   2486         for (confopt = 0; confopt < 2; confopt++)
   2487             ret &= test_early_data_replay_int(idx, usecb, confopt);
   2488     }
   2489 
   2490     return ret;
   2491 }
   2492 
   2493 /*
   2494  * Helper function to test that a server attempting to read early data can
   2495  * handle a connection from a client where the early data should be skipped.
   2496  * testtype: 0 == No HRR
   2497  * testtype: 1 == HRR
   2498  * testtype: 2 == HRR, invalid early_data sent after HRR
   2499  * testtype: 3 == recv_max_early_data set to 0
   2500  */
   2501 static int early_data_skip_helper(int testtype, int idx)
   2502 {
   2503     SSL_CTX *cctx = NULL, *sctx = NULL;
   2504     SSL *clientssl = NULL, *serverssl = NULL;
   2505     int testresult = 0;
   2506     SSL_SESSION *sess = NULL;
   2507     unsigned char buf[20];
   2508     size_t readbytes, written;
   2509 
   2510     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
   2511                                         &serverssl, &sess, idx)))
   2512         goto end;
   2513 
   2514     if (testtype == 1 || testtype == 2) {
   2515         /* Force an HRR to occur */
   2516         if (!TEST_true(SSL_set1_groups_list(serverssl, "P-256")))
   2517             goto end;
   2518     } else if (idx == 2) {
   2519         /*
   2520          * We force early_data rejection by ensuring the PSK identity is
   2521          * unrecognised
   2522          */
   2523         srvid = "Dummy Identity";
   2524     } else {
   2525         /*
   2526          * Deliberately corrupt the creation time. We take 20 seconds off the
   2527          * time. It could be any value as long as it is not within tolerance.
   2528          * This should mean the ticket is rejected.
   2529          */
   2530         if (!TEST_true(SSL_SESSION_set_time(sess, (long)(time(NULL) - 20))))
   2531             goto end;
   2532     }
   2533 
   2534     if (testtype == 3
   2535             && !TEST_true(SSL_set_recv_max_early_data(serverssl, 0)))
   2536         goto end;
   2537 
   2538     /* Write some early data */
   2539     if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
   2540                                         &written))
   2541             || !TEST_size_t_eq(written, strlen(MSG1)))
   2542         goto end;
   2543 
   2544     /* Server should reject the early data */
   2545     if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
   2546                                          &readbytes),
   2547                      SSL_READ_EARLY_DATA_FINISH)
   2548             || !TEST_size_t_eq(readbytes, 0)
   2549             || !TEST_int_eq(SSL_get_early_data_status(serverssl),
   2550                             SSL_EARLY_DATA_REJECTED))
   2551         goto end;
   2552 
   2553     switch (testtype) {
   2554     case 0:
   2555         /* Nothing to do */
   2556         break;
   2557 
   2558     case 1:
   2559         /*
   2560          * Finish off the handshake. We perform the same writes and reads as
   2561          * further down but we expect them to fail due to the incomplete
   2562          * handshake.
   2563          */
   2564         if (!TEST_false(SSL_write_ex(clientssl, MSG2, strlen(MSG2), &written))
   2565                 || !TEST_false(SSL_read_ex(serverssl, buf, sizeof(buf),
   2566                                &readbytes)))
   2567             goto end;
   2568         break;
   2569 
   2570     case 2:
   2571         {
   2572             BIO *wbio = SSL_get_wbio(clientssl);
   2573             /* A record that will appear as bad early_data */
   2574             const unsigned char bad_early_data[] = {
   2575                 0x17, 0x03, 0x03, 0x00, 0x01, 0x00
   2576             };
   2577 
   2578             /*
   2579              * We force the client to attempt a write. This will fail because
   2580              * we're still in the handshake. It will cause the second
   2581              * ClientHello to be sent.
   2582              */
   2583             if (!TEST_false(SSL_write_ex(clientssl, MSG2, strlen(MSG2),
   2584                                          &written)))
   2585                 goto end;
   2586 
   2587             /*
   2588              * Inject some early_data after the second ClientHello. This should
   2589              * cause the server to fail
   2590              */
   2591             if (!TEST_true(BIO_write_ex(wbio, bad_early_data,
   2592                                         sizeof(bad_early_data), &written)))
   2593                 goto end;
   2594         }
   2595         /* fallthrough */
   2596 
   2597     case 3:
   2598         /*
   2599          * This client has sent more early_data than we are willing to skip
   2600          * (case 3) or sent invalid early_data (case 2) so the connection should
   2601          * abort.
   2602          */
   2603         if (!TEST_false(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
   2604                 || !TEST_int_eq(SSL_get_error(serverssl, 0), SSL_ERROR_SSL))
   2605             goto end;
   2606 
   2607         /* Connection has failed - nothing more to do */
   2608         testresult = 1;
   2609         goto end;
   2610 
   2611     default:
   2612         TEST_error("Invalid test type");
   2613         goto end;
   2614     }
   2615 
   2616     /*
   2617      * Should be able to send normal data despite rejection of early data. The
   2618      * early_data should be skipped.
   2619      */
   2620     if (!TEST_true(SSL_write_ex(clientssl, MSG2, strlen(MSG2), &written))
   2621             || !TEST_size_t_eq(written, strlen(MSG2))
   2622             || !TEST_int_eq(SSL_get_early_data_status(clientssl),
   2623                             SSL_EARLY_DATA_REJECTED)
   2624             || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
   2625             || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
   2626         goto end;
   2627 
   2628     testresult = 1;
   2629 
   2630  end:
   2631     SSL_SESSION_free(clientpsk);
   2632     SSL_SESSION_free(serverpsk);
   2633     clientpsk = serverpsk = NULL;
   2634     SSL_SESSION_free(sess);
   2635     SSL_free(serverssl);
   2636     SSL_free(clientssl);
   2637     SSL_CTX_free(sctx);
   2638     SSL_CTX_free(cctx);
   2639     return testresult;
   2640 }
   2641 
   2642 /*
   2643  * Test that a server attempting to read early data can handle a connection
   2644  * from a client where the early data is not acceptable.
   2645  */
   2646 static int test_early_data_skip(int idx)
   2647 {
   2648     return early_data_skip_helper(0, idx);
   2649 }
   2650 
   2651 /*
   2652  * Test that a server attempting to read early data can handle a connection
   2653  * from a client where an HRR occurs.
   2654  */
   2655 static int test_early_data_skip_hrr(int idx)
   2656 {
   2657     return early_data_skip_helper(1, idx);
   2658 }
   2659 
   2660 /*
   2661  * Test that a server attempting to read early data can handle a connection
   2662  * from a client where an HRR occurs and correctly fails if early_data is sent
   2663  * after the HRR
   2664  */
   2665 static int test_early_data_skip_hrr_fail(int idx)
   2666 {
   2667     return early_data_skip_helper(2, idx);
   2668 }
   2669 
   2670 /*
   2671  * Test that a server attempting to read early data will abort if it tries to
   2672  * skip over too much.
   2673  */
   2674 static int test_early_data_skip_abort(int idx)
   2675 {
   2676     return early_data_skip_helper(3, idx);
   2677 }
   2678 
   2679 /*
   2680  * Test that a server attempting to read early data can handle a connection
   2681  * from a client that doesn't send any.
   2682  */
   2683 static int test_early_data_not_sent(int idx)
   2684 {
   2685     SSL_CTX *cctx = NULL, *sctx = NULL;
   2686     SSL *clientssl = NULL, *serverssl = NULL;
   2687     int testresult = 0;
   2688     SSL_SESSION *sess = NULL;
   2689     unsigned char buf[20];
   2690     size_t readbytes, written;
   2691 
   2692     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
   2693                                         &serverssl, &sess, idx)))
   2694         goto end;
   2695 
   2696     /* Write some data - should block due to handshake with server */
   2697     SSL_set_connect_state(clientssl);
   2698     if (!TEST_false(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written)))
   2699         goto end;
   2700 
   2701     /* Server should detect that early data has not been sent */
   2702     if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
   2703                                          &readbytes),
   2704                      SSL_READ_EARLY_DATA_FINISH)
   2705             || !TEST_size_t_eq(readbytes, 0)
   2706             || !TEST_int_eq(SSL_get_early_data_status(serverssl),
   2707                             SSL_EARLY_DATA_NOT_SENT)
   2708             || !TEST_int_eq(SSL_get_early_data_status(clientssl),
   2709                             SSL_EARLY_DATA_NOT_SENT))
   2710         goto end;
   2711 
   2712     /* Continue writing the message we started earlier */
   2713     if (!TEST_true(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written))
   2714             || !TEST_size_t_eq(written, strlen(MSG1))
   2715             || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
   2716             || !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1))
   2717             || !SSL_write_ex(serverssl, MSG2, strlen(MSG2), &written)
   2718             || !TEST_size_t_eq(written, strlen(MSG2)))
   2719         goto end;
   2720 
   2721     if (!TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
   2722             || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
   2723         goto end;
   2724 
   2725     testresult = 1;
   2726 
   2727  end:
   2728     SSL_SESSION_free(sess);
   2729     SSL_SESSION_free(clientpsk);
   2730     SSL_SESSION_free(serverpsk);
   2731     clientpsk = serverpsk = NULL;
   2732     SSL_free(serverssl);
   2733     SSL_free(clientssl);
   2734     SSL_CTX_free(sctx);
   2735     SSL_CTX_free(cctx);
   2736     return testresult;
   2737 }
   2738 
   2739 static int hostname_cb(SSL *s, int *al, void *arg)
   2740 {
   2741     const char *hostname = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name);
   2742 
   2743     if (hostname != NULL && strcmp(hostname, "goodhost") == 0)
   2744         return  SSL_TLSEXT_ERR_OK;
   2745 
   2746     return SSL_TLSEXT_ERR_NOACK;
   2747 }
   2748 
   2749 static const char *servalpn;
   2750 
   2751 static int alpn_select_cb(SSL *ssl, const unsigned char **out,
   2752                           unsigned char *outlen, const unsigned char *in,
   2753                           unsigned int inlen, void *arg)
   2754 {
   2755     unsigned int protlen = 0;
   2756     const unsigned char *prot;
   2757 
   2758     for (prot = in; prot < in + inlen; prot += protlen) {
   2759         protlen = *prot++;
   2760         if (in + inlen < prot + protlen)
   2761             return SSL_TLSEXT_ERR_NOACK;
   2762 
   2763         if (protlen == strlen(servalpn)
   2764                 && memcmp(prot, servalpn, protlen) == 0) {
   2765             *out = prot;
   2766             *outlen = protlen;
   2767             return SSL_TLSEXT_ERR_OK;
   2768         }
   2769     }
   2770 
   2771     return SSL_TLSEXT_ERR_NOACK;
   2772 }
   2773 
   2774 /* Test that a PSK can be used to send early_data */
   2775 static int test_early_data_psk(int idx)
   2776 {
   2777     SSL_CTX *cctx = NULL, *sctx = NULL;
   2778     SSL *clientssl = NULL, *serverssl = NULL;
   2779     int testresult = 0;
   2780     SSL_SESSION *sess = NULL;
   2781     unsigned char alpnlist[] = {
   2782         0x08, 'g', 'o', 'o', 'd', 'a', 'l', 'p', 'n', 0x07, 'b', 'a', 'd', 'a',
   2783         'l', 'p', 'n'
   2784     };
   2785 #define GOODALPNLEN     9
   2786 #define BADALPNLEN      8
   2787 #define GOODALPN        (alpnlist)
   2788 #define BADALPN         (alpnlist + GOODALPNLEN)
   2789     int err = 0;
   2790     unsigned char buf[20];
   2791     size_t readbytes, written;
   2792     int readearlyres = SSL_READ_EARLY_DATA_SUCCESS, connectres = 1;
   2793     int edstatus = SSL_EARLY_DATA_ACCEPTED;
   2794 
   2795     /* We always set this up with a final parameter of "2" for PSK */
   2796     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
   2797                                         &serverssl, &sess, 2)))
   2798         goto end;
   2799 
   2800     servalpn = "goodalpn";
   2801 
   2802     /*
   2803      * Note: There is no test for inconsistent SNI with late client detection.
   2804      * This is because servers do not acknowledge SNI even if they are using
   2805      * it in a resumption handshake - so it is not actually possible for a
   2806      * client to detect a problem.
   2807      */
   2808     switch (idx) {
   2809     case 0:
   2810         /* Set inconsistent SNI (early client detection) */
   2811         err = SSL_R_INCONSISTENT_EARLY_DATA_SNI;
   2812         if (!TEST_true(SSL_SESSION_set1_hostname(sess, "goodhost"))
   2813                 || !TEST_true(SSL_set_tlsext_host_name(clientssl, "badhost")))
   2814             goto end;
   2815         break;
   2816 
   2817     case 1:
   2818         /* Set inconsistent ALPN (early client detection) */
   2819         err = SSL_R_INCONSISTENT_EARLY_DATA_ALPN;
   2820         /* SSL_set_alpn_protos returns 0 for success and 1 for failure */
   2821         if (!TEST_true(SSL_SESSION_set1_alpn_selected(sess, GOODALPN,
   2822                                                       GOODALPNLEN))
   2823                 || !TEST_false(SSL_set_alpn_protos(clientssl, BADALPN,
   2824                                                    BADALPNLEN)))
   2825             goto end;
   2826         break;
   2827 
   2828     case 2:
   2829         /*
   2830          * Set invalid protocol version. Technically this affects PSKs without
   2831          * early_data too, but we test it here because it is similar to the
   2832          * SNI/ALPN consistency tests.
   2833          */
   2834         err = SSL_R_BAD_PSK;
   2835         if (!TEST_true(SSL_SESSION_set_protocol_version(sess, TLS1_2_VERSION)))
   2836             goto end;
   2837         break;
   2838 
   2839     case 3:
   2840         /*
   2841          * Set inconsistent SNI (server detected). In this case the connection
   2842          * will succeed but reject early_data.
   2843          */
   2844         SSL_SESSION_free(serverpsk);
   2845         serverpsk = SSL_SESSION_dup(clientpsk);
   2846         if (!TEST_ptr(serverpsk)
   2847                 || !TEST_true(SSL_SESSION_set1_hostname(serverpsk, "badhost")))
   2848             goto end;
   2849         edstatus = SSL_EARLY_DATA_REJECTED;
   2850         readearlyres = SSL_READ_EARLY_DATA_FINISH;
   2851         /* Fall through */
   2852     case 4:
   2853         /* Set consistent SNI */
   2854         if (!TEST_true(SSL_SESSION_set1_hostname(sess, "goodhost"))
   2855                 || !TEST_true(SSL_set_tlsext_host_name(clientssl, "goodhost"))
   2856                 || !TEST_true(SSL_CTX_set_tlsext_servername_callback(sctx,
   2857                                 hostname_cb)))
   2858             goto end;
   2859         break;
   2860 
   2861     case 5:
   2862         /*
   2863          * Set inconsistent ALPN (server detected). In this case the connection
   2864          * will succeed but reject early_data.
   2865          */
   2866         servalpn = "badalpn";
   2867         edstatus = SSL_EARLY_DATA_REJECTED;
   2868         readearlyres = SSL_READ_EARLY_DATA_FINISH;
   2869         /* Fall through */
   2870     case 6:
   2871         /*
   2872          * Set consistent ALPN.
   2873          * SSL_set_alpn_protos returns 0 for success and 1 for failure. It
   2874          * accepts a list of protos (each one length prefixed).
   2875          * SSL_set1_alpn_selected accepts a single protocol (not length
   2876          * prefixed)
   2877          */
   2878         if (!TEST_true(SSL_SESSION_set1_alpn_selected(sess, GOODALPN + 1,
   2879                                                       GOODALPNLEN - 1))
   2880                 || !TEST_false(SSL_set_alpn_protos(clientssl, GOODALPN,
   2881                                                    GOODALPNLEN)))
   2882             goto end;
   2883 
   2884         SSL_CTX_set_alpn_select_cb(sctx, alpn_select_cb, NULL);
   2885         break;
   2886 
   2887     case 7:
   2888         /* Set inconsistent ALPN (late client detection) */
   2889         SSL_SESSION_free(serverpsk);
   2890         serverpsk = SSL_SESSION_dup(clientpsk);
   2891         if (!TEST_ptr(serverpsk)
   2892                 || !TEST_true(SSL_SESSION_set1_alpn_selected(clientpsk,
   2893                                                              BADALPN + 1,
   2894                                                              BADALPNLEN - 1))
   2895                 || !TEST_true(SSL_SESSION_set1_alpn_selected(serverpsk,
   2896                                                              GOODALPN + 1,
   2897                                                              GOODALPNLEN - 1))
   2898                 || !TEST_false(SSL_set_alpn_protos(clientssl, alpnlist,
   2899                                                    sizeof(alpnlist))))
   2900             goto end;
   2901         SSL_CTX_set_alpn_select_cb(sctx, alpn_select_cb, NULL);
   2902         edstatus = SSL_EARLY_DATA_ACCEPTED;
   2903         readearlyres = SSL_READ_EARLY_DATA_SUCCESS;
   2904         /* SSL_connect() call should fail */
   2905         connectres = -1;
   2906         break;
   2907 
   2908     default:
   2909         TEST_error("Bad test index");
   2910         goto end;
   2911     }
   2912 
   2913     SSL_set_connect_state(clientssl);
   2914     if (err != 0) {
   2915         if (!TEST_false(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
   2916                                             &written))
   2917                 || !TEST_int_eq(SSL_get_error(clientssl, 0), SSL_ERROR_SSL)
   2918                 || !TEST_int_eq(ERR_GET_REASON(ERR_get_error()), err))
   2919             goto end;
   2920     } else {
   2921         if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
   2922                                             &written)))
   2923             goto end;
   2924 
   2925         if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
   2926                                              &readbytes), readearlyres)
   2927                 || (readearlyres == SSL_READ_EARLY_DATA_SUCCESS
   2928                     && !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1)))
   2929                 || !TEST_int_eq(SSL_get_early_data_status(serverssl), edstatus)
   2930                 || !TEST_int_eq(SSL_connect(clientssl), connectres))
   2931             goto end;
   2932     }
   2933 
   2934     testresult = 1;
   2935 
   2936  end:
   2937     SSL_SESSION_free(sess);
   2938     SSL_SESSION_free(clientpsk);
   2939     SSL_SESSION_free(serverpsk);
   2940     clientpsk = serverpsk = NULL;
   2941     SSL_free(serverssl);
   2942     SSL_free(clientssl);
   2943     SSL_CTX_free(sctx);
   2944     SSL_CTX_free(cctx);
   2945     return testresult;
   2946 }
   2947 
   2948 /*
   2949  * Test that a server that doesn't try to read early data can handle a
   2950  * client sending some.
   2951  */
   2952 static int test_early_data_not_expected(int idx)
   2953 {
   2954     SSL_CTX *cctx = NULL, *sctx = NULL;
   2955     SSL *clientssl = NULL, *serverssl = NULL;
   2956     int testresult = 0;
   2957     SSL_SESSION *sess = NULL;
   2958     unsigned char buf[20];
   2959     size_t readbytes, written;
   2960 
   2961     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
   2962                                         &serverssl, &sess, idx)))
   2963         goto end;
   2964 
   2965     /* Write some early data */
   2966     if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
   2967                                         &written)))
   2968         goto end;
   2969 
   2970     /*
   2971      * Server should skip over early data and then block waiting for client to
   2972      * continue handshake
   2973      */
   2974     if (!TEST_int_le(SSL_accept(serverssl), 0)
   2975      || !TEST_int_gt(SSL_connect(clientssl), 0)
   2976      || !TEST_int_eq(SSL_get_early_data_status(serverssl),
   2977                      SSL_EARLY_DATA_REJECTED)
   2978      || !TEST_int_gt(SSL_accept(serverssl), 0)
   2979      || !TEST_int_eq(SSL_get_early_data_status(clientssl),
   2980                      SSL_EARLY_DATA_REJECTED))
   2981         goto end;
   2982 
   2983     /* Send some normal data from client to server */
   2984     if (!TEST_true(SSL_write_ex(clientssl, MSG2, strlen(MSG2), &written))
   2985             || !TEST_size_t_eq(written, strlen(MSG2)))
   2986         goto end;
   2987 
   2988     if (!TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
   2989             || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
   2990         goto end;
   2991 
   2992     testresult = 1;
   2993 
   2994  end:
   2995     SSL_SESSION_free(sess);
   2996     SSL_SESSION_free(clientpsk);
   2997     SSL_SESSION_free(serverpsk);
   2998     clientpsk = serverpsk = NULL;
   2999     SSL_free(serverssl);
   3000     SSL_free(clientssl);
   3001     SSL_CTX_free(sctx);
   3002     SSL_CTX_free(cctx);
   3003     return testresult;
   3004 }
   3005 
   3006 
   3007 # ifndef OPENSSL_NO_TLS1_2
   3008 /*
   3009  * Test that a server attempting to read early data can handle a connection
   3010  * from a TLSv1.2 client.
   3011  */
   3012 static int test_early_data_tls1_2(int idx)
   3013 {
   3014     SSL_CTX *cctx = NULL, *sctx = NULL;
   3015     SSL *clientssl = NULL, *serverssl = NULL;
   3016     int testresult = 0;
   3017     unsigned char buf[20];
   3018     size_t readbytes, written;
   3019 
   3020     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
   3021                                         &serverssl, NULL, idx)))
   3022         goto end;
   3023 
   3024     /* Write some data - should block due to handshake with server */
   3025     SSL_set_max_proto_version(clientssl, TLS1_2_VERSION);
   3026     SSL_set_connect_state(clientssl);
   3027     if (!TEST_false(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written)))
   3028         goto end;
   3029 
   3030     /*
   3031      * Server should do TLSv1.2 handshake. First it will block waiting for more
   3032      * messages from client after ServerDone. Then SSL_read_early_data should
   3033      * finish and detect that early data has not been sent
   3034      */
   3035     if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
   3036                                          &readbytes),
   3037                      SSL_READ_EARLY_DATA_ERROR))
   3038         goto end;
   3039 
   3040     /*
   3041      * Continue writing the message we started earlier. Will still block waiting
   3042      * for the CCS/Finished from server
   3043      */
   3044     if (!TEST_false(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written))
   3045             || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
   3046                                                 &readbytes),
   3047                             SSL_READ_EARLY_DATA_FINISH)
   3048             || !TEST_size_t_eq(readbytes, 0)
   3049             || !TEST_int_eq(SSL_get_early_data_status(serverssl),
   3050                             SSL_EARLY_DATA_NOT_SENT))
   3051         goto end;
   3052 
   3053     /* Continue writing the message we started earlier */
   3054     if (!TEST_true(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written))
   3055             || !TEST_size_t_eq(written, strlen(MSG1))
   3056             || !TEST_int_eq(SSL_get_early_data_status(clientssl),
   3057                             SSL_EARLY_DATA_NOT_SENT)
   3058             || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
   3059             || !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1))
   3060             || !TEST_true(SSL_write_ex(serverssl, MSG2, strlen(MSG2), &written))
   3061             || !TEST_size_t_eq(written, strlen(MSG2))
   3062             || !SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes)
   3063             || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
   3064         goto end;
   3065 
   3066     testresult = 1;
   3067 
   3068  end:
   3069     SSL_SESSION_free(clientpsk);
   3070     SSL_SESSION_free(serverpsk);
   3071     clientpsk = serverpsk = NULL;
   3072     SSL_free(serverssl);
   3073     SSL_free(clientssl);
   3074     SSL_CTX_free(sctx);
   3075     SSL_CTX_free(cctx);
   3076 
   3077     return testresult;
   3078 }
   3079 # endif /* OPENSSL_NO_TLS1_2 */
   3080 
   3081 /*
   3082  * Test configuring the TLSv1.3 ciphersuites
   3083  *
   3084  * Test 0: Set a default ciphersuite in the SSL_CTX (no explicit cipher_list)
   3085  * Test 1: Set a non-default ciphersuite in the SSL_CTX (no explicit cipher_list)
   3086  * Test 2: Set a default ciphersuite in the SSL (no explicit cipher_list)
   3087  * Test 3: Set a non-default ciphersuite in the SSL (no explicit cipher_list)
   3088  * Test 4: Set a default ciphersuite in the SSL_CTX (SSL_CTX cipher_list)
   3089  * Test 5: Set a non-default ciphersuite in the SSL_CTX (SSL_CTX cipher_list)
   3090  * Test 6: Set a default ciphersuite in the SSL (SSL_CTX cipher_list)
   3091  * Test 7: Set a non-default ciphersuite in the SSL (SSL_CTX cipher_list)
   3092  * Test 8: Set a default ciphersuite in the SSL (SSL cipher_list)
   3093  * Test 9: Set a non-default ciphersuite in the SSL (SSL cipher_list)
   3094  */
   3095 static int test_set_ciphersuite(int idx)
   3096 {
   3097     SSL_CTX *cctx = NULL, *sctx = NULL;
   3098     SSL *clientssl = NULL, *serverssl = NULL;
   3099     int testresult = 0;
   3100 
   3101     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
   3102                                        TLS1_VERSION, TLS_MAX_VERSION,
   3103                                        &sctx, &cctx, cert, privkey))
   3104             || !TEST_true(SSL_CTX_set_ciphersuites(sctx,
   3105                            "TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256")))
   3106         goto end;
   3107 
   3108     if (idx >=4 && idx <= 7) {
   3109         /* SSL_CTX explicit cipher list */
   3110         if (!TEST_true(SSL_CTX_set_cipher_list(cctx, "AES256-GCM-SHA384")))
   3111             goto end;
   3112     }
   3113 
   3114     if (idx == 0 || idx == 4) {
   3115         /* Default ciphersuite */
   3116         if (!TEST_true(SSL_CTX_set_ciphersuites(cctx,
   3117                                                 "TLS_AES_128_GCM_SHA256")))
   3118             goto end;
   3119     } else if (idx == 1 || idx == 5) {
   3120         /* Non default ciphersuite */
   3121         if (!TEST_true(SSL_CTX_set_ciphersuites(cctx,
   3122                                                 "TLS_AES_128_CCM_SHA256")))
   3123             goto end;
   3124     }
   3125 
   3126     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
   3127                                           &clientssl, NULL, NULL)))
   3128         goto end;
   3129 
   3130     if (idx == 8 || idx == 9) {
   3131         /* SSL explicit cipher list */
   3132         if (!TEST_true(SSL_set_cipher_list(clientssl, "AES256-GCM-SHA384")))
   3133             goto end;
   3134     }
   3135 
   3136     if (idx == 2 || idx == 6 || idx == 8) {
   3137         /* Default ciphersuite */
   3138         if (!TEST_true(SSL_set_ciphersuites(clientssl,
   3139                                             "TLS_AES_128_GCM_SHA256")))
   3140             goto end;
   3141     } else if (idx == 3 || idx == 7 || idx == 9) {
   3142         /* Non default ciphersuite */
   3143         if (!TEST_true(SSL_set_ciphersuites(clientssl,
   3144                                             "TLS_AES_128_CCM_SHA256")))
   3145             goto end;
   3146     }
   3147 
   3148     if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE)))
   3149         goto end;
   3150 
   3151     testresult = 1;
   3152 
   3153  end:
   3154     SSL_free(serverssl);
   3155     SSL_free(clientssl);
   3156     SSL_CTX_free(sctx);
   3157     SSL_CTX_free(cctx);
   3158 
   3159     return testresult;
   3160 }
   3161 
   3162 static int test_ciphersuite_change(void)
   3163 {
   3164     SSL_CTX *cctx = NULL, *sctx = NULL;
   3165     SSL *clientssl = NULL, *serverssl = NULL;
   3166     SSL_SESSION *clntsess = NULL;
   3167     int testresult = 0;
   3168     const SSL_CIPHER *aes_128_gcm_sha256 = NULL;
   3169 
   3170     /* Create a session based on SHA-256 */
   3171     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
   3172                                        TLS1_VERSION, TLS_MAX_VERSION,
   3173                                        &sctx, &cctx, cert, privkey))
   3174             || !TEST_true(SSL_CTX_set_ciphersuites(cctx,
   3175                                                    "TLS_AES_128_GCM_SHA256"))
   3176             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
   3177                                           &clientssl, NULL, NULL))
   3178             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   3179                                                 SSL_ERROR_NONE)))
   3180         goto end;
   3181 
   3182     clntsess = SSL_get1_session(clientssl);
   3183     /* Save for later */
   3184     aes_128_gcm_sha256 = SSL_SESSION_get0_cipher(clntsess);
   3185     SSL_shutdown(clientssl);
   3186     SSL_shutdown(serverssl);
   3187     SSL_free(serverssl);
   3188     SSL_free(clientssl);
   3189     serverssl = clientssl = NULL;
   3190 
   3191 # if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
   3192     /* Check we can resume a session with a different SHA-256 ciphersuite */
   3193     if (!TEST_true(SSL_CTX_set_ciphersuites(cctx,
   3194                                             "TLS_CHACHA20_POLY1305_SHA256"))
   3195             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   3196                                              NULL, NULL))
   3197             || !TEST_true(SSL_set_session(clientssl, clntsess))
   3198             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   3199                                                 SSL_ERROR_NONE))
   3200             || !TEST_true(SSL_session_reused(clientssl)))
   3201         goto end;
   3202 
   3203     SSL_SESSION_free(clntsess);
   3204     clntsess = SSL_get1_session(clientssl);
   3205     SSL_shutdown(clientssl);
   3206     SSL_shutdown(serverssl);
   3207     SSL_free(serverssl);
   3208     SSL_free(clientssl);
   3209     serverssl = clientssl = NULL;
   3210 # endif
   3211 
   3212     /*
   3213      * Check attempting to resume a SHA-256 session with no SHA-256 ciphersuites
   3214      * succeeds but does not resume.
   3215      */
   3216     if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, "TLS_AES_256_GCM_SHA384"))
   3217             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   3218                                              NULL, NULL))
   3219             || !TEST_true(SSL_set_session(clientssl, clntsess))
   3220             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   3221                                                 SSL_ERROR_SSL))
   3222             || !TEST_false(SSL_session_reused(clientssl)))
   3223         goto end;
   3224 
   3225     SSL_SESSION_free(clntsess);
   3226     clntsess = NULL;
   3227     SSL_shutdown(clientssl);
   3228     SSL_shutdown(serverssl);
   3229     SSL_free(serverssl);
   3230     SSL_free(clientssl);
   3231     serverssl = clientssl = NULL;
   3232 
   3233     /* Create a session based on SHA384 */
   3234     if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, "TLS_AES_256_GCM_SHA384"))
   3235             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
   3236                                           &clientssl, NULL, NULL))
   3237             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   3238                                                 SSL_ERROR_NONE)))
   3239         goto end;
   3240 
   3241     clntsess = SSL_get1_session(clientssl);
   3242     SSL_shutdown(clientssl);
   3243     SSL_shutdown(serverssl);
   3244     SSL_free(serverssl);
   3245     SSL_free(clientssl);
   3246     serverssl = clientssl = NULL;
   3247 
   3248     if (!TEST_true(SSL_CTX_set_ciphersuites(cctx,
   3249                    "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384"))
   3250             || !TEST_true(SSL_CTX_set_ciphersuites(sctx,
   3251                                                    "TLS_AES_256_GCM_SHA384"))
   3252             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   3253                                              NULL, NULL))
   3254             || !TEST_true(SSL_set_session(clientssl, clntsess))
   3255                /*
   3256                 * We use SSL_ERROR_WANT_READ below so that we can pause the
   3257                 * connection after the initial ClientHello has been sent to
   3258                 * enable us to make some session changes.
   3259                 */
   3260             || !TEST_false(create_ssl_connection(serverssl, clientssl,
   3261                                                 SSL_ERROR_WANT_READ)))
   3262         goto end;
   3263 
   3264     /* Trick the client into thinking this session is for a different digest */
   3265     clntsess->cipher = aes_128_gcm_sha256;
   3266     clntsess->cipher_id = clntsess->cipher->id;
   3267 
   3268     /*
   3269      * Continue the previously started connection. Server has selected a SHA-384
   3270      * ciphersuite, but client thinks the session is for SHA-256, so it should
   3271      * bail out.
   3272      */
   3273     if (!TEST_false(create_ssl_connection(serverssl, clientssl,
   3274                                                 SSL_ERROR_SSL))
   3275             || !TEST_int_eq(ERR_GET_REASON(ERR_get_error()),
   3276                             SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED))
   3277         goto end;
   3278 
   3279     testresult = 1;
   3280 
   3281  end:
   3282     SSL_SESSION_free(clntsess);
   3283     SSL_free(serverssl);
   3284     SSL_free(clientssl);
   3285     SSL_CTX_free(sctx);
   3286     SSL_CTX_free(cctx);
   3287 
   3288     return testresult;
   3289 }
   3290 
   3291 /*
   3292  * Test TLSv1.3 PSKs
   3293  * Test 0 = Test new style callbacks
   3294  * Test 1 = Test both new and old style callbacks
   3295  * Test 2 = Test old style callbacks
   3296  * Test 3 = Test old style callbacks with no certificate
   3297  */
   3298 static int test_tls13_psk(int idx)
   3299 {
   3300     SSL_CTX *sctx = NULL, *cctx = NULL;
   3301     SSL *serverssl = NULL, *clientssl = NULL;
   3302     const SSL_CIPHER *cipher = NULL;
   3303     const unsigned char key[] = {
   3304         0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
   3305         0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
   3306         0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
   3307         0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f
   3308     };
   3309     int testresult = 0;
   3310 
   3311     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
   3312                                        TLS1_VERSION, TLS_MAX_VERSION,
   3313                                        &sctx, &cctx, idx == 3 ? NULL : cert,
   3314                                        idx == 3 ? NULL : privkey)))
   3315         goto end;
   3316 
   3317     if (idx != 3) {
   3318         /*
   3319          * We use a ciphersuite with SHA256 to ease testing old style PSK
   3320          * callbacks which will always default to SHA256. This should not be
   3321          * necessary if we have no cert/priv key. In that case the server should
   3322          * prefer SHA256 automatically.
   3323          */
   3324         if (!TEST_true(SSL_CTX_set_ciphersuites(cctx,
   3325                                                 "TLS_AES_128_GCM_SHA256")))
   3326             goto end;
   3327     }
   3328 
   3329     /*
   3330      * Test 0: New style callbacks only
   3331      * Test 1: New and old style callbacks (only the new ones should be used)
   3332      * Test 2: Old style callbacks only
   3333      */
   3334     if (idx == 0 || idx == 1) {
   3335         SSL_CTX_set_psk_use_session_callback(cctx, use_session_cb);
   3336         SSL_CTX_set_psk_find_session_callback(sctx, find_session_cb);
   3337     }
   3338 #ifndef OPENSSL_NO_PSK
   3339     if (idx >= 1) {
   3340         SSL_CTX_set_psk_client_callback(cctx, psk_client_cb);
   3341         SSL_CTX_set_psk_server_callback(sctx, psk_server_cb);
   3342     }
   3343 #endif
   3344     srvid = pskid;
   3345     use_session_cb_cnt = 0;
   3346     find_session_cb_cnt = 0;
   3347     psk_client_cb_cnt = 0;
   3348     psk_server_cb_cnt = 0;
   3349 
   3350     if (idx != 3) {
   3351         /*
   3352          * Check we can create a connection if callback decides not to send a
   3353          * PSK
   3354          */
   3355         if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   3356                                                  NULL, NULL))
   3357                 || !TEST_true(create_ssl_connection(serverssl, clientssl,
   3358                                                     SSL_ERROR_NONE))
   3359                 || !TEST_false(SSL_session_reused(clientssl))
   3360                 || !TEST_false(SSL_session_reused(serverssl)))
   3361             goto end;
   3362 
   3363         if (idx == 0 || idx == 1) {
   3364             if (!TEST_true(use_session_cb_cnt == 1)
   3365                     || !TEST_true(find_session_cb_cnt == 0)
   3366                        /*
   3367                         * If no old style callback then below should be 0
   3368                         * otherwise 1
   3369                         */
   3370                     || !TEST_true(psk_client_cb_cnt == idx)
   3371                     || !TEST_true(psk_server_cb_cnt == 0))
   3372                 goto end;
   3373         } else {
   3374             if (!TEST_true(use_session_cb_cnt == 0)
   3375                     || !TEST_true(find_session_cb_cnt == 0)
   3376                     || !TEST_true(psk_client_cb_cnt == 1)
   3377                     || !TEST_true(psk_server_cb_cnt == 0))
   3378                 goto end;
   3379         }
   3380 
   3381         shutdown_ssl_connection(serverssl, clientssl);
   3382         serverssl = clientssl = NULL;
   3383         use_session_cb_cnt = psk_client_cb_cnt = 0;
   3384     }
   3385 
   3386     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   3387                                              NULL, NULL)))
   3388         goto end;
   3389 
   3390     /* Create the PSK */
   3391     cipher = SSL_CIPHER_find(clientssl, TLS13_AES_128_GCM_SHA256_BYTES);
   3392     clientpsk = SSL_SESSION_new();
   3393     if (!TEST_ptr(clientpsk)
   3394             || !TEST_ptr(cipher)
   3395             || !TEST_true(SSL_SESSION_set1_master_key(clientpsk, key,
   3396                                                       sizeof(key)))
   3397             || !TEST_true(SSL_SESSION_set_cipher(clientpsk, cipher))
   3398             || !TEST_true(SSL_SESSION_set_protocol_version(clientpsk,
   3399                                                            TLS1_3_VERSION))
   3400             || !TEST_true(SSL_SESSION_up_ref(clientpsk)))
   3401         goto end;
   3402     serverpsk = clientpsk;
   3403 
   3404     /* Check we can create a connection and the PSK is used */
   3405     if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))
   3406             || !TEST_true(SSL_session_reused(clientssl))
   3407             || !TEST_true(SSL_session_reused(serverssl)))
   3408         goto end;
   3409 
   3410     if (idx == 0 || idx == 1) {
   3411         if (!TEST_true(use_session_cb_cnt == 1)
   3412                 || !TEST_true(find_session_cb_cnt == 1)
   3413                 || !TEST_true(psk_client_cb_cnt == 0)
   3414                 || !TEST_true(psk_server_cb_cnt == 0))
   3415             goto end;
   3416     } else {
   3417         if (!TEST_true(use_session_cb_cnt == 0)
   3418                 || !TEST_true(find_session_cb_cnt == 0)
   3419                 || !TEST_true(psk_client_cb_cnt == 1)
   3420                 || !TEST_true(psk_server_cb_cnt == 1))
   3421             goto end;
   3422     }
   3423 
   3424     shutdown_ssl_connection(serverssl, clientssl);
   3425     serverssl = clientssl = NULL;
   3426     use_session_cb_cnt = find_session_cb_cnt = 0;
   3427     psk_client_cb_cnt = psk_server_cb_cnt = 0;
   3428 
   3429     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   3430                                              NULL, NULL)))
   3431         goto end;
   3432 
   3433     /* Force an HRR */
   3434     if (!TEST_true(SSL_set1_groups_list(serverssl, "P-256")))
   3435         goto end;
   3436 
   3437     /*
   3438      * Check we can create a connection, the PSK is used and the callbacks are
   3439      * called twice.
   3440      */
   3441     if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))
   3442             || !TEST_true(SSL_session_reused(clientssl))
   3443             || !TEST_true(SSL_session_reused(serverssl)))
   3444         goto end;
   3445 
   3446     if (idx == 0 || idx == 1) {
   3447         if (!TEST_true(use_session_cb_cnt == 2)
   3448                 || !TEST_true(find_session_cb_cnt == 2)
   3449                 || !TEST_true(psk_client_cb_cnt == 0)
   3450                 || !TEST_true(psk_server_cb_cnt == 0))
   3451             goto end;
   3452     } else {
   3453         if (!TEST_true(use_session_cb_cnt == 0)
   3454                 || !TEST_true(find_session_cb_cnt == 0)
   3455                 || !TEST_true(psk_client_cb_cnt == 2)
   3456                 || !TEST_true(psk_server_cb_cnt == 2))
   3457             goto end;
   3458     }
   3459 
   3460     shutdown_ssl_connection(serverssl, clientssl);
   3461     serverssl = clientssl = NULL;
   3462     use_session_cb_cnt = find_session_cb_cnt = 0;
   3463     psk_client_cb_cnt = psk_server_cb_cnt = 0;
   3464 
   3465     if (idx != 3) {
   3466         /*
   3467          * Check that if the server rejects the PSK we can still connect, but with
   3468          * a full handshake
   3469          */
   3470         srvid = "Dummy Identity";
   3471         if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   3472                                                  NULL, NULL))
   3473                 || !TEST_true(create_ssl_connection(serverssl, clientssl,
   3474                                                     SSL_ERROR_NONE))
   3475                 || !TEST_false(SSL_session_reused(clientssl))
   3476                 || !TEST_false(SSL_session_reused(serverssl)))
   3477             goto end;
   3478 
   3479         if (idx == 0 || idx == 1) {
   3480             if (!TEST_true(use_session_cb_cnt == 1)
   3481                     || !TEST_true(find_session_cb_cnt == 1)
   3482                     || !TEST_true(psk_client_cb_cnt == 0)
   3483                        /*
   3484                         * If no old style callback then below should be 0
   3485                         * otherwise 1
   3486                         */
   3487                     || !TEST_true(psk_server_cb_cnt == idx))
   3488                 goto end;
   3489         } else {
   3490             if (!TEST_true(use_session_cb_cnt == 0)
   3491                     || !TEST_true(find_session_cb_cnt == 0)
   3492                     || !TEST_true(psk_client_cb_cnt == 1)
   3493                     || !TEST_true(psk_server_cb_cnt == 1))
   3494                 goto end;
   3495         }
   3496 
   3497         shutdown_ssl_connection(serverssl, clientssl);
   3498         serverssl = clientssl = NULL;
   3499     }
   3500     testresult = 1;
   3501 
   3502  end:
   3503     SSL_SESSION_free(clientpsk);
   3504     SSL_SESSION_free(serverpsk);
   3505     clientpsk = serverpsk = NULL;
   3506     SSL_free(serverssl);
   3507     SSL_free(clientssl);
   3508     SSL_CTX_free(sctx);
   3509     SSL_CTX_free(cctx);
   3510     return testresult;
   3511 }
   3512 
   3513 static unsigned char cookie_magic_value[] = "cookie magic";
   3514 
   3515 static int generate_cookie_callback(SSL *ssl, unsigned char *cookie,
   3516                                     unsigned int *cookie_len)
   3517 {
   3518     /*
   3519      * Not suitable as a real cookie generation function but good enough for
   3520      * testing!
   3521      */
   3522     memcpy(cookie, cookie_magic_value, sizeof(cookie_magic_value) - 1);
   3523     *cookie_len = sizeof(cookie_magic_value) - 1;
   3524 
   3525     return 1;
   3526 }
   3527 
   3528 static int verify_cookie_callback(SSL *ssl, const unsigned char *cookie,
   3529                                   unsigned int cookie_len)
   3530 {
   3531     if (cookie_len == sizeof(cookie_magic_value) - 1
   3532         && memcmp(cookie, cookie_magic_value, cookie_len) == 0)
   3533         return 1;
   3534 
   3535     return 0;
   3536 }
   3537 
   3538 static int generate_stateless_cookie_callback(SSL *ssl, unsigned char *cookie,
   3539                                         size_t *cookie_len)
   3540 {
   3541     unsigned int temp;
   3542     int res = generate_cookie_callback(ssl, cookie, &temp);
   3543     *cookie_len = temp;
   3544     return res;
   3545 }
   3546 
   3547 static int verify_stateless_cookie_callback(SSL *ssl, const unsigned char *cookie,
   3548                                       size_t cookie_len)
   3549 {
   3550     return verify_cookie_callback(ssl, cookie, cookie_len);
   3551 }
   3552 
   3553 static int test_stateless(void)
   3554 {
   3555     SSL_CTX *sctx = NULL, *cctx = NULL;
   3556     SSL *serverssl = NULL, *clientssl = NULL;
   3557     int testresult = 0;
   3558 
   3559     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
   3560                                        TLS1_VERSION, TLS_MAX_VERSION,
   3561                                        &sctx, &cctx, cert, privkey)))
   3562         goto end;
   3563 
   3564     /* The arrival of CCS messages can confuse the test */
   3565     SSL_CTX_clear_options(cctx, SSL_OP_ENABLE_MIDDLEBOX_COMPAT);
   3566 
   3567     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   3568                                       NULL, NULL))
   3569                /* Send the first ClientHello */
   3570             || !TEST_false(create_ssl_connection(serverssl, clientssl,
   3571                                                  SSL_ERROR_WANT_READ))
   3572                /*
   3573                 * This should fail with a -1 return because we have no callbacks
   3574                 * set up
   3575                 */
   3576             || !TEST_int_eq(SSL_stateless(serverssl), -1))
   3577         goto end;
   3578 
   3579     /* Fatal error so abandon the connection from this client */
   3580     SSL_free(clientssl);
   3581     clientssl = NULL;
   3582 
   3583     /* Set up the cookie generation and verification callbacks */
   3584     SSL_CTX_set_stateless_cookie_generate_cb(sctx, generate_stateless_cookie_callback);
   3585     SSL_CTX_set_stateless_cookie_verify_cb(sctx, verify_stateless_cookie_callback);
   3586 
   3587     /*
   3588      * Create a new connection from the client (we can reuse the server SSL
   3589      * object).
   3590      */
   3591     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   3592                                              NULL, NULL))
   3593                /* Send the first ClientHello */
   3594             || !TEST_false(create_ssl_connection(serverssl, clientssl,
   3595                                                 SSL_ERROR_WANT_READ))
   3596                /* This should fail because there is no cookie */
   3597             || !TEST_int_eq(SSL_stateless(serverssl), 0))
   3598         goto end;
   3599 
   3600     /* Abandon the connection from this client */
   3601     SSL_free(clientssl);
   3602     clientssl = NULL;
   3603 
   3604     /*
   3605      * Now create a connection from a new client but with the same server SSL
   3606      * object
   3607      */
   3608     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   3609                                              NULL, NULL))
   3610                /* Send the first ClientHello */
   3611             || !TEST_false(create_ssl_connection(serverssl, clientssl,
   3612                                                 SSL_ERROR_WANT_READ))
   3613                /* This should fail because there is no cookie */
   3614             || !TEST_int_eq(SSL_stateless(serverssl), 0)
   3615                /* Send the second ClientHello */
   3616             || !TEST_false(create_ssl_connection(serverssl, clientssl,
   3617                                                 SSL_ERROR_WANT_READ))
   3618                /* This should succeed because a cookie is now present */
   3619             || !TEST_int_eq(SSL_stateless(serverssl), 1)
   3620                /* Complete the connection */
   3621             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   3622                                                 SSL_ERROR_NONE)))
   3623         goto end;
   3624 
   3625     shutdown_ssl_connection(serverssl, clientssl);
   3626     serverssl = clientssl = NULL;
   3627     testresult = 1;
   3628 
   3629  end:
   3630     SSL_free(serverssl);
   3631     SSL_free(clientssl);
   3632     SSL_CTX_free(sctx);
   3633     SSL_CTX_free(cctx);
   3634     return testresult;
   3635 
   3636 }
   3637 #endif /* OPENSSL_NO_TLS1_3 */
   3638 
   3639 static int clntaddoldcb = 0;
   3640 static int clntparseoldcb = 0;
   3641 static int srvaddoldcb = 0;
   3642 static int srvparseoldcb = 0;
   3643 static int clntaddnewcb = 0;
   3644 static int clntparsenewcb = 0;
   3645 static int srvaddnewcb = 0;
   3646 static int srvparsenewcb = 0;
   3647 static int snicb = 0;
   3648 
   3649 #define TEST_EXT_TYPE1  0xff00
   3650 
   3651 static int old_add_cb(SSL *s, unsigned int ext_type, const unsigned char **out,
   3652                       size_t *outlen, int *al, void *add_arg)
   3653 {
   3654     int *server = (int *)add_arg;
   3655     unsigned char *data;
   3656 
   3657     if (SSL_is_server(s))
   3658         srvaddoldcb++;
   3659     else
   3660         clntaddoldcb++;
   3661 
   3662     if (*server != SSL_is_server(s)
   3663             || (data = OPENSSL_malloc(sizeof(*data))) == NULL)
   3664         return -1;
   3665 
   3666     *data = 1;
   3667     *out = data;
   3668     *outlen = sizeof(char);
   3669     return 1;
   3670 }
   3671 
   3672 static void old_free_cb(SSL *s, unsigned int ext_type, const unsigned char *out,
   3673                         void *add_arg)
   3674 {
   3675     OPENSSL_free((unsigned char *)out);
   3676 }
   3677 
   3678 static int old_parse_cb(SSL *s, unsigned int ext_type, const unsigned char *in,
   3679                         size_t inlen, int *al, void *parse_arg)
   3680 {
   3681     int *server = (int *)parse_arg;
   3682 
   3683     if (SSL_is_server(s))
   3684         srvparseoldcb++;
   3685     else
   3686         clntparseoldcb++;
   3687 
   3688     if (*server != SSL_is_server(s)
   3689             || inlen != sizeof(char)
   3690             || *in != 1)
   3691         return -1;
   3692 
   3693     return 1;
   3694 }
   3695 
   3696 static int new_add_cb(SSL *s, unsigned int ext_type, unsigned int context,
   3697                       const unsigned char **out, size_t *outlen, X509 *x,
   3698                       size_t chainidx, int *al, void *add_arg)
   3699 {
   3700     int *server = (int *)add_arg;
   3701     unsigned char *data;
   3702 
   3703     if (SSL_is_server(s))
   3704         srvaddnewcb++;
   3705     else
   3706         clntaddnewcb++;
   3707 
   3708     if (*server != SSL_is_server(s)
   3709             || (data = OPENSSL_malloc(sizeof(*data))) == NULL)
   3710         return -1;
   3711 
   3712     *data = 1;
   3713     *out = data;
   3714     *outlen = sizeof(*data);
   3715     return 1;
   3716 }
   3717 
   3718 static void new_free_cb(SSL *s, unsigned int ext_type, unsigned int context,
   3719                         const unsigned char *out, void *add_arg)
   3720 {
   3721     OPENSSL_free((unsigned char *)out);
   3722 }
   3723 
   3724 static int new_parse_cb(SSL *s, unsigned int ext_type, unsigned int context,
   3725                         const unsigned char *in, size_t inlen, X509 *x,
   3726                         size_t chainidx, int *al, void *parse_arg)
   3727 {
   3728     int *server = (int *)parse_arg;
   3729 
   3730     if (SSL_is_server(s))
   3731         srvparsenewcb++;
   3732     else
   3733         clntparsenewcb++;
   3734 
   3735     if (*server != SSL_is_server(s)
   3736             || inlen != sizeof(char) || *in != 1)
   3737         return -1;
   3738 
   3739     return 1;
   3740 }
   3741 
   3742 static int sni_cb(SSL *s, int *al, void *arg)
   3743 {
   3744     SSL_CTX *ctx = (SSL_CTX *)arg;
   3745 
   3746     if (SSL_set_SSL_CTX(s, ctx) == NULL) {
   3747         *al = SSL_AD_INTERNAL_ERROR;
   3748         return SSL_TLSEXT_ERR_ALERT_FATAL;
   3749     }
   3750     snicb++;
   3751     return SSL_TLSEXT_ERR_OK;
   3752 }
   3753 
   3754 /*
   3755  * Custom call back tests.
   3756  * Test 0: Old style callbacks in TLSv1.2
   3757  * Test 1: New style callbacks in TLSv1.2
   3758  * Test 2: New style callbacks in TLSv1.2 with SNI
   3759  * Test 3: New style callbacks in TLSv1.3. Extensions in CH and EE
   3760  * Test 4: New style callbacks in TLSv1.3. Extensions in CH, SH, EE, Cert + NST
   3761  */
   3762 static int test_custom_exts(int tst)
   3763 {
   3764     SSL_CTX *cctx = NULL, *sctx = NULL, *sctx2 = NULL;
   3765     SSL *clientssl = NULL, *serverssl = NULL;
   3766     int testresult = 0;
   3767     static int server = 1;
   3768     static int client = 0;
   3769     SSL_SESSION *sess = NULL;
   3770     unsigned int context;
   3771 
   3772 #if defined(OPENSSL_NO_TLS1_2) && !defined(OPENSSL_NO_TLS1_3)
   3773     /* Skip tests for TLSv1.2 and below in this case */
   3774     if (tst < 3)
   3775         return 1;
   3776 #endif
   3777 
   3778     /* Reset callback counters */
   3779     clntaddoldcb = clntparseoldcb = srvaddoldcb = srvparseoldcb = 0;
   3780     clntaddnewcb = clntparsenewcb = srvaddnewcb = srvparsenewcb = 0;
   3781     snicb = 0;
   3782 
   3783     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
   3784                                        TLS1_VERSION, TLS_MAX_VERSION,
   3785                                        &sctx, &cctx, cert, privkey)))
   3786         goto end;
   3787 
   3788     if (tst == 2
   3789             && !TEST_true(create_ssl_ctx_pair(TLS_server_method(), NULL,
   3790                                               TLS1_VERSION, TLS_MAX_VERSION,
   3791                                               &sctx2, NULL, cert, privkey)))
   3792         goto end;
   3793 
   3794 
   3795     if (tst < 3) {
   3796         SSL_CTX_set_options(cctx, SSL_OP_NO_TLSv1_3);
   3797         SSL_CTX_set_options(sctx, SSL_OP_NO_TLSv1_3);
   3798         if (sctx2 != NULL)
   3799             SSL_CTX_set_options(sctx2, SSL_OP_NO_TLSv1_3);
   3800     }
   3801 
   3802     if (tst == 4) {
   3803         context = SSL_EXT_CLIENT_HELLO
   3804                   | SSL_EXT_TLS1_2_SERVER_HELLO
   3805                   | SSL_EXT_TLS1_3_SERVER_HELLO
   3806                   | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS
   3807                   | SSL_EXT_TLS1_3_CERTIFICATE
   3808                   | SSL_EXT_TLS1_3_NEW_SESSION_TICKET;
   3809     } else {
   3810         context = SSL_EXT_CLIENT_HELLO
   3811                   | SSL_EXT_TLS1_2_SERVER_HELLO
   3812                   | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS;
   3813     }
   3814 
   3815     /* Create a client side custom extension */
   3816     if (tst == 0) {
   3817         if (!TEST_true(SSL_CTX_add_client_custom_ext(cctx, TEST_EXT_TYPE1,
   3818                                                      old_add_cb, old_free_cb,
   3819                                                      &client, old_parse_cb,
   3820                                                      &client)))
   3821             goto end;
   3822     } else {
   3823         if (!TEST_true(SSL_CTX_add_custom_ext(cctx, TEST_EXT_TYPE1, context,
   3824                                               new_add_cb, new_free_cb,
   3825                                               &client, new_parse_cb, &client)))
   3826             goto end;
   3827     }
   3828 
   3829     /* Should not be able to add duplicates */
   3830     if (!TEST_false(SSL_CTX_add_client_custom_ext(cctx, TEST_EXT_TYPE1,
   3831                                                   old_add_cb, old_free_cb,
   3832                                                   &client, old_parse_cb,
   3833                                                   &client))
   3834             || !TEST_false(SSL_CTX_add_custom_ext(cctx, TEST_EXT_TYPE1,
   3835                                                   context, new_add_cb,
   3836                                                   new_free_cb, &client,
   3837                                                   new_parse_cb, &client)))
   3838         goto end;
   3839 
   3840     /* Create a server side custom extension */
   3841     if (tst == 0) {
   3842         if (!TEST_true(SSL_CTX_add_server_custom_ext(sctx, TEST_EXT_TYPE1,
   3843                                                      old_add_cb, old_free_cb,
   3844                                                      &server, old_parse_cb,
   3845                                                      &server)))
   3846             goto end;
   3847     } else {
   3848         if (!TEST_true(SSL_CTX_add_custom_ext(sctx, TEST_EXT_TYPE1, context,
   3849                                               new_add_cb, new_free_cb,
   3850                                               &server, new_parse_cb, &server)))
   3851             goto end;
   3852         if (sctx2 != NULL
   3853                 && !TEST_true(SSL_CTX_add_custom_ext(sctx2, TEST_EXT_TYPE1,
   3854                                                      context, new_add_cb,
   3855                                                      new_free_cb, &server,
   3856                                                      new_parse_cb, &server)))
   3857             goto end;
   3858     }
   3859 
   3860     /* Should not be able to add duplicates */
   3861     if (!TEST_false(SSL_CTX_add_server_custom_ext(sctx, TEST_EXT_TYPE1,
   3862                                                   old_add_cb, old_free_cb,
   3863                                                   &server, old_parse_cb,
   3864                                                   &server))
   3865             || !TEST_false(SSL_CTX_add_custom_ext(sctx, TEST_EXT_TYPE1,
   3866                                                   context, new_add_cb,
   3867                                                   new_free_cb, &server,
   3868                                                   new_parse_cb, &server)))
   3869         goto end;
   3870 
   3871     if (tst == 2) {
   3872         /* Set up SNI */
   3873         if (!TEST_true(SSL_CTX_set_tlsext_servername_callback(sctx, sni_cb))
   3874                 || !TEST_true(SSL_CTX_set_tlsext_servername_arg(sctx, sctx2)))
   3875             goto end;
   3876     }
   3877 
   3878     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
   3879                                       &clientssl, NULL, NULL))
   3880             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   3881                                                 SSL_ERROR_NONE)))
   3882         goto end;
   3883 
   3884     if (tst == 0) {
   3885         if (clntaddoldcb != 1
   3886                 || clntparseoldcb != 1
   3887                 || srvaddoldcb != 1
   3888                 || srvparseoldcb != 1)
   3889             goto end;
   3890     } else if (tst == 1 || tst == 2 || tst == 3) {
   3891         if (clntaddnewcb != 1
   3892                 || clntparsenewcb != 1
   3893                 || srvaddnewcb != 1
   3894                 || srvparsenewcb != 1
   3895                 || (tst != 2 && snicb != 0)
   3896                 || (tst == 2 && snicb != 1))
   3897             goto end;
   3898     } else {
   3899         /* In this case there 2 NewSessionTicket messages created */
   3900         if (clntaddnewcb != 1
   3901                 || clntparsenewcb != 5
   3902                 || srvaddnewcb != 5
   3903                 || srvparsenewcb != 1)
   3904             goto end;
   3905     }
   3906 
   3907     sess = SSL_get1_session(clientssl);
   3908     SSL_shutdown(clientssl);
   3909     SSL_shutdown(serverssl);
   3910     SSL_free(serverssl);
   3911     SSL_free(clientssl);
   3912     serverssl = clientssl = NULL;
   3913 
   3914     if (tst == 3) {
   3915         /* We don't bother with the resumption aspects for this test */
   3916         testresult = 1;
   3917         goto end;
   3918     }
   3919 
   3920     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   3921                                       NULL, NULL))
   3922             || !TEST_true(SSL_set_session(clientssl, sess))
   3923             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   3924                                                SSL_ERROR_NONE)))
   3925         goto end;
   3926 
   3927     /*
   3928      * For a resumed session we expect to add the ClientHello extension. For the
   3929      * old style callbacks we ignore it on the server side because they set
   3930      * SSL_EXT_IGNORE_ON_RESUMPTION. The new style callbacks do not ignore
   3931      * them.
   3932      */
   3933     if (tst == 0) {
   3934         if (clntaddoldcb != 2
   3935                 || clntparseoldcb != 1
   3936                 || srvaddoldcb != 1
   3937                 || srvparseoldcb != 1)
   3938             goto end;
   3939     } else if (tst == 1 || tst == 2 || tst == 3) {
   3940         if (clntaddnewcb != 2
   3941                 || clntparsenewcb != 2
   3942                 || srvaddnewcb != 2
   3943                 || srvparsenewcb != 2)
   3944             goto end;
   3945     } else {
   3946         /*
   3947          * No Certificate message extensions in the resumption handshake,
   3948          * 2 NewSessionTickets in the initial handshake, 1 in the resumption
   3949          */
   3950         if (clntaddnewcb != 2
   3951                 || clntparsenewcb != 8
   3952                 || srvaddnewcb != 8
   3953                 || srvparsenewcb != 2)
   3954             goto end;
   3955     }
   3956 
   3957     testresult = 1;
   3958 
   3959 end:
   3960     SSL_SESSION_free(sess);
   3961     SSL_free(serverssl);
   3962     SSL_free(clientssl);
   3963     SSL_CTX_free(sctx2);
   3964     SSL_CTX_free(sctx);
   3965     SSL_CTX_free(cctx);
   3966     return testresult;
   3967 }
   3968 
   3969 /*
   3970  * Test loading of serverinfo data in various formats. test_sslmessages actually
   3971  * tests to make sure the extensions appear in the handshake
   3972  */
   3973 static int test_serverinfo(int tst)
   3974 {
   3975     unsigned int version;
   3976     unsigned char *sibuf;
   3977     size_t sibuflen;
   3978     int ret, expected, testresult = 0;
   3979     SSL_CTX *ctx;
   3980 
   3981     ctx = SSL_CTX_new(TLS_method());
   3982     if (!TEST_ptr(ctx))
   3983         goto end;
   3984 
   3985     if ((tst & 0x01) == 0x01)
   3986         version = SSL_SERVERINFOV2;
   3987     else
   3988         version = SSL_SERVERINFOV1;
   3989 
   3990     if ((tst & 0x02) == 0x02) {
   3991         sibuf = serverinfov2;
   3992         sibuflen = sizeof(serverinfov2);
   3993         expected = (version == SSL_SERVERINFOV2);
   3994     } else {
   3995         sibuf = serverinfov1;
   3996         sibuflen = sizeof(serverinfov1);
   3997         expected = (version == SSL_SERVERINFOV1);
   3998     }
   3999 
   4000     if ((tst & 0x04) == 0x04) {
   4001         ret = SSL_CTX_use_serverinfo_ex(ctx, version, sibuf, sibuflen);
   4002     } else {
   4003         ret = SSL_CTX_use_serverinfo(ctx, sibuf, sibuflen);
   4004 
   4005         /*
   4006          * The version variable is irrelevant in this case - it's what is in the
   4007          * buffer that matters
   4008          */
   4009         if ((tst & 0x02) == 0x02)
   4010             expected = 0;
   4011         else
   4012             expected = 1;
   4013     }
   4014 
   4015     if (!TEST_true(ret == expected))
   4016         goto end;
   4017 
   4018     testresult = 1;
   4019 
   4020  end:
   4021     SSL_CTX_free(ctx);
   4022 
   4023     return testresult;
   4024 }
   4025 
   4026 /*
   4027  * Test that SSL_export_keying_material() produces expected results. There are
   4028  * no test vectors so all we do is test that both sides of the communication
   4029  * produce the same results for different protocol versions.
   4030  */
   4031 #define SMALL_LABEL_LEN 10
   4032 #define LONG_LABEL_LEN  249
   4033 static int test_export_key_mat(int tst)
   4034 {
   4035     int testresult = 0;
   4036     SSL_CTX *cctx = NULL, *sctx = NULL, *sctx2 = NULL;
   4037     SSL *clientssl = NULL, *serverssl = NULL;
   4038     const char label[LONG_LABEL_LEN + 1] = "test label";
   4039     const unsigned char context[] = "context";
   4040     const unsigned char *emptycontext = NULL;
   4041     unsigned char ckeymat1[80], ckeymat2[80], ckeymat3[80];
   4042     unsigned char skeymat1[80], skeymat2[80], skeymat3[80];
   4043     size_t labellen;
   4044     const int protocols[] = {
   4045         TLS1_VERSION,
   4046         TLS1_1_VERSION,
   4047         TLS1_2_VERSION,
   4048         TLS1_3_VERSION,
   4049         TLS1_3_VERSION,
   4050         TLS1_3_VERSION
   4051     };
   4052 
   4053 #ifdef OPENSSL_NO_TLS1
   4054     if (tst == 0)
   4055         return 1;
   4056 #endif
   4057 #ifdef OPENSSL_NO_TLS1_1
   4058     if (tst == 1)
   4059         return 1;
   4060 #endif
   4061 #ifdef OPENSSL_NO_TLS1_2
   4062     if (tst == 2)
   4063         return 1;
   4064 #endif
   4065 #ifdef OPENSSL_NO_TLS1_3
   4066     if (tst >= 3)
   4067         return 1;
   4068 #endif
   4069     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
   4070                                        TLS1_VERSION, TLS_MAX_VERSION,
   4071                                        &sctx, &cctx, cert, privkey)))
   4072         goto end;
   4073 
   4074     OPENSSL_assert(tst >= 0 && (size_t)tst < OSSL_NELEM(protocols));
   4075     SSL_CTX_set_max_proto_version(cctx, protocols[tst]);
   4076     SSL_CTX_set_min_proto_version(cctx, protocols[tst]);
   4077 
   4078     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL,
   4079                                       NULL))
   4080             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   4081                                                 SSL_ERROR_NONE)))
   4082         goto end;
   4083 
   4084     if (tst == 5) {
   4085         /*
   4086          * TLSv1.3 imposes a maximum label len of 249 bytes. Check we fail if we
   4087          * go over that.
   4088          */
   4089         if (!TEST_int_le(SSL_export_keying_material(clientssl, ckeymat1,
   4090                                                     sizeof(ckeymat1), label,
   4091                                                     LONG_LABEL_LEN + 1, context,
   4092                                                     sizeof(context) - 1, 1), 0))
   4093             goto end;
   4094 
   4095         testresult = 1;
   4096         goto end;
   4097     } else if (tst == 4) {
   4098         labellen = LONG_LABEL_LEN;
   4099     } else {
   4100         labellen = SMALL_LABEL_LEN;
   4101     }
   4102 
   4103     if (!TEST_int_eq(SSL_export_keying_material(clientssl, ckeymat1,
   4104                                                 sizeof(ckeymat1), label,
   4105                                                 labellen, context,
   4106                                                 sizeof(context) - 1, 1), 1)
   4107             || !TEST_int_eq(SSL_export_keying_material(clientssl, ckeymat2,
   4108                                                        sizeof(ckeymat2), label,
   4109                                                        labellen,
   4110                                                        emptycontext,
   4111                                                        0, 1), 1)
   4112             || !TEST_int_eq(SSL_export_keying_material(clientssl, ckeymat3,
   4113                                                        sizeof(ckeymat3), label,
   4114                                                        labellen,
   4115                                                        NULL, 0, 0), 1)
   4116             || !TEST_int_eq(SSL_export_keying_material(serverssl, skeymat1,
   4117                                                        sizeof(skeymat1), label,
   4118                                                        labellen,
   4119                                                        context,
   4120                                                        sizeof(context) -1, 1),
   4121                             1)
   4122             || !TEST_int_eq(SSL_export_keying_material(serverssl, skeymat2,
   4123                                                        sizeof(skeymat2), label,
   4124                                                        labellen,
   4125                                                        emptycontext,
   4126                                                        0, 1), 1)
   4127             || !TEST_int_eq(SSL_export_keying_material(serverssl, skeymat3,
   4128                                                        sizeof(skeymat3), label,
   4129                                                        labellen,
   4130                                                        NULL, 0, 0), 1)
   4131                /*
   4132                 * Check that both sides created the same key material with the
   4133                 * same context.
   4134                 */
   4135             || !TEST_mem_eq(ckeymat1, sizeof(ckeymat1), skeymat1,
   4136                             sizeof(skeymat1))
   4137                /*
   4138                 * Check that both sides created the same key material with an
   4139                 * empty context.
   4140                 */
   4141             || !TEST_mem_eq(ckeymat2, sizeof(ckeymat2), skeymat2,
   4142                             sizeof(skeymat2))
   4143                /*
   4144                 * Check that both sides created the same key material without a
   4145                 * context.
   4146                 */
   4147             || !TEST_mem_eq(ckeymat3, sizeof(ckeymat3), skeymat3,
   4148                             sizeof(skeymat3))
   4149                /* Different contexts should produce different results */
   4150             || !TEST_mem_ne(ckeymat1, sizeof(ckeymat1), ckeymat2,
   4151                             sizeof(ckeymat2)))
   4152         goto end;
   4153 
   4154     /*
   4155      * Check that an empty context and no context produce different results in
   4156      * protocols less than TLSv1.3. In TLSv1.3 they should be the same.
   4157      */
   4158     if ((tst < 3 && !TEST_mem_ne(ckeymat2, sizeof(ckeymat2), ckeymat3,
   4159                                   sizeof(ckeymat3)))
   4160             || (tst >= 3 && !TEST_mem_eq(ckeymat2, sizeof(ckeymat2), ckeymat3,
   4161                                          sizeof(ckeymat3))))
   4162         goto end;
   4163 
   4164     testresult = 1;
   4165 
   4166  end:
   4167     SSL_free(serverssl);
   4168     SSL_free(clientssl);
   4169     SSL_CTX_free(sctx2);
   4170     SSL_CTX_free(sctx);
   4171     SSL_CTX_free(cctx);
   4172 
   4173     return testresult;
   4174 }
   4175 
   4176 #ifndef OPENSSL_NO_TLS1_3
   4177 /*
   4178  * Test that SSL_export_keying_material_early() produces expected
   4179  * results. There are no test vectors so all we do is test that both
   4180  * sides of the communication produce the same results for different
   4181  * protocol versions.
   4182  */
   4183 static int test_export_key_mat_early(int idx)
   4184 {
   4185     static const char label[] = "test label";
   4186     static const unsigned char context[] = "context";
   4187     int testresult = 0;
   4188     SSL_CTX *cctx = NULL, *sctx = NULL;
   4189     SSL *clientssl = NULL, *serverssl = NULL;
   4190     SSL_SESSION *sess = NULL;
   4191     const unsigned char *emptycontext = NULL;
   4192     unsigned char ckeymat1[80], ckeymat2[80];
   4193     unsigned char skeymat1[80], skeymat2[80];
   4194     unsigned char buf[1];
   4195     size_t readbytes, written;
   4196 
   4197     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl, &serverssl,
   4198                                         &sess, idx)))
   4199         goto end;
   4200 
   4201     /* Here writing 0 length early data is enough. */
   4202     if (!TEST_true(SSL_write_early_data(clientssl, NULL, 0, &written))
   4203             || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
   4204                                                 &readbytes),
   4205                             SSL_READ_EARLY_DATA_ERROR)
   4206             || !TEST_int_eq(SSL_get_early_data_status(serverssl),
   4207                             SSL_EARLY_DATA_ACCEPTED))
   4208         goto end;
   4209 
   4210     if (!TEST_int_eq(SSL_export_keying_material_early(
   4211                      clientssl, ckeymat1, sizeof(ckeymat1), label,
   4212                      sizeof(label) - 1, context, sizeof(context) - 1), 1)
   4213             || !TEST_int_eq(SSL_export_keying_material_early(
   4214                             clientssl, ckeymat2, sizeof(ckeymat2), label,
   4215                             sizeof(label) - 1, emptycontext, 0), 1)
   4216             || !TEST_int_eq(SSL_export_keying_material_early(
   4217                             serverssl, skeymat1, sizeof(skeymat1), label,
   4218                             sizeof(label) - 1, context, sizeof(context) - 1), 1)
   4219             || !TEST_int_eq(SSL_export_keying_material_early(
   4220                             serverssl, skeymat2, sizeof(skeymat2), label,
   4221                             sizeof(label) - 1, emptycontext, 0), 1)
   4222                /*
   4223                 * Check that both sides created the same key material with the
   4224                 * same context.
   4225                 */
   4226             || !TEST_mem_eq(ckeymat1, sizeof(ckeymat1), skeymat1,
   4227                             sizeof(skeymat1))
   4228                /*
   4229                 * Check that both sides created the same key material with an
   4230                 * empty context.
   4231                 */
   4232             || !TEST_mem_eq(ckeymat2, sizeof(ckeymat2), skeymat2,
   4233                             sizeof(skeymat2))
   4234                /* Different contexts should produce different results */
   4235             || !TEST_mem_ne(ckeymat1, sizeof(ckeymat1), ckeymat2,
   4236                             sizeof(ckeymat2)))
   4237         goto end;
   4238 
   4239     testresult = 1;
   4240 
   4241  end:
   4242     SSL_SESSION_free(sess);
   4243     SSL_SESSION_free(clientpsk);
   4244     SSL_SESSION_free(serverpsk);
   4245     clientpsk = serverpsk = NULL;
   4246     SSL_free(serverssl);
   4247     SSL_free(clientssl);
   4248     SSL_CTX_free(sctx);
   4249     SSL_CTX_free(cctx);
   4250 
   4251     return testresult;
   4252 }
   4253 
   4254 #define NUM_KEY_UPDATE_MESSAGES 40
   4255 /*
   4256  * Test KeyUpdate.
   4257  */
   4258 static int test_key_update(void)
   4259 {
   4260     SSL_CTX *cctx = NULL, *sctx = NULL;
   4261     SSL *clientssl = NULL, *serverssl = NULL;
   4262     int testresult = 0, i, j;
   4263     char buf[20];
   4264     static char *mess = "A test message";
   4265 
   4266     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
   4267                                        TLS_client_method(),
   4268                                        TLS1_3_VERSION,
   4269                                        0,
   4270                                        &sctx, &cctx, cert, privkey))
   4271             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   4272                                              NULL, NULL))
   4273             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   4274                                                 SSL_ERROR_NONE)))
   4275         goto end;
   4276 
   4277     for (j = 0; j < 2; j++) {
   4278         /* Send lots of KeyUpdate messages */
   4279         for (i = 0; i < NUM_KEY_UPDATE_MESSAGES; i++) {
   4280             if (!TEST_true(SSL_key_update(clientssl,
   4281                                           (j == 0)
   4282                                           ? SSL_KEY_UPDATE_NOT_REQUESTED
   4283                                           : SSL_KEY_UPDATE_REQUESTED))
   4284                     || !TEST_true(SSL_do_handshake(clientssl)))
   4285                 goto end;
   4286         }
   4287 
   4288         /* Check that sending and receiving app data is ok */
   4289         if (!TEST_int_eq(SSL_write(clientssl, mess, strlen(mess)), strlen(mess))
   4290                 || !TEST_int_eq(SSL_read(serverssl, buf, sizeof(buf)),
   4291                                          strlen(mess)))
   4292             goto end;
   4293     }
   4294 
   4295     testresult = 1;
   4296 
   4297  end:
   4298     SSL_free(serverssl);
   4299     SSL_free(clientssl);
   4300     SSL_CTX_free(sctx);
   4301     SSL_CTX_free(cctx);
   4302 
   4303     return testresult;
   4304 }
   4305 #endif /* OPENSSL_NO_TLS1_3 */
   4306 
   4307 static int test_ssl_clear(int idx)
   4308 {
   4309     SSL_CTX *cctx = NULL, *sctx = NULL;
   4310     SSL *clientssl = NULL, *serverssl = NULL;
   4311     int testresult = 0;
   4312 
   4313 #ifdef OPENSSL_NO_TLS1_2
   4314     if (idx == 1)
   4315         return 1;
   4316 #endif
   4317 
   4318     /* Create an initial connection */
   4319     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
   4320                                        TLS1_VERSION, TLS_MAX_VERSION,
   4321                                        &sctx, &cctx, cert, privkey))
   4322             || (idx == 1
   4323                 && !TEST_true(SSL_CTX_set_max_proto_version(cctx,
   4324                                                             TLS1_2_VERSION)))
   4325             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
   4326                                           &clientssl, NULL, NULL))
   4327             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   4328                                                 SSL_ERROR_NONE)))
   4329         goto end;
   4330 
   4331     SSL_shutdown(clientssl);
   4332     SSL_shutdown(serverssl);
   4333     SSL_free(serverssl);
   4334     serverssl = NULL;
   4335 
   4336     /* Clear clientssl - we're going to reuse the object */
   4337     if (!TEST_true(SSL_clear(clientssl)))
   4338         goto end;
   4339 
   4340     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   4341                                              NULL, NULL))
   4342             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   4343                                                 SSL_ERROR_NONE))
   4344             || !TEST_true(SSL_session_reused(clientssl)))
   4345         goto end;
   4346 
   4347     SSL_shutdown(clientssl);
   4348     SSL_shutdown(serverssl);
   4349 
   4350     testresult = 1;
   4351 
   4352  end:
   4353     SSL_free(serverssl);
   4354     SSL_free(clientssl);
   4355     SSL_CTX_free(sctx);
   4356     SSL_CTX_free(cctx);
   4357 
   4358     return testresult;
   4359 }
   4360 
   4361 /* Parse CH and retrieve any MFL extension value if present */
   4362 static int get_MFL_from_client_hello(BIO *bio, int *mfl_codemfl_code)
   4363 {
   4364     long len;
   4365     unsigned char *data;
   4366     PACKET pkt = {0}, pkt2 = {0}, pkt3 = {0};
   4367     unsigned int MFL_code = 0, type = 0;
   4368 
   4369     if (!TEST_uint_gt( len = BIO_get_mem_data( bio, (char **) &data ), 0 ) )
   4370         goto end;
   4371 
   4372     if (!TEST_true( PACKET_buf_init( &pkt, data, len ) )
   4373                /* Skip the record header */
   4374             || !PACKET_forward(&pkt, SSL3_RT_HEADER_LENGTH)
   4375                /* Skip the handshake message header */
   4376             || !TEST_true(PACKET_forward(&pkt, SSL3_HM_HEADER_LENGTH))
   4377                /* Skip client version and random */
   4378             || !TEST_true(PACKET_forward(&pkt, CLIENT_VERSION_LEN
   4379                                                + SSL3_RANDOM_SIZE))
   4380                /* Skip session id */
   4381             || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &pkt2))
   4382                /* Skip ciphers */
   4383             || !TEST_true(PACKET_get_length_prefixed_2(&pkt, &pkt2))
   4384                /* Skip compression */
   4385             || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &pkt2))
   4386                /* Extensions len */
   4387             || !TEST_true(PACKET_as_length_prefixed_2(&pkt, &pkt2)))
   4388         goto end;
   4389 
   4390     /* Loop through all extensions */
   4391     while (PACKET_remaining(&pkt2)) {
   4392         if (!TEST_true(PACKET_get_net_2(&pkt2, &type))
   4393                 || !TEST_true(PACKET_get_length_prefixed_2(&pkt2, &pkt3)))
   4394             goto end;
   4395 
   4396         if (type == TLSEXT_TYPE_max_fragment_length) {
   4397             if (!TEST_uint_ne(PACKET_remaining(&pkt3), 0)
   4398                     || !TEST_true(PACKET_get_1(&pkt3, &MFL_code)))
   4399                 goto end;
   4400 
   4401             *mfl_codemfl_code = MFL_code;
   4402             return 1;
   4403         }
   4404     }
   4405 
   4406  end:
   4407     return 0;
   4408 }
   4409 
   4410 /* Maximum-Fragment-Length TLS extension mode to test */
   4411 static const unsigned char max_fragment_len_test[] = {
   4412     TLSEXT_max_fragment_length_512,
   4413     TLSEXT_max_fragment_length_1024,
   4414     TLSEXT_max_fragment_length_2048,
   4415     TLSEXT_max_fragment_length_4096
   4416 };
   4417 
   4418 static int test_max_fragment_len_ext(int idx_tst)
   4419 {
   4420     SSL_CTX *ctx;
   4421     SSL *con = NULL;
   4422     int testresult = 0, MFL_mode = 0;
   4423     BIO *rbio, *wbio;
   4424 
   4425     ctx = SSL_CTX_new(TLS_method());
   4426     if (!TEST_ptr(ctx))
   4427         goto end;
   4428 
   4429     if (!TEST_true(SSL_CTX_set_tlsext_max_fragment_length(
   4430                    ctx, max_fragment_len_test[idx_tst])))
   4431         goto end;
   4432 
   4433     con = SSL_new(ctx);
   4434     if (!TEST_ptr(con))
   4435         goto end;
   4436 
   4437     rbio = BIO_new(BIO_s_mem());
   4438     wbio = BIO_new(BIO_s_mem());
   4439     if (!TEST_ptr(rbio)|| !TEST_ptr(wbio)) {
   4440         BIO_free(rbio);
   4441         BIO_free(wbio);
   4442         goto end;
   4443     }
   4444 
   4445     SSL_set_bio(con, rbio, wbio);
   4446     SSL_set_connect_state(con);
   4447 
   4448     if (!TEST_int_le(SSL_connect(con), 0)) {
   4449         /* This shouldn't succeed because we don't have a server! */
   4450         goto end;
   4451     }
   4452 
   4453     if (!TEST_true(get_MFL_from_client_hello(wbio, &MFL_mode)))
   4454         /* no MFL in client hello */
   4455         goto end;
   4456     if (!TEST_true(max_fragment_len_test[idx_tst] == MFL_mode))
   4457         goto end;
   4458 
   4459     testresult = 1;
   4460 
   4461 end:
   4462     SSL_free(con);
   4463     SSL_CTX_free(ctx);
   4464 
   4465     return testresult;
   4466 }
   4467 
   4468 #ifndef OPENSSL_NO_TLS1_3
   4469 static int test_pha_key_update(void)
   4470 {
   4471     SSL_CTX *cctx = NULL, *sctx = NULL;
   4472     SSL *clientssl = NULL, *serverssl = NULL;
   4473     int testresult = 0;
   4474 
   4475     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
   4476                                        TLS1_VERSION, TLS_MAX_VERSION,
   4477                                        &sctx, &cctx, cert, privkey)))
   4478         return 0;
   4479 
   4480     if (!TEST_true(SSL_CTX_set_min_proto_version(sctx, TLS1_3_VERSION))
   4481         || !TEST_true(SSL_CTX_set_max_proto_version(sctx, TLS1_3_VERSION))
   4482         || !TEST_true(SSL_CTX_set_min_proto_version(cctx, TLS1_3_VERSION))
   4483         || !TEST_true(SSL_CTX_set_max_proto_version(cctx, TLS1_3_VERSION)))
   4484         goto end;
   4485 
   4486     SSL_CTX_set_post_handshake_auth(cctx, 1);
   4487 
   4488     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   4489                                       NULL, NULL)))
   4490         goto end;
   4491 
   4492     if (!TEST_true(create_ssl_connection(serverssl, clientssl,
   4493                                          SSL_ERROR_NONE)))
   4494         goto end;
   4495 
   4496     SSL_set_verify(serverssl, SSL_VERIFY_PEER, NULL);
   4497     if (!TEST_true(SSL_verify_client_post_handshake(serverssl)))
   4498         goto end;
   4499 
   4500     if (!TEST_true(SSL_key_update(clientssl, SSL_KEY_UPDATE_NOT_REQUESTED)))
   4501         goto end;
   4502 
   4503     /* Start handshake on the server */
   4504     if (!TEST_int_eq(SSL_do_handshake(serverssl), 1))
   4505         goto end;
   4506 
   4507     /* Starts with SSL_connect(), but it's really just SSL_do_handshake() */
   4508     if (!TEST_true(create_ssl_connection(serverssl, clientssl,
   4509                                          SSL_ERROR_NONE)))
   4510         goto end;
   4511 
   4512     SSL_shutdown(clientssl);
   4513     SSL_shutdown(serverssl);
   4514 
   4515     testresult = 1;
   4516 
   4517  end:
   4518     SSL_free(serverssl);
   4519     SSL_free(clientssl);
   4520     SSL_CTX_free(sctx);
   4521     SSL_CTX_free(cctx);
   4522     return testresult;
   4523 }
   4524 #endif
   4525 
   4526 #if !defined(OPENSSL_NO_SRP) && !defined(OPENSSL_NO_TLS1_2)
   4527 
   4528 static SRP_VBASE *vbase = NULL;
   4529 
   4530 static int ssl_srp_cb(SSL *s, int *ad, void *arg)
   4531 {
   4532     int ret = SSL3_AL_FATAL;
   4533     char *username;
   4534     SRP_user_pwd *user = NULL;
   4535 
   4536     username = SSL_get_srp_username(s);
   4537     if (username == NULL) {
   4538         *ad = SSL_AD_INTERNAL_ERROR;
   4539         goto err;
   4540     }
   4541 
   4542     user = SRP_VBASE_get1_by_user(vbase, username);
   4543     if (user == NULL) {
   4544         *ad = SSL_AD_INTERNAL_ERROR;
   4545         goto err;
   4546     }
   4547 
   4548     if (SSL_set_srp_server_param(s, user->N, user->g, user->s, user->v,
   4549                                  user->info) <= 0) {
   4550         *ad = SSL_AD_INTERNAL_ERROR;
   4551         goto err;
   4552     }
   4553 
   4554     ret = 0;
   4555 
   4556  err:
   4557     SRP_user_pwd_free(user);
   4558     return ret;
   4559 }
   4560 
   4561 static int create_new_vfile(char *userid, char *password, const char *filename)
   4562 {
   4563     char *gNid = NULL;
   4564     OPENSSL_STRING *row = OPENSSL_zalloc(sizeof(row) * (DB_NUMBER + 1));
   4565     TXT_DB *db = NULL;
   4566     int ret = 0;
   4567     BIO *out = NULL, *dummy = BIO_new_mem_buf("", 0);
   4568     size_t i;
   4569 
   4570     if (!TEST_ptr(dummy) || !TEST_ptr(row))
   4571         goto end;
   4572 
   4573     gNid = SRP_create_verifier(userid, password, &row[DB_srpsalt],
   4574                                &row[DB_srpverifier], NULL, NULL);
   4575     if (!TEST_ptr(gNid))
   4576         goto end;
   4577 
   4578     /*
   4579      * The only way to create an empty TXT_DB is to provide a BIO with no data
   4580      * in it!
   4581      */
   4582     db = TXT_DB_read(dummy, DB_NUMBER);
   4583     if (!TEST_ptr(db))
   4584         goto end;
   4585 
   4586     out = BIO_new_file(filename, "w");
   4587     if (!TEST_ptr(out))
   4588         goto end;
   4589 
   4590     row[DB_srpid] = OPENSSL_strdup(userid);
   4591     row[DB_srptype] = OPENSSL_strdup("V");
   4592     row[DB_srpgN] = OPENSSL_strdup(gNid);
   4593 
   4594     if (!TEST_ptr(row[DB_srpid])
   4595             || !TEST_ptr(row[DB_srptype])
   4596             || !TEST_ptr(row[DB_srpgN])
   4597             || !TEST_true(TXT_DB_insert(db, row)))
   4598         goto end;
   4599 
   4600     row = NULL;
   4601 
   4602     if (!TXT_DB_write(out, db))
   4603         goto end;
   4604 
   4605     ret = 1;
   4606  end:
   4607     if (row != NULL) {
   4608         for (i = 0; i < DB_NUMBER; i++)
   4609             OPENSSL_free(row[i]);
   4610     }
   4611     OPENSSL_free(row);
   4612     BIO_free(dummy);
   4613     BIO_free(out);
   4614     TXT_DB_free(db);
   4615 
   4616     return ret;
   4617 }
   4618 
   4619 static int create_new_vbase(char *userid, char *password)
   4620 {
   4621     BIGNUM *verifier = NULL, *salt = NULL;
   4622     const SRP_gN *lgN = NULL;
   4623     SRP_user_pwd *user_pwd = NULL;
   4624     int ret = 0;
   4625 
   4626     lgN = SRP_get_default_gN(NULL);
   4627     if (!TEST_ptr(lgN))
   4628         goto end;
   4629 
   4630     if (!TEST_true(SRP_create_verifier_BN(userid, password, &salt, &verifier,
   4631                                           lgN->N, lgN->g)))
   4632         goto end;
   4633 
   4634     user_pwd = OPENSSL_zalloc(sizeof(*user_pwd));
   4635     if (!TEST_ptr(user_pwd))
   4636         goto end;
   4637 
   4638     user_pwd->N = lgN->N;
   4639     user_pwd->g = lgN->g;
   4640     user_pwd->id = OPENSSL_strdup(userid);
   4641     if (!TEST_ptr(user_pwd->id))
   4642         goto end;
   4643 
   4644     user_pwd->v = verifier;
   4645     user_pwd->s = salt;
   4646     verifier = salt = NULL;
   4647 
   4648     if (sk_SRP_user_pwd_insert(vbase->users_pwd, user_pwd, 0) == 0)
   4649         goto end;
   4650     user_pwd = NULL;
   4651 
   4652     ret = 1;
   4653 end:
   4654     SRP_user_pwd_free(user_pwd);
   4655     BN_free(salt);
   4656     BN_free(verifier);
   4657 
   4658     return ret;
   4659 }
   4660 
   4661 /*
   4662  * SRP tests
   4663  *
   4664  * Test 0: Simple successful SRP connection, new vbase
   4665  * Test 1: Connection failure due to bad password, new vbase
   4666  * Test 2: Simple successful SRP connection, vbase loaded from existing file
   4667  * Test 3: Connection failure due to bad password, vbase loaded from existing
   4668  *         file
   4669  * Test 4: Simple successful SRP connection, vbase loaded from new file
   4670  * Test 5: Connection failure due to bad password, vbase loaded from new file
   4671  */
   4672 static int test_srp(int tst)
   4673 {
   4674     char *userid = "test", *password = "password", *tstsrpfile;
   4675     SSL_CTX *cctx = NULL, *sctx = NULL;
   4676     SSL *clientssl = NULL, *serverssl = NULL;
   4677     int ret, testresult = 0;
   4678 
   4679     vbase = SRP_VBASE_new(NULL);
   4680     if (!TEST_ptr(vbase))
   4681         goto end;
   4682 
   4683     if (tst == 0 || tst == 1) {
   4684         if (!TEST_true(create_new_vbase(userid, password)))
   4685             goto end;
   4686     } else {
   4687         if (tst == 4 || tst == 5) {
   4688             if (!TEST_true(create_new_vfile(userid, password, tmpfilename)))
   4689                 goto end;
   4690             tstsrpfile = tmpfilename;
   4691         } else {
   4692             tstsrpfile = srpvfile;
   4693         }
   4694         if (!TEST_int_eq(SRP_VBASE_init(vbase, tstsrpfile), SRP_NO_ERROR))
   4695             goto end;
   4696     }
   4697 
   4698     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
   4699                                        TLS1_VERSION, TLS_MAX_VERSION,
   4700                                        &sctx, &cctx, cert, privkey)))
   4701         goto end;
   4702 
   4703     if (!TEST_int_gt(SSL_CTX_set_srp_username_callback(sctx, ssl_srp_cb), 0)
   4704             || !TEST_true(SSL_CTX_set_cipher_list(cctx, "SRP-AES-128-CBC-SHA"))
   4705             || !TEST_true(SSL_CTX_set_max_proto_version(sctx, TLS1_2_VERSION))
   4706             || !TEST_true(SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION))
   4707             || !TEST_int_gt(SSL_CTX_set_srp_username(cctx, userid), 0))
   4708         goto end;
   4709 
   4710     if (tst % 2 == 1) {
   4711         if (!TEST_int_gt(SSL_CTX_set_srp_password(cctx, "badpass"), 0))
   4712             goto end;
   4713     } else {
   4714         if (!TEST_int_gt(SSL_CTX_set_srp_password(cctx, password), 0))
   4715             goto end;
   4716     }
   4717 
   4718     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   4719                                       NULL, NULL)))
   4720         goto end;
   4721 
   4722     ret = create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE);
   4723     if (ret) {
   4724         if (!TEST_true(tst % 2 == 0))
   4725             goto end;
   4726     } else {
   4727         if (!TEST_true(tst % 2 == 1))
   4728             goto end;
   4729     }
   4730 
   4731     testresult = 1;
   4732 
   4733  end:
   4734     SRP_VBASE_free(vbase);
   4735     vbase = NULL;
   4736     SSL_free(serverssl);
   4737     SSL_free(clientssl);
   4738     SSL_CTX_free(sctx);
   4739     SSL_CTX_free(cctx);
   4740 
   4741     return testresult;
   4742 }
   4743 #endif
   4744 
   4745 static int info_cb_failed = 0;
   4746 static int info_cb_offset = 0;
   4747 static int info_cb_this_state = -1;
   4748 
   4749 static struct info_cb_states_st {
   4750     int where;
   4751     const char *statestr;
   4752 } info_cb_states[][60] = {
   4753     {
   4754         /* TLSv1.2 server followed by resumption */
   4755         {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT "},
   4756         {SSL_CB_LOOP, "PINIT "}, {SSL_CB_LOOP, "TRCH"}, {SSL_CB_LOOP, "TWSH"},
   4757         {SSL_CB_LOOP, "TWSC"}, {SSL_CB_LOOP, "TWSKE"}, {SSL_CB_LOOP, "TWSD"},
   4758         {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWSD"}, {SSL_CB_LOOP, "TRCKE"},
   4759         {SSL_CB_LOOP, "TRCCS"}, {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_LOOP, "TWST"},
   4760         {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWFIN"},
   4761         {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL},
   4762         {SSL_CB_ALERT, NULL}, {SSL_CB_HANDSHAKE_START, NULL},
   4763         {SSL_CB_LOOP, "PINIT "}, {SSL_CB_LOOP, "PINIT "}, {SSL_CB_LOOP, "TRCH"},
   4764         {SSL_CB_LOOP, "TWSH"}, {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWFIN"},
   4765         {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWFIN"}, {SSL_CB_LOOP, "TRCCS"},
   4766         {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_HANDSHAKE_DONE, NULL},
   4767         {SSL_CB_EXIT, NULL}, {0, NULL},
   4768     }, {
   4769         /* TLSv1.2 client followed by resumption */
   4770         {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT "},
   4771         {SSL_CB_LOOP, "TWCH"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWCH"},
   4772         {SSL_CB_LOOP, "TRSH"}, {SSL_CB_LOOP, "TRSC"}, {SSL_CB_LOOP, "TRSKE"},
   4773         {SSL_CB_LOOP, "TRSD"}, {SSL_CB_LOOP, "TWCKE"}, {SSL_CB_LOOP, "TWCCS"},
   4774         {SSL_CB_LOOP, "TWFIN"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWFIN"},
   4775         {SSL_CB_LOOP, "TRST"}, {SSL_CB_LOOP, "TRCCS"}, {SSL_CB_LOOP, "TRFIN"},
   4776         {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL}, {SSL_CB_ALERT, NULL},
   4777         {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT "},
   4778         {SSL_CB_LOOP, "TWCH"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWCH"},
   4779         {SSL_CB_LOOP, "TRSH"}, {SSL_CB_LOOP, "TRCCS"}, {SSL_CB_LOOP, "TRFIN"},
   4780         {SSL_CB_LOOP, "TWCCS"},  {SSL_CB_LOOP, "TWFIN"},
   4781         {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL}, {0, NULL},
   4782     }, {
   4783         /* TLSv1.3 server followed by resumption */
   4784         {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT "},
   4785         {SSL_CB_LOOP, "PINIT "}, {SSL_CB_LOOP, "TRCH"}, {SSL_CB_LOOP, "TWSH"},
   4786         {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWEE"}, {SSL_CB_LOOP, "TWSC"},
   4787         {SSL_CB_LOOP, "TRSCV"}, {SSL_CB_LOOP, "TWFIN"}, {SSL_CB_LOOP, "TED"},
   4788         {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TED"}, {SSL_CB_LOOP, "TRFIN"},
   4789         {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_LOOP, "TWST"},
   4790         {SSL_CB_LOOP, "TWST"}, {SSL_CB_EXIT, NULL}, {SSL_CB_ALERT, NULL},
   4791         {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT "},
   4792         {SSL_CB_LOOP, "PINIT "}, {SSL_CB_LOOP, "TRCH"}, {SSL_CB_LOOP, "TWSH"},
   4793         {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWEE"}, {SSL_CB_LOOP, "TWFIN"},
   4794         {SSL_CB_LOOP, "TED"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TED"},
   4795         {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_HANDSHAKE_DONE, NULL},
   4796         {SSL_CB_LOOP, "TWST"}, {SSL_CB_EXIT, NULL}, {0, NULL},
   4797     }, {
   4798         /* TLSv1.3 client followed by resumption */
   4799         {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT "},
   4800         {SSL_CB_LOOP, "TWCH"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "TWCH"},
   4801         {SSL_CB_LOOP, "TRSH"}, {SSL_CB_LOOP, "TREE"}, {SSL_CB_LOOP, "TRSC"},
   4802         {SSL_CB_LOOP, "TRSCV"}, {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_LOOP, "TWCCS"},
   4803         {SSL_CB_LOOP, "TWFIN"},  {SSL_CB_HANDSHAKE_DONE, NULL},
   4804         {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "SSLOK "}, {SSL_CB_LOOP, "SSLOK "},
   4805         {SSL_CB_LOOP, "TRST"}, {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "SSLOK "},
   4806         {SSL_CB_LOOP, "SSLOK "}, {SSL_CB_LOOP, "TRST"}, {SSL_CB_EXIT, NULL},
   4807         {SSL_CB_ALERT, NULL}, {SSL_CB_HANDSHAKE_START, NULL},
   4808         {SSL_CB_LOOP, "PINIT "}, {SSL_CB_LOOP, "TWCH"}, {SSL_CB_EXIT, NULL},
   4809         {SSL_CB_LOOP, "TWCH"}, {SSL_CB_LOOP, "TRSH"},  {SSL_CB_LOOP, "TREE"},
   4810         {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWFIN"},
   4811         {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL},
   4812         {SSL_CB_LOOP, "SSLOK "}, {SSL_CB_LOOP, "SSLOK "}, {SSL_CB_LOOP, "TRST"},
   4813         {SSL_CB_EXIT, NULL}, {0, NULL},
   4814     }, {
   4815         /* TLSv1.3 server, early_data */
   4816         {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT "},
   4817         {SSL_CB_LOOP, "PINIT "}, {SSL_CB_LOOP, "TRCH"}, {SSL_CB_LOOP, "TWSH"},
   4818         {SSL_CB_LOOP, "TWCCS"}, {SSL_CB_LOOP, "TWEE"}, {SSL_CB_LOOP, "TWFIN"},
   4819         {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL},
   4820         {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "TED"},
   4821         {SSL_CB_LOOP, "TED"}, {SSL_CB_LOOP, "TWEOED"}, {SSL_CB_LOOP, "TRFIN"},
   4822         {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_LOOP, "TWST"},
   4823         {SSL_CB_EXIT, NULL}, {0, NULL},
   4824     }, {
   4825         /* TLSv1.3 client, early_data */
   4826         {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "PINIT "},
   4827         {SSL_CB_LOOP, "TWCH"}, {SSL_CB_LOOP, "TWCCS"},
   4828         {SSL_CB_HANDSHAKE_DONE, NULL}, {SSL_CB_EXIT, NULL},
   4829         {SSL_CB_HANDSHAKE_START, NULL}, {SSL_CB_LOOP, "TED"},
   4830         {SSL_CB_LOOP, "TED"}, {SSL_CB_LOOP, "TRSH"}, {SSL_CB_LOOP, "TREE"},
   4831         {SSL_CB_LOOP, "TRFIN"}, {SSL_CB_LOOP, "TPEDE"}, {SSL_CB_LOOP, "TWEOED"},
   4832         {SSL_CB_LOOP, "TWFIN"}, {SSL_CB_HANDSHAKE_DONE, NULL},
   4833         {SSL_CB_EXIT, NULL}, {SSL_CB_LOOP, "SSLOK "}, {SSL_CB_LOOP, "SSLOK "},
   4834         {SSL_CB_LOOP, "TRST"}, {SSL_CB_EXIT, NULL}, {0, NULL},
   4835     }, {
   4836         {0, NULL},
   4837     }
   4838 };
   4839 
   4840 static void sslapi_info_callback(const SSL *s, int where, int ret)
   4841 {
   4842     struct info_cb_states_st *state = info_cb_states[info_cb_offset];
   4843 
   4844     /* We do not ever expect a connection to fail in this test */
   4845     if (!TEST_false(ret == 0)) {
   4846         info_cb_failed = 1;
   4847         return;
   4848     }
   4849 
   4850     /*
   4851      * Do some sanity checks. We never expect these things to happen in this
   4852      * test
   4853      */
   4854     if (!TEST_false((SSL_is_server(s) && (where & SSL_ST_CONNECT) != 0))
   4855             || !TEST_false(!SSL_is_server(s) && (where & SSL_ST_ACCEPT) != 0)
   4856             || !TEST_int_ne(state[++info_cb_this_state].where, 0)) {
   4857         info_cb_failed = 1;
   4858         return;
   4859     }
   4860 
   4861     /* Now check we're in the right state */
   4862     if (!TEST_true((where & state[info_cb_this_state].where) != 0)) {
   4863         info_cb_failed = 1;
   4864         return;
   4865     }
   4866     if ((where & SSL_CB_LOOP) != 0
   4867             && !TEST_int_eq(strcmp(SSL_state_string(s),
   4868                             state[info_cb_this_state].statestr), 0)) {
   4869         info_cb_failed = 1;
   4870         return;
   4871     }
   4872 
   4873     /*
   4874      * Check that, if we've got SSL_CB_HANDSHAKE_DONE we are not in init
   4875      */
   4876     if ((where & SSL_CB_HANDSHAKE_DONE)
   4877             && SSL_in_init((SSL *)s) != 0) {
   4878         info_cb_failed = 1;
   4879         return;
   4880     }
   4881 }
   4882 
   4883 /*
   4884  * Test the info callback gets called when we expect it to.
   4885  *
   4886  * Test 0: TLSv1.2, server
   4887  * Test 1: TLSv1.2, client
   4888  * Test 2: TLSv1.3, server
   4889  * Test 3: TLSv1.3, client
   4890  * Test 4: TLSv1.3, server, early_data
   4891  * Test 5: TLSv1.3, client, early_data
   4892  */
   4893 static int test_info_callback(int tst)
   4894 {
   4895     SSL_CTX *cctx = NULL, *sctx = NULL;
   4896     SSL *clientssl = NULL, *serverssl = NULL;
   4897     SSL_SESSION *clntsess = NULL;
   4898     int testresult = 0;
   4899     int tlsvers;
   4900 
   4901     if (tst < 2) {
   4902 /* We need either ECDHE or DHE for the TLSv1.2 test to work */
   4903 #if !defined(OPENSSL_NO_TLS1_2) && (!defined(OPENSSL_NO_EC) \
   4904                                     || !defined(OPENSSL_NO_DH))
   4905         tlsvers = TLS1_2_VERSION;
   4906 #else
   4907         return 1;
   4908 #endif
   4909     } else {
   4910 #ifndef OPENSSL_NO_TLS1_3
   4911         tlsvers = TLS1_3_VERSION;
   4912 #else
   4913         return 1;
   4914 #endif
   4915     }
   4916 
   4917     /* Reset globals */
   4918     info_cb_failed = 0;
   4919     info_cb_this_state = -1;
   4920     info_cb_offset = tst;
   4921 
   4922 #ifndef OPENSSL_NO_TLS1_3
   4923     if (tst >= 4) {
   4924         SSL_SESSION *sess = NULL;
   4925         size_t written, readbytes;
   4926         unsigned char buf[80];
   4927 
   4928         /* early_data tests */
   4929         if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
   4930                                             &serverssl, &sess, 0)))
   4931             goto end;
   4932 
   4933         /* We don't actually need this reference */
   4934         SSL_SESSION_free(sess);
   4935 
   4936         SSL_set_info_callback((tst % 2) == 0 ? serverssl : clientssl,
   4937                               sslapi_info_callback);
   4938 
   4939         /* Write and read some early data and then complete the connection */
   4940         if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
   4941                                             &written))
   4942                 || !TEST_size_t_eq(written, strlen(MSG1))
   4943                 || !TEST_int_eq(SSL_read_early_data(serverssl, buf,
   4944                                                     sizeof(buf), &readbytes),
   4945                                 SSL_READ_EARLY_DATA_SUCCESS)
   4946                 || !TEST_mem_eq(MSG1, readbytes, buf, strlen(MSG1))
   4947                 || !TEST_int_eq(SSL_get_early_data_status(serverssl),
   4948                                 SSL_EARLY_DATA_ACCEPTED)
   4949                 || !TEST_true(create_ssl_connection(serverssl, clientssl,
   4950                                                     SSL_ERROR_NONE))
   4951                 || !TEST_false(info_cb_failed))
   4952             goto end;
   4953 
   4954         testresult = 1;
   4955         goto end;
   4956     }
   4957 #endif
   4958 
   4959     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
   4960                                        TLS_client_method(),
   4961                                        tlsvers, tlsvers, &sctx, &cctx, cert,
   4962                                        privkey)))
   4963         goto end;
   4964 
   4965     /*
   4966      * For even numbered tests we check the server callbacks. For odd numbers we
   4967      * check the client.
   4968      */
   4969     SSL_CTX_set_info_callback((tst % 2) == 0 ? sctx : cctx,
   4970                               sslapi_info_callback);
   4971 
   4972     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
   4973                                           &clientssl, NULL, NULL))
   4974         || !TEST_true(create_ssl_connection(serverssl, clientssl,
   4975                                             SSL_ERROR_NONE))
   4976         || !TEST_false(info_cb_failed))
   4977     goto end;
   4978 
   4979 
   4980 
   4981     clntsess = SSL_get1_session(clientssl);
   4982     SSL_shutdown(clientssl);
   4983     SSL_shutdown(serverssl);
   4984     SSL_free(serverssl);
   4985     SSL_free(clientssl);
   4986     serverssl = clientssl = NULL;
   4987 
   4988     /* Now do a resumption */
   4989     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL,
   4990                                       NULL))
   4991             || !TEST_true(SSL_set_session(clientssl, clntsess))
   4992             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   4993                                                 SSL_ERROR_NONE))
   4994             || !TEST_true(SSL_session_reused(clientssl))
   4995             || !TEST_false(info_cb_failed))
   4996         goto end;
   4997 
   4998     testresult = 1;
   4999 
   5000  end:
   5001     SSL_free(serverssl);
   5002     SSL_free(clientssl);
   5003     SSL_SESSION_free(clntsess);
   5004     SSL_CTX_free(sctx);
   5005     SSL_CTX_free(cctx);
   5006     return testresult;
   5007 }
   5008 
   5009 static int test_ssl_pending(int tst)
   5010 {
   5011     SSL_CTX *cctx = NULL, *sctx = NULL;
   5012     SSL *clientssl = NULL, *serverssl = NULL;
   5013     int testresult = 0;
   5014     char msg[] = "A test message";
   5015     char buf[5];
   5016     size_t written, readbytes;
   5017 
   5018     if (tst == 0) {
   5019         if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
   5020                                            TLS_client_method(),
   5021                                            TLS1_VERSION, TLS_MAX_VERSION,
   5022                                            &sctx, &cctx, cert, privkey)))
   5023             goto end;
   5024     } else {
   5025 #ifndef OPENSSL_NO_DTLS
   5026         if (!TEST_true(create_ssl_ctx_pair(DTLS_server_method(),
   5027                                            DTLS_client_method(),
   5028                                            DTLS1_VERSION, DTLS_MAX_VERSION,
   5029                                            &sctx, &cctx, cert, privkey)))
   5030             goto end;
   5031 #else
   5032         return 1;
   5033 #endif
   5034     }
   5035 
   5036     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   5037                                              NULL, NULL))
   5038             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   5039                                                 SSL_ERROR_NONE)))
   5040         goto end;
   5041 
   5042     if (!TEST_int_eq(SSL_pending(clientssl), 0)
   5043             || !TEST_false(SSL_has_pending(clientssl))
   5044             || !TEST_int_eq(SSL_pending(serverssl), 0)
   5045             || !TEST_false(SSL_has_pending(serverssl))
   5046             || !TEST_true(SSL_write_ex(serverssl, msg, sizeof(msg), &written))
   5047             || !TEST_size_t_eq(written, sizeof(msg))
   5048             || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
   5049             || !TEST_size_t_eq(readbytes, sizeof(buf))
   5050             || !TEST_int_eq(SSL_pending(clientssl), (int)(written - readbytes))
   5051             || !TEST_true(SSL_has_pending(clientssl)))
   5052         goto end;
   5053 
   5054     testresult = 1;
   5055 
   5056  end:
   5057     SSL_free(serverssl);
   5058     SSL_free(clientssl);
   5059     SSL_CTX_free(sctx);
   5060     SSL_CTX_free(cctx);
   5061 
   5062     return testresult;
   5063 }
   5064 
   5065 static struct {
   5066     unsigned int maxprot;
   5067     const char *clntciphers;
   5068     const char *clnttls13ciphers;
   5069     const char *srvrciphers;
   5070     const char *srvrtls13ciphers;
   5071     const char *shared;
   5072 } shared_ciphers_data[] = {
   5073 /*
   5074  * We can't establish a connection (even in TLSv1.1) with these ciphersuites if
   5075  * TLSv1.3 is enabled but TLSv1.2 is disabled.
   5076  */
   5077 #if defined(OPENSSL_NO_TLS1_3) || !defined(OPENSSL_NO_TLS1_2)
   5078     {
   5079         TLS1_2_VERSION,
   5080         "AES128-SHA:AES256-SHA",
   5081         NULL,
   5082         "AES256-SHA:DHE-RSA-AES128-SHA",
   5083         NULL,
   5084         "AES256-SHA"
   5085     },
   5086     {
   5087         TLS1_2_VERSION,
   5088         "AES128-SHA:DHE-RSA-AES128-SHA:AES256-SHA",
   5089         NULL,
   5090         "AES128-SHA:DHE-RSA-AES256-SHA:AES256-SHA",
   5091         NULL,
   5092         "AES128-SHA:AES256-SHA"
   5093     },
   5094     {
   5095         TLS1_2_VERSION,
   5096         "AES128-SHA:AES256-SHA",
   5097         NULL,
   5098         "AES128-SHA:DHE-RSA-AES128-SHA",
   5099         NULL,
   5100         "AES128-SHA"
   5101     },
   5102 #endif
   5103 /*
   5104  * This test combines TLSv1.3 and TLSv1.2 ciphersuites so they must both be
   5105  * enabled.
   5106  */
   5107 #if !defined(OPENSSL_NO_TLS1_3) && !defined(OPENSSL_NO_TLS1_2) \
   5108     && !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
   5109     {
   5110         TLS1_3_VERSION,
   5111         "AES128-SHA:AES256-SHA",
   5112         NULL,
   5113         "AES256-SHA:AES128-SHA256",
   5114         NULL,
   5115         "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:"
   5116         "TLS_AES_128_GCM_SHA256:AES256-SHA"
   5117     },
   5118 #endif
   5119 #ifndef OPENSSL_NO_TLS1_3
   5120     {
   5121         TLS1_3_VERSION,
   5122         "AES128-SHA",
   5123         "TLS_AES_256_GCM_SHA384",
   5124         "AES256-SHA",
   5125         "TLS_AES_256_GCM_SHA384",
   5126         "TLS_AES_256_GCM_SHA384"
   5127     },
   5128 #endif
   5129 };
   5130 
   5131 static int test_ssl_get_shared_ciphers(int tst)
   5132 {
   5133     SSL_CTX *cctx = NULL, *sctx = NULL;
   5134     SSL *clientssl = NULL, *serverssl = NULL;
   5135     int testresult = 0;
   5136     char buf[1024];
   5137 
   5138     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
   5139                                        TLS_client_method(),
   5140                                        TLS1_VERSION,
   5141                                        shared_ciphers_data[tst].maxprot,
   5142                                        &sctx, &cctx, cert, privkey)))
   5143         goto end;
   5144 
   5145     if (!TEST_true(SSL_CTX_set_cipher_list(cctx,
   5146                                         shared_ciphers_data[tst].clntciphers))
   5147             || (shared_ciphers_data[tst].clnttls13ciphers != NULL
   5148                 && !TEST_true(SSL_CTX_set_ciphersuites(cctx,
   5149                                     shared_ciphers_data[tst].clnttls13ciphers)))
   5150             || !TEST_true(SSL_CTX_set_cipher_list(sctx,
   5151                                         shared_ciphers_data[tst].srvrciphers))
   5152             || (shared_ciphers_data[tst].srvrtls13ciphers != NULL
   5153                 && !TEST_true(SSL_CTX_set_ciphersuites(sctx,
   5154                                     shared_ciphers_data[tst].srvrtls13ciphers))))
   5155         goto end;
   5156 
   5157 
   5158     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   5159                                              NULL, NULL))
   5160             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   5161                                                 SSL_ERROR_NONE)))
   5162         goto end;
   5163 
   5164     if (!TEST_ptr(SSL_get_shared_ciphers(serverssl, buf, sizeof(buf)))
   5165             || !TEST_int_eq(strcmp(buf, shared_ciphers_data[tst].shared), 0)) {
   5166         TEST_info("Shared ciphers are: %s\n", buf);
   5167         goto end;
   5168     }
   5169 
   5170     testresult = 1;
   5171 
   5172  end:
   5173     SSL_free(serverssl);
   5174     SSL_free(clientssl);
   5175     SSL_CTX_free(sctx);
   5176     SSL_CTX_free(cctx);
   5177 
   5178     return testresult;
   5179 }
   5180 
   5181 static const char *appdata = "Hello World";
   5182 static int gen_tick_called, dec_tick_called, tick_key_cb_called;
   5183 static int tick_key_renew = 0;
   5184 static SSL_TICKET_RETURN tick_dec_ret = SSL_TICKET_RETURN_ABORT;
   5185 
   5186 static int gen_tick_cb(SSL *s, void *arg)
   5187 {
   5188     gen_tick_called = 1;
   5189 
   5190     return SSL_SESSION_set1_ticket_appdata(SSL_get_session(s), appdata,
   5191                                            strlen(appdata));
   5192 }
   5193 
   5194 static SSL_TICKET_RETURN dec_tick_cb(SSL *s, SSL_SESSION *ss,
   5195                                      const unsigned char *keyname,
   5196                                      size_t keyname_length,
   5197                                      SSL_TICKET_STATUS status,
   5198                                      void *arg)
   5199 {
   5200     void *tickdata;
   5201     size_t tickdlen;
   5202 
   5203     dec_tick_called = 1;
   5204 
   5205     if (status == SSL_TICKET_EMPTY)
   5206         return SSL_TICKET_RETURN_IGNORE_RENEW;
   5207 
   5208     if (!TEST_true(status == SSL_TICKET_SUCCESS
   5209                    || status == SSL_TICKET_SUCCESS_RENEW))
   5210         return SSL_TICKET_RETURN_ABORT;
   5211 
   5212     if (!TEST_true(SSL_SESSION_get0_ticket_appdata(ss, &tickdata,
   5213                                                    &tickdlen))
   5214             || !TEST_size_t_eq(tickdlen, strlen(appdata))
   5215             || !TEST_int_eq(memcmp(tickdata, appdata, tickdlen), 0))
   5216         return SSL_TICKET_RETURN_ABORT;
   5217 
   5218     if (tick_key_cb_called)  {
   5219         /* Don't change what the ticket key callback wanted to do */
   5220         switch (status) {
   5221         case SSL_TICKET_NO_DECRYPT:
   5222             return SSL_TICKET_RETURN_IGNORE_RENEW;
   5223 
   5224         case SSL_TICKET_SUCCESS:
   5225             return SSL_TICKET_RETURN_USE;
   5226 
   5227         case SSL_TICKET_SUCCESS_RENEW:
   5228             return SSL_TICKET_RETURN_USE_RENEW;
   5229 
   5230         default:
   5231             return SSL_TICKET_RETURN_ABORT;
   5232         }
   5233     }
   5234     return tick_dec_ret;
   5235 
   5236 }
   5237 
   5238 static int tick_key_cb(SSL *s, unsigned char key_name[16],
   5239                        unsigned char iv[EVP_MAX_IV_LENGTH], EVP_CIPHER_CTX *ctx,
   5240                        HMAC_CTX *hctx, int enc)
   5241 {
   5242     const unsigned char tick_aes_key[16] = "0123456789abcdef";
   5243     const unsigned char tick_hmac_key[16] = "0123456789abcdef";
   5244 
   5245     tick_key_cb_called = 1;
   5246     memset(iv, 0, AES_BLOCK_SIZE);
   5247     memset(key_name, 0, 16);
   5248     if (!EVP_CipherInit_ex(ctx, EVP_aes_128_cbc(), NULL, tick_aes_key, iv, enc)
   5249             || !HMAC_Init_ex(hctx, tick_hmac_key, sizeof(tick_hmac_key),
   5250                              EVP_sha256(), NULL))
   5251         return -1;
   5252 
   5253     return tick_key_renew ? 2 : 1;
   5254 }
   5255 
   5256 /*
   5257  * Test the various ticket callbacks
   5258  * Test 0: TLSv1.2, no ticket key callback, no ticket, no renewal
   5259  * Test 1: TLSv1.3, no ticket key callback, no ticket, no renewal
   5260  * Test 2: TLSv1.2, no ticket key callback, no ticket, renewal
   5261  * Test 3: TLSv1.3, no ticket key callback, no ticket, renewal
   5262  * Test 4: TLSv1.2, no ticket key callback, ticket, no renewal
   5263  * Test 5: TLSv1.3, no ticket key callback, ticket, no renewal
   5264  * Test 6: TLSv1.2, no ticket key callback, ticket, renewal
   5265  * Test 7: TLSv1.3, no ticket key callback, ticket, renewal
   5266  * Test 8: TLSv1.2, ticket key callback, ticket, no renewal
   5267  * Test 9: TLSv1.3, ticket key callback, ticket, no renewal
   5268  * Test 10: TLSv1.2, ticket key callback, ticket, renewal
   5269  * Test 11: TLSv1.3, ticket key callback, ticket, renewal
   5270  */
   5271 static int test_ticket_callbacks(int tst)
   5272 {
   5273     SSL_CTX *cctx = NULL, *sctx = NULL;
   5274     SSL *clientssl = NULL, *serverssl = NULL;
   5275     SSL_SESSION *clntsess = NULL;
   5276     int testresult = 0;
   5277 
   5278 #ifdef OPENSSL_NO_TLS1_2
   5279     if (tst % 2 == 0)
   5280         return 1;
   5281 #endif
   5282 #ifdef OPENSSL_NO_TLS1_3
   5283     if (tst % 2 == 1)
   5284         return 1;
   5285 #endif
   5286 
   5287     gen_tick_called = dec_tick_called = tick_key_cb_called = 0;
   5288 
   5289     /* Which tests the ticket key callback should request renewal for */
   5290     if (tst == 10 || tst == 11)
   5291         tick_key_renew = 1;
   5292     else
   5293         tick_key_renew = 0;
   5294 
   5295     /* Which tests the decrypt ticket callback should request renewal for */
   5296     switch (tst) {
   5297     case 0:
   5298     case 1:
   5299         tick_dec_ret = SSL_TICKET_RETURN_IGNORE;
   5300         break;
   5301 
   5302     case 2:
   5303     case 3:
   5304         tick_dec_ret = SSL_TICKET_RETURN_IGNORE_RENEW;
   5305         break;
   5306 
   5307     case 4:
   5308     case 5:
   5309         tick_dec_ret = SSL_TICKET_RETURN_USE;
   5310         break;
   5311 
   5312     case 6:
   5313     case 7:
   5314         tick_dec_ret = SSL_TICKET_RETURN_USE_RENEW;
   5315         break;
   5316 
   5317     default:
   5318         tick_dec_ret = SSL_TICKET_RETURN_ABORT;
   5319     }
   5320 
   5321     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
   5322                                        TLS_client_method(),
   5323                                        TLS1_VERSION,
   5324                                        ((tst % 2) == 0) ? TLS1_2_VERSION
   5325                                                         : TLS1_3_VERSION,
   5326                                        &sctx, &cctx, cert, privkey)))
   5327         goto end;
   5328 
   5329     /*
   5330      * We only want sessions to resume from tickets - not the session cache. So
   5331      * switch the cache off.
   5332      */
   5333     if (!TEST_true(SSL_CTX_set_session_cache_mode(sctx, SSL_SESS_CACHE_OFF)))
   5334         goto end;
   5335 
   5336     if (!TEST_true(SSL_CTX_set_session_ticket_cb(sctx, gen_tick_cb, dec_tick_cb,
   5337                                                  NULL)))
   5338         goto end;
   5339 
   5340     if (tst >= 8
   5341             && !TEST_true(SSL_CTX_set_tlsext_ticket_key_cb(sctx, tick_key_cb)))
   5342         goto end;
   5343 
   5344     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   5345                                              NULL, NULL))
   5346             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   5347                                                 SSL_ERROR_NONE)))
   5348         goto end;
   5349 
   5350     /*
   5351      * The decrypt ticket key callback in TLSv1.2 should be called even though
   5352      * we have no ticket yet, because it gets called with a status of
   5353      * SSL_TICKET_EMPTY (the client indicates support for tickets but does not
   5354      * actually send any ticket data). This does not happen in TLSv1.3 because
   5355      * it is not valid to send empty ticket data in TLSv1.3.
   5356      */
   5357     if (!TEST_int_eq(gen_tick_called, 1)
   5358             || !TEST_int_eq(dec_tick_called, ((tst % 2) == 0) ? 1 : 0))
   5359         goto end;
   5360 
   5361     gen_tick_called = dec_tick_called = 0;
   5362 
   5363     clntsess = SSL_get1_session(clientssl);
   5364     SSL_shutdown(clientssl);
   5365     SSL_shutdown(serverssl);
   5366     SSL_free(serverssl);
   5367     SSL_free(clientssl);
   5368     serverssl = clientssl = NULL;
   5369 
   5370     /* Now do a resumption */
   5371     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL,
   5372                                       NULL))
   5373             || !TEST_true(SSL_set_session(clientssl, clntsess))
   5374             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   5375                                                 SSL_ERROR_NONE)))
   5376         goto end;
   5377 
   5378     if (tick_dec_ret == SSL_TICKET_RETURN_IGNORE
   5379             || tick_dec_ret == SSL_TICKET_RETURN_IGNORE_RENEW) {
   5380         if (!TEST_false(SSL_session_reused(clientssl)))
   5381             goto end;
   5382     } else {
   5383         if (!TEST_true(SSL_session_reused(clientssl)))
   5384             goto end;
   5385     }
   5386 
   5387     if (!TEST_int_eq(gen_tick_called,
   5388                      (tick_key_renew
   5389                       || tick_dec_ret == SSL_TICKET_RETURN_IGNORE_RENEW
   5390                       || tick_dec_ret == SSL_TICKET_RETURN_USE_RENEW)
   5391                      ? 1 : 0)
   5392             || !TEST_int_eq(dec_tick_called, 1))
   5393         goto end;
   5394 
   5395     testresult = 1;
   5396 
   5397  end:
   5398     SSL_SESSION_free(clntsess);
   5399     SSL_free(serverssl);
   5400     SSL_free(clientssl);
   5401     SSL_CTX_free(sctx);
   5402     SSL_CTX_free(cctx);
   5403 
   5404     return testresult;
   5405 }
   5406 
   5407 /*
   5408  * Test bi-directional shutdown.
   5409  * Test 0: TLSv1.2
   5410  * Test 1: TLSv1.2, server continues to read/write after client shutdown
   5411  * Test 2: TLSv1.3, no pending NewSessionTicket messages
   5412  * Test 3: TLSv1.3, pending NewSessionTicket messages
   5413  * Test 4: TLSv1.3, server continues to read/write after client shutdown, server
   5414  *                  sends key update, client reads it
   5415  * Test 5: TLSv1.3, server continues to read/write after client shutdown, server
   5416  *                  sends CertificateRequest, client reads and ignores it
   5417  * Test 6: TLSv1.3, server continues to read/write after client shutdown, client
   5418  *                  doesn't read it
   5419  */
   5420 static int test_shutdown(int tst)
   5421 {
   5422     SSL_CTX *cctx = NULL, *sctx = NULL;
   5423     SSL *clientssl = NULL, *serverssl = NULL;
   5424     int testresult = 0;
   5425     char msg[] = "A test message";
   5426     char buf[80];
   5427     size_t written, readbytes;
   5428     SSL_SESSION *sess;
   5429 
   5430 #ifdef OPENSSL_NO_TLS1_2
   5431     if (tst <= 1)
   5432         return 1;
   5433 #endif
   5434 #ifdef OPENSSL_NO_TLS1_3
   5435     if (tst >= 2)
   5436         return 1;
   5437 #endif
   5438 
   5439     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
   5440                                        TLS_client_method(),
   5441                                        TLS1_VERSION,
   5442                                        (tst <= 1) ? TLS1_2_VERSION
   5443                                                   : TLS1_3_VERSION,
   5444                                        &sctx, &cctx, cert, privkey)))
   5445         goto end;
   5446 
   5447     if (tst == 5)
   5448         SSL_CTX_set_post_handshake_auth(cctx, 1);
   5449 
   5450     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   5451                                              NULL, NULL)))
   5452         goto end;
   5453 
   5454     if (tst == 3) {
   5455         if (!TEST_true(create_bare_ssl_connection(serverssl, clientssl,
   5456                                                   SSL_ERROR_NONE, 1))
   5457                 || !TEST_ptr_ne(sess = SSL_get_session(clientssl), NULL)
   5458                 || !TEST_false(SSL_SESSION_is_resumable(sess)))
   5459             goto end;
   5460     } else if (!TEST_true(create_ssl_connection(serverssl, clientssl,
   5461                                               SSL_ERROR_NONE))
   5462             || !TEST_ptr_ne(sess = SSL_get_session(clientssl), NULL)
   5463             || !TEST_true(SSL_SESSION_is_resumable(sess))) {
   5464         goto end;
   5465     }
   5466 
   5467     if (!TEST_int_eq(SSL_shutdown(clientssl), 0))
   5468         goto end;
   5469 
   5470     if (tst >= 4) {
   5471         /*
   5472          * Reading on the server after the client has sent close_notify should
   5473          * fail and provide SSL_ERROR_ZERO_RETURN
   5474          */
   5475         if (!TEST_false(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
   5476                 || !TEST_int_eq(SSL_get_error(serverssl, 0),
   5477                                 SSL_ERROR_ZERO_RETURN)
   5478                 || !TEST_int_eq(SSL_get_shutdown(serverssl),
   5479                                 SSL_RECEIVED_SHUTDOWN)
   5480                    /*
   5481                     * Even though we're shutdown on receive we should still be
   5482                     * able to write.
   5483                     */
   5484                 || !TEST_true(SSL_write(serverssl, msg, sizeof(msg))))
   5485             goto end;
   5486         if (tst == 4
   5487                 && !TEST_true(SSL_key_update(serverssl,
   5488                                              SSL_KEY_UPDATE_REQUESTED)))
   5489             goto end;
   5490         if (tst == 5) {
   5491             SSL_set_verify(serverssl, SSL_VERIFY_PEER, NULL);
   5492             if (!TEST_true(SSL_verify_client_post_handshake(serverssl)))
   5493                 goto end;
   5494         }
   5495         if ((tst == 4 || tst == 5)
   5496                 && !TEST_true(SSL_write(serverssl, msg, sizeof(msg))))
   5497             goto end;
   5498         if (!TEST_int_eq(SSL_shutdown(serverssl), 1))
   5499             goto end;
   5500         if (tst == 4 || tst == 5) {
   5501             /* Should still be able to read data from server */
   5502             if (!TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf),
   5503                                        &readbytes))
   5504                     || !TEST_size_t_eq(readbytes, sizeof(msg))
   5505                     || !TEST_int_eq(memcmp(msg, buf, readbytes), 0)
   5506                     || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf),
   5507                                               &readbytes))
   5508                     || !TEST_size_t_eq(readbytes, sizeof(msg))
   5509                     || !TEST_int_eq(memcmp(msg, buf, readbytes), 0))
   5510                 goto end;
   5511         }
   5512     }
   5513 
   5514     /* Writing on the client after sending close_notify shouldn't be possible */
   5515     if (!TEST_false(SSL_write_ex(clientssl, msg, sizeof(msg), &written)))
   5516         goto end;
   5517 
   5518     if (tst < 4) {
   5519         /*
   5520          * For these tests the client has sent close_notify but it has not yet
   5521          * been received by the server. The server has not sent close_notify
   5522          * yet.
   5523          */
   5524         if (!TEST_int_eq(SSL_shutdown(serverssl), 0)
   5525                    /*
   5526                     * Writing on the server after sending close_notify shouldn't
   5527                     * be possible.
   5528                     */
   5529                 || !TEST_false(SSL_write_ex(serverssl, msg, sizeof(msg), &written))
   5530                 || !TEST_int_eq(SSL_shutdown(clientssl), 1)
   5531                 || !TEST_ptr_ne(sess = SSL_get_session(clientssl), NULL)
   5532                 || !TEST_true(SSL_SESSION_is_resumable(sess))
   5533                 || !TEST_int_eq(SSL_shutdown(serverssl), 1))
   5534             goto end;
   5535     } else if (tst == 4 || tst == 5) {
   5536         /*
   5537          * In this test the client has sent close_notify and it has been
   5538          * received by the server which has responded with a close_notify. The
   5539          * client needs to read the close_notify sent by the server.
   5540          */
   5541         if (!TEST_int_eq(SSL_shutdown(clientssl), 1)
   5542                 || !TEST_ptr_ne(sess = SSL_get_session(clientssl), NULL)
   5543                 || !TEST_true(SSL_SESSION_is_resumable(sess)))
   5544             goto end;
   5545     } else {
   5546         /*
   5547          * tst == 6
   5548          *
   5549          * The client has sent close_notify and is expecting a close_notify
   5550          * back, but instead there is application data first. The shutdown
   5551          * should fail with a fatal error.
   5552          */
   5553         if (!TEST_int_eq(SSL_shutdown(clientssl), -1)
   5554                 || !TEST_int_eq(SSL_get_error(clientssl, -1), SSL_ERROR_SSL))
   5555             goto end;
   5556     }
   5557 
   5558     testresult = 1;
   5559 
   5560  end:
   5561     SSL_free(serverssl);
   5562     SSL_free(clientssl);
   5563     SSL_CTX_free(sctx);
   5564     SSL_CTX_free(cctx);
   5565 
   5566     return testresult;
   5567 }
   5568 
   5569 #if !defined(OPENSSL_NO_TLS1_2) || !defined(OPENSSL_NO_TLS1_3)
   5570 static int cert_cb_cnt;
   5571 
   5572 static int cert_cb(SSL *s, void *arg)
   5573 {
   5574     SSL_CTX *ctx = (SSL_CTX *)arg;
   5575 
   5576     if (cert_cb_cnt == 0) {
   5577         /* Suspend the handshake */
   5578         cert_cb_cnt++;
   5579         return -1;
   5580     } else if (cert_cb_cnt == 1) {
   5581         /*
   5582          * Update the SSL_CTX, set the certificate and private key and then
   5583          * continue the handshake normally.
   5584          */
   5585         if (ctx != NULL && !TEST_ptr(SSL_set_SSL_CTX(s, ctx)))
   5586             return 0;
   5587 
   5588         if (!TEST_true(SSL_use_certificate_file(s, cert, SSL_FILETYPE_PEM))
   5589                 || !TEST_true(SSL_use_PrivateKey_file(s, privkey,
   5590                                                       SSL_FILETYPE_PEM))
   5591                 || !TEST_true(SSL_check_private_key(s)))
   5592             return 0;
   5593         cert_cb_cnt++;
   5594         return 1;
   5595     }
   5596 
   5597     /* Abort the handshake */
   5598     return 0;
   5599 }
   5600 
   5601 /*
   5602  * Test the certificate callback.
   5603  * Test 0: Callback fails
   5604  * Test 1: Success - no SSL_set_SSL_CTX() in the callback
   5605  * Test 2: Success - SSL_set_SSL_CTX() in the callback
   5606  */
   5607 static int test_cert_cb_int(int prot, int tst)
   5608 {
   5609     SSL_CTX *cctx = NULL, *sctx = NULL, *snictx = NULL;
   5610     SSL *clientssl = NULL, *serverssl = NULL;
   5611     int testresult = 0, ret;
   5612 
   5613     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
   5614                                        TLS_client_method(),
   5615                                        TLS1_VERSION,
   5616                                        prot,
   5617                                        &sctx, &cctx, NULL, NULL)))
   5618         goto end;
   5619 
   5620     if (tst == 0)
   5621         cert_cb_cnt = -1;
   5622     else
   5623         cert_cb_cnt = 0;
   5624     if (tst == 2)
   5625         snictx = SSL_CTX_new(TLS_server_method());
   5626     SSL_CTX_set_cert_cb(sctx, cert_cb, snictx);
   5627 
   5628     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   5629                                       NULL, NULL)))
   5630         goto end;
   5631 
   5632     ret = create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE);
   5633     if (!TEST_true(tst == 0 ? !ret : ret)
   5634             || (tst > 0 && !TEST_int_eq(cert_cb_cnt, 2))) {
   5635         goto end;
   5636     }
   5637 
   5638     testresult = 1;
   5639 
   5640  end:
   5641     SSL_free(serverssl);
   5642     SSL_free(clientssl);
   5643     SSL_CTX_free(sctx);
   5644     SSL_CTX_free(cctx);
   5645     SSL_CTX_free(snictx);
   5646 
   5647     return testresult;
   5648 }
   5649 #endif
   5650 
   5651 static int test_cert_cb(int tst)
   5652 {
   5653     int testresult = 1;
   5654 
   5655 #ifndef OPENSSL_NO_TLS1_2
   5656     testresult &= test_cert_cb_int(TLS1_2_VERSION, tst);
   5657 #endif
   5658 #ifndef OPENSSL_NO_TLS1_3
   5659     testresult &= test_cert_cb_int(TLS1_3_VERSION, tst);
   5660 #endif
   5661 
   5662     return testresult;
   5663 }
   5664 
   5665 static int client_cert_cb(SSL *ssl, X509 **x509, EVP_PKEY **pkey)
   5666 {
   5667     X509 *xcert, *peer;
   5668     EVP_PKEY *privpkey;
   5669     BIO *in = NULL;
   5670 
   5671     /* Check that SSL_get_peer_certificate() returns something sensible */
   5672     peer = SSL_get_peer_certificate(ssl);
   5673     if (!TEST_ptr(peer))
   5674         return 0;
   5675     X509_free(peer);
   5676 
   5677     in = BIO_new_file(cert, "r");
   5678     if (!TEST_ptr(in))
   5679         return 0;
   5680 
   5681     xcert = PEM_read_bio_X509(in, NULL, NULL, NULL);
   5682     BIO_free(in);
   5683     if (!TEST_ptr(xcert))
   5684         return 0;
   5685 
   5686     in = BIO_new_file(privkey, "r");
   5687     if (!TEST_ptr(in)) {
   5688         X509_free(xcert);
   5689         return 0;
   5690     }
   5691 
   5692     privpkey = PEM_read_bio_PrivateKey(in, NULL, NULL, NULL);
   5693     BIO_free(in);
   5694     if (!TEST_ptr(privpkey)) {
   5695         X509_free(xcert);
   5696         return 0;
   5697     }
   5698 
   5699     *x509 = xcert;
   5700     *pkey = privpkey;
   5701 
   5702     return 1;
   5703 }
   5704 
   5705 static int verify_cb(int preverify_ok, X509_STORE_CTX *x509_ctx)
   5706 {
   5707     return 1;
   5708 }
   5709 
   5710 static int test_client_cert_cb(int tst)
   5711 {
   5712     SSL_CTX *cctx = NULL, *sctx = NULL;
   5713     SSL *clientssl = NULL, *serverssl = NULL;
   5714     int testresult = 0;
   5715 
   5716 #ifdef OPENSSL_NO_TLS1_2
   5717     if (tst == 0)
   5718         return 1;
   5719 #endif
   5720 #ifdef OPENSSL_NO_TLS1_3
   5721     if (tst == 1)
   5722         return 1;
   5723 #endif
   5724 
   5725     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
   5726                                        TLS_client_method(),
   5727                                        TLS1_VERSION,
   5728                                        tst == 0 ? TLS1_2_VERSION
   5729                                                 : TLS1_3_VERSION,
   5730                                        &sctx, &cctx, cert, privkey)))
   5731         goto end;
   5732 
   5733     /*
   5734      * Test that setting a client_cert_cb results in a client certificate being
   5735      * sent.
   5736      */
   5737     SSL_CTX_set_client_cert_cb(cctx, client_cert_cb);
   5738     SSL_CTX_set_verify(sctx,
   5739                        SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
   5740                        verify_cb);
   5741 
   5742     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   5743                                       NULL, NULL))
   5744             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   5745                                                 SSL_ERROR_NONE)))
   5746         goto end;
   5747 
   5748     testresult = 1;
   5749 
   5750  end:
   5751     SSL_free(serverssl);
   5752     SSL_free(clientssl);
   5753     SSL_CTX_free(sctx);
   5754     SSL_CTX_free(cctx);
   5755 
   5756     return testresult;
   5757 }
   5758 
   5759 #if !defined(OPENSSL_NO_TLS1_2) || !defined(OPENSSL_NO_TLS1_3)
   5760 /*
   5761  * Test setting certificate authorities on both client and server.
   5762  *
   5763  * Test 0: SSL_CTX_set0_CA_list() only
   5764  * Test 1: Both SSL_CTX_set0_CA_list() and SSL_CTX_set_client_CA_list()
   5765  * Test 2: Only SSL_CTX_set_client_CA_list()
   5766  */
   5767 static int test_ca_names_int(int prot, int tst)
   5768 {
   5769     SSL_CTX *cctx = NULL, *sctx = NULL;
   5770     SSL *clientssl = NULL, *serverssl = NULL;
   5771     int testresult = 0;
   5772     size_t i;
   5773     X509_NAME *name[] = { NULL, NULL, NULL, NULL };
   5774     char *strnames[] = { "Jack", "Jill", "John", "Joanne" };
   5775     STACK_OF(X509_NAME) *sk1 = NULL, *sk2 = NULL;
   5776     const STACK_OF(X509_NAME) *sktmp = NULL;
   5777 
   5778     for (i = 0; i < OSSL_NELEM(name); i++) {
   5779         name[i] = X509_NAME_new();
   5780         if (!TEST_ptr(name[i])
   5781                 || !TEST_true(X509_NAME_add_entry_by_txt(name[i], "CN",
   5782                                                          MBSTRING_ASC,
   5783                                                          (unsigned char *)
   5784                                                          strnames[i],
   5785                                                          -1, -1, 0)))
   5786             goto end;
   5787     }
   5788 
   5789     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
   5790                                        TLS_client_method(),
   5791                                        TLS1_VERSION,
   5792                                        prot,
   5793                                        &sctx, &cctx, cert, privkey)))
   5794         goto end;
   5795 
   5796     SSL_CTX_set_verify(sctx, SSL_VERIFY_PEER, NULL);
   5797 
   5798     if (tst == 0 || tst == 1) {
   5799         if (!TEST_ptr(sk1 = sk_X509_NAME_new_null())
   5800                 || !TEST_true(sk_X509_NAME_push(sk1, X509_NAME_dup(name[0])))
   5801                 || !TEST_true(sk_X509_NAME_push(sk1, X509_NAME_dup(name[1])))
   5802                 || !TEST_ptr(sk2 = sk_X509_NAME_new_null())
   5803                 || !TEST_true(sk_X509_NAME_push(sk2, X509_NAME_dup(name[0])))
   5804                 || !TEST_true(sk_X509_NAME_push(sk2, X509_NAME_dup(name[1]))))
   5805             goto end;
   5806 
   5807         SSL_CTX_set0_CA_list(sctx, sk1);
   5808         SSL_CTX_set0_CA_list(cctx, sk2);
   5809         sk1 = sk2 = NULL;
   5810     }
   5811     if (tst == 1 || tst == 2) {
   5812         if (!TEST_ptr(sk1 = sk_X509_NAME_new_null())
   5813                 || !TEST_true(sk_X509_NAME_push(sk1, X509_NAME_dup(name[2])))
   5814                 || !TEST_true(sk_X509_NAME_push(sk1, X509_NAME_dup(name[3])))
   5815                 || !TEST_ptr(sk2 = sk_X509_NAME_new_null())
   5816                 || !TEST_true(sk_X509_NAME_push(sk2, X509_NAME_dup(name[2])))
   5817                 || !TEST_true(sk_X509_NAME_push(sk2, X509_NAME_dup(name[3]))))
   5818             goto end;
   5819 
   5820         SSL_CTX_set_client_CA_list(sctx, sk1);
   5821         SSL_CTX_set_client_CA_list(cctx, sk2);
   5822         sk1 = sk2 = NULL;
   5823     }
   5824 
   5825     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
   5826                                       NULL, NULL))
   5827             || !TEST_true(create_ssl_connection(serverssl, clientssl,
   5828                                                 SSL_ERROR_NONE)))
   5829         goto end;
   5830 
   5831     /*
   5832      * We only expect certificate authorities to have been sent to the server
   5833      * if we are using TLSv1.3 and SSL_set0_CA_list() was used
   5834      */
   5835     sktmp = SSL_get0_peer_CA_list(serverssl);
   5836     if (prot == TLS1_3_VERSION
   5837             && (tst == 0 || tst == 1)) {
   5838         if (!TEST_ptr(sktmp)
   5839                 || !TEST_int_eq(sk_X509_NAME_num(sktmp), 2)
   5840                 || !TEST_int_eq(X509_NAME_cmp(sk_X509_NAME_value(sktmp, 0),
   5841                                               name[0]), 0)
   5842                 || !TEST_int_eq(X509_NAME_cmp(sk_X509_NAME_value(sktmp, 1),
   5843                                               name[1]), 0))
   5844             goto end;
   5845     } else if (!TEST_ptr_null(sktmp)) {
   5846         goto end;
   5847     }
   5848 
   5849     /*
   5850      * In all tests we expect certificate authorities to have been sent to the
   5851      * client. However, SSL_set_client_CA_list() should override
   5852      * SSL_set0_CA_list()
   5853      */
   5854     sktmp = SSL_get0_peer_CA_list(clientssl);
   5855     if (!TEST_ptr(sktmp)
   5856             || !TEST_int_eq(sk_X509_NAME_num(sktmp), 2)
   5857             || !TEST_int_eq(X509_NAME_cmp(sk_X509_NAME_value(sktmp, 0),
   5858                                           name[tst == 0 ? 0 : 2]), 0)
   5859             || !TEST_int_eq(X509_NAME_cmp(sk_X509_NAME_value(sktmp, 1),
   5860                                           name[tst == 0 ? 1 : 3]), 0))
   5861         goto end;
   5862 
   5863     testresult = 1;
   5864 
   5865  end:
   5866     SSL_free(serverssl);
   5867     SSL_free(clientssl);
   5868     SSL_CTX_free(sctx);
   5869     SSL_CTX_free(cctx);
   5870     for (i = 0; i < OSSL_NELEM(name); i++)
   5871         X509_NAME_free(name[i]);
   5872     sk_X509_NAME_pop_free(sk1, X509_NAME_free);
   5873     sk_X509_NAME_pop_free(sk2, X509_NAME_free);
   5874 
   5875     return testresult;
   5876 }
   5877 #endif
   5878 
   5879 static int test_ca_names(int tst)
   5880 {
   5881     int testresult = 1;
   5882 
   5883 #ifndef OPENSSL_NO_TLS1_2
   5884     testresult &= test_ca_names_int(TLS1_2_VERSION, tst);
   5885 #endif
   5886 #ifndef OPENSSL_NO_TLS1_3
   5887     testresult &= test_ca_names_int(TLS1_3_VERSION, tst);
   5888 #endif
   5889 
   5890     return testresult;
   5891 }
   5892 
   5893 int setup_tests(void)
   5894 {
   5895     if (!TEST_ptr(cert = test_get_argument(0))
   5896             || !TEST_ptr(privkey = test_get_argument(1))
   5897             || !TEST_ptr(srpvfile = test_get_argument(2))
   5898             || !TEST_ptr(tmpfilename = test_get_argument(3)))
   5899         return 0;
   5900 
   5901     if (getenv("OPENSSL_TEST_GETCOUNTS") != NULL) {
   5902 #ifdef OPENSSL_NO_CRYPTO_MDEBUG
   5903         TEST_error("not supported in this build");
   5904         return 0;
   5905 #else
   5906         int i, mcount, rcount, fcount;
   5907 
   5908         for (i = 0; i < 4; i++)
   5909             test_export_key_mat(i);
   5910         CRYPTO_get_alloc_counts(&mcount, &rcount, &fcount);
   5911         test_printf_stdout("malloc %d realloc %d free %d\n",
   5912                 mcount, rcount, fcount);
   5913         return 1;
   5914 #endif
   5915     }
   5916 
   5917     ADD_TEST(test_large_message_tls);
   5918     ADD_TEST(test_large_message_tls_read_ahead);
   5919 #ifndef OPENSSL_NO_DTLS
   5920     ADD_TEST(test_large_message_dtls);
   5921 #endif
   5922 #ifndef OPENSSL_NO_OCSP
   5923     ADD_TEST(test_tlsext_status_type);
   5924 #endif
   5925     ADD_TEST(test_session_with_only_int_cache);
   5926     ADD_TEST(test_session_with_only_ext_cache);
   5927     ADD_TEST(test_session_with_both_cache);
   5928 #ifndef OPENSSL_NO_TLS1_3
   5929     ADD_ALL_TESTS(test_stateful_tickets, 3);
   5930     ADD_ALL_TESTS(test_stateless_tickets, 3);
   5931     ADD_TEST(test_psk_tickets);
   5932 #endif
   5933     ADD_ALL_TESTS(test_ssl_set_bio, TOTAL_SSL_SET_BIO_TESTS);
   5934     ADD_TEST(test_ssl_bio_pop_next_bio);
   5935     ADD_TEST(test_ssl_bio_pop_ssl_bio);
   5936     ADD_TEST(test_ssl_bio_change_rbio);
   5937     ADD_TEST(test_ssl_bio_change_wbio);
   5938 #if !defined(OPENSSL_NO_TLS1_2) || defined(OPENSSL_NO_TLS1_3)
   5939     ADD_ALL_TESTS(test_set_sigalgs, OSSL_NELEM(testsigalgs) * 2);
   5940     ADD_TEST(test_keylog);
   5941 #endif
   5942 #ifndef OPENSSL_NO_TLS1_3
   5943     ADD_TEST(test_keylog_no_master_key);
   5944 #endif
   5945 #ifndef OPENSSL_NO_TLS1_2
   5946     ADD_TEST(test_client_hello_cb);
   5947 #endif
   5948 #ifndef OPENSSL_NO_TLS1_3
   5949     ADD_ALL_TESTS(test_early_data_read_write, 3);
   5950     /*
   5951      * We don't do replay tests for external PSK. Replay protection isn't used
   5952      * in that scenario.
   5953      */
   5954     ADD_ALL_TESTS(test_early_data_replay, 2);
   5955     ADD_ALL_TESTS(test_early_data_skip, 3);
   5956     ADD_ALL_TESTS(test_early_data_skip_hrr, 3);
   5957     ADD_ALL_TESTS(test_early_data_skip_hrr_fail, 3);
   5958     ADD_ALL_TESTS(test_early_data_skip_abort, 3);
   5959     ADD_ALL_TESTS(test_early_data_not_sent, 3);
   5960     ADD_ALL_TESTS(test_early_data_psk, 8);
   5961     ADD_ALL_TESTS(test_early_data_not_expected, 3);
   5962 # ifndef OPENSSL_NO_TLS1_2
   5963     ADD_ALL_TESTS(test_early_data_tls1_2, 3);
   5964 # endif
   5965 #endif
   5966 #ifndef OPENSSL_NO_TLS1_3
   5967     ADD_ALL_TESTS(test_set_ciphersuite, 10);
   5968     ADD_TEST(test_ciphersuite_change);
   5969 #ifdef OPENSSL_NO_PSK
   5970     ADD_ALL_TESTS(test_tls13_psk, 1);
   5971 #else
   5972     ADD_ALL_TESTS(test_tls13_psk, 4);
   5973 #endif  /* OPENSSL_NO_PSK */
   5974     ADD_ALL_TESTS(test_custom_exts, 5);
   5975     ADD_TEST(test_stateless);
   5976     ADD_TEST(test_pha_key_update);
   5977 #else
   5978     ADD_ALL_TESTS(test_custom_exts, 3);
   5979 #endif
   5980     ADD_ALL_TESTS(test_serverinfo, 8);
   5981     ADD_ALL_TESTS(test_export_key_mat, 6);
   5982 #ifndef OPENSSL_NO_TLS1_3
   5983     ADD_ALL_TESTS(test_export_key_mat_early, 3);
   5984     ADD_TEST(test_key_update);
   5985 #endif
   5986     ADD_ALL_TESTS(test_ssl_clear, 2);
   5987     ADD_ALL_TESTS(test_max_fragment_len_ext, OSSL_NELEM(max_fragment_len_test));
   5988 #if !defined(OPENSSL_NO_SRP) && !defined(OPENSSL_NO_TLS1_2)
   5989     ADD_ALL_TESTS(test_srp, 6);
   5990 #endif
   5991     ADD_ALL_TESTS(test_info_callback, 6);
   5992     ADD_ALL_TESTS(test_ssl_pending, 2);
   5993     ADD_ALL_TESTS(test_ssl_get_shared_ciphers, OSSL_NELEM(shared_ciphers_data));
   5994     ADD_ALL_TESTS(test_ticket_callbacks, 12);
   5995     ADD_ALL_TESTS(test_shutdown, 7);
   5996     ADD_ALL_TESTS(test_cert_cb, 3);
   5997     ADD_ALL_TESTS(test_client_cert_cb, 2);
   5998     ADD_ALL_TESTS(test_ca_names, 3);
   5999     return 1;
   6000 }
   6001 
   6002 void cleanup_tests(void)
   6003 {
   6004     bio_s_mempacket_test_free();
   6005 }
   6006