blob: 8fca923e06e53201f7e6a68d8ac78591a9ddada7 [file] [log] [blame]
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +01001# (Minimal) ClientHello breakdown:
2# 160303rlrl - record header, 2-byte record contents len
3# 01hlhlhl - handshake header, 3-byte handshake message len
4# 0303 - protocol version: 1.2
5# 0123456789abcdef (repeated, 4 times total) - 32-byte "random"
6# 00 - session ID (empty)
7# 0002cvcv - ciphersuite list: 2-byte len + list of 2-byte values (see below)
8# 0100 - compression methods: 1-byte len then "null" (only legal value now)
9# [then end, or extensions, see notes below]
10# elel - 2-byte extensions length
11# ...
12# 000a - elliptic_curves aka supported_groups
13# 0004 - extension length
14# 0002 - length of named_curve_list / named_group_list
15# 0017 - secp256r1 aka NIST P-256
16# ...
17# 002b - supported version (for TLS 1.3)
18# 0003 - extension length
19# 02 - length of versions
20# 0304 - TLS 1.3 ("SSL 3.4")
21# ...
22# 000d - signature algorithms
23# 0004 - extension length
24# 0002 - SignatureSchemeList length
25# 0403 - ecdsa_secp256r1_sha256
26# ...
27# 0033 - key share
28# 0002 - extension length
29# 0000 - length of client_shares (empty is valid)
30#
31# Note: currently our TLS "1.3 or 1.2" code requires extension length to be
32# present even it it's 0. This is not strictly compliant but doesn't matter
33# much in practice as these days everyone wants to use signature_algorithms
34# (for hashes better than SHA-1), secure_renego (even if you have renego
35# disabled), and most people want either ECC or PSK related extensions.
36# See https://github.com/Mbed-TLS/mbedtls/issues/9963
37#
38# Also, currently we won't negotiate ECC ciphersuites unless at least the
39# supported_groups extension is present, see
40# https://github.com/Mbed-TLS/mbedtls/issues/7458
41#
42# For TLS 1.3 with ephemeral key exchange, mandatory extensions are:
43# - supported versions (as for all of TLS 1.3)
44# - supported groups
45# - key share
46# - signature algorithms
47# (see ssl_tls13_client_hello_has_exts_for_ephemeral_key_exchange()).
48#
49# Note: cccc is currently not assigned, so can be used get a consistent
50# "no matching ciphersuite" behaviour regardless of the configuration.
51# c02b is MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (1.2)
52# 1301 is MBEDTLS_TLS1_3_AES_128_GCM_SHA256 (1.3)
53
54# See "ClientHello breakdown" above
55# MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 with secp256r1
56Inject ClientHello - TLS 1.2 good (for reference)
57depends_on:MBEDTLS_SSL_PROTO_TLS1_2:MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_MD_CAN_SHA1
Manuel Pégourié-Gonnard43a04e72025-03-11 12:12:51 +010058inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"16030300370100003303030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef000002c02b01000008000a000400020017":"<= parse client hello":0
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +010059
60# See "ClientHello breakdown" above
61# Same as the above test with s/c02b/cccc/ as the ciphersuite
62Inject ClientHello - TLS 1.2 unknown ciphersuite (for reference)
63depends_on:MBEDTLS_SSL_PROTO_TLS1_2:MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_MD_CAN_SHA1
64inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"160303002f0100002b03030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef000002cccc01000000":"got no ciphersuites in common":MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE
65
66# See "ClientHello breakdown" above
67# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
68Inject ClientHello - TLS 1.3 good (for reference)
69depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
Manuel Pégourié-Gonnard43a04e72025-03-11 12:12:51 +010070inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"160303004c0100004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d000400020403003300020000":"key exchange mode\: ephemeral":0
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +010071
72# See "ClientHello breakdown" above
73# Same as the above test with s/1301/cccc/ as the ciphersuite
74Inject ClientHello - TLS 1.3 unknown ciphersuite (for reference)
75depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
76inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"160303004c0100004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef000002cccc0100001d000a000400020017002b0003020304000d000400020403003300020000":"No matched ciphersuite":MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE
77
78# See "ClientHello breakdown" above
79# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
Manuel Pégourié-Gonnardb59caea2025-03-11 10:17:51 +010080# The purpose of this test case is to ensure nothing bad happens when the
81# connection is closed while we're waiting for more fragments.
82Inject ClientHello - TLS 1.3 4 + 71 then EOF (missing 1 byte)
83depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
Manuel Pégourié-Gonnard43a04e72025-03-11 12:12:51 +010084inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"160303000401000048160303004703030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d0004000204030033000200":"waiting for more handshake fragments":MBEDTLS_ERR_SSL_WANT_READ
Manuel Pégourié-Gonnardb59caea2025-03-11 10:17:51 +010085
86# See "ClientHello breakdown" above
87# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
88# The purpose of this test case is to ensure nothing bad happens when the
89# connection is closed while we're waiting for more fragments.
90Inject ClientHello - TLS 1.3 4 then EOF (missing 72 bytes)
91depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
Manuel Pégourié-Gonnard43a04e72025-03-11 12:12:51 +010092inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"160303000401000048":"waiting for more handshake fragments":MBEDTLS_ERR_SSL_WANT_READ
Manuel Pégourié-Gonnardb59caea2025-03-11 10:17:51 +010093
94# See "ClientHello breakdown" above
95# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +010096Inject ClientHello - TLS 1.3 fragmented 4 + 72 OK
97depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
Manuel Pégourié-Gonnard43a04e72025-03-11 12:12:51 +010098inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"160303000401000048160303004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d000400020403003300020000":"key exchange mode\: ephemeral":0
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +010099
100# See "ClientHello breakdown" above
101# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
102Inject ClientHello - TLS 1.3 fragmented 3 + 73 rejected
103depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
104inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"160303000301000016030300494803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d000400020403003300020000":"handshake message too short":MBEDTLS_ERR_SSL_INVALID_RECORD
105
106# See "ClientHello breakdown" above
107# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
108Inject ClientHello - TLS 1.3 fragmented 2 + 74 rejected
109depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
110inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"16030300020100160303004a004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d000400020403003300020000":"handshake message too short":MBEDTLS_ERR_SSL_INVALID_RECORD
111
112# See "ClientHello breakdown" above
113# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
114Inject ClientHello - TLS 1.3 fragmented 1 + 75 rejected
115depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
116inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"160303000101160303004b00004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d000400020403003300020000":"handshake message too short":MBEDTLS_ERR_SSL_INVALID_RECORD
117
118# See "ClientHello breakdown" above
119# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
120Inject ClientHello - TLS 1.3 fragmented 0 + 76 rejected
121depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
122inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"1603030000160303004c0100004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d000400020403003300020000":"ssl_get_next_record() returned":MBEDTLS_ERR_SSL_INVALID_RECORD
123
124# See "ClientHello breakdown" above
125# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
126Inject ClientHello - TLS 1.3 fragmented 72 + 4 OK
127depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
Manuel Pégourié-Gonnard43a04e72025-03-11 12:12:51 +0100128inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"16030300480100004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d0004000204030033160303000400020000":"key exchange mode\: ephemeral":0
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +0100129
130# See "ClientHello breakdown" above
131# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
132Inject ClientHello - TLS 1.3 fragmented 73 + 3 OK
133depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
Manuel Pégourié-Gonnard43a04e72025-03-11 12:12:51 +0100134inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"16030300490100004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d0004000204030033001603030003020000":"key exchange mode\: ephemeral":0
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +0100135
136# See "ClientHello breakdown" above
137# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
138Inject ClientHello - TLS 1.3 fragmented 74 + 2 OK
139depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
Manuel Pégourié-Gonnard43a04e72025-03-11 12:12:51 +0100140inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"160303004a0100004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d0004000204030033000216030300020000":"key exchange mode\: ephemeral":0
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +0100141
142# See "ClientHello breakdown" above
143# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
144Inject ClientHello - TLS 1.3 fragmented 73 + 1 OK
145depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
Manuel Pégourié-Gonnard43a04e72025-03-11 12:12:51 +0100146inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"160303004b0100004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d0004000204030033000200160303000100":"key exchange mode\: ephemeral":0
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +0100147
148# See "ClientHello breakdown" above
149# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
150Inject ClientHello - TLS 1.3 fragmented 4 + appdata + 72 rejected
151depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
Manuel Pégourié-Gonnardc6cf7e52025-03-05 12:52:18 +0100152inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"16030300040100004817030300020102160303004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d000400020403003300020000":"non-handshake message in the middle of a fragmented handshake message":MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +0100153
154# See "ClientHello breakdown" above
155# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
Manuel Pégourié-Gonnardc6cf7e52025-03-05 12:52:18 +0100156Inject ClientHello - TLS 1.3 fragmented 4 + alert(warn) + 72 rejected
157depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
158inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"1603030004010000481503030002015a160303004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d000400020403003300020000":"non-handshake message in the middle of a fragmented handshake message":MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +0100159
160# See "ClientHello breakdown" above
161# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
162Inject ClientHello - TLS 1.3 fragmented 4 + alert(fatal) + 72 rejected
163depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
Manuel Pégourié-Gonnardc6cf7e52025-03-05 12:52:18 +0100164inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"1603030004010000481503030002025a160303004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d000400020403003300020000":"non-handshake message in the middle of a fragmented handshake message":MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +0100165
166# See "ClientHello breakdown" above
167# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
Manuel Pégourié-Gonnardc6cf7e52025-03-05 12:52:18 +0100168Inject ClientHello - TLS 1.3 fragmented 4 + CCS + 72 rejected
169depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
170inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"160303000401000048140303000101160303004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d000400020403003300020000":"non-handshake message in the middle of a fragmented handshake message":MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +0100171
172# See "ClientHello breakdown" above
173# ephemeral with secp256r1 + MBEDTLS_TLS1_3_AES_128_GCM_SHA256
174Inject ClientHello - TLS 1.3 fragmented 4 + invalid type + 72 rejected
175depends_on:MBEDTLS_SSL_PROTO_TLS1_3:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_HAVE_AES:MBEDTLS_MD_CAN_SHA256:MBEDTLS_SSL_HAVE_GCM:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_SIGN:MBEDTLS_PK_CAN_ECDSA_VERIFY
176inject_client_content_on_the_wire:MBEDTLS_PK_ECDSA:MBEDTLS_SSL_CLIENT_HELLO:"1603030004010000481003030002015a160303004803030123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00000213010100001d000a000400020017002b0003020304000d000400020403003300020000":"unknown record type":MBEDTLS_ERR_SSL_INVALID_RECORD
177
Manuel Pégourié-Gonnard85775102025-03-07 12:36:08 +0100178# The buffer is actually larger than IN_CONTENT_LEN as we leave room for
179# record protection overhead (IV, MAC/tag, padding (up to 256 bytes)), CID...
Manuel Pégourié-Gonnard29073e32025-03-11 10:26:36 +0100180# The maximum size for an unencrypted (and without CID which is DTLS only)
Manuel Pégourié-Gonnard85775102025-03-07 12:36:08 +0100181# handshake message we can hold in the buffer is
182# MBEDTLS_SSL_IN_BUFFER_LEN - MBEDTLS_SSL_HEADER_LEN - 4
183# (the 4 is for the handshake header).
184# However, due to overhead, fragmented messages need to be 5 bytes shorter in
185# order to actually fit (leave room for an extra record header).
186Send large fragmented ClientHello: reassembled 1 byte larger than the buffer
187send_large_fragmented_hello:MBEDTLS_SSL_IN_BUFFER_LEN - MBEDTLS_SSL_HEADER_LEN - 3:0:"requesting more data than fits":MBEDTLS_ERR_SSL_BAD_INPUT_DATA
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +0100188
Manuel Pégourié-Gonnard85775102025-03-07 12:36:08 +0100189Send large fragmented ClientHello: would just fit except for overhead
190send_large_fragmented_hello:MBEDTLS_SSL_IN_BUFFER_LEN - MBEDTLS_SSL_HEADER_LEN - 4:0:"requesting more data than fits":MBEDTLS_ERR_SSL_BAD_INPUT_DATA
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +0100191
Manuel Pégourié-Gonnard85775102025-03-07 12:36:08 +0100192Send large fragmented ClientHello: would fit except for overhead (1)
193send_large_fragmented_hello:MBEDTLS_SSL_IN_BUFFER_LEN - MBEDTLS_SSL_HEADER_LEN - 5:0:"requesting more data than fits":MBEDTLS_ERR_SSL_BAD_INPUT_DATA
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +0100194
Manuel Pégourié-Gonnard85775102025-03-07 12:36:08 +0100195Send large fragmented ClientHello: would fit except for overhead (2)
196send_large_fragmented_hello:MBEDTLS_SSL_IN_BUFFER_LEN - MBEDTLS_SSL_HEADER_LEN - 6:0:"requesting more data than fits":MBEDTLS_ERR_SSL_BAD_INPUT_DATA
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +0100197
Manuel Pégourié-Gonnard85775102025-03-07 12:36:08 +0100198Send large fragmented ClientHello: would fit except for overhead (3)
199send_large_fragmented_hello:MBEDTLS_SSL_IN_BUFFER_LEN - MBEDTLS_SSL_HEADER_LEN - 7:0:"requesting more data than fits":MBEDTLS_ERR_SSL_BAD_INPUT_DATA
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +0100200
Manuel Pégourié-Gonnard85775102025-03-07 12:36:08 +0100201Send large fragmented ClientHello: would fit except for overhead (4)
202send_large_fragmented_hello:MBEDTLS_SSL_IN_BUFFER_LEN - MBEDTLS_SSL_HEADER_LEN - 8:0:"requesting more data than fits":MBEDTLS_ERR_SSL_BAD_INPUT_DATA
Manuel Pégourié-Gonnardadad4762025-03-04 10:18:30 +0100203
Manuel Pégourié-Gonnard85775102025-03-07 12:36:08 +0100204# Since we're sending dummy contents (all 0x2a) for the ClientHello,
205# the first thing that's going to fail is the version check. The fact that we
206# got around to checking it confirms reassembly completed sucessfully.
207Send large fragmented ClientHello: just fits
208send_large_fragmented_hello:MBEDTLS_SSL_IN_BUFFER_LEN - MBEDTLS_SSL_HEADER_LEN - 9:0:"Unsupported version of TLS":MBEDTLS_ERR_SSL_BAD_PROTOCOL_VERSION
Manuel Pégourié-Gonnardd2197af2025-03-07 12:53:43 +0100209
210# We're generating a virtual record header for the reassembled HS message,
211# which requires that the length fits in two bytes. Of course we won't get
212# there because if the length doesn't fit in two bytes then the message won't
213# fit in the buffer, but still add a test just in case.
214Send large fragmented ClientHello: length doesn't fit in two bytes
215send_large_fragmented_hello:0x10000:0:"requesting more data than fits":MBEDTLS_ERR_SSL_BAD_INPUT_DATA