1#!/bin/sh
2
3# tls13-misc.sh
4#
5# Copyright The Mbed TLS Contributors
6# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
7#
8
9requires_gnutls_tls1_3
10requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_3
11requires_config_enabled MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE
12requires_config_enabled MBEDTLS_SSL_SRV_C
13requires_config_enabled MBEDTLS_DEBUG_C
14requires_config_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
15
16run_test    "TLS 1.3: PSK: No valid ciphersuite. G->m" \
17            "$P_SRV tls13_kex_modes=all debug_level=5 $(get_srv_psk_list)" \
18            "$G_NEXT_CLI -d 10 --priority NORMAL:-VERS-ALL:-CIPHER-ALL:+AES-256-GCM:+AEAD:+SHA384:-KX-ALL:+ECDHE-PSK:+DHE-PSK:+PSK:+VERS-TLS1.3 \
19                         --pskusername Client_identity --pskkey=6162636465666768696a6b6c6d6e6f70 \
20                         localhost" \
21            1 \
22            -s "found psk key exchange modes extension" \
23            -s "found pre_shared_key extension" \
24            -s "Found PSK_EPHEMERAL KEX MODE" \
25            -s "Found PSK KEX MODE" \
26            -s "No matched ciphersuite"
27
28requires_openssl_tls1_3
29requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_3
30requires_config_enabled MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE
31requires_config_enabled MBEDTLS_SSL_SRV_C
32requires_config_enabled MBEDTLS_DEBUG_C
33requires_config_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
34
35run_test    "TLS 1.3: PSK: No valid ciphersuite. O->m" \
36            "$P_SRV tls13_kex_modes=all debug_level=5 $(get_srv_psk_list)" \
37            "$O_NEXT_CLI -tls1_3 -msg -allow_no_dhe_kex -ciphersuites TLS_AES_256_GCM_SHA384\
38                         -psk_identity Client_identity -psk 6162636465666768696a6b6c6d6e6f70" \
39            1 \
40            -s "found psk key exchange modes extension" \
41            -s "found pre_shared_key extension" \
42            -s "Found PSK_EPHEMERAL KEX MODE" \
43            -s "Found PSK KEX MODE" \
44            -s "No matched ciphersuite"
45
46requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_SSL_SRV_C \
47                             MBEDTLS_SSL_CLI_C MBEDTLS_DEBUG_C MBEDTLS_HAVE_TIME \
48                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
49run_test "TLS 1.3 m->m: Multiple PSKs: valid ticket, reconnect with ticket" \
50         "$P_SRV tls13_kex_modes=psk_ephemeral debug_level=5 psk_identity=Client_identity psk=6162636465666768696a6b6c6d6e6f70 tickets=8" \
51         "$P_CLI tls13_kex_modes=psk_ephemeral debug_level=5 psk_identity=Client_identity psk=6162636465666768696a6b6c6d6e6f70 reco_mode=1 reconnect=1" \
52         0 \
53         -c "Pre-configured PSK number = 2" \
54         -s "sent selected_identity: 0" \
55         -s "key exchange mode: psk_ephemeral" \
56         -S "key exchange mode: psk$" \
57         -S "key exchange mode: ephemeral$" \
58         -S "ticket is not authentic"
59
60requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_SSL_SRV_C \
61                             MBEDTLS_SSL_CLI_C MBEDTLS_DEBUG_C MBEDTLS_HAVE_TIME \
62                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
63run_test "TLS 1.3 m->m: Multiple PSKs: invalid ticket, reconnect with PSK" \
64         "$P_SRV tls13_kex_modes=psk_ephemeral debug_level=5 psk_identity=Client_identity psk=6162636465666768696a6b6c6d6e6f70 tickets=8 dummy_ticket=1" \
65         "$P_CLI tls13_kex_modes=psk_ephemeral debug_level=5 psk_identity=Client_identity psk=6162636465666768696a6b6c6d6e6f70 reco_mode=1 reconnect=1" \
66         0 \
67         -c "Pre-configured PSK number = 2" \
68         -s "sent selected_identity: 1" \
69         -s "key exchange mode: psk_ephemeral" \
70         -S "key exchange mode: psk$" \
71         -S "key exchange mode: ephemeral$" \
72         -s "ticket is not authentic"
73
74requires_gnutls_tls1_3
75requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE MBEDTLS_SSL_SRV_C MBEDTLS_DEBUG_C
76requires_config_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
77run_test    "TLS 1.3: G->m: ephemeral_all/psk, fail, no common kex mode" \
78            "$P_SRV tls13_kex_modes=psk debug_level=5 $(get_srv_psk_list)" \
79            "$G_NEXT_CLI -d 10 --priority NORMAL:-VERS-ALL:-KX-ALL:+ECDHE-PSK:+DHE-PSK:-PSK:+VERS-TLS1.3 \
80                         --pskusername Client_identity --pskkey=6162636465666768696a6b6c6d6e6f70 \
81                         localhost" \
82            1 \
83            -s "found psk key exchange modes extension" \
84            -s "found pre_shared_key extension" \
85            -s "Found PSK_EPHEMERAL KEX MODE" \
86            -S "Found PSK KEX MODE" \
87            -S "key exchange mode: psk$"  \
88            -S "key exchange mode: psk_ephemeral"  \
89            -S "key exchange mode: ephemeral"
90
91requires_gnutls_tls1_3
92requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 MBEDTLS_SSL_SRV_C MBEDTLS_DEBUG_C \
93                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
94                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
95requires_all_configs_disabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED \
96                              MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
97run_test    "TLS 1.3: G->m: PSK: configured psk only, good." \
98            "$P_SRV tls13_kex_modes=all debug_level=5 $(get_srv_psk_list)" \
99            "$G_NEXT_CLI -d 10 --priority NORMAL:-VERS-ALL:-KX-ALL:+ECDHE-PSK:+DHE-PSK:+PSK:+VERS-TLS1.3:+GROUP-ALL \
100                         --pskusername Client_identity --pskkey=6162636465666768696a6b6c6d6e6f70 \
101                         localhost" \
102            0 \
103            -s "found psk key exchange modes extension" \
104            -s "found pre_shared_key extension"         \
105            -s "Found PSK_EPHEMERAL KEX MODE"           \
106            -s "Found PSK KEX MODE"                     \
107            -s "key exchange mode: psk$"
108
109requires_gnutls_tls1_3
110requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 MBEDTLS_SSL_SRV_C MBEDTLS_DEBUG_C \
111                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
112                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
113requires_all_configs_disabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
114                              MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
115run_test    "TLS 1.3: G->m: PSK: configured psk_ephemeral only, good." \
116            "$P_SRV tls13_kex_modes=all debug_level=5 $(get_srv_psk_list)" \
117            "$G_NEXT_CLI -d 10 --priority NORMAL:-VERS-ALL:-KX-ALL:+ECDHE-PSK:+DHE-PSK:+PSK:+VERS-TLS1.3:+GROUP-ALL \
118                         --pskusername Client_identity --pskkey=6162636465666768696a6b6c6d6e6f70 \
119                         localhost" \
120            0 \
121            -s "found psk key exchange modes extension" \
122            -s "found pre_shared_key extension"         \
123            -s "Found PSK_EPHEMERAL KEX MODE"           \
124            -s "Found PSK KEX MODE"                     \
125            -s "key exchange mode: psk_ephemeral$"
126
127requires_gnutls_tls1_3
128requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 MBEDTLS_SSL_SRV_C MBEDTLS_DEBUG_C \
129                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
130                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
131requires_all_configs_disabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
132                              MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
133run_test    "TLS 1.3: G->m: PSK: configured ephemeral only, good." \
134            "$P_SRV tls13_kex_modes=all debug_level=5 $(get_srv_psk_list)" \
135            "$G_NEXT_CLI -d 10 --priority NORMAL:-VERS-ALL:-KX-ALL:+ECDHE-PSK:+DHE-PSK:+PSK:+VERS-TLS1.3:+GROUP-ALL \
136                         --pskusername Client_identity --pskkey=6162636465666768696a6b6c6d6e6f70 \
137                         localhost" \
138            0 \
139            -s "key exchange mode: ephemeral$"
140
141requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
142                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
143                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
144                             MBEDTLS_DEBUG_C \
145                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
146requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
147                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
148run_test "TLS 1.3 m->m: resumption" \
149         "$P_SRV debug_level=2 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key" \
150         "$P_CLI reco_mode=1 reconnect=1" \
151         0 \
152         -c "Protocol is TLSv1.3" \
153         -c "Saving session for reuse... ok" \
154         -c "Reconnecting with saved session... ok" \
155         -c "HTTP/1.0 200 OK" \
156         -s "Protocol is TLSv1.3" \
157         -s "key exchange mode: psk" \
158         -s "Select PSK ciphersuite"
159
160requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
161                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
162                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
163                             MBEDTLS_DEBUG_C \
164                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
165requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
166                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
167run_test "TLS 1.3 m->m: resumption with servername" \
168         "$P_SRV debug_level=2 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key \
169            sni=localhost,../framework/data_files/server2.crt,../framework/data_files/server2.key,-,-,-,polarssl.example,../framework/data_files/server1-nospace.crt,../framework/data_files/server1.key,-,-,-" \
170         "$P_CLI server_name=localhost reco_mode=1 reconnect=1" \
171         0 \
172         -c "Protocol is TLSv1.3" \
173         -c "Saving session for reuse... ok" \
174         -c "Reconnecting with saved session... ok" \
175         -c "HTTP/1.0 200 OK" \
176         -s "Protocol is TLSv1.3" \
177         -s "key exchange mode: psk" \
178         -s "Select PSK ciphersuite"
179
180requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
181                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
182                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
183                             MBEDTLS_DEBUG_C \
184                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
185requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
186                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
187run_test "TLS 1.3 m->m: resumption with ticket max lifetime (7d)" \
188         "$P_SRV debug_level=2 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key ticket_timeout=604800 tickets=1" \
189         "$P_CLI reco_mode=1 reconnect=1" \
190         0 \
191         -c "Protocol is TLSv1.3" \
192         -c "Saving session for reuse... ok" \
193         -c "Reconnecting with saved session... ok" \
194         -c "HTTP/1.0 200 OK" \
195         -s "Protocol is TLSv1.3" \
196         -s "key exchange mode: psk" \
197         -s "Select PSK ciphersuite"
198
199requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
200                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
201                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
202                             MBEDTLS_DEBUG_C \
203                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
204requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
205                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
206requires_ciphersuite_enabled TLS1-3-AES-256-GCM-SHA384
207run_test "TLS 1.3 m->m: resumption with AES-256-GCM-SHA384 only" \
208         "$P_SRV debug_level=2 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key" \
209         "$P_CLI force_ciphersuite=TLS1-3-AES-256-GCM-SHA384 reco_mode=1 reconnect=1" \
210         0 \
211         -c "Protocol is TLSv1.3" \
212         -c "Ciphersuite is TLS1-3-AES-256-GCM-SHA384" \
213         -c "Saving session for reuse... ok" \
214         -c "Reconnecting with saved session... ok" \
215         -c "HTTP/1.0 200 OK" \
216         -s "Protocol is TLSv1.3" \
217         -s "key exchange mode: psk" \
218         -s "Select PSK ciphersuite: 1302 - TLS1-3-AES-256-GCM-SHA384"
219
220requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
221                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
222                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
223                             MBEDTLS_SSL_EARLY_DATA MBEDTLS_DEBUG_C \
224                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
225requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
226                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
227run_test "TLS 1.3 m->m: resumption with early data" \
228         "$P_SRV debug_level=4 early_data=1 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key" \
229         "$P_CLI debug_level=3 early_data=1 reco_mode=1 reconnect=1" \
230         0 \
231         -c "Protocol is TLSv1.3" \
232         -c "Saving session for reuse... ok" \
233         -c "Reconnecting with saved session" \
234         -c "HTTP/1.0 200 OK" \
235         -c "received max_early_data_size" \
236         -c "NewSessionTicket: early_data(42) extension received." \
237         -c "ClientHello: early_data(42) extension exists." \
238         -c "EncryptedExtensions: early_data(42) extension received." \
239         -c "bytes of early data written" \
240         -C "0 bytes of early data written" \
241         -s "Protocol is TLSv1.3" \
242         -s "key exchange mode: psk" \
243         -s "Select PSK ciphersuite" \
244         -s "Sent max_early_data_size" \
245         -s "NewSessionTicket: early_data(42) extension exists." \
246         -s "ClientHello: early_data(42) extension exists." \
247         -s "EncryptedExtensions: early_data(42) extension exists." \
248         -s "early data bytes read"
249
250requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
251                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
252                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
253                             MBEDTLS_SSL_EARLY_DATA MBEDTLS_DEBUG_C \
254                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
255requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
256                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
257requires_ciphersuite_enabled TLS1-3-AES-256-GCM-SHA384
258run_test "TLS 1.3 m->m: resumption with early data, AES-256-GCM-SHA384 only" \
259         "$P_SRV debug_level=4 early_data=1 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key" \
260         "$P_CLI debug_level=3 force_ciphersuite=TLS1-3-AES-256-GCM-SHA384 early_data=1 reco_mode=1 reconnect=1" \
261         0 \
262         -c "Protocol is TLSv1.3" \
263         -c "Ciphersuite is TLS1-3-AES-256-GCM-SHA384" \
264         -c "Saving session for reuse... ok" \
265         -c "Reconnecting with saved session" \
266         -c "HTTP/1.0 200 OK" \
267         -c "received max_early_data_size" \
268         -c "NewSessionTicket: early_data(42) extension received." \
269         -c "ClientHello: early_data(42) extension exists." \
270         -c "EncryptedExtensions: early_data(42) extension received." \
271         -c "bytes of early data written" \
272         -C "0 bytes of early data written" \
273         -s "Protocol is TLSv1.3" \
274         -s "key exchange mode: psk" \
275         -s "Select PSK ciphersuite: 1302 - TLS1-3-AES-256-GCM-SHA384" \
276         -s "Sent max_early_data_size" \
277         -s "NewSessionTicket: early_data(42) extension exists." \
278         -s "ClientHello: early_data(42) extension exists." \
279         -s "EncryptedExtensions: early_data(42) extension exists." \
280         -s "early data bytes read"
281
282requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
283                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
284                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
285                             MBEDTLS_SSL_EARLY_DATA MBEDTLS_DEBUG_C \
286                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
287requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
288                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
289run_test "TLS 1.3 m->m: resumption, early data cli-enabled/srv-default" \
290         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key" \
291         "$P_CLI debug_level=3 early_data=1 reco_mode=1 reconnect=1" \
292         0 \
293         -c "Protocol is TLSv1.3" \
294         -c "Saving session for reuse... ok" \
295         -c "Reconnecting with saved session" \
296         -c "HTTP/1.0 200 OK" \
297         -C "received max_early_data_size" \
298         -C "NewSessionTicket: early_data(42) extension received." \
299         -C "ClientHello: early_data(42) extension exists." \
300         -C "EncryptedExtensions: early_data(42) extension received." \
301         -c "0 bytes of early data written" \
302         -s "Protocol is TLSv1.3" \
303         -s "key exchange mode: psk" \
304         -s "Select PSK ciphersuite" \
305         -S "Sent max_early_data_size" \
306         -S "NewSessionTicket: early_data(42) extension exists." \
307         -S "ClientHello: early_data(42) extension exists." \
308         -S "EncryptedExtensions: early_data(42) extension exists." \
309         -S "early data bytes read"
310
311requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
312                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
313                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
314                             MBEDTLS_SSL_EARLY_DATA MBEDTLS_DEBUG_C \
315                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
316requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
317                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
318run_test "TLS 1.3 m->m: resumption, early data cli-enabled/srv-disabled" \
319         "$P_SRV debug_level=4 early_data=0 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key" \
320         "$P_CLI debug_level=3 early_data=1 reco_mode=1 reconnect=1" \
321         0 \
322         -c "Protocol is TLSv1.3" \
323         -c "Saving session for reuse... ok" \
324         -c "Reconnecting with saved session" \
325         -c "HTTP/1.0 200 OK" \
326         -C "received max_early_data_size" \
327         -C "NewSessionTicket: early_data(42) extension received." \
328         -C "ClientHello: early_data(42) extension exists." \
329         -C "EncryptedExtensions: early_data(42) extension received." \
330         -c "0 bytes of early data written" \
331         -s "Protocol is TLSv1.3" \
332         -s "key exchange mode: psk" \
333         -s "Select PSK ciphersuite" \
334         -S "Sent max_early_data_size" \
335         -S "NewSessionTicket: early_data(42) extension exists." \
336         -S "ClientHello: early_data(42) extension exists." \
337         -S "EncryptedExtensions: early_data(42) extension exists." \
338         -S "early data bytes read"
339
340requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
341                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
342                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
343                             MBEDTLS_SSL_EARLY_DATA MBEDTLS_DEBUG_C \
344                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
345requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
346                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
347run_test "TLS 1.3 m->m: resumption, early data cli-default/srv-enabled" \
348         "$P_SRV debug_level=4 early_data=1 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key" \
349         "$P_CLI debug_level=3 reco_mode=1 reconnect=1" \
350         0 \
351         -c "Protocol is TLSv1.3" \
352         -c "Saving session for reuse... ok" \
353         -c "Reconnecting with saved session" \
354         -c "HTTP/1.0 200 OK" \
355         -c "received max_early_data_size" \
356         -c "NewSessionTicket: early_data(42) extension received." \
357         -C "ClientHello: early_data(42) extension exists." \
358         -C "EncryptedExtensions: early_data(42) extension received." \
359         -C "bytes of early data written" \
360         -s "Protocol is TLSv1.3" \
361         -s "key exchange mode: psk" \
362         -s "Select PSK ciphersuite" \
363         -s "Sent max_early_data_size" \
364         -s "NewSessionTicket: early_data(42) extension exists." \
365         -S "ClientHello: early_data(42) extension exists." \
366         -S "EncryptedExtensions: early_data(42) extension exists." \
367         -S "early data bytes read"
368
369requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
370                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
371                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
372                             MBEDTLS_SSL_EARLY_DATA MBEDTLS_DEBUG_C \
373                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
374requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
375                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
376run_test "TLS 1.3 m->m: resumption, early data cli-disabled/srv-enabled" \
377         "$P_SRV debug_level=4 early_data=1 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key" \
378         "$P_CLI debug_level=3 early_data=0 reco_mode=1 reconnect=1" \
379         0 \
380         -c "Protocol is TLSv1.3" \
381         -c "Saving session for reuse... ok" \
382         -c "Reconnecting with saved session" \
383         -c "HTTP/1.0 200 OK" \
384         -c "received max_early_data_size" \
385         -c "NewSessionTicket: early_data(42) extension received." \
386         -C "ClientHello: early_data(42) extension exists." \
387         -C "EncryptedExtensions: early_data(42) extension received." \
388         -C "bytes of early data written" \
389         -s "Protocol is TLSv1.3" \
390         -s "key exchange mode: psk" \
391         -s "Select PSK ciphersuite" \
392         -s "Sent max_early_data_size" \
393         -s "NewSessionTicket: early_data(42) extension exists." \
394         -S "ClientHello: early_data(42) extension exists." \
395         -S "EncryptedExtensions: early_data(42) extension exists." \
396         -S "early data bytes read"
397
398requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
399                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
400                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
401                             MBEDTLS_DEBUG_C \
402                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
403requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
404                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
405run_test "TLS 1.3 m->m: resumption fails, ticket lifetime too long (7d + 1s)" \
406         "$P_SRV debug_level=2 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key ticket_timeout=604801 tickets=1" \
407         "$P_CLI reco_mode=1 reconnect=1" \
408         1 \
409         -c "Protocol is TLSv1.3" \
410         -C "Saving session for reuse... ok" \
411         -c "Reconnecting with saved session... failed" \
412         -S "Protocol is TLSv1.3" \
413         -S "key exchange mode: psk" \
414         -S "Select PSK ciphersuite" \
415         -s "Ticket lifetime (604801) is greater than 7 days."
416
417requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
418                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
419                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
420                             MBEDTLS_DEBUG_C \
421                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
422requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
423                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
424run_test "TLS 1.3 m->m: resumption fails, ticket lifetime=0" \
425         "$P_SRV debug_level=2 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key ticket_timeout=0 tickets=1" \
426         "$P_CLI debug_level=2 reco_mode=1 reconnect=1" \
427         1 \
428         -c "Protocol is TLSv1.3" \
429         -C "Saving session for reuse... ok" \
430         -c "Discard new session ticket" \
431         -c "Reconnecting with saved session... failed" \
432         -s "Protocol is TLSv1.3" \
433         -S "key exchange mode: psk" \
434         -S "Select PSK ciphersuite"
435
436requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
437                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
438                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
439                             MBEDTLS_DEBUG_C \
440                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
441requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
442                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
443run_test "TLS 1.3 m->m: resumption fails, servername check failed" \
444         "$P_SRV debug_level=2 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key \
445            sni=localhost,../framework/data_files/server2.crt,../framework/data_files/server2.key,-,-,-,polarssl.example,../framework/data_files/server1-nospace.crt,../framework/data_files/server1.key,-,-,-" \
446         "$P_CLI debug_level=4 server_name=localhost reco_server_name=remote reco_mode=1 reconnect=1" \
447         1 \
448         -c "Protocol is TLSv1.3" \
449         -c "Saving session for reuse... ok" \
450         -c "Reconnecting with saved session" \
451         -c "Hostname mismatch the session ticket, disable session resumption." \
452         -s "Protocol is TLSv1.3" \
453         -S "key exchange mode: psk" \
454         -S "Select PSK ciphersuite"
455
456requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
457                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
458                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
459                             MBEDTLS_DEBUG_C \
460                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
461requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
462                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
463run_test "TLS 1.3 m->m: resumption fails, ticket auth failed." \
464         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key tickets=8 dummy_ticket=1" \
465         "$P_CLI reco_mode=1 reconnect=1" \
466         0 \
467         -c "Protocol is TLSv1.3" \
468         -s "key exchange mode: ephemeral" \
469         -s "Protocol is TLSv1.3" \
470         -c "Saving session for reuse... ok" \
471         -c "Reconnecting with saved session" \
472         -S "key exchange mode: psk" \
473         -s "ticket is not authentic" \
474         -S "ticket is expired" \
475         -S "Invalid ticket creation time" \
476         -S "Ticket age exceeds limitation" \
477         -S "Ticket age outside tolerance window"
478
479requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
480                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
481                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
482                             MBEDTLS_DEBUG_C \
483                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
484requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
485                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
486run_test "TLS 1.3 m->m: resumption fails, ticket expired." \
487         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key tickets=8 dummy_ticket=2" \
488         "$P_CLI reco_mode=1 reconnect=1" \
489         0 \
490         -c "Protocol is TLSv1.3" \
491         -s "key exchange mode: ephemeral" \
492         -s "Protocol is TLSv1.3" \
493         -c "Saving session for reuse... ok" \
494         -c "Reconnecting with saved session" \
495         -S "key exchange mode: psk" \
496         -S "ticket is not authentic" \
497         -s "ticket is expired" \
498         -S "Invalid ticket creation time" \
499         -S "Ticket age exceeds limitation" \
500         -S "Ticket age outside tolerance window"
501
502requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
503                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
504                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
505                             MBEDTLS_DEBUG_C \
506                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
507requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
508                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
509run_test "TLS 1.3 m->m: resumption fails, invalid creation time." \
510         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key tickets=8 dummy_ticket=3" \
511         "$P_CLI debug_level=4 reco_mode=1 reconnect=1" \
512         0 \
513         -c "Protocol is TLSv1.3" \
514         -s "key exchange mode: ephemeral" \
515         -s "Protocol is TLSv1.3" \
516         -c "Saving session for reuse... ok" \
517         -c "Reconnecting with saved session" \
518         -S "key exchange mode: psk" \
519         -S "ticket is not authentic" \
520         -S "ticket is expired" \
521         -s "Invalid ticket creation time" \
522         -S "Ticket age exceeds limitation" \
523         -S "Ticket age outside tolerance window"
524
525requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
526                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
527                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
528                             MBEDTLS_DEBUG_C \
529                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
530requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
531                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
532run_test "TLS 1.3 m->m: resumption fails, ticket expired, too old" \
533         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key tickets=8 dummy_ticket=4" \
534         "$P_CLI debug_level=4 reco_mode=1 reconnect=1" \
535         0 \
536         -c "Protocol is TLSv1.3" \
537         -s "key exchange mode: ephemeral" \
538         -s "Protocol is TLSv1.3" \
539         -c "Saving session for reuse... ok" \
540         -c "Reconnecting with saved session" \
541         -S "key exchange mode: psk" \
542         -S "ticket is not authentic" \
543         -S "ticket is expired" \
544         -S "Invalid ticket creation time" \
545         -s "Ticket age exceeds limitation" \
546         -S "Ticket age outside tolerance window"
547
548requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
549                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
550                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
551                             MBEDTLS_DEBUG_C \
552                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
553requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
554                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
555run_test "TLS 1.3 m->m: resumption fails, age outside tolerance window, too young" \
556         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key tickets=8 dummy_ticket=5" \
557         "$P_CLI debug_level=4 reco_mode=1 reconnect=1" \
558         0 \
559         -c "Protocol is TLSv1.3" \
560         -s "key exchange mode: ephemeral" \
561         -s "Protocol is TLSv1.3" \
562         -c "Saving session for reuse... ok" \
563         -c "Reconnecting with saved session" \
564         -S "key exchange mode: psk" \
565         -S "ticket is not authentic" \
566         -S "ticket is expired" \
567         -S "Invalid ticket creation time" \
568         -S "Ticket age exceeds limitation" \
569         -s "Ticket age outside tolerance window"
570
571requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
572                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
573                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
574                             MBEDTLS_DEBUG_C \
575                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
576requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
577                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
578run_test "TLS 1.3 m->m: resumption fails, age outside tolerance window, too old" \
579         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key tickets=8 dummy_ticket=6" \
580         "$P_CLI debug_level=4 reco_mode=1 reconnect=1" \
581         0 \
582         -c "Protocol is TLSv1.3" \
583         -s "key exchange mode: ephemeral" \
584         -s "Protocol is TLSv1.3" \
585         -c "Saving session for reuse... ok" \
586         -c "Reconnecting with saved session" \
587         -S "key exchange mode: psk" \
588         -S "ticket is not authentic" \
589         -S "ticket is expired" \
590         -S "Invalid ticket creation time" \
591         -S "Ticket age exceeds limitation" \
592         -s "Ticket age outside tolerance window"
593
594requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
595                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
596                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
597                             MBEDTLS_DEBUG_C \
598                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED \
599                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
600run_test "TLS 1.3 m->m: resumption fails, cli/tkt kex modes psk/none" \
601         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key dummy_ticket=7" \
602         "$P_CLI debug_level=4 tls13_kex_modes=psk_or_ephemeral reconnect=1" \
603         0 \
604         -c "Protocol is TLSv1.3" \
605         -s "key exchange mode: ephemeral" \
606         -S "key exchange mode: psk_ephemeral" \
607         -S "key exchange mode: psk$" \
608         -s "found matched identity" \
609         -s "No suitable PSK key exchange mode" \
610         -s "No usable PSK or ticket"
611
612requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
613                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
614                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
615                             MBEDTLS_DEBUG_C \
616                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED \
617                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
618run_test "TLS 1.3 m->m: ephemeral over psk resumption, cli/tkt kex modes psk/psk" \
619         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key dummy_ticket=8" \
620         "$P_CLI debug_level=4 tls13_kex_modes=psk_or_ephemeral reconnect=1" \
621         0 \
622         -c "Protocol is TLSv1.3" \
623         -s "key exchange mode: ephemeral" \
624         -S "key exchange mode: psk_ephemeral" \
625         -S "key exchange mode: psk$" \
626         -s "found matched identity" \
627         -S "No suitable PSK key exchange mode" \
628         -S "No usable PSK or ticket"
629
630requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
631                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
632                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
633                             MBEDTLS_DEBUG_C \
634                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED \
635                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
636run_test "TLS 1.3 m->m: resumption fails, cli/tkt kex modes psk/psk_ephemeral" \
637         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key dummy_ticket=9" \
638         "$P_CLI debug_level=4 tls13_kex_modes=psk_or_ephemeral reconnect=1" \
639         0 \
640         -c "Protocol is TLSv1.3" \
641         -s "key exchange mode: ephemeral" \
642         -S "key exchange mode: psk_ephemeral" \
643         -S "key exchange mode: psk$" \
644         -s "found matched identity" \
645         -s "No suitable PSK key exchange mode" \
646         -s "No usable PSK or ticket"
647
648requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
649                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
650                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
651                             MBEDTLS_DEBUG_C \
652                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED \
653                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
654run_test "TLS 1.3 m->m: ephemeral over psk resumption, cli/tkt kex modes psk/psk_all" \
655         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key dummy_ticket=10" \
656         "$P_CLI debug_level=4 tls13_kex_modes=psk_or_ephemeral reconnect=1" \
657         0 \
658         -c "Protocol is TLSv1.3" \
659         -s "key exchange mode: ephemeral" \
660         -S "key exchange mode: psk_ephemeral" \
661         -S "key exchange mode: psk$" \
662         -s "found matched identity" \
663         -S "No suitable PSK key exchange mode" \
664         -S "No usable PSK or ticket"
665
666requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
667                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
668                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
669                             MBEDTLS_DEBUG_C \
670                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED \
671                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
672run_test "TLS 1.3 m->m: resumption fails, cli/tkt kex modes psk_ephemeral/none" \
673         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key dummy_ticket=7" \
674         "$P_CLI debug_level=4 tls13_kex_modes=ephemeral_all reconnect=1" \
675         0 \
676         -c "Protocol is TLSv1.3" \
677         -s "key exchange mode: ephemeral" \
678         -S "key exchange mode: psk_ephemeral" \
679         -S "key exchange mode: psk$" \
680         -s "found matched identity" \
681         -s "No suitable PSK key exchange mode" \
682         -s "No usable PSK or ticket"
683
684requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
685                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
686                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
687                             MBEDTLS_DEBUG_C \
688                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED \
689                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
690run_test "TLS 1.3 m->m: resumption fails, cli/tkt kex modes psk_ephemeral/psk" \
691         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key dummy_ticket=8" \
692         "$P_CLI debug_level=4 tls13_kex_modes=ephemeral_all reconnect=1" \
693         0 \
694         -c "Protocol is TLSv1.3" \
695         -s "key exchange mode: ephemeral" \
696         -S "key exchange mode: psk_ephemeral" \
697         -S "key exchange mode: psk$" \
698         -s "found matched identity" \
699         -s "No suitable PSK key exchange mode" \
700         -s "No usable PSK or ticket"
701
702requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
703                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
704                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
705                             MBEDTLS_DEBUG_C \
706                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED \
707                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
708run_test "TLS 1.3 m->m: resumption, cli/tkt kex modes psk_ephemeral/psk_ephemeral" \
709         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key dummy_ticket=9" \
710         "$P_CLI debug_level=4 tls13_kex_modes=ephemeral_all reconnect=1" \
711         0 \
712         -c "Protocol is TLSv1.3" \
713         -s "key exchange mode: ephemeral" \
714         -s "key exchange mode: psk_ephemeral" \
715         -S "key exchange mode: psk$" \
716         -s "found matched identity" \
717         -S "No suitable PSK key exchange mode" \
718         -S "No usable PSK or ticket"
719
720requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
721                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
722                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
723                             MBEDTLS_DEBUG_C \
724                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED \
725                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
726run_test "TLS 1.3 m->m: resumption, cli/tkt kex modes psk_ephemeral/psk_all" \
727         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key dummy_ticket=10" \
728         "$P_CLI debug_level=4 tls13_kex_modes=ephemeral_all reconnect=1" \
729         0 \
730         -c "Protocol is TLSv1.3" \
731         -s "key exchange mode: ephemeral" \
732         -s "key exchange mode: psk_ephemeral" \
733         -S "key exchange mode: psk$" \
734         -s "found matched identity" \
735         -S "No suitable PSK key exchange mode" \
736         -S "No usable PSK or ticket"
737
738requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
739                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
740                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
741                             MBEDTLS_DEBUG_C \
742                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED \
743                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
744                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
745run_test "TLS 1.3 m->m: resumption fails, cli/tkt kex modes psk_all/none" \
746         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key dummy_ticket=7" \
747         "$P_CLI debug_level=4 tls13_kex_modes=all reconnect=1" \
748         0 \
749         -c "Pre-configured PSK number = 1" \
750         -S "sent selected_identity:" \
751         -s "key exchange mode: ephemeral" \
752         -S "key exchange mode: psk_ephemeral" \
753         -S "key exchange mode: psk$" \
754         -s "No suitable PSK key exchange mode" \
755         -s "No usable PSK or ticket"
756
757requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
758                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
759                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
760                             MBEDTLS_DEBUG_C \
761                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED \
762                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
763                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
764run_test "TLS 1.3 m->m: ephemeral over psk resumption, cli/tkt kex modes psk_all/psk" \
765         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key dummy_ticket=8" \
766         "$P_CLI debug_level=4 tls13_kex_modes=all reconnect=1" \
767         0 \
768         -c "Protocol is TLSv1.3" \
769         -s "key exchange mode: ephemeral" \
770         -S "key exchange mode: psk_ephemeral" \
771         -S "key exchange mode: psk$" \
772         -s "found matched identity" \
773         -S "No suitable PSK key exchange mode" \
774         -S "No usable PSK or ticket"
775
776requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
777                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
778                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
779                             MBEDTLS_DEBUG_C \
780                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED \
781                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
782                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
783run_test "TLS 1.3 m->m: resumption, cli/tkt kex modes psk_all/psk_ephemeral" \
784         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key dummy_ticket=9" \
785         "$P_CLI debug_level=4 tls13_kex_modes=all reconnect=1" \
786         0 \
787         -c "Protocol is TLSv1.3" \
788         -s "key exchange mode: ephemeral" \
789         -s "key exchange mode: psk_ephemeral" \
790         -S "key exchange mode: psk$" \
791         -s "found matched identity" \
792         -S "No suitable PSK key exchange mode" \
793         -S "No usable PSK or ticket"
794
795requires_all_configs_enabled MBEDTLS_SSL_PROTO_TLS1_3 \
796                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
797                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
798                             MBEDTLS_DEBUG_C \
799                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED \
800                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
801                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
802run_test "TLS 1.3 m->m: resumption, cli/tkt kex modes psk_all/psk_all" \
803         "$P_SRV debug_level=4 crt_file=../framework/data_files/server5.crt key_file=../framework/data_files/server5.key dummy_ticket=10" \
804         "$P_CLI debug_level=4 tls13_kex_modes=all reconnect=1" \
805         0 \
806         -c "Protocol is TLSv1.3" \
807         -s "key exchange mode: ephemeral" \
808         -s "key exchange mode: psk_ephemeral" \
809         -S "key exchange mode: psk$" \
810         -s "found matched identity" \
811         -S "No suitable PSK key exchange mode" \
812         -S "No usable PSK or ticket"
813
814requires_openssl_tls1_3_with_compatible_ephemeral
815requires_all_configs_enabled MBEDTLS_SSL_CLI_C \
816                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
817                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
818                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
819requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED \
820                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
821run_test    "TLS 1.3 m->O: resumption" \
822            "$O_NEXT_SRV -msg -tls1_3 -no_resume_ephemeral -no_cache --num_tickets 1" \
823            "$P_CLI reco_mode=1 reconnect=1" \
824            0 \
825            -c "Protocol is TLSv1.3" \
826            -c "Saving session for reuse... ok" \
827            -c "Reconnecting with saved session... ok" \
828            -c "HTTP/1.0 200 ok"
829
830requires_openssl_tls1_3_with_compatible_ephemeral
831requires_all_configs_enabled MBEDTLS_SSL_CLI_C \
832                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
833                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
834requires_config_disabled MBEDTLS_SSL_SESSION_TICKETS
835run_test    "TLS 1.3 m->O: resumption fails, no ticket support" \
836            "$O_NEXT_SRV -msg -tls1_3 -no_resume_ephemeral -no_cache --num_tickets 1" \
837            "$P_CLI debug_level=3 reco_mode=1 reconnect=1" \
838            1 \
839            -c "Protocol is TLSv1.3" \
840            -C "Saving session for reuse... ok" \
841            -C "Reconnecting with saved session... ok" \
842            -c "Ignoring NewSessionTicket, not supported."
843
844requires_openssl_tls1_3_with_compatible_ephemeral
845requires_all_configs_enabled MBEDTLS_SSL_CLI_C \
846                             MBEDTLS_SSL_SESSION_TICKETS \
847                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
848                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
849run_test    "TLS 1.3 m->O: resumption fails, ticket handling disabled" \
850            "$O_NEXT_SRV -msg -tls1_3 -no_resume_ephemeral -no_cache --num_tickets 1" \
851            "$P_CLI debug_level=3 new_session_tickets=0 reco_mode=1 reconnect=1" \
852            1 \
853            -c "Protocol is TLSv1.3" \
854            -C "Saving session for reuse... ok" \
855            -C "Reconnecting with saved session... ok" \
856            -c "Ignoring NewSessionTicket, handling disabled."
857
858# No early data m->O tests for the time being. The option -early_data is needed
859# to enable early data on OpenSSL server and it is not compatible with the
860# -www option we usually use for testing with OpenSSL server (see
861# O_NEXT_SRV_EARLY_DATA definition). In this configuration when running the
862# ephemeral then ticket based scenario we use for early data testing the first
863# handshake fails. The following skipped test is here to illustrate the kind
864# of testing we would like to do.
865skip_next_test
866requires_openssl_tls1_3_with_compatible_ephemeral
867requires_all_configs_enabled MBEDTLS_SSL_CLI_C MBEDTLS_DEBUG_C \
868                             MBEDTLS_SSL_EARLY_DATA \
869                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
870                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
871requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED \
872                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
873run_test    "TLS 1.3 m->O: resumption with early data" \
874            "$O_NEXT_SRV_EARLY_DATA -msg -tls1_3 -no_resume_ephemeral -no_cache --num_tickets 1" \
875            "$P_CLI debug_level=3 early_data=1 reco_mode=1 reconnect=1" \
876             0 \
877            -c "Protocol is TLSv1.3" \
878            -c "Saving session for reuse... ok" \
879            -c "Reconnecting with saved session" \
880            -c "HTTP/1.0 200 OK" \
881            -c "received max_early_data_size: 16384" \
882            -c "NewSessionTicket: early_data(42) extension received." \
883            -c "ClientHello: early_data(42) extension exists." \
884            -c "EncryptedExtensions: early_data(42) extension received." \
885            -c "bytes of early data written" \
886            -s "decrypted early data with length:"
887
888requires_gnutls_tls1_3
889requires_all_configs_enabled MBEDTLS_SSL_CLI_C \
890                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
891                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
892                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
893requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED \
894                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
895run_test    "TLS 1.3 m->G: resumption" \
896            "$G_NEXT_SRV -d 5 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3 --disable-client-cert" \
897            "$P_CLI reco_mode=1 reconnect=1" \
898            0 \
899            -c "Protocol is TLSv1.3" \
900            -c "Saving session for reuse... ok" \
901            -c "Reconnecting with saved session... ok" \
902            -c "HTTP/1.0 200 OK"
903
904requires_gnutls_tls1_3
905requires_all_configs_enabled MBEDTLS_SSL_CLI_C \
906                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
907                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
908requires_config_disabled MBEDTLS_SSL_SESSION_TICKETS
909run_test    "TLS 1.3 m->G: resumption fails, no ticket support" \
910            "$G_NEXT_SRV -d 5 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3 --disable-client-cert" \
911            "$P_CLI debug_level=3 reco_mode=1 reconnect=1" \
912            1 \
913            -c "Protocol is TLSv1.3" \
914            -C "Saving session for reuse... ok" \
915            -C "Reconnecting with saved session... ok" \
916            -c "Ignoring NewSessionTicket, not supported."
917
918requires_gnutls_tls1_3
919requires_all_configs_enabled MBEDTLS_SSL_CLI_C \
920                             MBEDTLS_SSL_SESSION_TICKETS \
921                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
922                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
923run_test    "TLS 1.3 m->G: resumption fails, ticket handling disabled" \
924            "$G_NEXT_SRV -d 5 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3 --disable-client-cert" \
925            "$P_CLI debug_level=3 new_session_tickets=0 reco_mode=1 reconnect=1" \
926            1 \
927            -c "Protocol is TLSv1.3" \
928            -C "Saving session for reuse... ok" \
929            -C "Reconnecting with saved session... ok" \
930            -c "Ignoring NewSessionTicket, handling disabled."
931
932requires_gnutls_tls1_3
933requires_all_configs_enabled MBEDTLS_SSL_CLI_C \
934                             MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
935                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
936                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
937requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED \
938                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
939requires_ciphersuite_enabled TLS1-3-AES-256-GCM-SHA384
940run_test    "TLS 1.3 m->G: resumption with AES-256-GCM-SHA384 only" \
941            "$G_NEXT_SRV -d 5 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3 --disable-client-cert" \
942            "$P_CLI force_ciphersuite=TLS1-3-AES-256-GCM-SHA384 reco_mode=1 reconnect=1" \
943            0 \
944            -c "Protocol is TLSv1.3" \
945            -c "Ciphersuite is TLS1-3-AES-256-GCM-SHA384" \
946            -c "Saving session for reuse... ok" \
947            -c "Reconnecting with saved session... ok" \
948            -c "HTTP/1.0 200 OK"
949
950requires_gnutls_tls1_3
951requires_all_configs_enabled MBEDTLS_SSL_CLI_C MBEDTLS_DEBUG_C \
952                             MBEDTLS_SSL_EARLY_DATA \
953                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
954                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
955requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED \
956                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
957run_test    "TLS 1.3 m->G: resumption with early data" \
958            "$G_NEXT_SRV -d 5 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3 --disable-client-cert \
959                         --earlydata --maxearlydata 16384" \
960            "$P_CLI debug_level=3 early_data=1 reco_mode=1 reconnect=1" \
961            0 \
962            -c "Protocol is TLSv1.3" \
963            -c "Saving session for reuse... ok" \
964            -c "Reconnecting with saved session" \
965            -c "HTTP/1.0 200 OK" \
966            -c "received max_early_data_size: 16384" \
967            -c "NewSessionTicket: early_data(42) extension received." \
968            -c "ClientHello: early_data(42) extension exists." \
969            -c "EncryptedExtensions: early_data(42) extension received." \
970            -c "bytes of early data written" \
971            -s "decrypted early data with length:"
972
973requires_gnutls_tls1_3
974requires_all_configs_enabled MBEDTLS_SSL_CLI_C MBEDTLS_DEBUG_C \
975                             MBEDTLS_SSL_EARLY_DATA \
976                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
977                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
978requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED \
979                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
980requires_ciphersuite_enabled TLS1-3-AES-256-GCM-SHA384
981run_test    "TLS 1.3 m->G: resumption with early data, AES-256-GCM-SHA384 only" \
982            "$G_NEXT_SRV -d 5 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3 --disable-client-cert \
983                         --earlydata --maxearlydata 16384" \
984            "$P_CLI debug_level=3 force_ciphersuite=TLS1-3-AES-256-GCM-SHA384 early_data=1 reco_mode=1 reconnect=1" \
985            0 \
986            -c "Protocol is TLSv1.3" \
987            -c "Ciphersuite is TLS1-3-AES-256-GCM-SHA384" \
988            -c "Saving session for reuse... ok" \
989            -c "Reconnecting with saved session" \
990            -c "HTTP/1.0 200 OK" \
991            -c "received max_early_data_size: 16384" \
992            -c "NewSessionTicket: early_data(42) extension received." \
993            -c "ClientHello: early_data(42) extension exists." \
994            -c "EncryptedExtensions: early_data(42) extension received." \
995            -c "bytes of early data written" \
996            -s "decrypted early data with length:"
997
998requires_gnutls_tls1_3
999requires_all_configs_enabled MBEDTLS_SSL_CLI_C MBEDTLS_DEBUG_C \
1000                             MBEDTLS_SSL_EARLY_DATA \
1001                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
1002                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
1003requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED \
1004                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
1005run_test    "TLS 1.3 m->G: resumption, early data cli-enabled/srv-disabled" \
1006            "$G_NEXT_SRV -d 5 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3:+CIPHER-ALL:+ECDHE-PSK:+PSK --disable-client-cert" \
1007            "$P_CLI debug_level=3 early_data=1 reco_mode=1 reconnect=1" \
1008            0 \
1009            -c "Protocol is TLSv1.3" \
1010            -c "Saving session for reuse... ok" \
1011            -c "Reconnecting with saved session" \
1012            -c "HTTP/1.0 200 OK" \
1013            -C "received max_early_data_size: 16384" \
1014            -C "NewSessionTicket: early_data(42) extension received." \
1015
1016requires_gnutls_tls1_3
1017requires_all_configs_enabled MBEDTLS_SSL_CLI_C MBEDTLS_DEBUG_C \
1018                             MBEDTLS_SSL_EARLY_DATA \
1019                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
1020                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
1021requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED \
1022                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
1023run_test    "TLS 1.3 m->G: resumption, early data cli-default/srv-enabled" \
1024            "$G_NEXT_SRV -d 5 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3 --disable-client-cert \
1025                         --earlydata --maxearlydata 16384" \
1026            "$P_CLI debug_level=3 reco_mode=1 reconnect=1" \
1027            0 \
1028            -c "Protocol is TLSv1.3" \
1029            -c "Saving session for reuse... ok" \
1030            -c "Reconnecting with saved session" \
1031            -c "HTTP/1.0 200 OK" \
1032            -c "received max_early_data_size: 16384" \
1033            -c "NewSessionTicket: early_data(42) extension received." \
1034            -C "ClientHello: early_data(42) extension exists." \
1035
1036requires_gnutls_tls1_3
1037requires_all_configs_enabled MBEDTLS_SSL_CLI_C MBEDTLS_DEBUG_C \
1038                             MBEDTLS_SSL_EARLY_DATA \
1039                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
1040                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
1041requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED \
1042                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
1043run_test    "TLS 1.3 m->G: resumption, early data cli-disabled/srv-enabled" \
1044            "$G_NEXT_SRV -d 5 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3 --disable-client-cert \
1045                         --earlydata --maxearlydata 16384" \
1046            "$P_CLI debug_level=3 early_data=0 reco_mode=1 reconnect=1" \
1047            0 \
1048            -c "Protocol is TLSv1.3" \
1049            -c "Saving session for reuse... ok" \
1050            -c "Reconnecting with saved session" \
1051            -c "HTTP/1.0 200 OK" \
1052            -c "received max_early_data_size: 16384" \
1053            -c "NewSessionTicket: early_data(42) extension received." \
1054            -C "ClientHello: early_data(42) extension exists." \
1055
1056requires_openssl_tls1_3_with_compatible_ephemeral
1057requires_all_configs_enabled MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_SSL_SRV_C \
1058                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
1059                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
1060requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
1061                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
1062# https://github.com/openssl/openssl/issues/10714
1063# Until now, OpenSSL client does not support reconnect.
1064skip_next_test
1065run_test    "TLS 1.3 O->m: resumption" \
1066            "$P_SRV debug_level=2 tickets=1" \
1067            "$O_NEXT_CLI -msg -debug -tls1_3 -reconnect" \
1068            0 \
1069            -s "Protocol is TLSv1.3" \
1070            -s "key exchange mode: psk" \
1071            -s "Select PSK ciphersuite"
1072
1073requires_gnutls_tls1_3
1074requires_all_configs_enabled MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
1075                             MBEDTLS_SSL_SRV_C MBEDTLS_DEBUG_C \
1076                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
1077                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
1078requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
1079                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
1080run_test    "TLS 1.3 G->m: resumption" \
1081            "$P_SRV debug_level=2 tickets=1" \
1082            "$G_NEXT_CLI localhost -d 4 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3 -V -r" \
1083            0 \
1084            -s "Protocol is TLSv1.3" \
1085            -s "key exchange mode: psk" \
1086            -s "Select PSK ciphersuite"
1087
1088requires_gnutls_tls1_3
1089requires_all_configs_enabled MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
1090                             MBEDTLS_SSL_SRV_C MBEDTLS_DEBUG_C \
1091                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
1092                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
1093requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
1094                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
1095requires_ciphersuite_enabled TLS1-3-AES-256-GCM-SHA384
1096# Test the session resumption when the cipher suite for the original session is
1097# TLS1-3-AES-256-GCM-SHA384. In that case, the PSK is 384 bits long and not
1098# 256 bits long as with all the other TLS 1.3 cipher suites.
1099run_test    "TLS 1.3 G->m: resumption with AES-256-GCM-SHA384 only" \
1100            "$P_SRV debug_level=2 tickets=1" \
1101            "$G_NEXT_CLI localhost -d 4 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-256-GCM -V -r" \
1102            0 \
1103            -s "Protocol is TLSv1.3" \
1104            -s "key exchange mode: psk" \
1105            -s "Select PSK ciphersuite: 1302 - TLS1-3-AES-256-GCM-SHA384"
1106
1107EARLY_DATA_INPUT_LEN_BLOCKS=$(( ( $( cat $EARLY_DATA_INPUT | wc -c ) + 31 ) / 32 ))
1108EARLY_DATA_INPUT_LEN=$(( $EARLY_DATA_INPUT_LEN_BLOCKS * 32 ))
1109
1110requires_gnutls_tls1_3
1111requires_all_configs_enabled MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
1112                             MBEDTLS_SSL_SRV_C MBEDTLS_SSL_EARLY_DATA MBEDTLS_DEBUG_C \
1113                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
1114                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
1115requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
1116                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
1117run_test "TLS 1.3 G->m: resumption with early data" \
1118         "$P_SRV debug_level=4 tickets=1 early_data=1 max_early_data_size=$EARLY_DATA_INPUT_LEN" \
1119         "$G_NEXT_CLI localhost -d 4 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3 -V -r \
1120                      --earlydata $EARLY_DATA_INPUT" \
1121         0 \
1122         -s "Protocol is TLSv1.3" \
1123         -s "key exchange mode: psk" \
1124         -s "Select PSK ciphersuite" \
1125         -s "Sent max_early_data_size=$EARLY_DATA_INPUT_LEN"        \
1126         -s "NewSessionTicket: early_data(42) extension exists."    \
1127         -s "ClientHello: early_data(42) extension exists."         \
1128         -s "EncryptedExtensions: early_data(42) extension exists." \
1129         -s "$( head -1 $EARLY_DATA_INPUT )"                        \
1130         -s "$( tail -1 $EARLY_DATA_INPUT )"                        \
1131         -s "200 early data bytes read"                             \
1132         -s "106 early data bytes read"
1133
1134requires_gnutls_tls1_3
1135requires_all_configs_enabled MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
1136                             MBEDTLS_SSL_SRV_C MBEDTLS_SSL_EARLY_DATA MBEDTLS_DEBUG_C \
1137                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
1138                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
1139requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
1140                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
1141requires_ciphersuite_enabled TLS1-3-AES-256-GCM-SHA384
1142run_test "TLS 1.3 G->m: resumption with early data, AES-256-GCM-SHA384 only" \
1143         "$P_SRV debug_level=4 tickets=1 early_data=1 max_early_data_size=$EARLY_DATA_INPUT_LEN" \
1144         "$G_NEXT_CLI localhost -d 4 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-256-GCM -V -r \
1145                      --earlydata $EARLY_DATA_INPUT" \
1146         0 \
1147         -s "Protocol is TLSv1.3" \
1148         -s "key exchange mode: psk" \
1149         -s "Select PSK ciphersuite: 1302 - TLS1-3-AES-256-GCM-SHA384" \
1150         -s "Sent max_early_data_size=$EARLY_DATA_INPUT_LEN"        \
1151         -s "NewSessionTicket: early_data(42) extension exists."    \
1152         -s "ClientHello: early_data(42) extension exists."         \
1153         -s "EncryptedExtensions: early_data(42) extension exists." \
1154         -s "$( head -1 $EARLY_DATA_INPUT )"                        \
1155         -s "$( tail -1 $EARLY_DATA_INPUT )"                        \
1156         -s "200 early data bytes read"                             \
1157         -s "106 early data bytes read"
1158
1159# The Mbed TLS server does not allow early data for the ticket it sends but
1160# the GnuTLS indicates early data anyway when resuming with the ticket and
1161# sends early data. The Mbed TLS server does not expect early data in
1162# association with the ticket thus it eventually fails the resumption
1163# handshake. The GnuTLS client behavior is not compliant here with the TLS 1.3
1164# specification and thus its behavior may change in following versions.
1165requires_gnutls_tls1_3
1166requires_all_configs_enabled MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
1167                             MBEDTLS_SSL_SRV_C MBEDTLS_SSL_EARLY_DATA MBEDTLS_DEBUG_C \
1168                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
1169                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
1170requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
1171                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
1172run_test "TLS 1.3 G->m: resumption, early data cli-enabled/srv-default" \
1173         "$P_SRV debug_level=4 tickets=1" \
1174         "$G_NEXT_CLI localhost -d 4 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3 -V -r \
1175                      --earlydata $EARLY_DATA_INPUT" \
1176         1 \
1177         -s "Protocol is TLSv1.3" \
1178         -s "key exchange mode: psk" \
1179         -s "Select PSK ciphersuite" \
1180         -S "Sent max_early_data_size" \
1181         -S "NewSessionTicket: early_data(42) extension exists." \
1182         -s "ClientHello: early_data(42) extension exists." \
1183         -s "EarlyData: rejected, feature disabled in server configuration." \
1184         -S "EncryptedExtensions: early_data(42) extension exists." \
1185         -s "EarlyData: deprotect and discard app data records" \
1186         -s "EarlyData: Too much early data received"
1187
1188# The Mbed TLS server does not allow early data for the ticket it sends but
1189# the GnuTLS indicates early data anyway when resuming with the ticket and
1190# sends early data. The Mbed TLS server does not expect early data in
1191# association with the ticket thus it eventually fails the resumption
1192# handshake. The GnuTLS client behavior is not compliant here with the TLS 1.3
1193# specification and thus its behavior may change in following versions.
1194requires_gnutls_tls1_3
1195requires_all_configs_enabled MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
1196                             MBEDTLS_SSL_SRV_C MBEDTLS_SSL_EARLY_DATA MBEDTLS_DEBUG_C \
1197                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
1198                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
1199requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
1200                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
1201run_test "TLS 1.3 G->m: resumption, early data cli-enabled/srv-disabled" \
1202         "$P_SRV debug_level=4 tickets=1 early_data=0" \
1203         "$G_NEXT_CLI localhost -d 4 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3 -V -r \
1204                      --earlydata $EARLY_DATA_INPUT" \
1205         1 \
1206         -s "Protocol is TLSv1.3" \
1207         -s "key exchange mode: psk" \
1208         -s "Select PSK ciphersuite" \
1209         -S "Sent max_early_data_size" \
1210         -S "NewSessionTicket: early_data(42) extension exists." \
1211         -s "ClientHello: early_data(42) extension exists." \
1212         -s "EarlyData: rejected, feature disabled in server configuration." \
1213         -S "EncryptedExtensions: early_data(42) extension exists." \
1214         -s "EarlyData: deprotect and discard app data records" \
1215         -s "EarlyData: Too much early data received"
1216
1217requires_gnutls_tls1_3
1218requires_all_configs_enabled MBEDTLS_SSL_SESSION_TICKETS MBEDTLS_HAVE_TIME \
1219                             MBEDTLS_SSL_SRV_C MBEDTLS_SSL_EARLY_DATA MBEDTLS_DEBUG_C \
1220                             MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE \
1221                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
1222requires_any_configs_enabled MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
1223                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
1224run_test "TLS 1.3 G->m: resumption, early data cli-disabled/srv-enabled" \
1225         "$P_SRV debug_level=4 tickets=1 early_data=1" \
1226         "$G_NEXT_CLI localhost -d 4 --priority=NORMAL:-VERS-ALL:+VERS-TLS1.3 -V -r" \
1227         0 \
1228         -s "Protocol is TLSv1.3" \
1229         -s "key exchange mode: psk" \
1230         -s "Select PSK ciphersuite" \
1231         -s "Sent max_early_data_size" \
1232         -s "NewSessionTicket: early_data(42) extension exists." \
1233         -S "ClientHello: early_data(42) extension exists." \
1234         -S "EncryptedExtensions: early_data(42) extension exists."
1235
1236requires_all_configs_enabled MBEDTLS_SSL_EARLY_DATA MBEDTLS_SSL_SESSION_TICKETS \
1237                             MBEDTLS_SSL_CLI_C MBEDTLS_SSL_SRV_C \
1238                             MBEDTLS_DEBUG_C MBEDTLS_HAVE_TIME \
1239                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
1240                             MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
1241run_test "TLS 1.3 m->m: Ephemeral over PSK kex with early data enabled" \
1242         "$P_SRV force_version=tls13 debug_level=4 early_data=1 max_early_data_size=1024" \
1243         "$P_CLI debug_level=4 early_data=1 tls13_kex_modes=psk_or_ephemeral reco_mode=1 reconnect=1" \
1244         0 \
1245         -s "key exchange mode: ephemeral" \
1246         -S "key exchange mode: psk" \
1247         -s "found matched identity" \
1248         -s "EarlyData: rejected, not a session resumption" \
1249         -C "EncryptedExtensions: early_data(42) extension exists."
1250