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