Always call the new_session_cb when issuing a NewSessionTicket in TLSv1.3
[openssl.git] / test / sslapitest.c
1 /*
2  * Copyright 2016-2018 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
18 #include "ssltestlib.h"
19 #include "testutil.h"
20 #include "testutil/output.h"
21 #include "internal/nelem.h"
22 #include "../ssl/ssl_locl.h"
23
24 static char *cert = NULL;
25 static char *privkey = NULL;
26
27 #define LOG_BUFFER_SIZE 1024
28 static char server_log_buffer[LOG_BUFFER_SIZE + 1] = {0};
29 static size_t server_log_buffer_index = 0;
30 static char client_log_buffer[LOG_BUFFER_SIZE + 1] = {0};
31 static size_t client_log_buffer_index = 0;
32 static int error_writing_log = 0;
33
34 #ifndef OPENSSL_NO_OCSP
35 static const unsigned char orespder[] = "Dummy OCSP Response";
36 static int ocsp_server_called = 0;
37 static int ocsp_client_called = 0;
38
39 static int cdummyarg = 1;
40 static X509 *ocspcert = NULL;
41 #endif
42
43 #define NUM_EXTRA_CERTS 40
44 #define CLIENT_VERSION_LEN      2
45
46 /*
47  * This structure is used to validate that the correct number of log messages
48  * of various types are emitted when emitting secret logs.
49  */
50 struct sslapitest_log_counts {
51     unsigned int rsa_key_exchange_count;
52     unsigned int master_secret_count;
53     unsigned int client_handshake_secret_count;
54     unsigned int server_handshake_secret_count;
55     unsigned int client_application_secret_count;
56     unsigned int server_application_secret_count;
57 };
58
59
60 static unsigned char serverinfov1[] = {
61     0xff, 0xff, /* Dummy extension type */
62     0x00, 0x01, /* Extension length is 1 byte */
63     0xff        /* Dummy extension data */
64 };
65
66 static unsigned char serverinfov2[] = {
67     0x00, 0x00, 0x00,
68     (unsigned char)(SSL_EXT_CLIENT_HELLO & 0xff), /* Dummy context - 4 bytes */
69     0xff, 0xff, /* Dummy extension type */
70     0x00, 0x01, /* Extension length is 1 byte */
71     0xff        /* Dummy extension data */
72 };
73
74 static void client_keylog_callback(const SSL *ssl, const char *line)
75 {
76     int line_length = strlen(line);
77
78     /* If the log doesn't fit, error out. */
79     if (client_log_buffer_index + line_length > sizeof(client_log_buffer) - 1) {
80         TEST_info("Client log too full");
81         error_writing_log = 1;
82         return;
83     }
84
85     strcat(client_log_buffer, line);
86     client_log_buffer_index += line_length;
87     client_log_buffer[client_log_buffer_index++] = '\n';
88 }
89
90 static void server_keylog_callback(const SSL *ssl, const char *line)
91 {
92     int line_length = strlen(line);
93
94     /* If the log doesn't fit, error out. */
95     if (server_log_buffer_index + line_length > sizeof(server_log_buffer) - 1) {
96         TEST_info("Server log too full");
97         error_writing_log = 1;
98         return;
99     }
100
101     strcat(server_log_buffer, line);
102     server_log_buffer_index += line_length;
103     server_log_buffer[server_log_buffer_index++] = '\n';
104 }
105
106 static int compare_hex_encoded_buffer(const char *hex_encoded,
107                                       size_t hex_length,
108                                       const uint8_t *raw,
109                                       size_t raw_length)
110 {
111     size_t i, j;
112     char hexed[3];
113
114     if (!TEST_size_t_eq(raw_length * 2, hex_length))
115         return 1;
116
117     for (i = j = 0; i < raw_length && j + 1 < hex_length; i++, j += 2) {
118         sprintf(hexed, "%02x", raw[i]);
119         if (!TEST_int_eq(hexed[0], hex_encoded[j])
120                 || !TEST_int_eq(hexed[1], hex_encoded[j + 1]))
121             return 1;
122     }
123
124     return 0;
125 }
126
127 static int test_keylog_output(char *buffer, const SSL *ssl,
128                               const SSL_SESSION *session,
129                               struct sslapitest_log_counts *expected)
130 {
131     char *token = NULL;
132     unsigned char actual_client_random[SSL3_RANDOM_SIZE] = {0};
133     size_t client_random_size = SSL3_RANDOM_SIZE;
134     unsigned char actual_master_key[SSL_MAX_MASTER_KEY_LENGTH] = {0};
135     size_t master_key_size = SSL_MAX_MASTER_KEY_LENGTH;
136     unsigned int rsa_key_exchange_count = 0;
137     unsigned int master_secret_count = 0;
138     unsigned int client_handshake_secret_count = 0;
139     unsigned int server_handshake_secret_count = 0;
140     unsigned int client_application_secret_count = 0;
141     unsigned int server_application_secret_count = 0;
142
143     for (token = strtok(buffer, " \n"); token != NULL;
144          token = strtok(NULL, " \n")) {
145         if (strcmp(token, "RSA") == 0) {
146             /*
147              * Premaster secret. Tokens should be: 16 ASCII bytes of
148              * hex-encoded encrypted secret, then the hex-encoded pre-master
149              * secret.
150              */
151             if (!TEST_ptr(token = strtok(NULL, " \n")))
152                 return 0;
153             if (!TEST_size_t_eq(strlen(token), 16))
154                 return 0;
155             if (!TEST_ptr(token = strtok(NULL, " \n")))
156                 return 0;
157             /*
158              * We can't sensibly check the log because the premaster secret is
159              * transient, and OpenSSL doesn't keep hold of it once the master
160              * secret is generated.
161              */
162             rsa_key_exchange_count++;
163         } else if (strcmp(token, "CLIENT_RANDOM") == 0) {
164             /*
165              * Master secret. Tokens should be: 64 ASCII bytes of hex-encoded
166              * client random, then the hex-encoded master secret.
167              */
168             client_random_size = SSL_get_client_random(ssl,
169                                                        actual_client_random,
170                                                        SSL3_RANDOM_SIZE);
171             if (!TEST_size_t_eq(client_random_size, SSL3_RANDOM_SIZE))
172                 return 0;
173
174             if (!TEST_ptr(token = strtok(NULL, " \n")))
175                 return 0;
176             if (!TEST_size_t_eq(strlen(token), 64))
177                 return 0;
178             if (!TEST_false(compare_hex_encoded_buffer(token, 64,
179                                                        actual_client_random,
180                                                        client_random_size)))
181                 return 0;
182
183             if (!TEST_ptr(token = strtok(NULL, " \n")))
184                 return 0;
185             master_key_size = SSL_SESSION_get_master_key(session,
186                                                          actual_master_key,
187                                                          master_key_size);
188             if (!TEST_size_t_ne(master_key_size, 0))
189                 return 0;
190             if (!TEST_false(compare_hex_encoded_buffer(token, strlen(token),
191                                                        actual_master_key,
192                                                        master_key_size)))
193                 return 0;
194             master_secret_count++;
195         } else if (strcmp(token, "CLIENT_HANDSHAKE_TRAFFIC_SECRET") == 0
196                     || strcmp(token, "SERVER_HANDSHAKE_TRAFFIC_SECRET") == 0
197                     || strcmp(token, "CLIENT_TRAFFIC_SECRET_0") == 0
198                     || strcmp(token, "SERVER_TRAFFIC_SECRET_0") == 0) {
199             /*
200              * TLSv1.3 secret. Tokens should be: 64 ASCII bytes of hex-encoded
201              * client random, and then the hex-encoded secret. In this case,
202              * we treat all of these secrets identically and then just
203              * distinguish between them when counting what we saw.
204              */
205             if (strcmp(token, "CLIENT_HANDSHAKE_TRAFFIC_SECRET") == 0)
206                 client_handshake_secret_count++;
207             else if (strcmp(token, "SERVER_HANDSHAKE_TRAFFIC_SECRET") == 0)
208                 server_handshake_secret_count++;
209             else if (strcmp(token, "CLIENT_TRAFFIC_SECRET_0") == 0)
210                 client_application_secret_count++;
211             else if (strcmp(token, "SERVER_TRAFFIC_SECRET_0") == 0)
212                 server_application_secret_count++;
213
214             client_random_size = SSL_get_client_random(ssl,
215                                                        actual_client_random,
216                                                        SSL3_RANDOM_SIZE);
217             if (!TEST_size_t_eq(client_random_size, SSL3_RANDOM_SIZE))
218                 return 0;
219
220             if (!TEST_ptr(token = strtok(NULL, " \n")))
221                 return 0;
222             if (!TEST_size_t_eq(strlen(token), 64))
223                 return 0;
224             if (!TEST_false(compare_hex_encoded_buffer(token, 64,
225                                                        actual_client_random,
226                                                        client_random_size)))
227                 return 0;
228
229             if (!TEST_ptr(token = strtok(NULL, " \n")))
230                 return 0;
231
232             /*
233              * TODO(TLS1.3): test that application traffic secrets are what
234              * we expect */
235         } else {
236             TEST_info("Unexpected token %s\n", token);
237             return 0;
238         }
239     }
240
241     /* Got what we expected? */
242     if (!TEST_size_t_eq(rsa_key_exchange_count,
243                         expected->rsa_key_exchange_count)
244             || !TEST_size_t_eq(master_secret_count,
245                                expected->master_secret_count)
246             || !TEST_size_t_eq(client_handshake_secret_count,
247                                expected->client_handshake_secret_count)
248             || !TEST_size_t_eq(server_handshake_secret_count,
249                                expected->server_handshake_secret_count)
250             || !TEST_size_t_eq(client_application_secret_count,
251                                expected->client_application_secret_count)
252             || !TEST_size_t_eq(server_application_secret_count,
253                                expected->server_application_secret_count))
254         return 0;
255     return 1;
256 }
257
258 #if !defined(OPENSSL_NO_TLS1_2) || defined(OPENSSL_NO_TLS1_3)
259 static int test_keylog(void)
260 {
261     SSL_CTX *cctx = NULL, *sctx = NULL;
262     SSL *clientssl = NULL, *serverssl = NULL;
263     int testresult = 0;
264     struct sslapitest_log_counts expected = {0};
265
266     /* Clean up logging space */
267     memset(client_log_buffer, 0, sizeof(client_log_buffer));
268     memset(server_log_buffer, 0, sizeof(server_log_buffer));
269     client_log_buffer_index = 0;
270     server_log_buffer_index = 0;
271     error_writing_log = 0;
272
273     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
274                                        TLS_client_method(),
275                                        &sctx, &cctx, cert, privkey)))
276         return 0;
277
278     /* We cannot log the master secret for TLSv1.3, so we should forbid it. */
279     SSL_CTX_set_options(cctx, SSL_OP_NO_TLSv1_3);
280     SSL_CTX_set_options(sctx, SSL_OP_NO_TLSv1_3);
281
282     /* We also want to ensure that we use RSA-based key exchange. */
283     if (!TEST_true(SSL_CTX_set_cipher_list(cctx, "RSA")))
284         goto end;
285
286     if (!TEST_true(SSL_CTX_get_keylog_callback(cctx) == NULL)
287             || !TEST_true(SSL_CTX_get_keylog_callback(sctx) == NULL))
288         goto end;
289     SSL_CTX_set_keylog_callback(cctx, client_keylog_callback);
290     if (!TEST_true(SSL_CTX_get_keylog_callback(cctx)
291                    == client_keylog_callback))
292         goto end;
293     SSL_CTX_set_keylog_callback(sctx, server_keylog_callback);
294     if (!TEST_true(SSL_CTX_get_keylog_callback(sctx)
295                    == server_keylog_callback))
296         goto end;
297
298     /* Now do a handshake and check that the logs have been written to. */
299     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
300                                       &clientssl, NULL, NULL))
301             || !TEST_true(create_ssl_connection(serverssl, clientssl,
302                                                 SSL_ERROR_NONE))
303             || !TEST_false(error_writing_log)
304             || !TEST_int_gt(client_log_buffer_index, 0)
305             || !TEST_int_gt(server_log_buffer_index, 0))
306         goto end;
307
308     /*
309      * Now we want to test that our output data was vaguely sensible. We
310      * do that by using strtok and confirming that we have more or less the
311      * data we expect. For both client and server, we expect to see one master
312      * secret. The client should also see a RSA key exchange.
313      */
314     expected.rsa_key_exchange_count = 1;
315     expected.master_secret_count = 1;
316     if (!TEST_true(test_keylog_output(client_log_buffer, clientssl,
317                                       SSL_get_session(clientssl), &expected)))
318         goto end;
319
320     expected.rsa_key_exchange_count = 0;
321     if (!TEST_true(test_keylog_output(server_log_buffer, serverssl,
322                                       SSL_get_session(serverssl), &expected)))
323         goto end;
324
325     testresult = 1;
326
327 end:
328     SSL_free(serverssl);
329     SSL_free(clientssl);
330     SSL_CTX_free(sctx);
331     SSL_CTX_free(cctx);
332
333     return testresult;
334 }
335 #endif
336
337 #ifndef OPENSSL_NO_TLS1_3
338 static int test_keylog_no_master_key(void)
339 {
340     SSL_CTX *cctx = NULL, *sctx = NULL;
341     SSL *clientssl = NULL, *serverssl = NULL;
342     int testresult = 0;
343     struct sslapitest_log_counts expected = {0};
344
345     /* Clean up logging space */
346     memset(client_log_buffer, 0, sizeof(client_log_buffer));
347     memset(server_log_buffer, 0, sizeof(server_log_buffer));
348     client_log_buffer_index = 0;
349     server_log_buffer_index = 0;
350     error_writing_log = 0;
351
352     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
353                              TLS_client_method(), &sctx,
354                              &cctx, cert, privkey)))
355         return 0;
356
357     if (!TEST_true(SSL_CTX_get_keylog_callback(cctx) == NULL)
358             || !TEST_true(SSL_CTX_get_keylog_callback(sctx) == NULL))
359         goto end;
360
361     SSL_CTX_set_keylog_callback(cctx, client_keylog_callback);
362     if (!TEST_true(SSL_CTX_get_keylog_callback(cctx)
363                    == client_keylog_callback))
364         goto end;
365
366     SSL_CTX_set_keylog_callback(sctx, server_keylog_callback);
367     if (!TEST_true(SSL_CTX_get_keylog_callback(sctx)
368                    == server_keylog_callback))
369         goto end;
370
371     /* Now do a handshake and check that the logs have been written to. */
372     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
373                                       &clientssl, NULL, NULL))
374             || !TEST_true(create_ssl_connection(serverssl, clientssl,
375                                                 SSL_ERROR_NONE))
376             || !TEST_false(error_writing_log))
377         goto end;
378
379     /*
380      * Now we want to test that our output data was vaguely sensible. For this
381      * test, we expect no CLIENT_RANDOM entry because it doesn't make sense for
382      * TLSv1.3, but we do expect both client and server to emit keys.
383      */
384     expected.client_handshake_secret_count = 1;
385     expected.server_handshake_secret_count = 1;
386     expected.client_application_secret_count = 1;
387     expected.server_application_secret_count = 1;
388     if (!TEST_true(test_keylog_output(client_log_buffer, clientssl,
389                                       SSL_get_session(clientssl), &expected))
390             || !TEST_true(test_keylog_output(server_log_buffer, serverssl,
391                                              SSL_get_session(serverssl),
392                                              &expected)))
393         goto end;
394
395     testresult = 1;
396
397 end:
398     SSL_free(serverssl);
399     SSL_free(clientssl);
400     SSL_CTX_free(sctx);
401     SSL_CTX_free(cctx);
402
403     return testresult;
404 }
405 #endif
406
407 #ifndef OPENSSL_NO_TLS1_2
408 static int full_client_hello_callback(SSL *s, int *al, void *arg)
409 {
410     int *ctr = arg;
411     const unsigned char *p;
412     int *exts;
413     /* We only configure two ciphers, but the SCSV is added automatically. */
414 #ifdef OPENSSL_NO_EC
415     const unsigned char expected_ciphers[] = {0x00, 0x9d, 0x00, 0xff};
416 #else
417     const unsigned char expected_ciphers[] = {0x00, 0x9d, 0xc0,
418                                               0x2c, 0x00, 0xff};
419 #endif
420     const int expected_extensions[] = {
421 #ifndef OPENSSL_NO_EC
422                                        11, 10,
423 #endif
424                                        35, 22, 23, 13};
425     size_t len;
426
427     /* Make sure we can defer processing and get called back. */
428     if ((*ctr)++ == 0)
429         return SSL_CLIENT_HELLO_RETRY;
430
431     len = SSL_client_hello_get0_ciphers(s, &p);
432     if (!TEST_mem_eq(p, len, expected_ciphers, sizeof(expected_ciphers))
433             || !TEST_size_t_eq(
434                        SSL_client_hello_get0_compression_methods(s, &p), 1)
435             || !TEST_int_eq(*p, 0))
436         return SSL_CLIENT_HELLO_ERROR;
437     if (!SSL_client_hello_get1_extensions_present(s, &exts, &len))
438         return SSL_CLIENT_HELLO_ERROR;
439     if (len != OSSL_NELEM(expected_extensions) ||
440         memcmp(exts, expected_extensions, len * sizeof(*exts)) != 0) {
441         printf("ClientHello callback expected extensions mismatch\n");
442         OPENSSL_free(exts);
443         return SSL_CLIENT_HELLO_ERROR;
444     }
445     OPENSSL_free(exts);
446     return SSL_CLIENT_HELLO_SUCCESS;
447 }
448
449 static int test_client_hello_cb(void)
450 {
451     SSL_CTX *cctx = NULL, *sctx = NULL;
452     SSL *clientssl = NULL, *serverssl = NULL;
453     int testctr = 0, testresult = 0;
454
455     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
456                                        TLS_client_method(), &sctx,
457                                        &cctx, cert, privkey)))
458         goto end;
459     SSL_CTX_set_client_hello_cb(sctx, full_client_hello_callback, &testctr);
460
461     /* The gimpy cipher list we configure can't do TLS 1.3. */
462     SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION);
463
464     if (!TEST_true(SSL_CTX_set_cipher_list(cctx,
465                         "AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384"))
466             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
467                                              &clientssl, NULL, NULL))
468             || !TEST_false(create_ssl_connection(serverssl, clientssl,
469                         SSL_ERROR_WANT_CLIENT_HELLO_CB))
470                 /*
471                  * Passing a -1 literal is a hack since
472                  * the real value was lost.
473                  * */
474             || !TEST_int_eq(SSL_get_error(serverssl, -1),
475                             SSL_ERROR_WANT_CLIENT_HELLO_CB)
476             || !TEST_true(create_ssl_connection(serverssl, clientssl,
477                                                 SSL_ERROR_NONE)))
478         goto end;
479
480     testresult = 1;
481
482 end:
483     SSL_free(serverssl);
484     SSL_free(clientssl);
485     SSL_CTX_free(sctx);
486     SSL_CTX_free(cctx);
487
488     return testresult;
489 }
490 #endif
491
492 static int execute_test_large_message(const SSL_METHOD *smeth,
493                                       const SSL_METHOD *cmeth, int read_ahead)
494 {
495     SSL_CTX *cctx = NULL, *sctx = NULL;
496     SSL *clientssl = NULL, *serverssl = NULL;
497     int testresult = 0;
498     int i;
499     BIO *certbio = NULL;
500     X509 *chaincert = NULL;
501     int certlen;
502
503     if (!TEST_ptr(certbio = BIO_new_file(cert, "r")))
504         goto end;
505     chaincert = PEM_read_bio_X509(certbio, NULL, NULL, NULL);
506     BIO_free(certbio);
507     certbio = NULL;
508     if (!TEST_ptr(chaincert))
509         goto end;
510
511     if (!TEST_true(create_ssl_ctx_pair(smeth, cmeth, &sctx,
512                                        &cctx, cert, privkey)))
513         goto end;
514
515     if (read_ahead) {
516         /*
517          * Test that read_ahead works correctly when dealing with large
518          * records
519          */
520         SSL_CTX_set_read_ahead(cctx, 1);
521     }
522
523     /*
524      * We assume the supplied certificate is big enough so that if we add
525      * NUM_EXTRA_CERTS it will make the overall message large enough. The
526      * default buffer size is requested to be 16k, but due to the way BUF_MEM
527      * works, it ends up allocating a little over 21k (16 * 4/3). So, in this
528      * test we need to have a message larger than that.
529      */
530     certlen = i2d_X509(chaincert, NULL);
531     OPENSSL_assert(certlen * NUM_EXTRA_CERTS >
532                    (SSL3_RT_MAX_PLAIN_LENGTH * 4) / 3);
533     for (i = 0; i < NUM_EXTRA_CERTS; i++) {
534         if (!X509_up_ref(chaincert))
535             goto end;
536         if (!SSL_CTX_add_extra_chain_cert(sctx, chaincert)) {
537             X509_free(chaincert);
538             goto end;
539         }
540     }
541
542     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
543                                       NULL, NULL))
544             || !TEST_true(create_ssl_connection(serverssl, clientssl,
545                                                 SSL_ERROR_NONE)))
546         goto end;
547
548     /*
549      * Calling SSL_clear() first is not required but this tests that SSL_clear()
550      * doesn't leak (when using enable-crypto-mdebug).
551      */
552     if (!TEST_true(SSL_clear(serverssl)))
553         goto end;
554
555     testresult = 1;
556  end:
557     X509_free(chaincert);
558     SSL_free(serverssl);
559     SSL_free(clientssl);
560     SSL_CTX_free(sctx);
561     SSL_CTX_free(cctx);
562
563     return testresult;
564 }
565
566 static int test_large_message_tls(void)
567 {
568     return execute_test_large_message(TLS_server_method(), TLS_client_method(),
569                                       0);
570 }
571
572 static int test_large_message_tls_read_ahead(void)
573 {
574     return execute_test_large_message(TLS_server_method(), TLS_client_method(),
575                                       1);
576 }
577
578 #ifndef OPENSSL_NO_DTLS
579 static int test_large_message_dtls(void)
580 {
581     /*
582      * read_ahead is not relevant to DTLS because DTLS always acts as if
583      * read_ahead is set.
584      */
585     return execute_test_large_message(DTLS_server_method(),
586                                       DTLS_client_method(), 0);
587 }
588 #endif
589
590 #ifndef OPENSSL_NO_OCSP
591 static int ocsp_server_cb(SSL *s, void *arg)
592 {
593     int *argi = (int *)arg;
594     unsigned char *copy = NULL;
595     STACK_OF(OCSP_RESPID) *ids = NULL;
596     OCSP_RESPID *id = NULL;
597
598     if (*argi == 2) {
599         /* In this test we are expecting exactly 1 OCSP_RESPID */
600         SSL_get_tlsext_status_ids(s, &ids);
601         if (ids == NULL || sk_OCSP_RESPID_num(ids) != 1)
602             return SSL_TLSEXT_ERR_ALERT_FATAL;
603
604         id = sk_OCSP_RESPID_value(ids, 0);
605         if (id == NULL || !OCSP_RESPID_match(id, ocspcert))
606             return SSL_TLSEXT_ERR_ALERT_FATAL;
607     } else if (*argi != 1) {
608         return SSL_TLSEXT_ERR_ALERT_FATAL;
609     }
610
611     if (!TEST_ptr(copy = OPENSSL_memdup(orespder, sizeof(orespder))))
612         return SSL_TLSEXT_ERR_ALERT_FATAL;
613
614     SSL_set_tlsext_status_ocsp_resp(s, copy, sizeof(orespder));
615     ocsp_server_called = 1;
616     return SSL_TLSEXT_ERR_OK;
617 }
618
619 static int ocsp_client_cb(SSL *s, void *arg)
620 {
621     int *argi = (int *)arg;
622     const unsigned char *respderin;
623     size_t len;
624
625     if (*argi != 1 && *argi != 2)
626         return 0;
627
628     len = SSL_get_tlsext_status_ocsp_resp(s, &respderin);
629     if (!TEST_mem_eq(orespder, len, respderin, len))
630         return 0;
631
632     ocsp_client_called = 1;
633     return 1;
634 }
635
636 static int test_tlsext_status_type(void)
637 {
638     SSL_CTX *cctx = NULL, *sctx = NULL;
639     SSL *clientssl = NULL, *serverssl = NULL;
640     int testresult = 0;
641     STACK_OF(OCSP_RESPID) *ids = NULL;
642     OCSP_RESPID *id = NULL;
643     BIO *certbio = NULL;
644
645     if (!create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(), &sctx,
646                              &cctx, cert, privkey))
647         return 0;
648
649     if (SSL_CTX_get_tlsext_status_type(cctx) != -1)
650         goto end;
651
652     /* First just do various checks getting and setting tlsext_status_type */
653
654     clientssl = SSL_new(cctx);
655     if (!TEST_int_eq(SSL_get_tlsext_status_type(clientssl), -1)
656             || !TEST_true(SSL_set_tlsext_status_type(clientssl,
657                                                       TLSEXT_STATUSTYPE_ocsp))
658             || !TEST_int_eq(SSL_get_tlsext_status_type(clientssl),
659                             TLSEXT_STATUSTYPE_ocsp))
660         goto end;
661
662     SSL_free(clientssl);
663     clientssl = NULL;
664
665     if (!SSL_CTX_set_tlsext_status_type(cctx, TLSEXT_STATUSTYPE_ocsp)
666      || SSL_CTX_get_tlsext_status_type(cctx) != TLSEXT_STATUSTYPE_ocsp)
667         goto end;
668
669     clientssl = SSL_new(cctx);
670     if (SSL_get_tlsext_status_type(clientssl) != TLSEXT_STATUSTYPE_ocsp)
671         goto end;
672     SSL_free(clientssl);
673     clientssl = NULL;
674
675     /*
676      * Now actually do a handshake and check OCSP information is exchanged and
677      * the callbacks get called
678      */
679     SSL_CTX_set_tlsext_status_cb(cctx, ocsp_client_cb);
680     SSL_CTX_set_tlsext_status_arg(cctx, &cdummyarg);
681     SSL_CTX_set_tlsext_status_cb(sctx, ocsp_server_cb);
682     SSL_CTX_set_tlsext_status_arg(sctx, &cdummyarg);
683     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
684                                       &clientssl, NULL, NULL))
685             || !TEST_true(create_ssl_connection(serverssl, clientssl,
686                                                 SSL_ERROR_NONE))
687             || !TEST_true(ocsp_client_called)
688             || !TEST_true(ocsp_server_called))
689         goto end;
690     SSL_free(serverssl);
691     SSL_free(clientssl);
692     serverssl = NULL;
693     clientssl = NULL;
694
695     /* Try again but this time force the server side callback to fail */
696     ocsp_client_called = 0;
697     ocsp_server_called = 0;
698     cdummyarg = 0;
699     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
700                                       &clientssl, NULL, NULL))
701                 /* This should fail because the callback will fail */
702             || !TEST_false(create_ssl_connection(serverssl, clientssl,
703                                                  SSL_ERROR_NONE))
704             || !TEST_false(ocsp_client_called)
705             || !TEST_false(ocsp_server_called))
706         goto end;
707     SSL_free(serverssl);
708     SSL_free(clientssl);
709     serverssl = NULL;
710     clientssl = NULL;
711
712     /*
713      * This time we'll get the client to send an OCSP_RESPID that it will
714      * accept.
715      */
716     ocsp_client_called = 0;
717     ocsp_server_called = 0;
718     cdummyarg = 2;
719     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
720                                       &clientssl, NULL, NULL)))
721         goto end;
722
723     /*
724      * We'll just use any old cert for this test - it doesn't have to be an OCSP
725      * specific one. We'll use the server cert.
726      */
727     if (!TEST_ptr(certbio = BIO_new_file(cert, "r"))
728             || !TEST_ptr(id = OCSP_RESPID_new())
729             || !TEST_ptr(ids = sk_OCSP_RESPID_new_null())
730             || !TEST_ptr(ocspcert = PEM_read_bio_X509(certbio,
731                                                       NULL, NULL, NULL))
732             || !TEST_true(OCSP_RESPID_set_by_key(id, ocspcert))
733             || !TEST_true(sk_OCSP_RESPID_push(ids, id)))
734         goto end;
735     id = NULL;
736     SSL_set_tlsext_status_ids(clientssl, ids);
737     /* Control has been transferred */
738     ids = NULL;
739
740     BIO_free(certbio);
741     certbio = NULL;
742
743     if (!TEST_true(create_ssl_connection(serverssl, clientssl,
744                                          SSL_ERROR_NONE))
745             || !TEST_true(ocsp_client_called)
746             || !TEST_true(ocsp_server_called))
747         goto end;
748
749     testresult = 1;
750
751  end:
752     SSL_free(serverssl);
753     SSL_free(clientssl);
754     SSL_CTX_free(sctx);
755     SSL_CTX_free(cctx);
756     sk_OCSP_RESPID_pop_free(ids, OCSP_RESPID_free);
757     OCSP_RESPID_free(id);
758     BIO_free(certbio);
759     X509_free(ocspcert);
760     ocspcert = NULL;
761
762     return testresult;
763 }
764 #endif
765
766 #if !defined(OPENSSL_NO_TLS1_3) || !defined(OPENSSL_NO_TLS1_2)
767 static int new_called, remove_called, get_called;
768
769 static int new_session_cb(SSL *ssl, SSL_SESSION *sess)
770 {
771     new_called++;
772     /*
773      * sess has been up-refed for us, but we don't actually need it so free it
774      * immediately.
775      */
776     SSL_SESSION_free(sess);
777     return 1;
778 }
779
780 static void remove_session_cb(SSL_CTX *ctx, SSL_SESSION *sess)
781 {
782     remove_called++;
783 }
784
785 static SSL_SESSION *get_sess_val = NULL;
786
787 static SSL_SESSION *get_session_cb(SSL *ssl, const unsigned char *id, int len,
788                                    int *copy)
789 {
790     get_called++;
791     *copy = 1;
792     return get_sess_val;
793 }
794
795 static int execute_test_session(int maxprot, int use_int_cache,
796                                 int use_ext_cache)
797 {
798     SSL_CTX *sctx = NULL, *cctx = NULL;
799     SSL *serverssl1 = NULL, *clientssl1 = NULL;
800     SSL *serverssl2 = NULL, *clientssl2 = NULL;
801 # ifndef OPENSSL_NO_TLS1_1
802     SSL *serverssl3 = NULL, *clientssl3 = NULL;
803 # endif
804     SSL_SESSION *sess1 = NULL, *sess2 = NULL;
805     int testresult = 0;
806
807     new_called = remove_called = 0;
808
809     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
810                                        TLS_client_method(), &sctx,
811                                        &cctx, cert, privkey)))
812         return 0;
813
814     /*
815      * Only allow the max protocol version so we can force a connection failure
816      * later
817      */
818     SSL_CTX_set_min_proto_version(cctx, maxprot);
819     SSL_CTX_set_max_proto_version(cctx, maxprot);
820
821     /* Set up session cache */
822     if (use_ext_cache) {
823         SSL_CTX_sess_set_new_cb(cctx, new_session_cb);
824         SSL_CTX_sess_set_remove_cb(cctx, remove_session_cb);
825     }
826     if (use_int_cache) {
827         /* Also covers instance where both are set */
828         SSL_CTX_set_session_cache_mode(cctx, SSL_SESS_CACHE_CLIENT);
829     } else {
830         SSL_CTX_set_session_cache_mode(cctx,
831                                        SSL_SESS_CACHE_CLIENT
832                                        | SSL_SESS_CACHE_NO_INTERNAL_STORE);
833     }
834
835     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl1, &clientssl1,
836                                       NULL, NULL))
837             || !TEST_true(create_ssl_connection(serverssl1, clientssl1,
838                                                 SSL_ERROR_NONE))
839             || !TEST_ptr(sess1 = SSL_get1_session(clientssl1)))
840         goto end;
841
842     /* Should fail because it should already be in the cache */
843     if (use_int_cache && !TEST_false(SSL_CTX_add_session(cctx, sess1)))
844         goto end;
845     if (use_ext_cache
846             && (!TEST_int_eq(new_called, 1) || !TEST_int_eq(remove_called, 0)))
847         goto end;
848
849     new_called = remove_called = 0;
850     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl2,
851                                       &clientssl2, NULL, NULL))
852             || !TEST_true(SSL_set_session(clientssl2, sess1))
853             || !TEST_true(create_ssl_connection(serverssl2, clientssl2,
854                                                 SSL_ERROR_NONE))
855             || !TEST_true(SSL_session_reused(clientssl2)))
856         goto end;
857
858     if (maxprot == TLS1_3_VERSION) {
859         /*
860          * In TLSv1.3 we should have created a new session even though we have
861          * resumed. The original session should also have been removed.
862          */
863         if (use_ext_cache
864                 && (!TEST_int_eq(new_called, 1)
865                     || !TEST_int_eq(remove_called, 1)))
866             goto end;
867     } else {
868         /*
869          * In TLSv1.2 we expect to have resumed so no sessions added or
870          * removed.
871          */
872         if (use_ext_cache
873                 && (!TEST_int_eq(new_called, 0)
874                     || !TEST_int_eq(remove_called, 0)))
875             goto end;
876     }
877
878     SSL_SESSION_free(sess1);
879     if (!TEST_ptr(sess1 = SSL_get1_session(clientssl2)))
880         goto end;
881     shutdown_ssl_connection(serverssl2, clientssl2);
882     serverssl2 = clientssl2 = NULL;
883
884     new_called = remove_called = 0;
885     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl2,
886                                       &clientssl2, NULL, NULL))
887             || !TEST_true(create_ssl_connection(serverssl2, clientssl2,
888                                                 SSL_ERROR_NONE)))
889         goto end;
890
891     if (!TEST_ptr(sess2 = SSL_get1_session(clientssl2)))
892         goto end;
893
894     if (use_ext_cache
895             && (!TEST_int_eq(new_called, 1) || !TEST_int_eq(remove_called, 0)))
896         goto end;
897
898     new_called = remove_called = 0;
899     /*
900      * This should clear sess2 from the cache because it is a "bad" session.
901      * See SSL_set_session() documentation.
902      */
903     if (!TEST_true(SSL_set_session(clientssl2, sess1)))
904         goto end;
905     if (use_ext_cache
906             && (!TEST_int_eq(new_called, 0) || !TEST_int_eq(remove_called, 1)))
907         goto end;
908     if (!TEST_ptr_eq(SSL_get_session(clientssl2), sess1))
909         goto end;
910
911     if (use_int_cache) {
912         /* Should succeeded because it should not already be in the cache */
913         if (!TEST_true(SSL_CTX_add_session(cctx, sess2))
914                 || !TEST_true(SSL_CTX_remove_session(cctx, sess2)))
915             goto end;
916     }
917
918     new_called = remove_called = 0;
919     /* This shouldn't be in the cache so should fail */
920     if (!TEST_false(SSL_CTX_remove_session(cctx, sess2)))
921         goto end;
922
923     if (use_ext_cache
924             && (!TEST_int_eq(new_called, 0) || !TEST_int_eq(remove_called, 1)))
925         goto end;
926
927 # if !defined(OPENSSL_NO_TLS1_1)
928     new_called = remove_called = 0;
929     /* Force a connection failure */
930     SSL_CTX_set_max_proto_version(sctx, TLS1_1_VERSION);
931     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl3,
932                                       &clientssl3, NULL, NULL))
933             || !TEST_true(SSL_set_session(clientssl3, sess1))
934             /* This should fail because of the mismatched protocol versions */
935             || !TEST_false(create_ssl_connection(serverssl3, clientssl3,
936                                                  SSL_ERROR_NONE)))
937         goto end;
938
939     /* We should have automatically removed the session from the cache */
940     if (use_ext_cache
941             && (!TEST_int_eq(new_called, 0) || !TEST_int_eq(remove_called, 1)))
942         goto end;
943
944     /* Should succeed because it should not already be in the cache */
945     if (use_int_cache && !TEST_true(SSL_CTX_add_session(cctx, sess2)))
946         goto end;
947 # endif
948
949     /* Now do some tests for server side caching */
950     if (use_ext_cache) {
951         SSL_CTX_sess_set_new_cb(cctx, NULL);
952         SSL_CTX_sess_set_remove_cb(cctx, NULL);
953         SSL_CTX_sess_set_new_cb(sctx, new_session_cb);
954         SSL_CTX_sess_set_remove_cb(sctx, remove_session_cb);
955         SSL_CTX_sess_set_get_cb(sctx, get_session_cb);
956         get_sess_val = NULL;
957     }
958
959     SSL_CTX_set_session_cache_mode(cctx, 0);
960     /* Internal caching is the default on the server side */
961     if (!use_int_cache)
962         SSL_CTX_set_session_cache_mode(sctx,
963                                        SSL_SESS_CACHE_SERVER
964                                        | SSL_SESS_CACHE_NO_INTERNAL_STORE);
965
966     SSL_free(serverssl1);
967     SSL_free(clientssl1);
968     serverssl1 = clientssl1 = NULL;
969     SSL_free(serverssl2);
970     SSL_free(clientssl2);
971     serverssl2 = clientssl2 = NULL;
972     SSL_SESSION_free(sess1);
973     sess1 = NULL;
974     SSL_SESSION_free(sess2);
975     sess2 = NULL;
976
977     SSL_CTX_set_max_proto_version(sctx, maxprot);
978     SSL_CTX_set_options(sctx, SSL_OP_NO_TICKET);
979     new_called = remove_called = get_called = 0;
980     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl1, &clientssl1,
981                                       NULL, NULL))
982             || !TEST_true(create_ssl_connection(serverssl1, clientssl1,
983                                                 SSL_ERROR_NONE))
984             || !TEST_ptr(sess1 = SSL_get1_session(clientssl1))
985             || !TEST_ptr(sess2 = SSL_get1_session(serverssl1)))
986         goto end;
987
988     /* Should fail because it should already be in the cache */
989     if (use_int_cache && !TEST_false(SSL_CTX_add_session(sctx, sess2)))
990         goto end;
991
992     if (use_ext_cache) {
993         SSL_SESSION *tmp = sess2;
994
995         if (!TEST_int_eq(new_called, 1)
996                 || !TEST_int_eq(remove_called, 0)
997                 || !TEST_int_eq(get_called, 0))
998             goto end;
999         /*
1000          * Delete the session from the internal cache to force a lookup from
1001          * the external cache. We take a copy first because
1002          * SSL_CTX_remove_session() also marks the session as non-resumable.
1003          */
1004         if (use_int_cache) {
1005             if (!TEST_ptr(tmp = SSL_SESSION_dup(sess2))
1006                     || !TEST_true(SSL_CTX_remove_session(sctx, sess2)))
1007                 goto end;
1008             SSL_SESSION_free(sess2);
1009         }
1010         sess2 = tmp;
1011     }
1012
1013     new_called = remove_called = get_called = 0;
1014     get_sess_val = sess2;
1015     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl2,
1016                                       &clientssl2, NULL, NULL))
1017             || !TEST_true(SSL_set_session(clientssl2, sess1))
1018             || !TEST_true(create_ssl_connection(serverssl2, clientssl2,
1019                                                 SSL_ERROR_NONE))
1020             || !TEST_true(SSL_session_reused(clientssl2)))
1021         goto end;
1022
1023     if (use_ext_cache) {
1024         if (!TEST_int_eq(remove_called, 0))
1025             goto end;
1026
1027         if (maxprot == TLS1_3_VERSION) {
1028             /*
1029              * Every time we issue a NewSessionTicket we are creating a new
1030              * session for next time in TLSv1.3
1031              */
1032             if (!TEST_int_eq(new_called, 1)
1033                     || !TEST_int_eq(get_called, 0))
1034                 goto end;
1035         } else {
1036             if (!TEST_int_eq(new_called, 0)
1037                     || !TEST_int_eq(get_called, 1))
1038                 goto end;
1039         }
1040     }
1041
1042     testresult = 1;
1043
1044  end:
1045     SSL_free(serverssl1);
1046     SSL_free(clientssl1);
1047     SSL_free(serverssl2);
1048     SSL_free(clientssl2);
1049 # ifndef OPENSSL_NO_TLS1_1
1050     SSL_free(serverssl3);
1051     SSL_free(clientssl3);
1052 # endif
1053     SSL_SESSION_free(sess1);
1054     SSL_SESSION_free(sess2);
1055     SSL_CTX_free(sctx);
1056     SSL_CTX_free(cctx);
1057
1058     return testresult;
1059 }
1060 #endif /* !defined(OPENSSL_NO_TLS1_3) || !defined(OPENSSL_NO_TLS1_2) */
1061
1062 static int test_session_with_only_int_cache(void)
1063 {
1064 #ifndef OPENSSL_NO_TLS1_3
1065     if (!execute_test_session(TLS1_3_VERSION, 1, 0))
1066         return 0;
1067 #endif
1068
1069 #ifndef OPENSSL_NO_TLS1_2
1070     return execute_test_session(TLS1_2_VERSION, 1, 0);
1071 #else
1072     return 1;
1073 #endif
1074 }
1075
1076 static int test_session_with_only_ext_cache(void)
1077 {
1078 #ifndef OPENSSL_NO_TLS1_3
1079     if (!execute_test_session(TLS1_3_VERSION, 0, 1))
1080         return 0;
1081 #endif
1082
1083 #ifndef OPENSSL_NO_TLS1_2
1084     return execute_test_session(TLS1_2_VERSION, 0, 1);
1085 #else
1086     return 1;
1087 #endif
1088 }
1089
1090 static int test_session_with_both_cache(void)
1091 {
1092 #ifndef OPENSSL_NO_TLS1_3
1093     if (!execute_test_session(TLS1_3_VERSION, 1, 1))
1094         return 0;
1095 #endif
1096
1097 #ifndef OPENSSL_NO_TLS1_2
1098     return execute_test_session(TLS1_2_VERSION, 1, 1);
1099 #else
1100     return 1;
1101 #endif
1102 }
1103
1104 #define USE_NULL    0
1105 #define USE_BIO_1   1
1106 #define USE_BIO_2   2
1107
1108 #define TOTAL_SSL_SET_BIO_TESTS (3 * 3 * 3 * 3)
1109
1110 static void setupbio(BIO **res, BIO *bio1, BIO *bio2, int type)
1111 {
1112     switch (type) {
1113     case USE_NULL:
1114         *res = NULL;
1115         break;
1116     case USE_BIO_1:
1117         *res = bio1;
1118         break;
1119     case USE_BIO_2:
1120         *res = bio2;
1121         break;
1122     }
1123 }
1124
1125 static int test_ssl_set_bio(int idx)
1126 {
1127     SSL_CTX *ctx;
1128     BIO *bio1 = NULL;
1129     BIO *bio2 = NULL;
1130     BIO *irbio = NULL, *iwbio = NULL, *nrbio = NULL, *nwbio = NULL;
1131     SSL *ssl = NULL;
1132     int initrbio, initwbio, newrbio, newwbio;
1133     int testresult = 0;
1134
1135     initrbio = idx % 3;
1136     idx /= 3;
1137     initwbio = idx % 3;
1138     idx /= 3;
1139     newrbio = idx % 3;
1140     idx /= 3;
1141     newwbio = idx;
1142     if (!TEST_int_le(newwbio, 2))
1143         return 0;
1144
1145     if (!TEST_ptr(ctx = SSL_CTX_new(TLS_method()))
1146                 || !TEST_ptr(ssl = SSL_new(ctx)))
1147         goto end;
1148
1149     if (initrbio == USE_BIO_1
1150             || initwbio == USE_BIO_1
1151             || newrbio == USE_BIO_1
1152             || newwbio == USE_BIO_1) {
1153         if (!TEST_ptr(bio1 = BIO_new(BIO_s_mem())))
1154             goto end;
1155     }
1156
1157     if (initrbio == USE_BIO_2
1158             || initwbio == USE_BIO_2
1159             || newrbio == USE_BIO_2
1160             || newwbio == USE_BIO_2) {
1161         if (!TEST_ptr(bio2 = BIO_new(BIO_s_mem())))
1162             goto end;
1163     }
1164
1165     setupbio(&irbio, bio1, bio2, initrbio);
1166     setupbio(&iwbio, bio1, bio2, initwbio);
1167
1168     /*
1169      * We want to maintain our own refs to these BIO, so do an up ref for each
1170      * BIO that will have ownership transferred in the SSL_set_bio() call
1171      */
1172     if (irbio != NULL)
1173         BIO_up_ref(irbio);
1174     if (iwbio != NULL && iwbio != irbio)
1175         BIO_up_ref(iwbio);
1176
1177     SSL_set_bio(ssl, irbio, iwbio);
1178
1179     setupbio(&nrbio, bio1, bio2, newrbio);
1180     setupbio(&nwbio, bio1, bio2, newwbio);
1181
1182     /*
1183      * We will (maybe) transfer ownership again so do more up refs.
1184      * SSL_set_bio() has some really complicated ownership rules where BIOs have
1185      * already been set!
1186      */
1187     if (nrbio != NULL
1188             && nrbio != irbio
1189             && (nwbio != iwbio || nrbio != nwbio))
1190         BIO_up_ref(nrbio);
1191     if (nwbio != NULL
1192             && nwbio != nrbio
1193             && (nwbio != iwbio || (nwbio == iwbio && irbio == iwbio)))
1194         BIO_up_ref(nwbio);
1195
1196     SSL_set_bio(ssl, nrbio, nwbio);
1197
1198     testresult = 1;
1199
1200  end:
1201     SSL_free(ssl);
1202     BIO_free(bio1);
1203     BIO_free(bio2);
1204
1205     /*
1206      * This test is checking that the ref counting for SSL_set_bio is correct.
1207      * If we get here and we did too many frees then we will fail in the above
1208      * functions. If we haven't done enough then this will only be detected in
1209      * a crypto-mdebug build
1210      */
1211     SSL_CTX_free(ctx);
1212     return testresult;
1213 }
1214
1215 typedef enum { NO_BIO_CHANGE, CHANGE_RBIO, CHANGE_WBIO } bio_change_t;
1216
1217 static int execute_test_ssl_bio(int pop_ssl, bio_change_t change_bio)
1218 {
1219     BIO *sslbio = NULL, *membio1 = NULL, *membio2 = NULL;
1220     SSL_CTX *ctx;
1221     SSL *ssl = NULL;
1222     int testresult = 0;
1223
1224     if (!TEST_ptr(ctx = SSL_CTX_new(TLS_method()))
1225             || !TEST_ptr(ssl = SSL_new(ctx))
1226             || !TEST_ptr(sslbio = BIO_new(BIO_f_ssl()))
1227             || !TEST_ptr(membio1 = BIO_new(BIO_s_mem())))
1228         goto end;
1229
1230     BIO_set_ssl(sslbio, ssl, BIO_CLOSE);
1231
1232     /*
1233      * If anything goes wrong here then we could leak memory, so this will
1234      * be caught in a crypto-mdebug build
1235      */
1236     BIO_push(sslbio, membio1);
1237
1238     /* Verify changing the rbio/wbio directly does not cause leaks */
1239     if (change_bio != NO_BIO_CHANGE) {
1240         if (!TEST_ptr(membio2 = BIO_new(BIO_s_mem())))
1241             goto end;
1242         if (change_bio == CHANGE_RBIO)
1243             SSL_set0_rbio(ssl, membio2);
1244         else
1245             SSL_set0_wbio(ssl, membio2);
1246     }
1247     ssl = NULL;
1248
1249     if (pop_ssl)
1250         BIO_pop(sslbio);
1251     else
1252         BIO_pop(membio1);
1253
1254     testresult = 1;
1255  end:
1256     BIO_free(membio1);
1257     BIO_free(sslbio);
1258     SSL_free(ssl);
1259     SSL_CTX_free(ctx);
1260
1261     return testresult;
1262 }
1263
1264 static int test_ssl_bio_pop_next_bio(void)
1265 {
1266     return execute_test_ssl_bio(0, NO_BIO_CHANGE);
1267 }
1268
1269 static int test_ssl_bio_pop_ssl_bio(void)
1270 {
1271     return execute_test_ssl_bio(1, NO_BIO_CHANGE);
1272 }
1273
1274 static int test_ssl_bio_change_rbio(void)
1275 {
1276     return execute_test_ssl_bio(0, CHANGE_RBIO);
1277 }
1278
1279 static int test_ssl_bio_change_wbio(void)
1280 {
1281     return execute_test_ssl_bio(0, CHANGE_WBIO);
1282 }
1283
1284 #if !defined(OPENSSL_NO_TLS1_2) || defined(OPENSSL_NO_TLS1_3)
1285 typedef struct {
1286     /* The list of sig algs */
1287     const int *list;
1288     /* The length of the list */
1289     size_t listlen;
1290     /* A sigalgs list in string format */
1291     const char *liststr;
1292     /* Whether setting the list should succeed */
1293     int valid;
1294     /* Whether creating a connection with the list should succeed */
1295     int connsuccess;
1296 } sigalgs_list;
1297
1298 static const int validlist1[] = {NID_sha256, EVP_PKEY_RSA};
1299 # ifndef OPENSSL_NO_EC
1300 static const int validlist2[] = {NID_sha256, EVP_PKEY_RSA, NID_sha512, EVP_PKEY_EC};
1301 static const int validlist3[] = {NID_sha512, EVP_PKEY_EC};
1302 # endif
1303 static const int invalidlist1[] = {NID_undef, EVP_PKEY_RSA};
1304 static const int invalidlist2[] = {NID_sha256, NID_undef};
1305 static const int invalidlist3[] = {NID_sha256, EVP_PKEY_RSA, NID_sha256};
1306 static const int invalidlist4[] = {NID_sha256};
1307 static const sigalgs_list testsigalgs[] = {
1308     {validlist1, OSSL_NELEM(validlist1), NULL, 1, 1},
1309 # ifndef OPENSSL_NO_EC
1310     {validlist2, OSSL_NELEM(validlist2), NULL, 1, 1},
1311     {validlist3, OSSL_NELEM(validlist3), NULL, 1, 0},
1312 # endif
1313     {NULL, 0, "RSA+SHA256", 1, 1},
1314 # ifndef OPENSSL_NO_EC
1315     {NULL, 0, "RSA+SHA256:ECDSA+SHA512", 1, 1},
1316     {NULL, 0, "ECDSA+SHA512", 1, 0},
1317 # endif
1318     {invalidlist1, OSSL_NELEM(invalidlist1), NULL, 0, 0},
1319     {invalidlist2, OSSL_NELEM(invalidlist2), NULL, 0, 0},
1320     {invalidlist3, OSSL_NELEM(invalidlist3), NULL, 0, 0},
1321     {invalidlist4, OSSL_NELEM(invalidlist4), NULL, 0, 0},
1322     {NULL, 0, "RSA", 0, 0},
1323     {NULL, 0, "SHA256", 0, 0},
1324     {NULL, 0, "RSA+SHA256:SHA256", 0, 0},
1325     {NULL, 0, "Invalid", 0, 0}
1326 };
1327
1328 static int test_set_sigalgs(int idx)
1329 {
1330     SSL_CTX *cctx = NULL, *sctx = NULL;
1331     SSL *clientssl = NULL, *serverssl = NULL;
1332     int testresult = 0;
1333     const sigalgs_list *curr;
1334     int testctx;
1335
1336     /* Should never happen */
1337     if (!TEST_size_t_le((size_t)idx, OSSL_NELEM(testsigalgs) * 2))
1338         return 0;
1339
1340     testctx = ((size_t)idx < OSSL_NELEM(testsigalgs));
1341     curr = testctx ? &testsigalgs[idx]
1342                    : &testsigalgs[idx - OSSL_NELEM(testsigalgs)];
1343
1344     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
1345                                        TLS_client_method(), &sctx,
1346                                        &cctx, cert, privkey)))
1347         return 0;
1348
1349     /*
1350      * TODO(TLS1.3): These APIs cannot set TLSv1.3 sig algs so we just test it
1351      * for TLSv1.2 for now until we add a new API.
1352      */
1353     SSL_CTX_set_max_proto_version(cctx, TLS1_2_VERSION);
1354
1355     if (testctx) {
1356         int ret;
1357
1358         if (curr->list != NULL)
1359             ret = SSL_CTX_set1_sigalgs(cctx, curr->list, curr->listlen);
1360         else
1361             ret = SSL_CTX_set1_sigalgs_list(cctx, curr->liststr);
1362
1363         if (!ret) {
1364             if (curr->valid)
1365                 TEST_info("Failure setting sigalgs in SSL_CTX (%d)\n", idx);
1366             else
1367                 testresult = 1;
1368             goto end;
1369         }
1370         if (!curr->valid) {
1371             TEST_info("Not-failed setting sigalgs in SSL_CTX (%d)\n", idx);
1372             goto end;
1373         }
1374     }
1375
1376     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
1377                                       &clientssl, NULL, NULL)))
1378         goto end;
1379
1380     if (!testctx) {
1381         int ret;
1382
1383         if (curr->list != NULL)
1384             ret = SSL_set1_sigalgs(clientssl, curr->list, curr->listlen);
1385         else
1386             ret = SSL_set1_sigalgs_list(clientssl, curr->liststr);
1387         if (!ret) {
1388             if (curr->valid)
1389                 TEST_info("Failure setting sigalgs in SSL (%d)\n", idx);
1390             else
1391                 testresult = 1;
1392             goto end;
1393         }
1394         if (!curr->valid)
1395             goto end;
1396     }
1397
1398     if (!TEST_int_eq(create_ssl_connection(serverssl, clientssl,
1399                                            SSL_ERROR_NONE),
1400                 curr->connsuccess))
1401         goto end;
1402
1403     testresult = 1;
1404
1405  end:
1406     SSL_free(serverssl);
1407     SSL_free(clientssl);
1408     SSL_CTX_free(sctx);
1409     SSL_CTX_free(cctx);
1410
1411     return testresult;
1412 }
1413 #endif
1414
1415 #ifndef OPENSSL_NO_TLS1_3
1416
1417 static SSL_SESSION *clientpsk = NULL;
1418 static SSL_SESSION *serverpsk = NULL;
1419 static const char *pskid = "Identity";
1420 static const char *srvid;
1421
1422 static int use_session_cb_cnt = 0;
1423 static int find_session_cb_cnt = 0;
1424 static int psk_client_cb_cnt = 0;
1425 static int psk_server_cb_cnt = 0;
1426
1427 static int use_session_cb(SSL *ssl, const EVP_MD *md, const unsigned char **id,
1428                           size_t *idlen, SSL_SESSION **sess)
1429 {
1430     switch (++use_session_cb_cnt) {
1431     case 1:
1432         /* The first call should always have a NULL md */
1433         if (md != NULL)
1434             return 0;
1435         break;
1436
1437     case 2:
1438         /* The second call should always have an md */
1439         if (md == NULL)
1440             return 0;
1441         break;
1442
1443     default:
1444         /* We should only be called a maximum of twice */
1445         return 0;
1446     }
1447
1448     if (clientpsk != NULL)
1449         SSL_SESSION_up_ref(clientpsk);
1450
1451     *sess = clientpsk;
1452     *id = (const unsigned char *)pskid;
1453     *idlen = strlen(pskid);
1454
1455     return 1;
1456 }
1457
1458 static unsigned int psk_client_cb(SSL *ssl, const char *hint, char *id,
1459                                   unsigned int max_id_len,
1460                                   unsigned char *psk,
1461                                   unsigned int max_psk_len)
1462 {
1463     unsigned int psklen = 0;
1464
1465     psk_client_cb_cnt++;
1466
1467     if (strlen(pskid) + 1 > max_id_len)
1468         return 0;
1469
1470     /* We should only ever be called a maximum of twice per connection */
1471     if (psk_client_cb_cnt > 2)
1472         return 0;
1473
1474     if (clientpsk == NULL)
1475         return 0;
1476
1477     /* We'll reuse the PSK we set up for TLSv1.3 */
1478     if (SSL_SESSION_get_master_key(clientpsk, NULL, 0) > max_psk_len)
1479         return 0;
1480     psklen = SSL_SESSION_get_master_key(clientpsk, psk, max_psk_len);
1481     strncpy(id, pskid, max_id_len);
1482
1483     return psklen;
1484 }
1485
1486 static int find_session_cb(SSL *ssl, const unsigned char *identity,
1487                            size_t identity_len, SSL_SESSION **sess)
1488 {
1489     find_session_cb_cnt++;
1490
1491     /* We should only ever be called a maximum of twice per connection */
1492     if (find_session_cb_cnt > 2)
1493         return 0;
1494
1495     if (serverpsk == NULL)
1496         return 0;
1497
1498     /* Identity should match that set by the client */
1499     if (strlen(srvid) != identity_len
1500             || strncmp(srvid, (const char *)identity, identity_len) != 0) {
1501         /* No PSK found, continue but without a PSK */
1502         *sess = NULL;
1503         return 1;
1504     }
1505
1506     SSL_SESSION_up_ref(serverpsk);
1507     *sess = serverpsk;
1508
1509     return 1;
1510 }
1511
1512 static unsigned int psk_server_cb(SSL *ssl, const char *identity,
1513                                   unsigned char *psk, unsigned int max_psk_len)
1514 {
1515     unsigned int psklen = 0;
1516
1517     psk_server_cb_cnt++;
1518
1519     /* We should only ever be called a maximum of twice per connection */
1520     if (find_session_cb_cnt > 2)
1521         return 0;
1522
1523     if (serverpsk == NULL)
1524         return 0;
1525
1526     /* Identity should match that set by the client */
1527     if (strcmp(srvid, identity) != 0) {
1528         return 0;
1529     }
1530
1531     /* We'll reuse the PSK we set up for TLSv1.3 */
1532     if (SSL_SESSION_get_master_key(serverpsk, NULL, 0) > max_psk_len)
1533         return 0;
1534     psklen = SSL_SESSION_get_master_key(serverpsk, psk, max_psk_len);
1535
1536     return psklen;
1537 }
1538
1539 #define MSG1    "Hello"
1540 #define MSG2    "World."
1541 #define MSG3    "This"
1542 #define MSG4    "is"
1543 #define MSG5    "a"
1544 #define MSG6    "test"
1545 #define MSG7    "message."
1546
1547 #define TLS13_AES_256_GCM_SHA384_BYTES  ((const unsigned char *)"\x13\x02")
1548 #define TLS13_AES_128_GCM_SHA256_BYTES  ((const unsigned char *)"\x13\x01")
1549
1550 /*
1551  * Helper method to setup objects for early data test. Caller frees objects on
1552  * error.
1553  */
1554 static int setupearly_data_test(SSL_CTX **cctx, SSL_CTX **sctx, SSL **clientssl,
1555                                 SSL **serverssl, SSL_SESSION **sess, int idx)
1556 {
1557     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
1558                                        TLS_client_method(), sctx,
1559                                        cctx, cert, privkey))
1560         || !TEST_true(SSL_CTX_set_max_early_data(*sctx,
1561                                                  SSL3_RT_MAX_PLAIN_LENGTH))
1562         || !TEST_true(SSL_CTX_set_max_early_data(*cctx,
1563                                                  SSL3_RT_MAX_PLAIN_LENGTH)))
1564         return 0;
1565
1566     if (idx == 1) {
1567         /* When idx == 1 we repeat the tests with read_ahead set */
1568         SSL_CTX_set_read_ahead(*cctx, 1);
1569         SSL_CTX_set_read_ahead(*sctx, 1);
1570     } else if (idx == 2) {
1571         /* When idx == 2 we are doing early_data with a PSK. Set up callbacks */
1572         SSL_CTX_set_psk_use_session_callback(*cctx, use_session_cb);
1573         SSL_CTX_set_psk_find_session_callback(*sctx, find_session_cb);
1574         use_session_cb_cnt = 0;
1575         find_session_cb_cnt = 0;
1576         srvid = pskid;
1577     }
1578
1579     if (!TEST_true(create_ssl_objects(*sctx, *cctx, serverssl, clientssl,
1580                                       NULL, NULL)))
1581         return 0;
1582
1583     /*
1584      * For one of the run throughs (doesn't matter which one), we'll try sending
1585      * some SNI data in the initial ClientHello. This will be ignored (because
1586      * there is no SNI cb set up by the server), so it should not impact
1587      * early_data.
1588      */
1589     if (idx == 1
1590             && !TEST_true(SSL_set_tlsext_host_name(*clientssl, "localhost")))
1591         return 0;
1592
1593     if (idx == 2) {
1594         /* Create the PSK */
1595         const SSL_CIPHER *cipher = NULL;
1596         const unsigned char key[] = {
1597             0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
1598             0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
1599             0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
1600             0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,
1601             0x2c, 0x2d, 0x2e, 0x2f
1602         };
1603
1604         cipher = SSL_CIPHER_find(*clientssl, TLS13_AES_256_GCM_SHA384_BYTES);
1605         clientpsk = SSL_SESSION_new();
1606         if (!TEST_ptr(clientpsk)
1607                 || !TEST_ptr(cipher)
1608                 || !TEST_true(SSL_SESSION_set1_master_key(clientpsk, key,
1609                                                           sizeof(key)))
1610                 || !TEST_true(SSL_SESSION_set_cipher(clientpsk, cipher))
1611                 || !TEST_true(
1612                         SSL_SESSION_set_protocol_version(clientpsk,
1613                                                          TLS1_3_VERSION))
1614                    /*
1615                     * We just choose an arbitrary value for max_early_data which
1616                     * should be big enough for testing purposes.
1617                     */
1618                 || !TEST_true(SSL_SESSION_set_max_early_data(clientpsk,
1619                                                              0x100))
1620                 || !TEST_true(SSL_SESSION_up_ref(clientpsk))) {
1621             SSL_SESSION_free(clientpsk);
1622             clientpsk = NULL;
1623             return 0;
1624         }
1625         serverpsk = clientpsk;
1626
1627         if (sess != NULL)
1628             *sess = clientpsk;
1629         return 1;
1630     }
1631
1632     if (sess == NULL)
1633         return 1;
1634
1635     if (!TEST_true(create_ssl_connection(*serverssl, *clientssl,
1636                                          SSL_ERROR_NONE)))
1637         return 0;
1638
1639     *sess = SSL_get1_session(*clientssl);
1640     SSL_shutdown(*clientssl);
1641     SSL_shutdown(*serverssl);
1642     SSL_free(*serverssl);
1643     SSL_free(*clientssl);
1644     *serverssl = *clientssl = NULL;
1645
1646     if (!TEST_true(create_ssl_objects(*sctx, *cctx, serverssl,
1647                                       clientssl, NULL, NULL))
1648             || !TEST_true(SSL_set_session(*clientssl, *sess)))
1649         return 0;
1650
1651     return 1;
1652 }
1653
1654 static int test_early_data_read_write(int idx)
1655 {
1656     SSL_CTX *cctx = NULL, *sctx = NULL;
1657     SSL *clientssl = NULL, *serverssl = NULL;
1658     int testresult = 0;
1659     SSL_SESSION *sess = NULL;
1660     unsigned char buf[20], data[1024];
1661     size_t readbytes, written, eoedlen, rawread, rawwritten;
1662     BIO *rbio;
1663
1664     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
1665                                         &serverssl, &sess, idx)))
1666         goto end;
1667
1668     /* Write and read some early data */
1669     if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
1670                                         &written))
1671             || !TEST_size_t_eq(written, strlen(MSG1))
1672             || !TEST_int_eq(SSL_read_early_data(serverssl, buf,
1673                                                 sizeof(buf), &readbytes),
1674                             SSL_READ_EARLY_DATA_SUCCESS)
1675             || !TEST_mem_eq(MSG1, readbytes, buf, strlen(MSG1))
1676             || !TEST_int_eq(SSL_get_early_data_status(serverssl),
1677                             SSL_EARLY_DATA_ACCEPTED))
1678         goto end;
1679
1680     /*
1681      * Server should be able to write data, and client should be able to
1682      * read it.
1683      */
1684     if (!TEST_true(SSL_write_early_data(serverssl, MSG2, strlen(MSG2),
1685                                         &written))
1686             || !TEST_size_t_eq(written, strlen(MSG2))
1687             || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
1688             || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
1689         goto end;
1690
1691     /* Even after reading normal data, client should be able write early data */
1692     if (!TEST_true(SSL_write_early_data(clientssl, MSG3, strlen(MSG3),
1693                                         &written))
1694             || !TEST_size_t_eq(written, strlen(MSG3)))
1695         goto end;
1696
1697     /* Server should still be able read early data after writing data */
1698     if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
1699                                          &readbytes),
1700                      SSL_READ_EARLY_DATA_SUCCESS)
1701             || !TEST_mem_eq(buf, readbytes, MSG3, strlen(MSG3)))
1702         goto end;
1703
1704     /* Write more data from server and read it from client */
1705     if (!TEST_true(SSL_write_early_data(serverssl, MSG4, strlen(MSG4),
1706                                         &written))
1707             || !TEST_size_t_eq(written, strlen(MSG4))
1708             || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
1709             || !TEST_mem_eq(buf, readbytes, MSG4, strlen(MSG4)))
1710         goto end;
1711
1712     /*
1713      * If client writes normal data it should mean writing early data is no
1714      * longer possible.
1715      */
1716     if (!TEST_true(SSL_write_ex(clientssl, MSG5, strlen(MSG5), &written))
1717             || !TEST_size_t_eq(written, strlen(MSG5))
1718             || !TEST_int_eq(SSL_get_early_data_status(clientssl),
1719                             SSL_EARLY_DATA_ACCEPTED))
1720         goto end;
1721
1722     /*
1723      * At this point the client has written EndOfEarlyData, ClientFinished and
1724      * normal (fully protected) data. We are going to cause a delay between the
1725      * arrival of EndOfEarlyData and ClientFinished. We read out all the data
1726      * in the read BIO, and then just put back the EndOfEarlyData message.
1727      */
1728     rbio = SSL_get_rbio(serverssl);
1729     if (!TEST_true(BIO_read_ex(rbio, data, sizeof(data), &rawread))
1730             || !TEST_size_t_lt(rawread, sizeof(data))
1731             || !TEST_size_t_gt(rawread, SSL3_RT_HEADER_LENGTH))
1732         goto end;
1733
1734     /* Record length is in the 4th and 5th bytes of the record header */
1735     eoedlen = SSL3_RT_HEADER_LENGTH + (data[3] << 8 | data[4]);
1736     if (!TEST_true(BIO_write_ex(rbio, data, eoedlen, &rawwritten))
1737             || !TEST_size_t_eq(rawwritten, eoedlen))
1738         goto end;
1739
1740     /* Server should be told that there is no more early data */
1741     if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
1742                                          &readbytes),
1743                      SSL_READ_EARLY_DATA_FINISH)
1744             || !TEST_size_t_eq(readbytes, 0))
1745         goto end;
1746
1747     /*
1748      * Server has not finished init yet, so should still be able to write early
1749      * data.
1750      */
1751     if (!TEST_true(SSL_write_early_data(serverssl, MSG6, strlen(MSG6),
1752                                         &written))
1753             || !TEST_size_t_eq(written, strlen(MSG6)))
1754         goto end;
1755
1756     /* Push the ClientFinished and the normal data back into the server rbio */
1757     if (!TEST_true(BIO_write_ex(rbio, data + eoedlen, rawread - eoedlen,
1758                                 &rawwritten))
1759             || !TEST_size_t_eq(rawwritten, rawread - eoedlen))
1760         goto end;
1761
1762     /* Server should be able to read normal data */
1763     if (!TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
1764             || !TEST_size_t_eq(readbytes, strlen(MSG5)))
1765         goto end;
1766
1767     /* Client and server should not be able to write/read early data now */
1768     if (!TEST_false(SSL_write_early_data(clientssl, MSG6, strlen(MSG6),
1769                                          &written)))
1770         goto end;
1771     ERR_clear_error();
1772     if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
1773                                          &readbytes),
1774                      SSL_READ_EARLY_DATA_ERROR))
1775         goto end;
1776     ERR_clear_error();
1777
1778     /* Client should be able to read the data sent by the server */
1779     if (!TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
1780             || !TEST_mem_eq(buf, readbytes, MSG6, strlen(MSG6)))
1781         goto end;
1782
1783     /*
1784      * Make sure we process the NewSessionTicket. This arrives post-handshake.
1785      * We attempt a read which we do not expect to return any data.
1786      */
1787     if (!TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes)))
1788         goto end;
1789
1790     /* Server should be able to write normal data */
1791     if (!TEST_true(SSL_write_ex(serverssl, MSG7, strlen(MSG7), &written))
1792             || !TEST_size_t_eq(written, strlen(MSG7))
1793             || !TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
1794             || !TEST_mem_eq(buf, readbytes, MSG7, strlen(MSG7)))
1795         goto end;
1796
1797     /* We keep the PSK session around if using PSK */
1798     if (idx != 2)
1799         SSL_SESSION_free(sess);
1800     sess = SSL_get1_session(clientssl);
1801     use_session_cb_cnt = 0;
1802     find_session_cb_cnt = 0;
1803
1804     SSL_shutdown(clientssl);
1805     SSL_shutdown(serverssl);
1806     SSL_free(serverssl);
1807     SSL_free(clientssl);
1808     serverssl = clientssl = NULL;
1809     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
1810                                       &clientssl, NULL, NULL))
1811             || !TEST_true(SSL_set_session(clientssl, sess)))
1812         goto end;
1813
1814     /* Write and read some early data */
1815     if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
1816                                         &written))
1817             || !TEST_size_t_eq(written, strlen(MSG1))
1818             || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
1819                                                 &readbytes),
1820                             SSL_READ_EARLY_DATA_SUCCESS)
1821             || !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1)))
1822         goto end;
1823
1824     if (!TEST_int_gt(SSL_connect(clientssl), 0)
1825             || !TEST_int_gt(SSL_accept(serverssl), 0))
1826         goto end;
1827
1828     /* Client and server should not be able to write/read early data now */
1829     if (!TEST_false(SSL_write_early_data(clientssl, MSG6, strlen(MSG6),
1830                                          &written)))
1831         goto end;
1832     ERR_clear_error();
1833     if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
1834                                          &readbytes),
1835                      SSL_READ_EARLY_DATA_ERROR))
1836         goto end;
1837     ERR_clear_error();
1838
1839     /* Client and server should be able to write/read normal data */
1840     if (!TEST_true(SSL_write_ex(clientssl, MSG5, strlen(MSG5), &written))
1841             || !TEST_size_t_eq(written, strlen(MSG5))
1842             || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
1843             || !TEST_size_t_eq(readbytes, strlen(MSG5)))
1844         goto end;
1845
1846     testresult = 1;
1847
1848  end:
1849     if (sess != clientpsk)
1850         SSL_SESSION_free(sess);
1851     SSL_SESSION_free(clientpsk);
1852     SSL_SESSION_free(serverpsk);
1853     clientpsk = serverpsk = NULL;
1854     SSL_free(serverssl);
1855     SSL_free(clientssl);
1856     SSL_CTX_free(sctx);
1857     SSL_CTX_free(cctx);
1858     return testresult;
1859 }
1860
1861 /*
1862  * Helper function to test that a server attempting to read early data can
1863  * handle a connection from a client where the early data should be skipped.
1864  */
1865 static int early_data_skip_helper(int hrr, int idx)
1866 {
1867     SSL_CTX *cctx = NULL, *sctx = NULL;
1868     SSL *clientssl = NULL, *serverssl = NULL;
1869     int testresult = 0;
1870     SSL_SESSION *sess = NULL;
1871     unsigned char buf[20];
1872     size_t readbytes, written;
1873
1874     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
1875                                         &serverssl, &sess, idx)))
1876         goto end;
1877
1878     if (hrr) {
1879         /* Force an HRR to occur */
1880         if (!TEST_true(SSL_set1_groups_list(serverssl, "P-256")))
1881             goto end;
1882     } else if (idx == 2) {
1883         /*
1884          * We force early_data rejection by ensuring the PSK identity is
1885          * unrecognised
1886          */
1887         srvid = "Dummy Identity";
1888     } else {
1889         /*
1890          * Deliberately corrupt the creation time. We take 20 seconds off the
1891          * time. It could be any value as long as it is not within tolerance.
1892          * This should mean the ticket is rejected.
1893          */
1894         if (!TEST_true(SSL_SESSION_set_time(sess, (long)(time(NULL) - 20))))
1895             goto end;
1896     }
1897
1898     /* Write some early data */
1899     if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
1900                                         &written))
1901             || !TEST_size_t_eq(written, strlen(MSG1)))
1902         goto end;
1903
1904     /* Server should reject the early data and skip over it */
1905     if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
1906                                          &readbytes),
1907                      SSL_READ_EARLY_DATA_FINISH)
1908             || !TEST_size_t_eq(readbytes, 0)
1909             || !TEST_int_eq(SSL_get_early_data_status(serverssl),
1910                             SSL_EARLY_DATA_REJECTED))
1911         goto end;
1912
1913     if (hrr) {
1914         /*
1915          * Finish off the handshake. We perform the same writes and reads as
1916          * further down but we expect them to fail due to the incomplete
1917          * handshake.
1918          */
1919         if (!TEST_false(SSL_write_ex(clientssl, MSG2, strlen(MSG2), &written))
1920                 || !TEST_false(SSL_read_ex(serverssl, buf, sizeof(buf),
1921                                &readbytes)))
1922             goto end;
1923     }
1924
1925     /* Should be able to send normal data despite rejection of early data */
1926     if (!TEST_true(SSL_write_ex(clientssl, MSG2, strlen(MSG2), &written))
1927             || !TEST_size_t_eq(written, strlen(MSG2))
1928             || !TEST_int_eq(SSL_get_early_data_status(clientssl),
1929                             SSL_EARLY_DATA_REJECTED)
1930             || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
1931             || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
1932         goto end;
1933
1934     testresult = 1;
1935
1936  end:
1937     if (sess != clientpsk)
1938         SSL_SESSION_free(clientpsk);
1939     SSL_SESSION_free(serverpsk);
1940     clientpsk = serverpsk = NULL;
1941     SSL_SESSION_free(sess);
1942     SSL_free(serverssl);
1943     SSL_free(clientssl);
1944     SSL_CTX_free(sctx);
1945     SSL_CTX_free(cctx);
1946     return testresult;
1947 }
1948
1949 /*
1950  * Test that a server attempting to read early data can handle a connection
1951  * from a client where the early data is not acceptable.
1952  */
1953 static int test_early_data_skip(int idx)
1954 {
1955     return early_data_skip_helper(0, idx);
1956 }
1957
1958 /*
1959  * Test that a server attempting to read early data can handle a connection
1960  * from a client where an HRR occurs.
1961  */
1962 static int test_early_data_skip_hrr(int idx)
1963 {
1964     return early_data_skip_helper(1, idx);
1965 }
1966
1967 /*
1968  * Test that a server attempting to read early data can handle a connection
1969  * from a client that doesn't send any.
1970  */
1971 static int test_early_data_not_sent(int idx)
1972 {
1973     SSL_CTX *cctx = NULL, *sctx = NULL;
1974     SSL *clientssl = NULL, *serverssl = NULL;
1975     int testresult = 0;
1976     SSL_SESSION *sess = NULL;
1977     unsigned char buf[20];
1978     size_t readbytes, written;
1979
1980     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
1981                                         &serverssl, &sess, idx)))
1982         goto end;
1983
1984     /* Write some data - should block due to handshake with server */
1985     SSL_set_connect_state(clientssl);
1986     if (!TEST_false(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written)))
1987         goto end;
1988
1989     /* Server should detect that early data has not been sent */
1990     if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
1991                                          &readbytes),
1992                      SSL_READ_EARLY_DATA_FINISH)
1993             || !TEST_size_t_eq(readbytes, 0)
1994             || !TEST_int_eq(SSL_get_early_data_status(serverssl),
1995                             SSL_EARLY_DATA_NOT_SENT)
1996             || !TEST_int_eq(SSL_get_early_data_status(clientssl),
1997                             SSL_EARLY_DATA_NOT_SENT))
1998         goto end;
1999
2000     /* Continue writing the message we started earlier */
2001     if (!TEST_true(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written))
2002             || !TEST_size_t_eq(written, strlen(MSG1))
2003             || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
2004             || !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1))
2005             || !SSL_write_ex(serverssl, MSG2, strlen(MSG2), &written)
2006             || !TEST_size_t_eq(written, strlen(MSG2)))
2007         goto end;
2008
2009     /*
2010      * Should block due to the NewSessionTicket arrival unless we're using
2011      * read_ahead
2012      */
2013     if (idx != 1) {
2014         if (!TEST_false(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes)))
2015             goto end;
2016     }
2017
2018     if (!TEST_true(SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes))
2019             || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
2020         goto end;
2021
2022     testresult = 1;
2023
2024  end:
2025     /* If using PSK then clientpsk and sess are the same */
2026     SSL_SESSION_free(sess);
2027     SSL_SESSION_free(serverpsk);
2028     clientpsk = serverpsk = NULL;
2029     SSL_free(serverssl);
2030     SSL_free(clientssl);
2031     SSL_CTX_free(sctx);
2032     SSL_CTX_free(cctx);
2033     return testresult;
2034 }
2035
2036 static int hostname_cb(SSL *s, int *al, void *arg)
2037 {
2038     const char *hostname = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name);
2039
2040     if (hostname != NULL && strcmp(hostname, "goodhost") == 0)
2041         return  SSL_TLSEXT_ERR_OK;
2042
2043     return SSL_TLSEXT_ERR_NOACK;
2044 }
2045
2046 static const char *servalpn;
2047
2048 static int alpn_select_cb(SSL *ssl, const unsigned char **out,
2049                           unsigned char *outlen, const unsigned char *in,
2050                           unsigned int inlen, void *arg)
2051 {
2052     unsigned int protlen = 0;
2053     const unsigned char *prot;
2054
2055     for (prot = in; prot < in + inlen; prot += protlen) {
2056         protlen = *prot++;
2057         if (in + inlen < prot + protlen)
2058             return SSL_TLSEXT_ERR_NOACK;
2059
2060         if (protlen == strlen(servalpn)
2061                 && memcmp(prot, servalpn, protlen) == 0) {
2062             *out = prot;
2063             *outlen = protlen;
2064             return SSL_TLSEXT_ERR_OK;
2065         }
2066     }
2067
2068     return SSL_TLSEXT_ERR_NOACK;
2069 }
2070
2071 /* Test that a PSK can be used to send early_data */
2072 static int test_early_data_psk(int idx)
2073 {
2074     SSL_CTX *cctx = NULL, *sctx = NULL;
2075     SSL *clientssl = NULL, *serverssl = NULL;
2076     int testresult = 0;
2077     SSL_SESSION *sess = NULL;
2078     unsigned char alpnlist[] = {
2079         0x08, 'g', 'o', 'o', 'd', 'a', 'l', 'p', 'n', 0x07, 'b', 'a', 'd', 'a',
2080         'l', 'p', 'n'
2081     };
2082 #define GOODALPNLEN     9
2083 #define BADALPNLEN      8
2084 #define GOODALPN        (alpnlist)
2085 #define BADALPN         (alpnlist + GOODALPNLEN)
2086     int err = 0;
2087     unsigned char buf[20];
2088     size_t readbytes, written;
2089     int readearlyres = SSL_READ_EARLY_DATA_SUCCESS, connectres = 1;
2090     int edstatus = SSL_EARLY_DATA_ACCEPTED;
2091
2092     /* We always set this up with a final parameter of "2" for PSK */
2093     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
2094                                         &serverssl, &sess, 2)))
2095         goto end;
2096
2097     servalpn = "goodalpn";
2098
2099     /*
2100      * Note: There is no test for inconsistent SNI with late client detection.
2101      * This is because servers do not acknowledge SNI even if they are using
2102      * it in a resumption handshake - so it is not actually possible for a
2103      * client to detect a problem.
2104      */
2105     switch (idx) {
2106     case 0:
2107         /* Set inconsistent SNI (early client detection) */
2108         err = SSL_R_INCONSISTENT_EARLY_DATA_SNI;
2109         if (!TEST_true(SSL_SESSION_set1_hostname(sess, "goodhost"))
2110                 || !TEST_true(SSL_set_tlsext_host_name(clientssl, "badhost")))
2111             goto end;
2112         break;
2113
2114     case 1:
2115         /* Set inconsistent ALPN (early client detection) */
2116         err = SSL_R_INCONSISTENT_EARLY_DATA_ALPN;
2117         /* SSL_set_alpn_protos returns 0 for success and 1 for failure */
2118         if (!TEST_true(SSL_SESSION_set1_alpn_selected(sess, GOODALPN,
2119                                                       GOODALPNLEN))
2120                 || !TEST_false(SSL_set_alpn_protos(clientssl, BADALPN,
2121                                                    BADALPNLEN)))
2122             goto end;
2123         break;
2124
2125     case 2:
2126         /*
2127          * Set invalid protocol version. Technically this affects PSKs without
2128          * early_data too, but we test it here because it is similar to the
2129          * SNI/ALPN consistency tests.
2130          */
2131         err = SSL_R_BAD_PSK;
2132         if (!TEST_true(SSL_SESSION_set_protocol_version(sess, TLS1_2_VERSION)))
2133             goto end;
2134         break;
2135
2136     case 3:
2137         /*
2138          * Set inconsistent SNI (server detected). In this case the connection
2139          * will succeed but reject early_data.
2140          */
2141         SSL_SESSION_free(serverpsk);
2142         serverpsk = SSL_SESSION_dup(clientpsk);
2143         if (!TEST_ptr(serverpsk)
2144                 || !TEST_true(SSL_SESSION_set1_hostname(serverpsk, "badhost")))
2145             goto end;
2146         edstatus = SSL_EARLY_DATA_REJECTED;
2147         readearlyres = SSL_READ_EARLY_DATA_FINISH;
2148         /* Fall through */
2149     case 4:
2150         /* Set consistent SNI */
2151         if (!TEST_true(SSL_SESSION_set1_hostname(sess, "goodhost"))
2152                 || !TEST_true(SSL_set_tlsext_host_name(clientssl, "goodhost"))
2153                 || !TEST_true(SSL_CTX_set_tlsext_servername_callback(sctx,
2154                                 hostname_cb)))
2155             goto end;
2156         break;
2157
2158     case 5:
2159         /*
2160          * Set inconsistent ALPN (server detected). In this case the connection
2161          * will succeed but reject early_data.
2162          */
2163         servalpn = "badalpn";
2164         edstatus = SSL_EARLY_DATA_REJECTED;
2165         readearlyres = SSL_READ_EARLY_DATA_FINISH;
2166         /* Fall through */
2167     case 6:
2168         /*
2169          * Set consistent ALPN.
2170          * SSL_set_alpn_protos returns 0 for success and 1 for failure. It
2171          * accepts a list of protos (each one length prefixed).
2172          * SSL_set1_alpn_selected accepts a single protocol (not length
2173          * prefixed)
2174          */
2175         if (!TEST_true(SSL_SESSION_set1_alpn_selected(sess, GOODALPN + 1,
2176                                                       GOODALPNLEN - 1))
2177                 || !TEST_false(SSL_set_alpn_protos(clientssl, GOODALPN,
2178                                                    GOODALPNLEN)))
2179             goto end;
2180
2181         SSL_CTX_set_alpn_select_cb(sctx, alpn_select_cb, NULL);
2182         break;
2183
2184     case 7:
2185         /* Set inconsistent ALPN (late client detection) */
2186         SSL_SESSION_free(serverpsk);
2187         serverpsk = SSL_SESSION_dup(clientpsk);
2188         if (!TEST_ptr(serverpsk)
2189                 || !TEST_true(SSL_SESSION_set1_alpn_selected(clientpsk,
2190                                                              BADALPN + 1,
2191                                                              BADALPNLEN - 1))
2192                 || !TEST_true(SSL_SESSION_set1_alpn_selected(serverpsk,
2193                                                              GOODALPN + 1,
2194                                                              GOODALPNLEN - 1))
2195                 || !TEST_false(SSL_set_alpn_protos(clientssl, alpnlist,
2196                                                    sizeof(alpnlist))))
2197             goto end;
2198         SSL_CTX_set_alpn_select_cb(sctx, alpn_select_cb, NULL);
2199         edstatus = SSL_EARLY_DATA_ACCEPTED;
2200         readearlyres = SSL_READ_EARLY_DATA_SUCCESS;
2201         /* SSL_connect() call should fail */
2202         connectres = -1;
2203         break;
2204
2205     default:
2206         TEST_error("Bad test index");
2207         goto end;
2208     }
2209
2210     SSL_set_connect_state(clientssl);
2211     if (err != 0) {
2212         if (!TEST_false(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
2213                                             &written))
2214                 || !TEST_int_eq(SSL_get_error(clientssl, 0), SSL_ERROR_SSL)
2215                 || !TEST_int_eq(ERR_GET_REASON(ERR_get_error()), err))
2216             goto end;
2217     } else {
2218         if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
2219                                             &written)))
2220             goto end;
2221
2222         if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
2223                                              &readbytes), readearlyres)
2224                 || (readearlyres == SSL_READ_EARLY_DATA_SUCCESS
2225                     && !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1)))
2226                 || !TEST_int_eq(SSL_get_early_data_status(serverssl), edstatus)
2227                 || !TEST_int_eq(SSL_connect(clientssl), connectres))
2228             goto end;
2229     }
2230
2231     testresult = 1;
2232
2233  end:
2234     SSL_SESSION_free(clientpsk);
2235     SSL_SESSION_free(serverpsk);
2236     clientpsk = serverpsk = NULL;
2237     SSL_free(serverssl);
2238     SSL_free(clientssl);
2239     SSL_CTX_free(sctx);
2240     SSL_CTX_free(cctx);
2241     return testresult;
2242 }
2243
2244 /*
2245  * Test that a server that doesn't try to read early data can handle a
2246  * client sending some.
2247  */
2248 static int test_early_data_not_expected(int idx)
2249 {
2250     SSL_CTX *cctx = NULL, *sctx = NULL;
2251     SSL *clientssl = NULL, *serverssl = NULL;
2252     int testresult = 0;
2253     SSL_SESSION *sess = NULL;
2254     unsigned char buf[20];
2255     size_t readbytes, written;
2256
2257     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
2258                                         &serverssl, &sess, idx)))
2259         goto end;
2260
2261     /* Write some early data */
2262     if (!TEST_true(SSL_write_early_data(clientssl, MSG1, strlen(MSG1),
2263                                         &written)))
2264         goto end;
2265
2266     /*
2267      * Server should skip over early data and then block waiting for client to
2268      * continue handshake
2269      */
2270     if (!TEST_int_le(SSL_accept(serverssl), 0)
2271      || !TEST_int_gt(SSL_connect(clientssl), 0)
2272      || !TEST_int_eq(SSL_get_early_data_status(serverssl),
2273                      SSL_EARLY_DATA_REJECTED)
2274      || !TEST_int_gt(SSL_accept(serverssl), 0)
2275      || !TEST_int_eq(SSL_get_early_data_status(clientssl),
2276                      SSL_EARLY_DATA_REJECTED))
2277         goto end;
2278
2279     /* Send some normal data from client to server */
2280     if (!TEST_true(SSL_write_ex(clientssl, MSG2, strlen(MSG2), &written))
2281             || !TEST_size_t_eq(written, strlen(MSG2)))
2282         goto end;
2283
2284     if (!TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
2285             || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
2286         goto end;
2287
2288     testresult = 1;
2289
2290  end:
2291     /* If using PSK then clientpsk and sess are the same */
2292     SSL_SESSION_free(sess);
2293     SSL_SESSION_free(serverpsk);
2294     clientpsk = serverpsk = NULL;
2295     SSL_free(serverssl);
2296     SSL_free(clientssl);
2297     SSL_CTX_free(sctx);
2298     SSL_CTX_free(cctx);
2299     return testresult;
2300 }
2301
2302
2303 # ifndef OPENSSL_NO_TLS1_2
2304 /*
2305  * Test that a server attempting to read early data can handle a connection
2306  * from a TLSv1.2 client.
2307  */
2308 static int test_early_data_tls1_2(int idx)
2309 {
2310     SSL_CTX *cctx = NULL, *sctx = NULL;
2311     SSL *clientssl = NULL, *serverssl = NULL;
2312     int testresult = 0;
2313     unsigned char buf[20];
2314     size_t readbytes, written;
2315
2316     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl,
2317                                         &serverssl, NULL, idx)))
2318         goto end;
2319
2320     /* Write some data - should block due to handshake with server */
2321     SSL_set_max_proto_version(clientssl, TLS1_2_VERSION);
2322     SSL_set_connect_state(clientssl);
2323     if (!TEST_false(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written)))
2324         goto end;
2325
2326     /*
2327      * Server should do TLSv1.2 handshake. First it will block waiting for more
2328      * messages from client after ServerDone. Then SSL_read_early_data should
2329      * finish and detect that early data has not been sent
2330      */
2331     if (!TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
2332                                          &readbytes),
2333                      SSL_READ_EARLY_DATA_ERROR))
2334         goto end;
2335
2336     /*
2337      * Continue writing the message we started earlier. Will still block waiting
2338      * for the CCS/Finished from server
2339      */
2340     if (!TEST_false(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written))
2341             || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
2342                                                 &readbytes),
2343                             SSL_READ_EARLY_DATA_FINISH)
2344             || !TEST_size_t_eq(readbytes, 0)
2345             || !TEST_int_eq(SSL_get_early_data_status(serverssl),
2346                             SSL_EARLY_DATA_NOT_SENT))
2347         goto end;
2348
2349     /* Continue writing the message we started earlier */
2350     if (!TEST_true(SSL_write_ex(clientssl, MSG1, strlen(MSG1), &written))
2351             || !TEST_size_t_eq(written, strlen(MSG1))
2352             || !TEST_int_eq(SSL_get_early_data_status(clientssl),
2353                             SSL_EARLY_DATA_NOT_SENT)
2354             || !TEST_true(SSL_read_ex(serverssl, buf, sizeof(buf), &readbytes))
2355             || !TEST_mem_eq(buf, readbytes, MSG1, strlen(MSG1))
2356             || !TEST_true(SSL_write_ex(serverssl, MSG2, strlen(MSG2), &written))
2357             || !TEST_size_t_eq(written, strlen(MSG2))
2358             || !SSL_read_ex(clientssl, buf, sizeof(buf), &readbytes)
2359             || !TEST_mem_eq(buf, readbytes, MSG2, strlen(MSG2)))
2360         goto end;
2361
2362     testresult = 1;
2363
2364  end:
2365     /* If using PSK then clientpsk and sess are the same */
2366     SSL_SESSION_free(clientpsk);
2367     SSL_SESSION_free(serverpsk);
2368     clientpsk = serverpsk = NULL;
2369     SSL_free(serverssl);
2370     SSL_free(clientssl);
2371     SSL_CTX_free(sctx);
2372     SSL_CTX_free(cctx);
2373
2374     return testresult;
2375 }
2376 # endif /* OPENSSL_NO_TLS1_2 */
2377
2378 static int test_ciphersuite_change(void)
2379 {
2380     SSL_CTX *cctx = NULL, *sctx = NULL;
2381     SSL *clientssl = NULL, *serverssl = NULL;
2382     SSL_SESSION *clntsess = NULL;
2383     int testresult = 0;
2384     const SSL_CIPHER *aes_128_gcm_sha256 = NULL;
2385
2386     /* Create a session based on SHA-256 */
2387     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
2388                                        TLS_client_method(), &sctx,
2389                                        &cctx, cert, privkey))
2390             || !TEST_true(SSL_CTX_set_ciphersuites(cctx,
2391                                                    "TLS_AES_128_GCM_SHA256"))
2392             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
2393                                           &clientssl, NULL, NULL))
2394             || !TEST_true(create_ssl_connection(serverssl, clientssl,
2395                                                 SSL_ERROR_NONE)))
2396         goto end;
2397
2398     clntsess = SSL_get1_session(clientssl);
2399     /* Save for later */
2400     aes_128_gcm_sha256 = SSL_SESSION_get0_cipher(clntsess);
2401     SSL_shutdown(clientssl);
2402     SSL_shutdown(serverssl);
2403     SSL_free(serverssl);
2404     SSL_free(clientssl);
2405     serverssl = clientssl = NULL;
2406
2407 # if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
2408     /* Check we can resume a session with a different SHA-256 ciphersuite */
2409     if (!TEST_true(SSL_CTX_set_ciphersuites(cctx,
2410                                             "TLS_CHACHA20_POLY1305_SHA256"))
2411             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
2412                                              NULL, NULL))
2413             || !TEST_true(SSL_set_session(clientssl, clntsess))
2414             || !TEST_true(create_ssl_connection(serverssl, clientssl,
2415                                                 SSL_ERROR_NONE))
2416             || !TEST_true(SSL_session_reused(clientssl)))
2417         goto end;
2418
2419     SSL_SESSION_free(clntsess);
2420     clntsess = SSL_get1_session(clientssl);
2421     SSL_shutdown(clientssl);
2422     SSL_shutdown(serverssl);
2423     SSL_free(serverssl);
2424     SSL_free(clientssl);
2425     serverssl = clientssl = NULL;
2426 # endif
2427
2428     /*
2429      * Check attempting to resume a SHA-256 session with no SHA-256 ciphersuites
2430      * succeeds but does not resume.
2431      */
2432     if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, "TLS_AES_256_GCM_SHA384"))
2433             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
2434                                              NULL, NULL))
2435             || !TEST_true(SSL_set_session(clientssl, clntsess))
2436             || !TEST_true(create_ssl_connection(serverssl, clientssl,
2437                                                 SSL_ERROR_SSL))
2438             || !TEST_false(SSL_session_reused(clientssl)))
2439         goto end;
2440
2441     SSL_SESSION_free(clntsess);
2442     clntsess = NULL;
2443     SSL_shutdown(clientssl);
2444     SSL_shutdown(serverssl);
2445     SSL_free(serverssl);
2446     SSL_free(clientssl);
2447     serverssl = clientssl = NULL;
2448
2449     /* Create a session based on SHA384 */
2450     if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, "TLS_AES_256_GCM_SHA384"))
2451             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
2452                                           &clientssl, NULL, NULL))
2453             || !TEST_true(create_ssl_connection(serverssl, clientssl,
2454                                                 SSL_ERROR_NONE)))
2455         goto end;
2456
2457     clntsess = SSL_get1_session(clientssl);
2458     SSL_shutdown(clientssl);
2459     SSL_shutdown(serverssl);
2460     SSL_free(serverssl);
2461     SSL_free(clientssl);
2462     serverssl = clientssl = NULL;
2463
2464     if (!TEST_true(SSL_CTX_set_ciphersuites(cctx,
2465                    "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384"))
2466             || !TEST_true(SSL_CTX_set_ciphersuites(sctx,
2467                                                    "TLS_AES_256_GCM_SHA384"))
2468             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
2469                                              NULL, NULL))
2470             || !TEST_true(SSL_set_session(clientssl, clntsess))
2471                /*
2472                 * We use SSL_ERROR_WANT_READ below so that we can pause the
2473                 * connection after the initial ClientHello has been sent to
2474                 * enable us to make some session changes.
2475                 */
2476             || !TEST_false(create_ssl_connection(serverssl, clientssl,
2477                                                 SSL_ERROR_WANT_READ)))
2478         goto end;
2479
2480     /* Trick the client into thinking this session is for a different digest */
2481     clntsess->cipher = aes_128_gcm_sha256;
2482     clntsess->cipher_id = clntsess->cipher->id;
2483
2484     /*
2485      * Continue the previously started connection. Server has selected a SHA-384
2486      * ciphersuite, but client thinks the session is for SHA-256, so it should
2487      * bail out.
2488      */
2489     if (!TEST_false(create_ssl_connection(serverssl, clientssl,
2490                                                 SSL_ERROR_SSL))
2491             || !TEST_int_eq(ERR_GET_REASON(ERR_get_error()),
2492                             SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED))
2493         goto end;
2494
2495     testresult = 1;
2496
2497  end:
2498     SSL_SESSION_free(clntsess);
2499     SSL_free(serverssl);
2500     SSL_free(clientssl);
2501     SSL_CTX_free(sctx);
2502     SSL_CTX_free(cctx);
2503
2504     return testresult;
2505 }
2506
2507 static int test_tls13_psk(int idx)
2508 {
2509     SSL_CTX *sctx = NULL, *cctx = NULL;
2510     SSL *serverssl = NULL, *clientssl = NULL;
2511     const SSL_CIPHER *cipher = NULL;
2512     const unsigned char key[] = {
2513         0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
2514         0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2515         0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
2516         0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f
2517     };
2518     int testresult = 0;
2519
2520     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
2521                                        TLS_client_method(), &sctx,
2522                                        &cctx, cert, privkey)))
2523         goto end;
2524
2525     /*
2526      * We use a ciphersuite with SHA256 to ease testing old style PSK callbacks
2527      * which will always default to SHA256
2528      */
2529     if (!TEST_true(SSL_CTX_set_ciphersuites(cctx, "TLS_AES_128_GCM_SHA256")))
2530         goto end;
2531
2532     /*
2533      * Test 0: New style callbacks only
2534      * Test 1: New and old style callbacks (only the new ones should be used)
2535      * Test 2: Old style callbacks only
2536      */
2537     if (idx == 0 || idx == 1) {
2538         SSL_CTX_set_psk_use_session_callback(cctx, use_session_cb);
2539         SSL_CTX_set_psk_find_session_callback(sctx, find_session_cb);
2540     }
2541     if (idx == 1 || idx == 2) {
2542         SSL_CTX_set_psk_client_callback(cctx, psk_client_cb);
2543         SSL_CTX_set_psk_server_callback(sctx, psk_server_cb);
2544     }
2545     srvid = pskid;
2546     use_session_cb_cnt = 0;
2547     find_session_cb_cnt = 0;
2548     psk_client_cb_cnt = 0;
2549     psk_server_cb_cnt = 0;
2550
2551     /* Check we can create a connection if callback decides not to send a PSK */
2552     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
2553                                              NULL, NULL))
2554             || !TEST_true(create_ssl_connection(serverssl, clientssl,
2555                                                 SSL_ERROR_NONE))
2556             || !TEST_false(SSL_session_reused(clientssl))
2557             || !TEST_false(SSL_session_reused(serverssl)))
2558         goto end;
2559
2560     if (idx == 0 || idx == 1) {
2561         if (!TEST_true(use_session_cb_cnt == 1)
2562                 || !TEST_true(find_session_cb_cnt == 0)
2563                    /*
2564                     * If no old style callback then below should be 0
2565                     * otherwise 1
2566                     */
2567                 || !TEST_true(psk_client_cb_cnt == idx)
2568                 || !TEST_true(psk_server_cb_cnt == 0))
2569             goto end;
2570     } else {
2571         if (!TEST_true(use_session_cb_cnt == 0)
2572                 || !TEST_true(find_session_cb_cnt == 0)
2573                 || !TEST_true(psk_client_cb_cnt == 1)
2574                 || !TEST_true(psk_server_cb_cnt == 0))
2575             goto end;
2576     }
2577
2578     shutdown_ssl_connection(serverssl, clientssl);
2579     serverssl = clientssl = NULL;
2580     use_session_cb_cnt = psk_client_cb_cnt = 0;
2581
2582     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
2583                                              NULL, NULL)))
2584         goto end;
2585
2586     /* Create the PSK */
2587     cipher = SSL_CIPHER_find(clientssl, TLS13_AES_128_GCM_SHA256_BYTES);
2588     clientpsk = SSL_SESSION_new();
2589     if (!TEST_ptr(clientpsk)
2590             || !TEST_ptr(cipher)
2591             || !TEST_true(SSL_SESSION_set1_master_key(clientpsk, key,
2592                                                       sizeof(key)))
2593             || !TEST_true(SSL_SESSION_set_cipher(clientpsk, cipher))
2594             || !TEST_true(SSL_SESSION_set_protocol_version(clientpsk,
2595                                                            TLS1_3_VERSION))
2596             || !TEST_true(SSL_SESSION_up_ref(clientpsk)))
2597         goto end;
2598     serverpsk = clientpsk;
2599
2600     /* Check we can create a connection and the PSK is used */
2601     if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))
2602             || !TEST_true(SSL_session_reused(clientssl))
2603             || !TEST_true(SSL_session_reused(serverssl)))
2604         goto end;
2605
2606     if (idx == 0 || idx == 1) {
2607         if (!TEST_true(use_session_cb_cnt == 1)
2608                 || !TEST_true(find_session_cb_cnt == 1)
2609                 || !TEST_true(psk_client_cb_cnt == 0)
2610                 || !TEST_true(psk_server_cb_cnt == 0))
2611             goto end;
2612     } else {
2613         if (!TEST_true(use_session_cb_cnt == 0)
2614                 || !TEST_true(find_session_cb_cnt == 0)
2615                 || !TEST_true(psk_client_cb_cnt == 1)
2616                 || !TEST_true(psk_server_cb_cnt == 1))
2617             goto end;
2618     }
2619
2620     shutdown_ssl_connection(serverssl, clientssl);
2621     serverssl = clientssl = NULL;
2622     use_session_cb_cnt = find_session_cb_cnt = 0;
2623     psk_client_cb_cnt = psk_server_cb_cnt = 0;
2624
2625     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
2626                                              NULL, NULL)))
2627         goto end;
2628
2629     /* Force an HRR */
2630     if (!TEST_true(SSL_set1_groups_list(serverssl, "P-256")))
2631         goto end;
2632
2633     /*
2634      * Check we can create a connection, the PSK is used and the callbacks are
2635      * called twice.
2636      */
2637     if (!TEST_true(create_ssl_connection(serverssl, clientssl, SSL_ERROR_NONE))
2638             || !TEST_true(SSL_session_reused(clientssl))
2639             || !TEST_true(SSL_session_reused(serverssl)))
2640         goto end;
2641
2642     if (idx == 0 || idx == 1) {
2643         if (!TEST_true(use_session_cb_cnt == 2)
2644                 || !TEST_true(find_session_cb_cnt == 2)
2645                 || !TEST_true(psk_client_cb_cnt == 0)
2646                 || !TEST_true(psk_server_cb_cnt == 0))
2647             goto end;
2648     } else {
2649         if (!TEST_true(use_session_cb_cnt == 0)
2650                 || !TEST_true(find_session_cb_cnt == 0)
2651                 || !TEST_true(psk_client_cb_cnt == 2)
2652                 || !TEST_true(psk_server_cb_cnt == 2))
2653             goto end;
2654     }
2655
2656     shutdown_ssl_connection(serverssl, clientssl);
2657     serverssl = clientssl = NULL;
2658     use_session_cb_cnt = find_session_cb_cnt = 0;
2659     psk_client_cb_cnt = psk_server_cb_cnt = 0;
2660
2661     /*
2662      * Check that if the server rejects the PSK we can still connect, but with
2663      * a full handshake
2664      */
2665     srvid = "Dummy Identity";
2666     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
2667                                              NULL, NULL))
2668             || !TEST_true(create_ssl_connection(serverssl, clientssl,
2669                                                 SSL_ERROR_NONE))
2670             || !TEST_false(SSL_session_reused(clientssl))
2671             || !TEST_false(SSL_session_reused(serverssl)))
2672         goto end;
2673
2674     if (idx == 0 || idx == 1) {
2675         if (!TEST_true(use_session_cb_cnt == 1)
2676                 || !TEST_true(find_session_cb_cnt == 1)
2677                 || !TEST_true(psk_client_cb_cnt == 0)
2678                    /*
2679                     * If no old style callback then below should be 0
2680                     * otherwise 1
2681                     */
2682                 || !TEST_true(psk_server_cb_cnt == idx))
2683             goto end;
2684     } else {
2685         if (!TEST_true(use_session_cb_cnt == 0)
2686                 || !TEST_true(find_session_cb_cnt == 0)
2687                 || !TEST_true(psk_client_cb_cnt == 1)
2688                 || !TEST_true(psk_server_cb_cnt == 1))
2689             goto end;
2690     }
2691
2692     shutdown_ssl_connection(serverssl, clientssl);
2693     serverssl = clientssl = NULL;
2694     testresult = 1;
2695
2696  end:
2697     SSL_SESSION_free(clientpsk);
2698     SSL_SESSION_free(serverpsk);
2699     clientpsk = serverpsk = NULL;
2700     SSL_free(serverssl);
2701     SSL_free(clientssl);
2702     SSL_CTX_free(sctx);
2703     SSL_CTX_free(cctx);
2704     return testresult;
2705 }
2706
2707 static unsigned char cookie_magic_value[] = "cookie magic";
2708
2709 static int generate_cookie_callback(SSL *ssl, unsigned char *cookie,
2710                                     unsigned int *cookie_len)
2711 {
2712     /*
2713      * Not suitable as a real cookie generation function but good enough for
2714      * testing!
2715      */
2716     memcpy(cookie, cookie_magic_value, sizeof(cookie_magic_value) - 1);
2717     *cookie_len = sizeof(cookie_magic_value) - 1;
2718
2719     return 1;
2720 }
2721
2722 static int verify_cookie_callback(SSL *ssl, const unsigned char *cookie,
2723                                   unsigned int cookie_len)
2724 {
2725     if (cookie_len == sizeof(cookie_magic_value) - 1
2726         && memcmp(cookie, cookie_magic_value, cookie_len) == 0)
2727         return 1;
2728
2729     return 0;
2730 }
2731
2732 static int generate_stateless_cookie_callback(SSL *ssl, unsigned char *cookie,
2733                                         size_t *cookie_len)
2734 {
2735     unsigned int temp;
2736     int res = generate_cookie_callback(ssl, cookie, &temp);
2737     *cookie_len = temp;
2738     return res;
2739 }
2740
2741 static int verify_stateless_cookie_callback(SSL *ssl, const unsigned char *cookie,
2742                                       size_t cookie_len)
2743 {
2744     return verify_cookie_callback(ssl, cookie, cookie_len);
2745 }
2746
2747 static int test_stateless(void)
2748 {
2749     SSL_CTX *sctx = NULL, *cctx = NULL;
2750     SSL *serverssl = NULL, *clientssl = NULL;
2751     int testresult = 0;
2752
2753     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
2754                                        TLS_client_method(), &sctx,
2755                                        &cctx, cert, privkey)))
2756         goto end;
2757
2758     /* The arrival of CCS messages can confuse the test */
2759     SSL_CTX_clear_options(cctx, SSL_OP_ENABLE_MIDDLEBOX_COMPAT);
2760
2761     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
2762                                       NULL, NULL))
2763                /* Send the first ClientHello */
2764             || !TEST_false(create_ssl_connection(serverssl, clientssl,
2765                                                  SSL_ERROR_WANT_READ))
2766                /*
2767                 * This should fail with a -1 return because we have no callbacks
2768                 * set up
2769                 */
2770             || !TEST_int_eq(SSL_stateless(serverssl), -1))
2771         goto end;
2772
2773     /* Fatal error so abandon the connection from this client */
2774     SSL_free(clientssl);
2775     clientssl = NULL;
2776
2777     /* Set up the cookie generation and verification callbacks */
2778     SSL_CTX_set_stateless_cookie_generate_cb(sctx, generate_stateless_cookie_callback);
2779     SSL_CTX_set_stateless_cookie_verify_cb(sctx, verify_stateless_cookie_callback);
2780
2781     /*
2782      * Create a new connection from the client (we can reuse the server SSL
2783      * object).
2784      */
2785     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
2786                                              NULL, NULL))
2787                /* Send the first ClientHello */
2788             || !TEST_false(create_ssl_connection(serverssl, clientssl,
2789                                                 SSL_ERROR_WANT_READ))
2790                /* This should fail because there is no cookie */
2791             || !TEST_int_eq(SSL_stateless(serverssl), 0))
2792         goto end;
2793
2794     /* Abandon the connection from this client */
2795     SSL_free(clientssl);
2796     clientssl = NULL;
2797
2798     /*
2799      * Now create a connection from a new client but with the same server SSL
2800      * object
2801      */
2802     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
2803                                              NULL, NULL))
2804                /* Send the first ClientHello */
2805             || !TEST_false(create_ssl_connection(serverssl, clientssl,
2806                                                 SSL_ERROR_WANT_READ))
2807                /* This should fail because there is no cookie */
2808             || !TEST_int_eq(SSL_stateless(serverssl), 0)
2809                /* Send the second ClientHello */
2810             || !TEST_false(create_ssl_connection(serverssl, clientssl,
2811                                                 SSL_ERROR_WANT_READ))
2812                /* This should succeed because a cookie is now present */
2813             || !TEST_int_eq(SSL_stateless(serverssl), 1)
2814                /* Complete the connection */
2815             || !TEST_true(create_ssl_connection(serverssl, clientssl,
2816                                                 SSL_ERROR_NONE)))
2817         goto end;
2818
2819     shutdown_ssl_connection(serverssl, clientssl);
2820     serverssl = clientssl = NULL;
2821     testresult = 1;
2822
2823  end:
2824     SSL_free(serverssl);
2825     SSL_free(clientssl);
2826     SSL_CTX_free(sctx);
2827     SSL_CTX_free(cctx);
2828     return testresult;
2829
2830 }
2831 #endif /* OPENSSL_NO_TLS1_3 */
2832
2833 static int clntaddoldcb = 0;
2834 static int clntparseoldcb = 0;
2835 static int srvaddoldcb = 0;
2836 static int srvparseoldcb = 0;
2837 static int clntaddnewcb = 0;
2838 static int clntparsenewcb = 0;
2839 static int srvaddnewcb = 0;
2840 static int srvparsenewcb = 0;
2841 static int snicb = 0;
2842
2843 #define TEST_EXT_TYPE1  0xff00
2844
2845 static int old_add_cb(SSL *s, unsigned int ext_type, const unsigned char **out,
2846                       size_t *outlen, int *al, void *add_arg)
2847 {
2848     int *server = (int *)add_arg;
2849     unsigned char *data;
2850
2851     if (SSL_is_server(s))
2852         srvaddoldcb++;
2853     else
2854         clntaddoldcb++;
2855
2856     if (*server != SSL_is_server(s)
2857             || (data = OPENSSL_malloc(sizeof(*data))) == NULL)
2858         return -1;
2859
2860     *data = 1;
2861     *out = data;
2862     *outlen = sizeof(char);
2863     return 1;
2864 }
2865
2866 static void old_free_cb(SSL *s, unsigned int ext_type, const unsigned char *out,
2867                         void *add_arg)
2868 {
2869     OPENSSL_free((unsigned char *)out);
2870 }
2871
2872 static int old_parse_cb(SSL *s, unsigned int ext_type, const unsigned char *in,
2873                         size_t inlen, int *al, void *parse_arg)
2874 {
2875     int *server = (int *)parse_arg;
2876
2877     if (SSL_is_server(s))
2878         srvparseoldcb++;
2879     else
2880         clntparseoldcb++;
2881
2882     if (*server != SSL_is_server(s)
2883             || inlen != sizeof(char)
2884             || *in != 1)
2885         return -1;
2886
2887     return 1;
2888 }
2889
2890 static int new_add_cb(SSL *s, unsigned int ext_type, unsigned int context,
2891                       const unsigned char **out, size_t *outlen, X509 *x,
2892                       size_t chainidx, int *al, void *add_arg)
2893 {
2894     int *server = (int *)add_arg;
2895     unsigned char *data;
2896
2897     if (SSL_is_server(s))
2898         srvaddnewcb++;
2899     else
2900         clntaddnewcb++;
2901
2902     if (*server != SSL_is_server(s)
2903             || (data = OPENSSL_malloc(sizeof(*data))) == NULL)
2904         return -1;
2905
2906     *data = 1;
2907     *out = data;
2908     *outlen = sizeof(*data);
2909     return 1;
2910 }
2911
2912 static void new_free_cb(SSL *s, unsigned int ext_type, unsigned int context,
2913                         const unsigned char *out, void *add_arg)
2914 {
2915     OPENSSL_free((unsigned char *)out);
2916 }
2917
2918 static int new_parse_cb(SSL *s, unsigned int ext_type, unsigned int context,
2919                         const unsigned char *in, size_t inlen, X509 *x,
2920                         size_t chainidx, int *al, void *parse_arg)
2921 {
2922     int *server = (int *)parse_arg;
2923
2924     if (SSL_is_server(s))
2925         srvparsenewcb++;
2926     else
2927         clntparsenewcb++;
2928
2929     if (*server != SSL_is_server(s)
2930             || inlen != sizeof(char) || *in != 1)
2931         return -1;
2932
2933     return 1;
2934 }
2935
2936 static int sni_cb(SSL *s, int *al, void *arg)
2937 {
2938     SSL_CTX *ctx = (SSL_CTX *)arg;
2939
2940     if (SSL_set_SSL_CTX(s, ctx) == NULL) {
2941         *al = SSL_AD_INTERNAL_ERROR;
2942         return SSL_TLSEXT_ERR_ALERT_FATAL;
2943     }
2944     snicb++;
2945     return SSL_TLSEXT_ERR_OK;
2946 }
2947
2948 /*
2949  * Custom call back tests.
2950  * Test 0: Old style callbacks in TLSv1.2
2951  * Test 1: New style callbacks in TLSv1.2
2952  * Test 2: New style callbacks in TLSv1.2 with SNI
2953  * Test 3: New style callbacks in TLSv1.3. Extensions in CH and EE
2954  * Test 4: New style callbacks in TLSv1.3. Extensions in CH, SH, EE, Cert + NST
2955  */
2956 static int test_custom_exts(int tst)
2957 {
2958     SSL_CTX *cctx = NULL, *sctx = NULL, *sctx2 = NULL;
2959     SSL *clientssl = NULL, *serverssl = NULL;
2960     int testresult = 0;
2961     static int server = 1;
2962     static int client = 0;
2963     SSL_SESSION *sess = NULL;
2964     unsigned int context;
2965
2966 #if defined(OPENSSL_NO_TLS1_2) && !defined(OPENSSL_NO_TLS1_3)
2967     /* Skip tests for TLSv1.2 and below in this case */
2968     if (tst < 3)
2969         return 1;
2970 #endif
2971
2972     /* Reset callback counters */
2973     clntaddoldcb = clntparseoldcb = srvaddoldcb = srvparseoldcb = 0;
2974     clntaddnewcb = clntparsenewcb = srvaddnewcb = srvparsenewcb = 0;
2975     snicb = 0;
2976
2977     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
2978                                        TLS_client_method(), &sctx,
2979                                        &cctx, cert, privkey)))
2980         goto end;
2981
2982     if (tst == 2
2983             && !TEST_true(create_ssl_ctx_pair(TLS_server_method(), NULL, &sctx2,
2984                                               NULL, cert, privkey)))
2985         goto end;
2986
2987
2988     if (tst < 3) {
2989         SSL_CTX_set_options(cctx, SSL_OP_NO_TLSv1_3);
2990         SSL_CTX_set_options(sctx, SSL_OP_NO_TLSv1_3);
2991         if (sctx2 != NULL)
2992             SSL_CTX_set_options(sctx2, SSL_OP_NO_TLSv1_3);
2993     }
2994
2995     if (tst == 4) {
2996         context = SSL_EXT_CLIENT_HELLO
2997                   | SSL_EXT_TLS1_2_SERVER_HELLO
2998                   | SSL_EXT_TLS1_3_SERVER_HELLO
2999                   | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS
3000                   | SSL_EXT_TLS1_3_CERTIFICATE
3001                   | SSL_EXT_TLS1_3_NEW_SESSION_TICKET;
3002     } else {
3003         context = SSL_EXT_CLIENT_HELLO
3004                   | SSL_EXT_TLS1_2_SERVER_HELLO
3005                   | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS;
3006     }
3007
3008     /* Create a client side custom extension */
3009     if (tst == 0) {
3010         if (!TEST_true(SSL_CTX_add_client_custom_ext(cctx, TEST_EXT_TYPE1,
3011                                                      old_add_cb, old_free_cb,
3012                                                      &client, old_parse_cb,
3013                                                      &client)))
3014             goto end;
3015     } else {
3016         if (!TEST_true(SSL_CTX_add_custom_ext(cctx, TEST_EXT_TYPE1, context,
3017                                               new_add_cb, new_free_cb,
3018                                               &client, new_parse_cb, &client)))
3019             goto end;
3020     }
3021
3022     /* Should not be able to add duplicates */
3023     if (!TEST_false(SSL_CTX_add_client_custom_ext(cctx, TEST_EXT_TYPE1,
3024                                                   old_add_cb, old_free_cb,
3025                                                   &client, old_parse_cb,
3026                                                   &client))
3027             || !TEST_false(SSL_CTX_add_custom_ext(cctx, TEST_EXT_TYPE1,
3028                                                   context, new_add_cb,
3029                                                   new_free_cb, &client,
3030                                                   new_parse_cb, &client)))
3031         goto end;
3032
3033     /* Create a server side custom extension */
3034     if (tst == 0) {
3035         if (!TEST_true(SSL_CTX_add_server_custom_ext(sctx, TEST_EXT_TYPE1,
3036                                                      old_add_cb, old_free_cb,
3037                                                      &server, old_parse_cb,
3038                                                      &server)))
3039             goto end;
3040     } else {
3041         if (!TEST_true(SSL_CTX_add_custom_ext(sctx, TEST_EXT_TYPE1, context,
3042                                               new_add_cb, new_free_cb,
3043                                               &server, new_parse_cb, &server)))
3044             goto end;
3045         if (sctx2 != NULL
3046                 && !TEST_true(SSL_CTX_add_custom_ext(sctx2, TEST_EXT_TYPE1,
3047                                                      context, new_add_cb,
3048                                                      new_free_cb, &server,
3049                                                      new_parse_cb, &server)))
3050             goto end;
3051     }
3052
3053     /* Should not be able to add duplicates */
3054     if (!TEST_false(SSL_CTX_add_server_custom_ext(sctx, TEST_EXT_TYPE1,
3055                                                   old_add_cb, old_free_cb,
3056                                                   &server, old_parse_cb,
3057                                                   &server))
3058             || !TEST_false(SSL_CTX_add_custom_ext(sctx, TEST_EXT_TYPE1,
3059                                                   context, new_add_cb,
3060                                                   new_free_cb, &server,
3061                                                   new_parse_cb, &server)))
3062         goto end;
3063
3064     if (tst == 2) {
3065         /* Set up SNI */
3066         if (!TEST_true(SSL_CTX_set_tlsext_servername_callback(sctx, sni_cb))
3067                 || !TEST_true(SSL_CTX_set_tlsext_servername_arg(sctx, sctx2)))
3068             goto end;
3069     }
3070
3071     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
3072                                       &clientssl, NULL, NULL))
3073             || !TEST_true(create_ssl_connection(serverssl, clientssl,
3074                                                 SSL_ERROR_NONE)))
3075         goto end;
3076
3077     if (tst == 0) {
3078         if (clntaddoldcb != 1
3079                 || clntparseoldcb != 1
3080                 || srvaddoldcb != 1
3081                 || srvparseoldcb != 1)
3082             goto end;
3083     } else if (tst == 1 || tst == 2 || tst == 3) {
3084         if (clntaddnewcb != 1
3085                 || clntparsenewcb != 1
3086                 || srvaddnewcb != 1
3087                 || srvparsenewcb != 1
3088                 || (tst != 2 && snicb != 0)
3089                 || (tst == 2 && snicb != 1))
3090             goto end;
3091     } else {
3092         if (clntaddnewcb != 1
3093                 || clntparsenewcb != 4
3094                 || srvaddnewcb != 4
3095                 || srvparsenewcb != 1)
3096             goto end;
3097     }
3098
3099     sess = SSL_get1_session(clientssl);
3100     SSL_shutdown(clientssl);
3101     SSL_shutdown(serverssl);
3102     SSL_free(serverssl);
3103     SSL_free(clientssl);
3104     serverssl = clientssl = NULL;
3105
3106     if (tst == 3) {
3107         /* We don't bother with the resumption aspects for this test */
3108         testresult = 1;
3109         goto end;
3110     }
3111
3112     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
3113                                       NULL, NULL))
3114             || !TEST_true(SSL_set_session(clientssl, sess))
3115             || !TEST_true(create_ssl_connection(serverssl, clientssl,
3116                                                SSL_ERROR_NONE)))
3117         goto end;
3118
3119     /*
3120      * For a resumed session we expect to add the ClientHello extension. For the
3121      * old style callbacks we ignore it on the server side because they set
3122      * SSL_EXT_IGNORE_ON_RESUMPTION. The new style callbacks do not ignore
3123      * them.
3124      */
3125     if (tst == 0) {
3126         if (clntaddoldcb != 2
3127                 || clntparseoldcb != 1
3128                 || srvaddoldcb != 1
3129                 || srvparseoldcb != 1)
3130             goto end;
3131     } else if (tst == 1 || tst == 2 || tst == 3) {
3132         if (clntaddnewcb != 2
3133                 || clntparsenewcb != 2
3134                 || srvaddnewcb != 2
3135                 || srvparsenewcb != 2)
3136             goto end;
3137     } else {
3138         /* No Certificate message extensions in the resumption handshake */
3139         if (clntaddnewcb != 2
3140                 || clntparsenewcb != 7
3141                 || srvaddnewcb != 7
3142                 || srvparsenewcb != 2)
3143             goto end;
3144     }
3145
3146     testresult = 1;
3147
3148 end:
3149     SSL_SESSION_free(sess);
3150     SSL_free(serverssl);
3151     SSL_free(clientssl);
3152     SSL_CTX_free(sctx2);
3153     SSL_CTX_free(sctx);
3154     SSL_CTX_free(cctx);
3155     return testresult;
3156 }
3157
3158 /*
3159  * Test loading of serverinfo data in various formats. test_sslmessages actually
3160  * tests to make sure the extensions appear in the handshake
3161  */
3162 static int test_serverinfo(int tst)
3163 {
3164     unsigned int version;
3165     unsigned char *sibuf;
3166     size_t sibuflen;
3167     int ret, expected, testresult = 0;
3168     SSL_CTX *ctx;
3169
3170     ctx = SSL_CTX_new(TLS_method());
3171     if (!TEST_ptr(ctx))
3172         goto end;
3173
3174     if ((tst & 0x01) == 0x01)
3175         version = SSL_SERVERINFOV2;
3176     else
3177         version = SSL_SERVERINFOV1;
3178
3179     if ((tst & 0x02) == 0x02) {
3180         sibuf = serverinfov2;
3181         sibuflen = sizeof(serverinfov2);
3182         expected = (version == SSL_SERVERINFOV2);
3183     } else {
3184         sibuf = serverinfov1;
3185         sibuflen = sizeof(serverinfov1);
3186         expected = (version == SSL_SERVERINFOV1);
3187     }
3188
3189     if ((tst & 0x04) == 0x04) {
3190         ret = SSL_CTX_use_serverinfo_ex(ctx, version, sibuf, sibuflen);
3191     } else {
3192         ret = SSL_CTX_use_serverinfo(ctx, sibuf, sibuflen);
3193
3194         /*
3195          * The version variable is irrelevant in this case - it's what is in the
3196          * buffer that matters
3197          */
3198         if ((tst & 0x02) == 0x02)
3199             expected = 0;
3200         else
3201             expected = 1;
3202     }
3203
3204     if (!TEST_true(ret == expected))
3205         goto end;
3206
3207     testresult = 1;
3208
3209  end:
3210     SSL_CTX_free(ctx);
3211
3212     return testresult;
3213 }
3214
3215 /*
3216  * Test that SSL_export_keying_material() produces expected results. There are
3217  * no test vectors so all we do is test that both sides of the communication
3218  * produce the same results for different protocol versions.
3219  */
3220 static int test_export_key_mat(int tst)
3221 {
3222     int testresult = 0;
3223     SSL_CTX *cctx = NULL, *sctx = NULL, *sctx2 = NULL;
3224     SSL *clientssl = NULL, *serverssl = NULL;
3225     const char label[] = "test label";
3226     const unsigned char context[] = "context";
3227     const unsigned char *emptycontext = NULL;
3228     unsigned char ckeymat1[80], ckeymat2[80], ckeymat3[80];
3229     unsigned char skeymat1[80], skeymat2[80], skeymat3[80];
3230     const int protocols[] = {
3231         TLS1_VERSION,
3232         TLS1_1_VERSION,
3233         TLS1_2_VERSION,
3234         TLS1_3_VERSION
3235     };
3236
3237 #ifdef OPENSSL_NO_TLS1
3238     if (tst == 0)
3239         return 1;
3240 #endif
3241 #ifdef OPENSSL_NO_TLS1_1
3242     if (tst == 1)
3243         return 1;
3244 #endif
3245 #ifdef OPENSSL_NO_TLS1_2
3246     if (tst == 2)
3247         return 1;
3248 #endif
3249 #ifdef OPENSSL_NO_TLS1_3
3250     if (tst == 3)
3251         return 1;
3252 #endif
3253     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
3254                                        TLS_client_method(), &sctx,
3255                                        &cctx, cert, privkey)))
3256         goto end;
3257
3258     OPENSSL_assert(tst >= 0 && (size_t)tst < OSSL_NELEM(protocols));
3259     SSL_CTX_set_max_proto_version(cctx, protocols[tst]);
3260     SSL_CTX_set_min_proto_version(cctx, protocols[tst]);
3261
3262     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl, NULL,
3263                                       NULL))
3264             || !TEST_true(create_ssl_connection(serverssl, clientssl,
3265                                                 SSL_ERROR_NONE)))
3266         goto end;
3267
3268     if (!TEST_int_eq(SSL_export_keying_material(clientssl, ckeymat1,
3269                                                 sizeof(ckeymat1), label,
3270                                                 sizeof(label) - 1, context,
3271                                                 sizeof(context) - 1, 1), 1)
3272             || !TEST_int_eq(SSL_export_keying_material(clientssl, ckeymat2,
3273                                                        sizeof(ckeymat2), label,
3274                                                        sizeof(label) - 1,
3275                                                        emptycontext,
3276                                                        0, 1), 1)
3277             || !TEST_int_eq(SSL_export_keying_material(clientssl, ckeymat3,
3278                                                        sizeof(ckeymat3), label,
3279                                                        sizeof(label) - 1,
3280                                                        NULL, 0, 0), 1)
3281             || !TEST_int_eq(SSL_export_keying_material(serverssl, skeymat1,
3282                                                        sizeof(skeymat1), label,
3283                                                        sizeof(label) - 1,
3284                                                        context,
3285                                                        sizeof(context) -1, 1),
3286                             1)
3287             || !TEST_int_eq(SSL_export_keying_material(serverssl, skeymat2,
3288                                                        sizeof(skeymat2), label,
3289                                                        sizeof(label) - 1,
3290                                                        emptycontext,
3291                                                        0, 1), 1)
3292             || !TEST_int_eq(SSL_export_keying_material(serverssl, skeymat3,
3293                                                        sizeof(skeymat3), label,
3294                                                        sizeof(label) - 1,
3295                                                        NULL, 0, 0), 1)
3296                /*
3297                 * Check that both sides created the same key material with the
3298                 * same context.
3299                 */
3300             || !TEST_mem_eq(ckeymat1, sizeof(ckeymat1), skeymat1,
3301                             sizeof(skeymat1))
3302                /*
3303                 * Check that both sides created the same key material with an
3304                 * empty context.
3305                 */
3306             || !TEST_mem_eq(ckeymat2, sizeof(ckeymat2), skeymat2,
3307                             sizeof(skeymat2))
3308                /*
3309                 * Check that both sides created the same key material without a
3310                 * context.
3311                 */
3312             || !TEST_mem_eq(ckeymat3, sizeof(ckeymat3), skeymat3,
3313                             sizeof(skeymat3))
3314                /* Different contexts should produce different results */
3315             || !TEST_mem_ne(ckeymat1, sizeof(ckeymat1), ckeymat2,
3316                             sizeof(ckeymat2)))
3317         goto end;
3318
3319     /*
3320      * Check that an empty context and no context produce different results in
3321      * protocols less than TLSv1.3. In TLSv1.3 they should be the same.
3322      */
3323     if ((tst != 3 && !TEST_mem_ne(ckeymat2, sizeof(ckeymat2), ckeymat3,
3324                                   sizeof(ckeymat3)))
3325             || (tst ==3 && !TEST_mem_eq(ckeymat2, sizeof(ckeymat2), ckeymat3,
3326                                         sizeof(ckeymat3))))
3327         goto end;
3328
3329     testresult = 1;
3330
3331  end:
3332     SSL_free(serverssl);
3333     SSL_free(clientssl);
3334     SSL_CTX_free(sctx2);
3335     SSL_CTX_free(sctx);
3336     SSL_CTX_free(cctx);
3337
3338     return testresult;
3339 }
3340
3341 #ifndef OPENSSL_NO_TLS1_3
3342 /*
3343  * Test that SSL_export_keying_material_early() produces expected
3344  * results. There are no test vectors so all we do is test that both
3345  * sides of the communication produce the same results for different
3346  * protocol versions.
3347  */
3348 static int test_export_key_mat_early(int idx)
3349 {
3350     static const char label[] = "test label";
3351     static const unsigned char context[] = "context";
3352     int testresult = 0;
3353     SSL_CTX *cctx = NULL, *sctx = NULL;
3354     SSL *clientssl = NULL, *serverssl = NULL;
3355     SSL_SESSION *sess = NULL;
3356     const unsigned char *emptycontext = NULL;
3357     unsigned char ckeymat1[80], ckeymat2[80];
3358     unsigned char skeymat1[80], skeymat2[80];
3359     unsigned char buf[1];
3360     size_t readbytes, written;
3361
3362     if (!TEST_true(setupearly_data_test(&cctx, &sctx, &clientssl, &serverssl,
3363                                         &sess, idx)))
3364         goto end;
3365
3366     /* Here writing 0 length early data is enough. */
3367     if (!TEST_true(SSL_write_early_data(clientssl, NULL, 0, &written))
3368             || !TEST_int_eq(SSL_read_early_data(serverssl, buf, sizeof(buf),
3369                                                 &readbytes),
3370                             SSL_READ_EARLY_DATA_ERROR)
3371             || !TEST_int_eq(SSL_get_early_data_status(serverssl),
3372                             SSL_EARLY_DATA_ACCEPTED))
3373         goto end;
3374
3375     if (!TEST_int_eq(SSL_export_keying_material_early(
3376                      clientssl, ckeymat1, sizeof(ckeymat1), label,
3377                      sizeof(label) - 1, context, sizeof(context) - 1), 1)
3378             || !TEST_int_eq(SSL_export_keying_material_early(
3379                             clientssl, ckeymat2, sizeof(ckeymat2), label,
3380                             sizeof(label) - 1, emptycontext, 0), 1)
3381             || !TEST_int_eq(SSL_export_keying_material_early(
3382                             serverssl, skeymat1, sizeof(skeymat1), label,
3383                             sizeof(label) - 1, context, sizeof(context) - 1), 1)
3384             || !TEST_int_eq(SSL_export_keying_material_early(
3385                             serverssl, skeymat2, sizeof(skeymat2), label,
3386                             sizeof(label) - 1, emptycontext, 0), 1)
3387                /*
3388                 * Check that both sides created the same key material with the
3389                 * same context.
3390                 */
3391             || !TEST_mem_eq(ckeymat1, sizeof(ckeymat1), skeymat1,
3392                             sizeof(skeymat1))
3393                /*
3394                 * Check that both sides created the same key material with an
3395                 * empty context.
3396                 */
3397             || !TEST_mem_eq(ckeymat2, sizeof(ckeymat2), skeymat2,
3398                             sizeof(skeymat2))
3399                /* Different contexts should produce different results */
3400             || !TEST_mem_ne(ckeymat1, sizeof(ckeymat1), ckeymat2,
3401                             sizeof(ckeymat2)))
3402         goto end;
3403
3404     testresult = 1;
3405
3406  end:
3407     if (sess != clientpsk)
3408         SSL_SESSION_free(sess);
3409     SSL_SESSION_free(clientpsk);
3410     SSL_SESSION_free(serverpsk);
3411     clientpsk = serverpsk = NULL;
3412     SSL_free(serverssl);
3413     SSL_free(clientssl);
3414     SSL_CTX_free(sctx);
3415     SSL_CTX_free(cctx);
3416
3417     return testresult;
3418 }
3419 #endif /* OPENSSL_NO_TLS1_3 */
3420
3421 static int test_ssl_clear(int idx)
3422 {
3423     SSL_CTX *cctx = NULL, *sctx = NULL;
3424     SSL *clientssl = NULL, *serverssl = NULL;
3425     int testresult = 0;
3426
3427 #ifdef OPENSSL_NO_TLS1_2
3428     if (idx == 1)
3429         return 1;
3430 #endif
3431
3432     /* Create an initial connection */
3433     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
3434                                        TLS_client_method(), &sctx,
3435                                        &cctx, cert, privkey))
3436             || (idx == 1
3437                 && !TEST_true(SSL_CTX_set_max_proto_version(cctx,
3438                                                             TLS1_2_VERSION)))
3439             || !TEST_true(create_ssl_objects(sctx, cctx, &serverssl,
3440                                           &clientssl, NULL, NULL))
3441             || !TEST_true(create_ssl_connection(serverssl, clientssl,
3442                                                 SSL_ERROR_NONE)))
3443         goto end;
3444
3445     SSL_shutdown(clientssl);
3446     SSL_shutdown(serverssl);
3447     SSL_free(serverssl);
3448     serverssl = NULL;
3449
3450     /* Clear clientssl - we're going to reuse the object */
3451     if (!TEST_true(SSL_clear(clientssl)))
3452         goto end;
3453
3454     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
3455                                              NULL, NULL))
3456             || !TEST_true(create_ssl_connection(serverssl, clientssl,
3457                                                 SSL_ERROR_NONE))
3458             || !TEST_true(SSL_session_reused(clientssl)))
3459         goto end;
3460
3461     SSL_shutdown(clientssl);
3462     SSL_shutdown(serverssl);
3463
3464     testresult = 1;
3465
3466  end:
3467     SSL_free(serverssl);
3468     SSL_free(clientssl);
3469     SSL_CTX_free(sctx);
3470     SSL_CTX_free(cctx);
3471
3472     return testresult;
3473 }
3474
3475 /* Parse CH and retrieve any MFL extension value if present */
3476 static int get_MFL_from_client_hello(BIO *bio, int *mfl_codemfl_code)
3477 {
3478     long len;
3479     unsigned char *data;
3480     PACKET pkt = {0}, pkt2 = {0}, pkt3 = {0};
3481     unsigned int MFL_code = 0, type = 0;
3482
3483     if (!TEST_uint_gt( len = BIO_get_mem_data( bio, (char **) &data ), 0 ) )
3484         goto end;
3485
3486     if (!TEST_true( PACKET_buf_init( &pkt, data, len ) )
3487                /* Skip the record header */
3488             || !PACKET_forward(&pkt, SSL3_RT_HEADER_LENGTH)
3489                /* Skip the handshake message header */
3490             || !TEST_true(PACKET_forward(&pkt, SSL3_HM_HEADER_LENGTH))
3491                /* Skip client version and random */
3492             || !TEST_true(PACKET_forward(&pkt, CLIENT_VERSION_LEN
3493                                                + SSL3_RANDOM_SIZE))
3494                /* Skip session id */
3495             || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &pkt2))
3496                /* Skip ciphers */
3497             || !TEST_true(PACKET_get_length_prefixed_2(&pkt, &pkt2))
3498                /* Skip compression */
3499             || !TEST_true(PACKET_get_length_prefixed_1(&pkt, &pkt2))
3500                /* Extensions len */
3501             || !TEST_true(PACKET_as_length_prefixed_2(&pkt, &pkt2)))
3502         goto end;
3503
3504     /* Loop through all extensions */
3505     while (PACKET_remaining(&pkt2)) {
3506         if (!TEST_true(PACKET_get_net_2(&pkt2, &type))
3507                 || !TEST_true(PACKET_get_length_prefixed_2(&pkt2, &pkt3)))
3508             goto end;
3509
3510         if (type == TLSEXT_TYPE_max_fragment_length) {
3511             if (!TEST_uint_ne(PACKET_remaining(&pkt3), 0)
3512                     || !TEST_true(PACKET_get_1(&pkt3, &MFL_code)))
3513                 goto end;
3514
3515             *mfl_codemfl_code = MFL_code;
3516             return 1;
3517         }
3518     }
3519
3520  end:
3521     return 0;
3522 }
3523
3524 /* Maximum-Fragment-Length TLS extension mode to test */
3525 static const unsigned char max_fragment_len_test[] = {
3526     TLSEXT_max_fragment_length_512,
3527     TLSEXT_max_fragment_length_1024,
3528     TLSEXT_max_fragment_length_2048,
3529     TLSEXT_max_fragment_length_4096
3530 };
3531
3532 static int test_max_fragment_len_ext(int idx_tst)
3533 {
3534     SSL_CTX *ctx;
3535     SSL *con = NULL;
3536     int testresult = 0, MFL_mode = 0;
3537     BIO *rbio, *wbio;
3538
3539     ctx = SSL_CTX_new(TLS_method());
3540     if (!TEST_ptr(ctx))
3541         goto end;
3542
3543     if (!TEST_true(SSL_CTX_set_tlsext_max_fragment_length(
3544                    ctx, max_fragment_len_test[idx_tst])))
3545         goto end;
3546
3547     con = SSL_new(ctx);
3548     if (!TEST_ptr(con))
3549         goto end;
3550
3551     rbio = BIO_new(BIO_s_mem());
3552     wbio = BIO_new(BIO_s_mem());
3553     if (!TEST_ptr(rbio)|| !TEST_ptr(wbio)) {
3554         BIO_free(rbio);
3555         BIO_free(wbio);
3556         goto end;
3557     }
3558
3559     SSL_set_bio(con, rbio, wbio);
3560     SSL_set_connect_state(con);
3561
3562     if (!TEST_int_le(SSL_connect(con), 0)) {
3563         /* This shouldn't succeed because we don't have a server! */
3564         goto end;
3565     }
3566
3567     if (!TEST_true(get_MFL_from_client_hello(wbio, &MFL_mode)))
3568         /* no MFL in client hello */
3569         goto end;
3570     if (!TEST_true(max_fragment_len_test[idx_tst] == MFL_mode))
3571         goto end;
3572
3573     testresult = 1;
3574
3575 end:
3576     SSL_free(con);
3577     SSL_CTX_free(ctx);
3578
3579     return testresult;
3580 }
3581
3582 #ifndef OPENSSL_NO_TLS1_3
3583 static int test_pha_key_update(void)
3584 {
3585     SSL_CTX *cctx = NULL, *sctx = NULL;
3586     SSL *clientssl = NULL, *serverssl = NULL;
3587     int testresult = 0;
3588
3589     if (!TEST_true(create_ssl_ctx_pair(TLS_server_method(),
3590                                        TLS_client_method(),
3591                                        &sctx, &cctx, cert, privkey)))
3592         return 0;
3593
3594     if (!TEST_true(SSL_CTX_set_min_proto_version(sctx, TLS1_3_VERSION))
3595         || !TEST_true(SSL_CTX_set_max_proto_version(sctx, TLS1_3_VERSION))
3596         || !TEST_true(SSL_CTX_set_min_proto_version(cctx, TLS1_3_VERSION))
3597         || !TEST_true(SSL_CTX_set_max_proto_version(cctx, TLS1_3_VERSION)))
3598         goto end;
3599
3600
3601     if (!TEST_true(create_ssl_objects(sctx, cctx, &serverssl, &clientssl,
3602                                       NULL, NULL)))
3603         goto end;
3604
3605     SSL_force_post_handshake_auth(clientssl);
3606
3607     if (!TEST_true(create_ssl_connection(serverssl, clientssl,
3608                                          SSL_ERROR_NONE)))
3609         goto end;
3610
3611     SSL_set_verify(serverssl, SSL_VERIFY_PEER, NULL);
3612     if (!TEST_true(SSL_verify_client_post_handshake(serverssl)))
3613         goto end;
3614
3615     if (!TEST_true(SSL_key_update(clientssl, SSL_KEY_UPDATE_NOT_REQUESTED)))
3616         goto end;
3617
3618     /* Start handshake on the server */
3619     if (!TEST_int_eq(SSL_do_handshake(serverssl), 1))
3620         goto end;
3621
3622     /* Starts with SSL_connect(), but it's really just SSL_do_handshake() */
3623     if (!TEST_true(create_ssl_connection(serverssl, clientssl,
3624                                          SSL_ERROR_NONE)))
3625         goto end;
3626
3627     SSL_shutdown(clientssl);
3628     SSL_shutdown(serverssl);
3629
3630     testresult = 1;
3631
3632  end:
3633     SSL_free(serverssl);
3634     SSL_free(clientssl);
3635     SSL_CTX_free(sctx);
3636     SSL_CTX_free(cctx);
3637     return testresult;
3638 }
3639 #endif
3640
3641 int setup_tests(void)
3642 {
3643     if (!TEST_ptr(cert = test_get_argument(0))
3644             || !TEST_ptr(privkey = test_get_argument(1)))
3645         return 0;
3646
3647     if (getenv("OPENSSL_TEST_GETCOUNTS") != NULL) {
3648 #ifdef OPENSSL_NO_CRYPTO_MDEBUG
3649         TEST_error("not supported in this build");
3650         return 0;
3651 #else
3652         int i, mcount, rcount, fcount;
3653
3654         for (i = 0; i < 4; i++)
3655             test_export_key_mat(i);
3656         CRYPTO_get_alloc_counts(&mcount, &rcount, &fcount);
3657         test_printf_stdout("malloc %d realloc %d free %d\n",
3658                 mcount, rcount, fcount);
3659         return 1;
3660 #endif
3661     }
3662
3663     ADD_TEST(test_large_message_tls);
3664     ADD_TEST(test_large_message_tls_read_ahead);
3665 #ifndef OPENSSL_NO_DTLS
3666     ADD_TEST(test_large_message_dtls);
3667 #endif
3668 #ifndef OPENSSL_NO_OCSP
3669     ADD_TEST(test_tlsext_status_type);
3670 #endif
3671     ADD_TEST(test_session_with_only_int_cache);
3672     ADD_TEST(test_session_with_only_ext_cache);
3673     ADD_TEST(test_session_with_both_cache);
3674     ADD_ALL_TESTS(test_ssl_set_bio, TOTAL_SSL_SET_BIO_TESTS);
3675     ADD_TEST(test_ssl_bio_pop_next_bio);
3676     ADD_TEST(test_ssl_bio_pop_ssl_bio);
3677     ADD_TEST(test_ssl_bio_change_rbio);
3678     ADD_TEST(test_ssl_bio_change_wbio);
3679 #if !defined(OPENSSL_NO_TLS1_2) || defined(OPENSSL_NO_TLS1_3)
3680     ADD_ALL_TESTS(test_set_sigalgs, OSSL_NELEM(testsigalgs) * 2);
3681     ADD_TEST(test_keylog);
3682 #endif
3683 #ifndef OPENSSL_NO_TLS1_3
3684     ADD_TEST(test_keylog_no_master_key);
3685 #endif
3686 #ifndef OPENSSL_NO_TLS1_2
3687     ADD_TEST(test_client_hello_cb);
3688 #endif
3689 #ifndef OPENSSL_NO_TLS1_3
3690     ADD_ALL_TESTS(test_early_data_read_write, 3);
3691     ADD_ALL_TESTS(test_early_data_skip, 3);
3692     ADD_ALL_TESTS(test_early_data_skip_hrr, 3);
3693     ADD_ALL_TESTS(test_early_data_not_sent, 3);
3694     ADD_ALL_TESTS(test_early_data_psk, 8);
3695     ADD_ALL_TESTS(test_early_data_not_expected, 3);
3696 # ifndef OPENSSL_NO_TLS1_2
3697     ADD_ALL_TESTS(test_early_data_tls1_2, 3);
3698 # endif
3699 #endif
3700 #ifndef OPENSSL_NO_TLS1_3
3701     ADD_TEST(test_ciphersuite_change);
3702     ADD_ALL_TESTS(test_tls13_psk, 3);
3703     ADD_ALL_TESTS(test_custom_exts, 5);
3704     ADD_TEST(test_stateless);
3705     ADD_TEST(test_pha_key_update);
3706 #else
3707     ADD_ALL_TESTS(test_custom_exts, 3);
3708 #endif
3709     ADD_ALL_TESTS(test_serverinfo, 8);
3710     ADD_ALL_TESTS(test_export_key_mat, 4);
3711 #ifndef OPENSSL_NO_TLS1_3
3712     ADD_ALL_TESTS(test_export_key_mat_early, 3);
3713 #endif
3714     ADD_ALL_TESTS(test_ssl_clear, 2);
3715     ADD_ALL_TESTS(test_max_fragment_len_ext, OSSL_NELEM(max_fragment_len_test));
3716     return 1;
3717 }
3718
3719 void cleanup_tests(void)
3720 {
3721     bio_s_mempacket_test_free();
3722 }