2 * Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the Apache License 2.0 (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
10 #include "internal/quic_record_rx.h"
11 #include "internal/quic_rx_depack.h"
12 #include "internal/quic_record_tx.h"
13 #include "internal/quic_ackm.h"
14 #include "internal/quic_cc.h"
15 #include "internal/quic_ssl.h"
17 #include "quic_record_test_util.h"
19 static const QUIC_CONN_ID empty_conn_id = {0, {0}};
21 #define RX_TEST_OP_END 0 /* end of script */
22 #define RX_TEST_OP_SET_SCID_LEN 1 /* change SCID length */
23 #define RX_TEST_OP_SET_INIT_LARGEST_PN 2 /* set initial largest PN */
24 #define RX_TEST_OP_SET_RX_DCID 3 /* register an RX DCID */
25 #define RX_TEST_OP_INJECT 4 /* inject a datagram into demux */
26 #define RX_TEST_OP_PROVIDE_SECRET 5 /* provide RX secret */
27 #define RX_TEST_OP_PROVIDE_SECRET_INITIAL 6 /* provide RX secret for initial */
28 #define RX_TEST_OP_DISCARD_EL 7 /* discard an encryption level */
29 #define RX_TEST_OP_CHECK_PKT 8 /* read packet, compare to expected */
30 #define RX_TEST_OP_CHECK_NO_PKT 9 /* check no packet is available to read */
31 #define RX_TEST_OP_CHECK_KEY_EPOCH 10 /* check key epoch value matches */
32 #define RX_TEST_OP_KEY_UPDATE_TIMEOUT 11 /* complete key update process */
33 #define RX_TEST_OP_SET_INIT_KEY_PHASE 12 /* initial Key Phase bit value */
34 #define RX_TEST_OP_CHECK_PKT_EPOCH 13 /* check read key epoch matches */
35 #define RX_TEST_OP_ALLOW_1RTT 14 /* allow 1RTT packet processing */
40 const unsigned char *buf;
42 const QUIC_PKT_HDR *hdr;
43 uint32_t enc_level, suite_id;
45 const QUIC_CONN_ID *dcid;
46 int (*new_qrx)(QUIC_DEMUX **demux, OSSL_QRX **qrx);
48 /* For frame checking */
53 #define RX_OP_SET_SCID_LEN(scid_len) \
54 { RX_TEST_OP_SET_SCID_LEN, 0, NULL, 0, NULL, (scid_len), 0, 0, NULL, NULL },
55 #define RX_OP_SET_INIT_LARGEST_PN(largest_pn) \
56 { RX_TEST_OP_SET_INIT_LARGEST_PN, 0, NULL, 0, NULL, 0, 0, (largest_pn), NULL, NULL },
57 #define RX_OP_SET_RX_DCID(dcid) \
58 { RX_TEST_OP_SET_RX_DCID, 0, NULL, 0, NULL, 0, 0, 0, &(dcid), NULL },
59 #define RX_OP_INJECT(dgram) \
60 { RX_TEST_OP_INJECT, 0, (dgram), sizeof(dgram), NULL, 0, 0, 0, NULL },
61 #define RX_OP_PROVIDE_SECRET(el, suite, key) \
63 RX_TEST_OP_PROVIDE_SECRET, 0, (key), sizeof(key), \
64 NULL, (el), (suite), 0, NULL, NULL \
66 #define RX_OP_PROVIDE_SECRET_INITIAL(dcid) \
67 { RX_TEST_OP_PROVIDE_SECRET_INITIAL, 0, NULL, 0, NULL, 0, 0, 0, &(dcid), NULL },
68 #define RX_OP_DISCARD_EL(el) \
69 { RX_TEST_OP_DISCARD_EL, 0, NULL, 0, NULL, (el), 0, 0, NULL, NULL },
70 #define RX_OP_CHECK_PKT(expect_hdr, expect_body) \
72 RX_TEST_OP_CHECK_PKT, 0, (expect_body), sizeof(expect_body), \
73 &(expect_hdr), 0, 0, 0, NULL, NULL \
75 #define RX_OP_CHECK_NO_PKT() \
76 { RX_TEST_OP_CHECK_NO_PKT, 0, NULL, 0, NULL, 0, 0, 0, NULL, NULL },
77 #define RX_OP_CHECK_KEY_EPOCH(expected) \
78 { RX_TEST_OP_CHECK_KEY_EPOCH, 0, NULL, 0, NULL, 0, 0, (expected), NULL },
79 #define RX_OP_KEY_UPDATE_TIMEOUT(normal) \
80 { RX_TEST_OP_KEY_UPDATE_TIMEOUT, 0, NULL, 0, NULL, (normal), 0, 0, NULL },
81 #define RX_OP_SET_INIT_KEY_PHASE(kp_bit) \
82 { RX_TEST_OP_SET_INIT_KEY_PHASE, 0, NULL, 0, NULL, (kp_bit), 0, 0, NULL },
83 #define RX_OP_CHECK_PKT_EPOCH(expected) \
84 { RX_TEST_OP_CHECK_PKT_EPOCH, 0, NULL, 0, NULL, 0, 0, (expected), NULL },
85 #define RX_OP_ALLOW_1RTT() \
86 { RX_TEST_OP_ALLOW_1RTT, 0, NULL, 0, NULL, 0, 0, 0, NULL },
88 #define RX_OP_INJECT_N(n) \
89 RX_OP_INJECT(rx_script_##n##_in)
90 #define RX_OP_CHECK_PKT_N(n) \
91 RX_OP_CHECK_PKT(rx_script_##n##_expect_hdr, rx_script_##n##_body)
93 #define RX_OP_INJECT_CHECK(n) \
97 /* 1. RFC 9001 - A.3 Server Initial */
98 static const unsigned char rx_script_1_in[] = {
99 0xcf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a,
100 0x42, 0x62, 0xb5, 0x00, 0x40, 0x75, 0xc0, 0xd9, 0x5a, 0x48, 0x2c, 0xd0,
101 0x99, 0x1c, 0xd2, 0x5b, 0x0a, 0xac, 0x40, 0x6a, 0x58, 0x16, 0xb6, 0x39,
102 0x41, 0x00, 0xf3, 0x7a, 0x1c, 0x69, 0x79, 0x75, 0x54, 0x78, 0x0b, 0xb3,
103 0x8c, 0xc5, 0xa9, 0x9f, 0x5e, 0xde, 0x4c, 0xf7, 0x3c, 0x3e, 0xc2, 0x49,
104 0x3a, 0x18, 0x39, 0xb3, 0xdb, 0xcb, 0xa3, 0xf6, 0xea, 0x46, 0xc5, 0xb7,
105 0x68, 0x4d, 0xf3, 0x54, 0x8e, 0x7d, 0xde, 0xb9, 0xc3, 0xbf, 0x9c, 0x73,
106 0xcc, 0x3f, 0x3b, 0xde, 0xd7, 0x4b, 0x56, 0x2b, 0xfb, 0x19, 0xfb, 0x84,
107 0x02, 0x2f, 0x8e, 0xf4, 0xcd, 0xd9, 0x37, 0x95, 0xd7, 0x7d, 0x06, 0xed,
108 0xbb, 0x7a, 0xaf, 0x2f, 0x58, 0x89, 0x18, 0x50, 0xab, 0xbd, 0xca, 0x3d,
109 0x20, 0x39, 0x8c, 0x27, 0x64, 0x56, 0xcb, 0xc4, 0x21, 0x58, 0x40, 0x7d,
113 static const unsigned char rx_script_1_body[] = {
114 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x40, 0x5a, 0x02, 0x00, 0x00,
115 0x56, 0x03, 0x03, 0xee, 0xfc, 0xe7, 0xf7, 0xb3, 0x7b, 0xa1, 0xd1, 0x63,
116 0x2e, 0x96, 0x67, 0x78, 0x25, 0xdd, 0xf7, 0x39, 0x88, 0xcf, 0xc7, 0x98,
117 0x25, 0xdf, 0x56, 0x6d, 0xc5, 0x43, 0x0b, 0x9a, 0x04, 0x5a, 0x12, 0x00,
118 0x13, 0x01, 0x00, 0x00, 0x2e, 0x00, 0x33, 0x00, 0x24, 0x00, 0x1d, 0x00,
119 0x20, 0x9d, 0x3c, 0x94, 0x0d, 0x89, 0x69, 0x0b, 0x84, 0xd0, 0x8a, 0x60,
120 0x99, 0x3c, 0x14, 0x4e, 0xca, 0x68, 0x4d, 0x10, 0x81, 0x28, 0x7c, 0x83,
121 0x4d, 0x53, 0x11, 0xbc, 0xf3, 0x2b, 0xb9, 0xda, 0x1a, 0x00, 0x2b, 0x00,
125 static const QUIC_CONN_ID rx_script_1_dcid = {
126 8, { 0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51, 0x57, 0x08 }
129 static const QUIC_PKT_HDR rx_script_1_expect_hdr = {
130 QUIC_PKT_TYPE_INITIAL,
131 0, 0, 2, 0, 1, 0, 0, 1, { 0, {0} },
132 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } },
138 static const struct rx_test_op rx_script_1[] = {
139 RX_OP_SET_SCID_LEN(2)
140 RX_OP_SET_INIT_LARGEST_PN(0)
141 RX_OP_SET_RX_DCID(empty_conn_id)
142 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_1_dcid)
143 RX_OP_INJECT_CHECK(1)
148 /* 2. RFC 9001 - A.5 ChaCha20-Poly1305 Short Header Packet */
149 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
150 static const unsigned char rx_script_2_in[] = {
151 0x4c, 0xfe, 0x41, 0x89, 0x65, 0x5e, 0x5c, 0xd5, 0x5c, 0x41, 0xf6, 0x90,
152 0x80, 0x57, 0x5d, 0x79, 0x99, 0xc2, 0x5a, 0x5b, 0xfb
155 static const unsigned char rx_script_2_secret[] = {
156 0x9a, 0xc3, 0x12, 0xa7, 0xf8, 0x77, 0x46, 0x8e, 0xbe, 0x69, 0x42, 0x27,
157 0x48, 0xad, 0x00, 0xa1, 0x54, 0x43, 0xf1, 0x82, 0x03, 0xa0, 0x7d, 0x60,
158 0x60, 0xf6, 0x88, 0xf3, 0x0f, 0x21, 0x63, 0x2b
161 static const unsigned char rx_script_2_body[] = {
165 static const QUIC_PKT_HDR rx_script_2_expect_hdr = {
167 0, 0, 3, 0, 1, 0, 0, 0, {0, {0}}, {0, {0}},
168 {0x00, 0xbf, 0xf4, 0x00},
173 static const struct rx_test_op rx_script_2[] = {
175 RX_OP_SET_INIT_LARGEST_PN(654360560)
176 RX_OP_SET_RX_DCID(empty_conn_id)
177 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT, QRL_SUITE_CHACHA20POLY1305,
179 RX_OP_INJECT_CHECK(2)
183 #endif /* !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) */
185 /* 3. Real World - Version Negotiation Response */
186 static const unsigned char rx_script_3_in[] = {
187 0xc7, /* Long; Random Bits */
188 0x00, 0x00, 0x00, 0x00, /* Version 0 (Version Negotiation) */
190 0x0c, 0x35, 0x3c, 0x1b, 0x97, 0xca, /* SCID */
191 0xf8, 0x99, 0x11, 0x39, 0xad, 0x79,
193 0x00, 0x00, 0x00, 0x01, /* Supported Version: 1 */
194 0xaa, 0x9a, 0x3a, 0x9a /* Supported Version: Random (GREASE) */
197 static const QUIC_PKT_HDR rx_script_3_expect_hdr = {
198 QUIC_PKT_TYPE_VERSION_NEG,
208 {12, {0x35, 0x3c, 0x1b, 0x97, 0xca, 0xf8, /* SCID */
209 0x99, 0x11, 0x39, 0xad, 0x79, 0x1f}},
211 NULL, 0, /* Token/Token Len */
215 static const unsigned char rx_script_3_body[] = {
216 0x00, 0x00, 0x00, 0x01,
217 0xaa, 0x9a, 0x3a, 0x9a
220 static const struct rx_test_op rx_script_3[] = {
221 RX_OP_SET_RX_DCID(empty_conn_id)
223 * This is a version negotiation packet, so doesn't have any frames.
224 * However, the depacketizer still handles this sort of packet, so
225 * we still pass the packet to it, to exercise what it does.
227 RX_OP_INJECT_CHECK(3)
232 /* 4. Real World - Retry (S2C) */
233 static const unsigned char rx_script_4_in[] = {
234 0xf0, /* Long; Retry */
235 0x00, 0x00, 0x00, 0x01, /* Version 1 */
237 0x04, 0xad, 0x15, 0x3f, 0xae, /* SCID */
238 /* Retry Token, including 16-byte Retry Integrity Tag */
239 0xf6, 0x8b, 0x6e, 0xa3, 0xdc, 0x40, 0x38, 0xc6, 0xa5, 0x99, 0x1c, 0xa9,
240 0x77, 0xe6, 0x1d, 0x4f, 0x09, 0x36, 0x12, 0x26, 0x00, 0x56, 0x0b, 0x29,
241 0x7d, 0x5e, 0xda, 0x39, 0xc6, 0x61, 0x57, 0x69, 0x15, 0xff, 0x93, 0x39,
242 0x95, 0xf0, 0x57, 0xf1, 0xe5, 0x36, 0x08, 0xad, 0xd2, 0x75, 0xa9, 0x68,
243 0x29, 0xed, 0xaa, 0x03, 0x0e, 0x5f, 0xac, 0xbd, 0x26, 0x07, 0x95, 0x4e,
244 0x48, 0x61, 0x26, 0xc5, 0xe2, 0x6c, 0x60, 0xbf, 0xa8, 0x6f, 0x51, 0xbb,
245 0x1d, 0xf7, 0x98, 0x95, 0x3b, 0x2c, 0x50, 0x79, 0xcc, 0xde, 0x27, 0x84,
246 0x44, 0x9b, 0xb2, 0x4a, 0x94, 0x4d, 0x4d, 0x3d, 0xbc, 0x00, 0x9d, 0x69,
247 0xad, 0x45, 0x89, 0x04, 0x48, 0xca, 0x04, 0xf6, 0x3a, 0x62, 0xc1, 0x38,
248 0x9d, 0x82, 0xb3, 0x45, 0x62, 0x4c,
251 static const QUIC_PKT_HDR rx_script_4_expect_hdr = {
262 {4, {0xad, 0x15, 0x3f, 0xae}}, /* SCID */
264 NULL, 0, /* Token/Token Len */
268 static const unsigned char rx_script_4_body[] = {
269 0xf6, 0x8b, 0x6e, 0xa3, 0xdc, 0x40, 0x38, 0xc6, 0xa5, 0x99, 0x1c, 0xa9,
270 0x77, 0xe6, 0x1d, 0x4f, 0x09, 0x36, 0x12, 0x26, 0x00, 0x56, 0x0b, 0x29,
271 0x7d, 0x5e, 0xda, 0x39, 0xc6, 0x61, 0x57, 0x69, 0x15, 0xff, 0x93, 0x39,
272 0x95, 0xf0, 0x57, 0xf1, 0xe5, 0x36, 0x08, 0xad, 0xd2, 0x75, 0xa9, 0x68,
273 0x29, 0xed, 0xaa, 0x03, 0x0e, 0x5f, 0xac, 0xbd, 0x26, 0x07, 0x95, 0x4e,
274 0x48, 0x61, 0x26, 0xc5, 0xe2, 0x6c, 0x60, 0xbf, 0xa8, 0x6f, 0x51, 0xbb,
275 0x1d, 0xf7, 0x98, 0x95, 0x3b, 0x2c, 0x50, 0x79, 0xcc, 0xde, 0x27, 0x84,
276 0x44, 0x9b, 0xb2, 0x4a, 0x94, 0x4d, 0x4d, 0x3d, 0xbc, 0x00, 0x9d, 0x69,
277 0xad, 0x45, 0x89, 0x04, 0x48, 0xca, 0x04, 0xf6, 0x3a, 0x62, 0xc1, 0x38,
278 0x9d, 0x82, 0xb3, 0x45, 0x62, 0x4c
281 static const struct rx_test_op rx_script_4[] = {
282 RX_OP_SET_RX_DCID(empty_conn_id)
283 RX_OP_INJECT_CHECK(4)
289 * 5. Real World - S2C Multiple Packets
290 * - Initial, Handshake, 1-RTT (AES-128-GCM/SHA256)
292 static const QUIC_CONN_ID rx_script_5_c2s_init_dcid = {
293 4, {0xad, 0x15, 0x3f, 0xae}
296 static const unsigned char rx_script_5_handshake_secret[32] = {
297 0x5e, 0xc6, 0x4a, 0x4d, 0x0d, 0x40, 0x43, 0x3b, 0xd5, 0xbd, 0xe0, 0x19,
298 0x71, 0x47, 0x56, 0xf3, 0x59, 0x3a, 0xa6, 0xc9, 0x3e, 0xdc, 0x81, 0x1e,
299 0xc7, 0x72, 0x9d, 0x83, 0xd8, 0x8f, 0x88, 0x77
302 static const unsigned char rx_script_5_1rtt_secret[32] = {
303 0x53, 0xf2, 0x1b, 0x94, 0xa7, 0x65, 0xf7, 0x76, 0xfb, 0x06, 0x27, 0xaa,
304 0xd2, 0x3f, 0xe0, 0x9a, 0xbb, 0xcf, 0x99, 0x6f, 0x13, 0x2c, 0x6a, 0x37,
305 0x95, 0xf3, 0xda, 0x21, 0xcb, 0xcb, 0xa5, 0x26,
308 static const unsigned char rx_script_5_in[] = {
309 /* First Packet: Initial */
310 0xc4, /* Long, Initial, PN Length=2 bytes */
311 0x00, 0x00, 0x00, 0x01, /* Version */
313 0x04, 0x83, 0xd0, 0x0a, 0x27, /* SCID */
314 0x00, /* Token Length */
315 0x41, 0xd2, /* Length (466) */
316 0xe3, 0xab, /* PN (0) */
317 0x22, 0x35, 0x34, 0x12, 0xcf, 0x20, 0x2b, 0x16, 0xaf, 0x08, 0xd4, 0xe0,
318 0x94, 0x8b, 0x1e, 0x62, 0xdf, 0x31, 0x61, 0xcc, 0xf9, 0xfa, 0x66, 0x4f,
319 0x18, 0x61, 0x07, 0xcb, 0x13, 0xd3, 0xf9, 0xbf, 0xe2, 0x8e, 0x25, 0x8d,
320 0xd1, 0xdf, 0x58, 0x9c, 0x05, 0x20, 0xf9, 0xf2, 0x01, 0x20, 0xe9, 0x39,
321 0xc3, 0x80, 0x77, 0xec, 0xa4, 0x57, 0xcf, 0x57, 0x8c, 0xdd, 0x68, 0x82,
322 0x91, 0xfe, 0x71, 0xa0, 0xfa, 0x56, 0x4c, 0xf2, 0xe7, 0x2b, 0xd0, 0xc0,
323 0xda, 0x81, 0xe2, 0x39, 0xb5, 0xf0, 0x0f, 0xd9, 0x07, 0xd5, 0x67, 0x09,
324 0x02, 0xf0, 0xff, 0x74, 0xb0, 0xa0, 0xd9, 0x3a, 0x7e, 0xb6, 0x57, 0x82,
325 0x47, 0x18, 0x66, 0xed, 0xe2, 0x18, 0x4d, 0xc2, 0x5c, 0x9f, 0x05, 0x09,
326 0x18, 0x24, 0x0e, 0x3f, 0x3d, 0xf9, 0x15, 0x8b, 0x08, 0xfd, 0x25, 0xe9,
327 0xc9, 0xb7, 0x8c, 0x18, 0x7b, 0xf3, 0x37, 0x58, 0xf0, 0xf0, 0xac, 0x33,
328 0x55, 0x3f, 0x39, 0xbc, 0x62, 0x03, 0x8a, 0xc0, 0xd6, 0xcc, 0x49, 0x47,
329 0xeb, 0x85, 0xb6, 0x72, 0xd7, 0xf8, 0xdc, 0x01, 0x32, 0xec, 0x1b, 0x4e,
330 0x38, 0x6e, 0x2c, 0xc5, 0x80, 0xf2, 0x43, 0x4a, 0xf5, 0xe5, 0xa2, 0xf8,
331 0x76, 0xa7, 0xa8, 0x57, 0x32, 0x67, 0x72, 0xeb, 0x82, 0xac, 0x3e, 0xc0,
332 0x15, 0x67, 0xac, 0x32, 0x19, 0x18, 0x0a, 0xef, 0x20, 0xa1, 0xe8, 0xaf,
333 0xac, 0x33, 0x87, 0x4c, 0x55, 0x05, 0x9b, 0x78, 0xf0, 0x3a, 0xce, 0x02,
334 0x28, 0x06, 0x84, 0x61, 0x97, 0xac, 0x87, 0x8f, 0x25, 0xe7, 0x1b, 0xa3,
335 0x02, 0x08, 0x4c, 0x2e, 0xef, 0xbd, 0x4f, 0x82, 0xe7, 0x37, 0x6c, 0x27,
336 0x6f, 0x85, 0xb4, 0xbc, 0x79, 0x38, 0x45, 0x80, 0x8a, 0xda, 0x2f, 0x11,
337 0x11, 0xac, 0x9c, 0xf3, 0x93, 0xc1, 0x49, 0x1b, 0x94, 0x12, 0x77, 0x07,
338 0xdc, 0xbf, 0xc2, 0xfd, 0x8b, 0xf6, 0xf1, 0x66, 0x1c, 0x7f, 0x07, 0xbf,
339 0x1f, 0xae, 0x27, 0x6c, 0x66, 0xe9, 0xa3, 0x64, 0x7a, 0x96, 0x78, 0x45,
340 0xfe, 0x4b, 0x8c, 0x6f, 0x7f, 0x03, 0x47, 0x3c, 0xd7, 0xf7, 0x63, 0x92,
341 0x58, 0x5b, 0x63, 0x83, 0x03, 0x05, 0xc3, 0x5d, 0x36, 0x62, 0x63, 0x5e,
342 0xcf, 0xfe, 0x0a, 0x29, 0xfa, 0xeb, 0xc8, 0xaf, 0xce, 0x31, 0x07, 0x6a,
343 0x09, 0x41, 0xc0, 0x2d, 0x98, 0x70, 0x05, 0x3b, 0x41, 0xfc, 0x7d, 0x61,
344 0xe0, 0x41, 0x7d, 0x13, 0x41, 0x51, 0x52, 0xb4, 0x78, 0xd5, 0x46, 0x51,
345 0x3b, 0xf1, 0xcd, 0xcc, 0x2e, 0x49, 0x30, 0x8b, 0x2a, 0xd2, 0xe6, 0x69,
346 0xb5, 0x6b, 0x7a, 0xf4, 0xbb, 0xd1, 0xf8, 0x4a, 0xe8, 0x53, 0x10, 0x46,
347 0x85, 0x8d, 0x66, 0x8e, 0x2b, 0xe8, 0x5d, 0xab, 0x7e, 0xfe, 0x5a, 0x79,
348 0xcf, 0xc5, 0x0c, 0x30, 0x9e, 0x98, 0x02, 0xb3, 0xa6, 0xd5, 0xfa, 0x25,
349 0xa8, 0xc8, 0xc1, 0xd9, 0x51, 0x60, 0x57, 0x5d, 0xfe, 0x75, 0x97, 0x05,
350 0xda, 0xbb, 0xc6, 0x6a, 0xbe, 0x5c, 0xa5, 0x65, 0x0a, 0x12, 0x33, 0x1c,
351 0xdf, 0xee, 0x08, 0xa9, 0x13, 0x13, 0x28, 0xce, 0x61, 0x59, 0xd1, 0x4e,
352 0xc7, 0x74, 0xfd, 0x64, 0xde, 0x08, 0xce, 0xda, 0x3f, 0xec, 0xad, 0xc9,
353 0xe1, 0xf9, 0x1f, 0x74, 0xf6, 0x86, 0x37, 0x6a, 0xa0, 0xc8, 0x0b, 0x1b,
354 0x94, 0x98, 0x86, 0x81, 0x3b, 0xfc, 0x47, 0x6c, 0xc9, 0x3e, 0x3c, 0x30,
355 0xc5, 0x9e, 0xb2, 0x32, 0x47, 0xf5, 0x0c, 0x6f,
357 /* Second Packet: Handshake */
358 0xe6, /* Long, Handshake, PN Length=2 bytes */
359 0x00, 0x00, 0x00, 0x01, /* Version */
361 0x04, 0x83, 0xd0, 0x0a, 0x27, /* SCID */
362 0x42, 0x9c, /* Length (668) */
363 0x9c, 0x55, /* PN (0) */
364 0x55, 0xd4, 0x50, 0x02, 0x1a, 0x57, 0x84, 0x22, 0xcd, 0x01, 0xe5, 0x42,
365 0x1b, 0x1e, 0x06, 0xf1, 0x86, 0xe2, 0x90, 0xf8, 0x9c, 0x3d, 0xa2, 0x7c,
366 0xde, 0x2b, 0xc9, 0x2e, 0xcd, 0xa8, 0x4f, 0x5a, 0x20, 0xca, 0x96, 0xb6,
367 0x11, 0x4b, 0xc8, 0x71, 0x32, 0xb5, 0xc7, 0x1a, 0x69, 0x7f, 0x1e, 0x37,
368 0x49, 0xfb, 0x08, 0xce, 0x83, 0x5f, 0x02, 0x6d, 0x8a, 0x8f, 0xe7, 0x5d,
369 0xe1, 0x34, 0x31, 0x22, 0x53, 0x53, 0x32, 0xcb, 0x04, 0x21, 0xce, 0xbc,
370 0xa5, 0x1b, 0xdd, 0x4d, 0xd5, 0x1c, 0xd6, 0x5d, 0x88, 0x29, 0x5a, 0x19,
371 0x71, 0x6a, 0xc2, 0xfa, 0xb7, 0xb4, 0x7d, 0xd1, 0x72, 0x93, 0x8f, 0x7c,
372 0xb5, 0x36, 0x1b, 0xea, 0xf3, 0xf1, 0xd7, 0x6e, 0xd3, 0x91, 0x96, 0x62,
373 0x4d, 0xc6, 0xec, 0xb7, 0xb0, 0xb7, 0x9b, 0x95, 0x8b, 0x14, 0x8d, 0x1a,
374 0x0d, 0xb6, 0x3e, 0xec, 0xfe, 0x3b, 0x51, 0xea, 0x1a, 0x05, 0x14, 0x12,
375 0x93, 0x0e, 0x7e, 0xe6, 0xa2, 0xc5, 0x22, 0x87, 0x65, 0xf8, 0x5d, 0x3c,
376 0x55, 0x18, 0xcb, 0xe9, 0xef, 0x23, 0x43, 0xfe, 0xe8, 0x0d, 0xb2, 0x0f,
377 0xc5, 0xf4, 0xb3, 0xde, 0x0c, 0xea, 0xa4, 0x48, 0x8e, 0xbf, 0x1f, 0xc7,
378 0x99, 0x53, 0x8c, 0xc1, 0x3d, 0xba, 0xf4, 0x8e, 0x8e, 0x02, 0x52, 0xf6,
379 0x1f, 0xcf, 0x1d, 0xaa, 0xb3, 0xcb, 0x08, 0xc2, 0xe1, 0x70, 0x68, 0x74,
380 0x78, 0xa9, 0x30, 0x67, 0xba, 0x2b, 0xea, 0x35, 0x63, 0x47, 0xff, 0x29,
381 0x73, 0x29, 0xc6, 0xe8, 0x08, 0xa9, 0x1e, 0x8f, 0x28, 0x41, 0xa4, 0x24,
382 0x54, 0x26, 0x5f, 0x42, 0x77, 0xb1, 0x2b, 0x3d, 0x65, 0x67, 0x60, 0xa7,
383 0x23, 0x0d, 0xa7, 0xf4, 0xd6, 0xe9, 0x4e, 0x58, 0x43, 0x9f, 0x3c, 0x9e,
384 0x77, 0x61, 0xe5, 0x04, 0x4f, 0x73, 0xc9, 0x10, 0x79, 0xd0, 0xda, 0x3b,
385 0xc6, 0x19, 0x93, 0x9f, 0x48, 0x3b, 0x76, 0x38, 0xa1, 0x72, 0x49, 0x7d,
386 0x86, 0x7f, 0xe8, 0x1b, 0xa9, 0x5b, 0xc0, 0x47, 0xa0, 0x9c, 0x3f, 0x65,
387 0x60, 0x76, 0x59, 0xaf, 0x20, 0x2d, 0x40, 0xa6, 0x80, 0x49, 0x5a, 0x8f,
388 0x09, 0xf8, 0xf6, 0x97, 0xc1, 0xbd, 0xe1, 0x9f, 0x9b, 0xa2, 0x4c, 0x7b,
389 0x88, 0xac, 0xbe, 0x4b, 0x11, 0x28, 0xd7, 0x67, 0xe6, 0xad, 0xaf, 0xd0,
390 0xad, 0x01, 0x29, 0xa4, 0x4a, 0xc4, 0xb8, 0x2e, 0x42, 0x79, 0x24, 0x9e,
391 0xd5, 0x34, 0xae, 0x45, 0xf1, 0x0b, 0x38, 0x4a, 0x76, 0xfb, 0x50, 0xa2,
392 0x99, 0xc9, 0x5b, 0x6d, 0xc0, 0xb7, 0x55, 0xd8, 0x8d, 0x49, 0xdd, 0x1b,
393 0xb8, 0xec, 0x10, 0x57, 0x9e, 0x33, 0xb4, 0x10, 0x16, 0x19, 0xac, 0x69,
394 0xa2, 0x19, 0x1b, 0xd0, 0x77, 0x45, 0xeb, 0x49, 0x5c, 0xc5, 0x7c, 0xbe,
395 0x4b, 0x4a, 0x22, 0x5c, 0x3d, 0x0e, 0x6e, 0xe5, 0x4b, 0x36, 0x06, 0x63,
396 0x03, 0x97, 0xab, 0xed, 0xdc, 0xea, 0x64, 0xc2, 0x70, 0xb6, 0x7e, 0x35,
397 0xfb, 0x13, 0x66, 0x37, 0xa3, 0x3f, 0x28, 0x16, 0x6c, 0xe7, 0xd4, 0xe6,
398 0xca, 0x26, 0x0f, 0x19, 0xdd, 0x02, 0xae, 0xc1, 0xcf, 0x18, 0x7d, 0x56,
399 0xe6, 0x52, 0xf3, 0x37, 0xb5, 0x86, 0x9d, 0x1d, 0x55, 0xb3, 0x95, 0x19,
400 0x19, 0xa5, 0x44, 0x95, 0x81, 0xed, 0x02, 0x18, 0xf1, 0x85, 0x57, 0x78,
401 0x28, 0xc4, 0x9a, 0xba, 0xe8, 0x5e, 0x22, 0x8d, 0xc1, 0x7b, 0x2a, 0x8a,
402 0xc8, 0xb9, 0xdd, 0x82, 0xb2, 0x7b, 0x9f, 0x3d, 0xf5, 0x27, 0x2a, 0x48,
403 0x53, 0xc7, 0xa0, 0x70, 0x0e, 0x9d, 0x61, 0xaa, 0xe2, 0xad, 0x28, 0xf2,
404 0xb4, 0xfc, 0x56, 0x6b, 0x89, 0xe7, 0xf9, 0x51, 0xc9, 0xe9, 0xd3, 0x8a,
405 0x8c, 0x7e, 0x86, 0xdd, 0xba, 0x2f, 0x39, 0xbf, 0x26, 0x62, 0x23, 0xd6,
406 0x98, 0x6d, 0x3e, 0x72, 0xd7, 0x1b, 0xe1, 0x62, 0x94, 0x35, 0xe2, 0x18,
407 0x19, 0x46, 0xb8, 0x2c, 0xb5, 0x8f, 0x8f, 0xb0, 0x5b, 0x76, 0x7b, 0x7e,
408 0xb8, 0xc6, 0xb7, 0xe9, 0x4e, 0x9d, 0x30, 0x68, 0x03, 0x1e, 0x19, 0x73,
409 0xc5, 0x3e, 0x24, 0xe2, 0x95, 0x60, 0x1b, 0x27, 0x93, 0x7c, 0x17, 0xc2,
410 0xc6, 0xa3, 0xbd, 0xbd, 0x70, 0xc6, 0x60, 0x59, 0xc8, 0x5c, 0xd7, 0x9a,
411 0xc4, 0x29, 0xac, 0x0f, 0xaa, 0x0d, 0xa9, 0x92, 0xa3, 0x95, 0xd7, 0x0f,
412 0x6f, 0x74, 0x99, 0x9b, 0xc1, 0xd3, 0x68, 0x6d, 0xac, 0x82, 0x2d, 0x32,
413 0x41, 0x9e, 0x0c, 0xf7, 0x31, 0x59, 0x4c, 0x93, 0x1c, 0x3b, 0x71, 0x69,
414 0xcf, 0xc5, 0xca, 0x2b, 0xdf, 0xe7, 0xaa, 0xfd, 0x1d, 0x71, 0x01, 0x7e,
415 0x1c, 0x70, 0x62, 0x20, 0x61, 0xf8, 0x35, 0xc1, 0x71, 0xe7, 0x02, 0x0d,
416 0x88, 0x44, 0xd9, 0x00, 0xc5, 0xcc, 0x63, 0xe4, 0xf0, 0x86, 0xa7, 0xd0,
417 0xfe, 0xcc, 0xb7, 0x1d, 0xfc, 0x21, 0x61, 0x54, 0x15, 0xea, 0x81, 0x5e,
418 0xc0, 0x31, 0xfa, 0xbf, 0x7d, 0xb9, 0x3b, 0xa2, 0x1e, 0x42, 0x73, 0x05,
419 0x3c, 0xdb, 0x21, 0x59, 0x4f, 0x63,
421 /* Third Packet: 1-RTT */
422 0x5f, /* Short, 1-RTT, Spin=0, KP=0, PN Length=2 bytes */
423 0x68, 0x47, /* PN (0) */
424 0xa3, 0x3c, 0xa5, 0x27, 0x5e, 0xf9, 0x8d, 0xec, 0xea, 0x6c, 0x09, 0x18,
425 0x40, 0x80, 0xee, 0x9f, 0x6f, 0x73, 0x5c, 0x49, 0xe3, 0xec, 0xb7, 0x58,
426 0x05, 0x66, 0x8f, 0xa3, 0x52, 0x37, 0xa1, 0x22, 0x1f, 0xc6, 0x92, 0xd6,
427 0x59, 0x04, 0x99, 0xcb, 0x44, 0xef, 0x66, 0x05, 0x2d, 0xd0, 0x85, 0x24,
428 0xbb, 0xe3, 0xa1, 0xd1, 0xbe, 0xf7, 0x54, 0xad, 0x65, 0xf4, 0xd4, 0x59,
429 0x54, 0x87, 0x4e, 0x22, 0x4f, 0x06, 0x07, 0xa7, 0x8a, 0x14, 0x89, 0xd1,
430 0x3f, 0xd3, 0xe4, 0x6f, 0x71, 0x8f, 0x9a, 0xd2, 0x3b, 0x61, 0x0a, 0xba,
431 0x9a, 0x31, 0x56, 0xc7,
434 static const QUIC_PKT_HDR rx_script_5a_expect_hdr = {
435 QUIC_PKT_TYPE_INITIAL,
445 {4, {0x83, 0xd0, 0x0a, 0x27}}, /* SCID */
447 NULL, 0, /* Token/Token Len */
451 static const unsigned char rx_script_5a_body[] = {
452 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
453 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
454 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
455 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
456 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
457 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
458 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
459 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
460 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
461 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
462 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
463 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
464 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
465 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
466 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
467 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
468 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
469 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
470 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
471 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
472 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
473 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
474 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
475 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
476 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
477 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
478 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
479 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
480 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
481 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x40, 0x5a, 0x02, 0x00,
482 0x00, 0x56, 0x03, 0x03, 0xe2, 0xd2, 0x0a, 0x3b, 0xa2, 0xc4, 0xd2, 0x29,
483 0xc8, 0xe8, 0xba, 0x23, 0x31, 0x88, 0x2c, 0x71, 0xeb, 0xba, 0x42, 0x5f,
484 0x94, 0xe9, 0x0a, 0x90, 0x35, 0x31, 0x1e, 0xca, 0xed, 0xf8, 0x8a, 0x8d,
485 0x00, 0x13, 0x01, 0x00, 0x00, 0x2e, 0x00, 0x2b, 0x00, 0x02, 0x03, 0x04,
486 0x00, 0x33, 0x00, 0x24, 0x00, 0x1d, 0x00, 0x20, 0x96, 0x0b, 0x4b, 0x30,
487 0x66, 0x3a, 0x75, 0x01, 0x4a, 0xdc, 0x2a, 0x75, 0x1f, 0xce, 0x7a, 0x30,
488 0x9d, 0x00, 0xca, 0x20, 0xb4, 0xe0, 0x6b, 0x81, 0x23, 0x18, 0x0b, 0x20,
489 0x1f, 0x54, 0x86, 0x1d,
492 static const QUIC_PKT_HDR rx_script_5b_expect_hdr = {
493 QUIC_PKT_TYPE_HANDSHAKE,
503 {4, {0x83, 0xd0, 0x0a, 0x27}}, /* SCID */
505 NULL, 0, /* Token/Token Len */
509 static const unsigned char rx_script_5b_body[] = {
510 0x06, 0x00, 0x42, 0x86, 0x08, 0x00, 0x00, 0x7d, 0x00, 0x7b, 0x00, 0x10,
511 0x00, 0x08, 0x00, 0x06, 0x05, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x00, 0x39,
512 0x00, 0x6b, 0x4b, 0x20, 0x0b, 0x1b, 0xe1, 0x1f, 0xd0, 0x78, 0xc0, 0x69,
513 0x72, 0x9c, 0xe2, 0xf7, 0x05, 0x04, 0x80, 0x08, 0x00, 0x00, 0x06, 0x04,
514 0x80, 0x08, 0x00, 0x00, 0x07, 0x04, 0x80, 0x08, 0x00, 0x00, 0x04, 0x04,
515 0x80, 0x0c, 0x00, 0x00, 0x08, 0x02, 0x40, 0x64, 0x09, 0x02, 0x40, 0x64,
516 0x01, 0x04, 0x80, 0x00, 0x75, 0x30, 0x03, 0x02, 0x45, 0xac, 0x0b, 0x01,
517 0x1a, 0x0c, 0x00, 0x02, 0x10, 0x41, 0x94, 0x41, 0x8d, 0x0d, 0xfb, 0x60,
518 0x7b, 0xdc, 0xcc, 0xa2, 0x9c, 0x3e, 0xa5, 0xdf, 0x8d, 0x00, 0x08, 0x2d,
519 0x71, 0x8a, 0x38, 0xdf, 0xdd, 0xe0, 0x03, 0x0e, 0x01, 0x04, 0x0f, 0x04,
520 0x83, 0xd0, 0x0a, 0x27, 0x10, 0x04, 0xad, 0x15, 0x3f, 0xae, 0x20, 0x01,
521 0x00, 0x0b, 0x00, 0x01, 0x8f, 0x00, 0x00, 0x01, 0x8b, 0x00, 0x01, 0x86,
522 0x30, 0x82, 0x01, 0x82, 0x30, 0x82, 0x01, 0x29, 0xa0, 0x03, 0x02, 0x01,
523 0x02, 0x02, 0x14, 0x0a, 0x73, 0x0f, 0x86, 0x18, 0xf2, 0xc3, 0x30, 0x01,
524 0xd2, 0xc0, 0xc1, 0x62, 0x52, 0x13, 0xf1, 0x9c, 0x13, 0x39, 0xb5, 0x30,
525 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x30,
526 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c,
527 0x6d, 0x61, 0x70, 0x61, 0x6b, 0x74, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
528 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x32, 0x30, 0x38, 0x30, 0x32, 0x31, 0x32,
529 0x30, 0x30, 0x31, 0x38, 0x5a, 0x17, 0x0d, 0x32, 0x32, 0x30, 0x39, 0x30,
530 0x31, 0x31, 0x32, 0x30, 0x30, 0x31, 0x38, 0x5a, 0x30, 0x17, 0x31, 0x15,
531 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c, 0x6d, 0x61, 0x70,
532 0x61, 0x6b, 0x74, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x30, 0x59, 0x30,
533 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08,
534 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04,
535 0x67, 0xf4, 0xd3, 0x8f, 0x15, 0x6d, 0xee, 0x85, 0xcc, 0x2a, 0x77, 0xfc,
536 0x0b, 0x8f, 0x9f, 0xcf, 0xa9, 0x95, 0x5d, 0x5b, 0xcd, 0xb7, 0x8b, 0xba,
537 0x31, 0x0a, 0x73, 0x62, 0xc5, 0xd0, 0x0e, 0x07, 0x90, 0xae, 0x38, 0x43,
538 0x79, 0xce, 0x5e, 0x33, 0xad, 0x31, 0xbf, 0x9f, 0x2a, 0x56, 0x83, 0xa5,
539 0x24, 0x16, 0xab, 0x0c, 0xf1, 0x64, 0xbe, 0xe4, 0x93, 0xb5, 0x89, 0xd6,
540 0x05, 0xe4, 0xf7, 0x7b, 0xa3, 0x53, 0x30, 0x51, 0x30, 0x1d, 0x06, 0x03,
541 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x02, 0x64, 0x0f, 0x55, 0x69,
542 0x14, 0x91, 0x19, 0xed, 0xf9, 0x1a, 0xe9, 0x1d, 0xa5, 0x5a, 0xd0, 0x48,
543 0x96, 0x9f, 0x60, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18,
544 0x30, 0x16, 0x80, 0x14, 0x02, 0x64, 0x0f, 0x55, 0x69, 0x14, 0x91, 0x19,
545 0xed, 0xf9, 0x1a, 0xe9, 0x1d, 0xa5, 0x5a, 0xd0, 0x48, 0x96, 0x9f, 0x60,
546 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05,
547 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48,
548 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x47, 0x00, 0x30, 0x44, 0x02, 0x20,
549 0x0a, 0x82, 0x92, 0x6e, 0xd3, 0xc6, 0x66, 0xd9, 0xd3, 0x75, 0xff, 0x71,
550 0x3b, 0x61, 0x46, 0x21, 0x00, 0xe6, 0x21, 0x5d, 0x9c, 0x86, 0xe9, 0x65,
551 0x40, 0x4f, 0xeb, 0x70, 0x4f, 0x2c, 0xad, 0x00, 0x02, 0x20, 0x08, 0xc2,
552 0x07, 0x5d, 0x16, 0xfc, 0x54, 0x34, 0x2b, 0xb4, 0x18, 0x67, 0x44, 0x81,
553 0xc9, 0xa9, 0x67, 0x2e, 0xce, 0xa1, 0x02, 0x9f, 0x3b, 0xe5, 0x61, 0x16,
554 0x0b, 0x50, 0xf6, 0xa1, 0x50, 0x94, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x4a,
555 0x04, 0x03, 0x00, 0x46, 0x30, 0x44, 0x02, 0x20, 0x7d, 0x57, 0x17, 0x14,
556 0x46, 0x09, 0x95, 0x70, 0x09, 0x45, 0xe8, 0x9e, 0x5c, 0x87, 0x55, 0xd9,
557 0x08, 0xc6, 0x5e, 0x47, 0x73, 0x5e, 0xb1, 0xc9, 0xef, 0xcb, 0xe5, 0x7f,
558 0xcc, 0xb0, 0x28, 0xbc, 0x02, 0x20, 0x5d, 0xe4, 0x2b, 0x83, 0xd9, 0x78,
559 0x75, 0x45, 0xf3, 0x22, 0x2b, 0x38, 0xeb, 0x68, 0xe5, 0x71, 0x5d, 0xcb,
560 0xc3, 0x68, 0xb3, 0x0e, 0x7d, 0x5e, 0x1d, 0xc2, 0x1b, 0x8a, 0x62, 0x80,
561 0x48, 0x3e, 0x14, 0x00, 0x00, 0x20, 0x37, 0xcd, 0x55, 0xca, 0x3f, 0x4b,
562 0xf0, 0x95, 0xf8, 0xe4, 0xfe, 0x59, 0xab, 0xbc, 0xc1, 0x8f, 0x0c, 0x3f,
563 0x41, 0x59, 0xf6, 0x96, 0xdb, 0x75, 0xae, 0xe7, 0x86, 0x1a, 0x92, 0xa7,
567 static const QUIC_PKT_HDR rx_script_5c_expect_hdr = {
580 NULL, 0, /* Token/Token Len */
584 static const unsigned char rx_script_5c_body[] = {
585 0x18, 0x03, 0x00, 0x04, 0x92, 0xec, 0xaa, 0xd6, 0x47, 0xd8, 0x8b, 0x56,
586 0x3b, 0x5f, 0x67, 0xe6, 0xb9, 0xb9, 0xca, 0x72, 0xca, 0xf2, 0x49, 0x7d,
587 0x18, 0x02, 0x00, 0x04, 0xa9, 0x6e, 0x9b, 0x84, 0x26, 0x43, 0x00, 0xc7,
588 0x55, 0x71, 0x67, 0x2e, 0x52, 0xdd, 0x47, 0xfd, 0x06, 0x51, 0x33, 0x08,
589 0x18, 0x01, 0x00, 0x04, 0x36, 0xd5, 0x1f, 0x06, 0x4e, 0xbf, 0xb4, 0xc9,
590 0xef, 0x97, 0x1e, 0x9a, 0x3c, 0xab, 0x1e, 0xfc, 0xb7, 0x90, 0xc3, 0x1a,
593 static const struct rx_test_op rx_script_5[] = {
595 RX_OP_SET_RX_DCID(empty_conn_id)
596 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_5_c2s_init_dcid)
598 RX_OP_CHECK_PKT_N(5a)
599 RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
600 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
601 QRL_SUITE_AES128GCM, rx_script_5_handshake_secret)
602 RX_OP_CHECK_PKT_N(5b)
603 RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
604 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
605 QRL_SUITE_AES128GCM, rx_script_5_1rtt_secret)
606 RX_OP_CHECK_PKT_N(5c)
609 /* Discard Initial EL and try injecting the packet again */
610 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_INITIAL)
612 /* Initial packet is not output because we have discarded Initial keys */
613 RX_OP_CHECK_PKT_N(5b)
614 RX_OP_CHECK_PKT_N(5c)
616 /* Try again with discarded keys */
617 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_HANDSHAKE)
619 RX_OP_CHECK_PKT_N(5c)
623 RX_OP_CHECK_PKT_N(5c)
625 /* Try again with discarded 1-RTT keys */
626 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_1RTT)
630 /* Recreate QRL, test reading packets received before key */
631 RX_OP_SET_SCID_LEN(0)
632 RX_OP_SET_RX_DCID(empty_conn_id)
635 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_5_c2s_init_dcid)
636 RX_OP_CHECK_PKT_N(5a)
638 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
639 QRL_SUITE_AES128GCM, rx_script_5_handshake_secret)
640 RX_OP_CHECK_PKT_N(5b)
642 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
643 QRL_SUITE_AES128GCM, rx_script_5_1rtt_secret)
644 RX_OP_CHECK_PKT_N(5c)
647 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_INITIAL)
648 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_HANDSHAKE)
649 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_1RTT)
657 * 6. Real World - S2C Multiple Packets
658 * - Initial, Handshake, 1-RTT (AES-256-GCM/SHA384)
660 static const QUIC_CONN_ID rx_script_6_c2s_init_dcid = {
661 4, {0xac, 0x88, 0x95, 0xbd}
664 static const unsigned char rx_script_6_handshake_secret[48] = {
665 0xd1, 0x41, 0xb0, 0xf6, 0x0d, 0x8b, 0xbd, 0xe8, 0x5b, 0xa8, 0xff, 0xd7,
666 0x18, 0x9a, 0x23, 0x7b, 0x13, 0x5c, 0x1e, 0x90, 0x1d, 0x08, 0x95, 0xcc,
667 0xc5, 0x8e, 0x73, 0x4e, 0x02, 0x6f, 0x3c, 0xb6, 0x26, 0x77, 0x8d, 0x53,
668 0xc5, 0x62, 0x9f, 0xb5, 0xf0, 0x88, 0xfb, 0xe5, 0x14, 0x71, 0xab, 0xe6,
671 static const unsigned char rx_script_6_1rtt_secret[48] = {
672 0x2d, 0x6b, 0x9d, 0xd4, 0x39, 0xa0, 0xe7, 0xff, 0x17, 0xe2, 0xcb, 0x5c,
673 0x0d, 0x4a, 0xf6, 0x3f, 0xf4, 0xfe, 0xfc, 0xe5, 0x22, 0xfa, 0xf5, 0x5b,
674 0xc0, 0xb2, 0x18, 0xbb, 0x92, 0x4d, 0x35, 0xea, 0x67, 0xa6, 0xe7, 0xc1,
675 0x90, 0x10, 0xc9, 0x14, 0x46, 0xf5, 0x95, 0x57, 0x8b, 0x90, 0x88, 0x5d,
678 static const unsigned char rx_script_6_in[] = {
679 /* First Packet: Initial */
680 0xc5, /* Long, Initial, PN Length=2 bytes */
681 0x00, 0x00, 0x00, 0x01, /* Version */
683 0x04, 0x36, 0xf4, 0x75, 0x2d, /* SCID */
684 0x00, /* Token Length */
685 0x41, 0xbe, /* Length (446) */
686 0xa9, 0xe2, /* PN (0) */
687 0x83, 0x39, 0x95, 0x8f, 0x8f, 0x8c, 0xa9, 0xaf, 0x10, 0x29, 0x3d, 0xfc,
688 0x56, 0x4a, 0x1c, 0x4b, 0xc9, 0x48, 0xb1, 0xaf, 0x36, 0xd5, 0xac, 0x95,
689 0xbf, 0xfd, 0x2c, 0x4d, 0x70, 0x2e, 0x5b, 0x7c, 0x22, 0x5f, 0x5f, 0xee,
690 0x10, 0x8f, 0xfb, 0x0b, 0x5f, 0x9d, 0x7e, 0x68, 0x2f, 0x94, 0x0b, 0xdb,
691 0xed, 0xef, 0xfa, 0x4e, 0xc6, 0xd5, 0xe7, 0xef, 0xe0, 0x78, 0x3c, 0xdc,
692 0xe9, 0xd8, 0xe8, 0x56, 0x71, 0xd7, 0xe7, 0x6c, 0x7f, 0x5d, 0xaa, 0x7a,
693 0x52, 0x1d, 0x95, 0x7a, 0x80, 0x70, 0x38, 0xc0, 0x8b, 0xa1, 0x2f, 0x09,
694 0x16, 0xd2, 0xec, 0xa3, 0x23, 0x72, 0x45, 0x3c, 0xbd, 0x8c, 0xda, 0xbb,
695 0x37, 0x5a, 0x8d, 0xb2, 0x00, 0x7e, 0x67, 0x0c, 0xa0, 0x32, 0xdd, 0x80,
696 0x07, 0x71, 0xb0, 0x95, 0x21, 0xbc, 0x1e, 0xbd, 0x63, 0x0a, 0x10, 0xe7,
697 0x4b, 0x6e, 0x2e, 0x85, 0x3a, 0x65, 0xf7, 0x06, 0x6e, 0x7e, 0x8f, 0x65,
698 0x8c, 0xb1, 0x93, 0xe9, 0x0d, 0xe8, 0x46, 0xe7, 0xcf, 0xa7, 0xd2, 0x8b,
699 0x15, 0x23, 0xec, 0xc3, 0xec, 0x44, 0xda, 0x62, 0x15, 0x35, 0x34, 0x2f,
700 0x62, 0x77, 0xc8, 0x1f, 0x83, 0x22, 0x00, 0xe5, 0xc0, 0x89, 0xb8, 0x97,
701 0xd2, 0x37, 0x02, 0xea, 0xa2, 0x35, 0xbf, 0x19, 0xf0, 0xba, 0x1d, 0xb7,
702 0xaa, 0x36, 0xbb, 0x11, 0x60, 0xc3, 0x45, 0x1f, 0xe5, 0x18, 0xde, 0x4c,
703 0x01, 0x23, 0x2d, 0x17, 0x78, 0xdd, 0x4c, 0x8a, 0x1e, 0x1b, 0xd4, 0xda,
704 0x56, 0x43, 0x13, 0xa4, 0x4f, 0xfd, 0xd5, 0x92, 0x6a, 0x05, 0x5f, 0x14,
705 0x63, 0x85, 0x7d, 0xf1, 0x31, 0xb8, 0x27, 0x0b, 0xa6, 0xb5, 0x50, 0xca,
706 0x8b, 0x0e, 0xa1, 0x0d, 0xf9, 0xc4, 0xea, 0x6a, 0x6e, 0x4b, 0x6d, 0xdf,
707 0x49, 0xe8, 0x32, 0xf6, 0x85, 0xc4, 0x29, 0x26, 0x32, 0xfb, 0x5e, 0xa8,
708 0x55, 0x6b, 0x67, 0xe9, 0xaa, 0x35, 0x33, 0x90, 0xd8, 0x2a, 0x71, 0x0b,
709 0x6a, 0x48, 0xc4, 0xa3, 0x8b, 0xe0, 0xe7, 0x00, 0x3d, 0xee, 0x30, 0x70,
710 0x84, 0xbd, 0xa3, 0x3c, 0x9e, 0xa3, 0x5c, 0x69, 0xab, 0x55, 0x7b, 0xe2,
711 0xe5, 0x86, 0x13, 0xcb, 0x93, 0x3f, 0xcb, 0x3e, 0x6d, 0xc9, 0xc2, 0x10,
712 0x2b, 0x00, 0x9b, 0x3f, 0x14, 0x4e, 0x04, 0x27, 0xc0, 0xae, 0x1d, 0x48,
713 0x89, 0x3a, 0xf4, 0xac, 0xe0, 0x05, 0x07, 0xc9, 0x74, 0x6e, 0x21, 0x01,
714 0xe9, 0x26, 0xfd, 0xb4, 0xb2, 0x2a, 0xda, 0x72, 0xda, 0xbf, 0x63, 0x9d,
715 0x37, 0xaf, 0x90, 0x05, 0xd6, 0x89, 0xc7, 0xa6, 0x81, 0x4e, 0x2a, 0x30,
716 0xe3, 0x05, 0x88, 0x9f, 0xd0, 0xba, 0x8d, 0xc4, 0x21, 0x52, 0x5a, 0x7a,
717 0xe1, 0xad, 0xd3, 0x88, 0xc2, 0x18, 0xad, 0x4c, 0xb1, 0x66, 0x73, 0x1b,
718 0xf2, 0xd1, 0xb9, 0x43, 0xaa, 0xc4, 0x66, 0xcd, 0x42, 0xfa, 0x80, 0xec,
719 0xa1, 0x7c, 0x45, 0x02, 0x53, 0x45, 0xd5, 0x07, 0xd4, 0x70, 0x12, 0x1b,
720 0x08, 0x05, 0x6e, 0x99, 0x0a, 0xd3, 0x5b, 0x99, 0x6b, 0x65, 0xc4, 0xc0,
721 0x04, 0x1b, 0x75, 0xf2, 0x86, 0x99, 0x09, 0x4a, 0x50, 0x70, 0x00, 0x7a,
722 0x93, 0xaa, 0xe6, 0xf4, 0x03, 0x29, 0x06, 0xa4, 0x30, 0x6d, 0x52, 0xbd,
723 0x60, 0xd1, 0x7e, 0xd6, 0x07, 0xc0, 0x41, 0x01, 0x12, 0x3e, 0x16, 0x94,
725 /* Second Packet: Handshake */
726 0xea, /* Long, Handshake, PN Length=2 bytes */
727 0x00, 0x00, 0x00, 0x01, /* Version */
729 0x04, 0x36, 0xf4, 0x75, 0x2d, /* SCID */
730 0x42, 0xb0, /* Length (688) */
731 0x3a, 0xc5, /* PN (0) */
732 0x3b, 0x8e, 0x4c, 0x01, 0x72, 0x6b, 0xfa, 0xbb, 0xad, 0xf9, 0x9e, 0x21,
733 0xb1, 0xd0, 0x01, 0xf1, 0xd4, 0x67, 0x8d, 0x2c, 0xee, 0x04, 0x60, 0x4a,
734 0xe2, 0xe4, 0xc6, 0x89, 0x01, 0xae, 0x3c, 0x1f, 0xf7, 0xe6, 0xf7, 0xac,
735 0x26, 0xcf, 0x3c, 0x6d, 0x1d, 0xfd, 0x11, 0x02, 0x51, 0x73, 0xb5, 0xe1,
736 0xb2, 0x44, 0x42, 0x32, 0x0f, 0xf5, 0x3d, 0x55, 0x2d, 0x1f, 0x02, 0x29,
737 0x51, 0x35, 0xdb, 0xc7, 0x7a, 0x34, 0x4b, 0xec, 0x60, 0x49, 0xa2, 0x90,
738 0x11, 0xef, 0x5a, 0xa9, 0x1c, 0xf7, 0xd9, 0x21, 0x68, 0x1c, 0x2b, 0xc6,
739 0x57, 0xde, 0xb1, 0x0b, 0x31, 0xed, 0xef, 0x16, 0xba, 0x08, 0xb9, 0xe2,
740 0xd9, 0xd0, 0xd8, 0x1f, 0xc4, 0x32, 0xe8, 0x45, 0x2a, 0x86, 0xe4, 0xd3,
741 0xaf, 0x72, 0x4f, 0x30, 0x01, 0x71, 0x15, 0x9b, 0xa9, 0x55, 0x35, 0xf7,
742 0x39, 0x7e, 0x6a, 0x59, 0x18, 0x4f, 0xe6, 0xdf, 0xb5, 0x0d, 0xc2, 0xe7,
743 0xb2, 0xa1, 0xa6, 0xa3, 0x9c, 0xf0, 0x0d, 0x59, 0x05, 0x49, 0x95, 0xfa,
744 0xcc, 0x72, 0xd7, 0xc0, 0x84, 0x2e, 0xc4, 0x1c, 0xd4, 0xa0, 0xe3, 0x6c,
745 0x5a, 0x8c, 0x94, 0x4d, 0x37, 0x1a, 0x1c, 0x68, 0x93, 0x5f, 0xe5, 0x99,
746 0x27, 0xc6, 0x06, 0xaa, 0x1f, 0x29, 0x17, 0xc5, 0x8c, 0x3d, 0x53, 0xa7,
747 0x05, 0x3a, 0x44, 0x53, 0x86, 0xed, 0x56, 0x99, 0x4c, 0xe2, 0x7b, 0x3a,
748 0x1e, 0x5d, 0x6d, 0xac, 0x78, 0x1e, 0xfa, 0x55, 0x58, 0x6e, 0x72, 0xee,
749 0xf9, 0x33, 0x64, 0x7f, 0x93, 0x3c, 0xfe, 0x18, 0x97, 0x6b, 0x02, 0x74,
750 0x90, 0x0d, 0xba, 0x89, 0xc0, 0x22, 0x0a, 0x0a, 0x37, 0x4c, 0x28, 0x74,
751 0xa7, 0x3a, 0x44, 0x74, 0x42, 0xff, 0xf1, 0xd2, 0x8d, 0x0c, 0xc1, 0xed,
752 0x98, 0x98, 0x8e, 0xa8, 0x6b, 0x95, 0x6a, 0x86, 0x0b, 0xb4, 0x95, 0x58,
753 0x34, 0x12, 0xb0, 0xc0, 0xf8, 0x2d, 0x5b, 0x40, 0x51, 0x80, 0x07, 0x91,
754 0x31, 0x77, 0xd3, 0x06, 0xa5, 0xe5, 0x1f, 0xe2, 0xf8, 0x92, 0xe4, 0x23,
755 0x2b, 0xf0, 0x4c, 0xa9, 0xa5, 0x6c, 0x6f, 0xaf, 0xaf, 0xbf, 0x97, 0xcf,
756 0x46, 0xf2, 0x8d, 0x61, 0x0e, 0x73, 0xcd, 0xc5, 0xde, 0xda, 0x50, 0x82,
757 0x61, 0x6d, 0xb1, 0xa2, 0xbe, 0x6b, 0x99, 0xcd, 0x5b, 0x99, 0x8f, 0x66,
758 0xab, 0x11, 0x78, 0xcc, 0xdb, 0x66, 0x98, 0xca, 0x19, 0x92, 0xf4, 0x05,
759 0xae, 0xe6, 0xf3, 0xe7, 0xf0, 0x30, 0x28, 0x31, 0x74, 0xff, 0xe2, 0xb3,
760 0x3a, 0x4f, 0x79, 0xe7, 0x2a, 0x9f, 0xe3, 0x41, 0xb2, 0x88, 0xc8, 0x8f,
761 0x77, 0x57, 0x42, 0x65, 0xdb, 0x07, 0xf6, 0x5f, 0xb8, 0x34, 0x17, 0xe3,
762 0x8d, 0x22, 0x5b, 0x88, 0x94, 0x60, 0x97, 0x32, 0x3d, 0x8a, 0x51, 0x9d,
763 0xb5, 0xac, 0xd7, 0x99, 0x96, 0x23, 0x6d, 0xc9, 0xab, 0x61, 0x41, 0x8f,
764 0x72, 0x1b, 0xf8, 0x84, 0xd9, 0x57, 0x88, 0x68, 0x3d, 0x73, 0x5f, 0xb1,
765 0x18, 0x5c, 0x3a, 0x35, 0xd2, 0xc5, 0xb7, 0x29, 0xc7, 0x95, 0xdd, 0x21,
766 0xc0, 0x78, 0x49, 0xf3, 0x24, 0xe0, 0x4c, 0x5c, 0x32, 0x08, 0xb7, 0x00,
767 0x43, 0x70, 0x5a, 0x95, 0x23, 0x91, 0xf5, 0xb7, 0x61, 0x85, 0x6f, 0xb3,
768 0xa4, 0x6b, 0x05, 0x9d, 0x39, 0xa3, 0xb1, 0x1c, 0x61, 0xc5, 0xa5, 0xe7,
769 0x9a, 0xe9, 0x5d, 0xaa, 0xca, 0x11, 0xd8, 0x4b, 0xa4, 0x9c, 0x18, 0x4e,
770 0x2b, 0x2d, 0x75, 0xc1, 0x12, 0x20, 0xe4, 0x66, 0xa5, 0x59, 0x67, 0x4b,
771 0xcc, 0x52, 0x2d, 0xfa, 0xaa, 0xa4, 0xe9, 0xfc, 0x79, 0xd7, 0xff, 0x03,
772 0x3e, 0xec, 0xba, 0x97, 0x37, 0x52, 0xc1, 0x57, 0x31, 0x8e, 0x57, 0x0c,
773 0x54, 0x92, 0x9c, 0x25, 0x5c, 0xfa, 0x9f, 0xa5, 0x36, 0x18, 0xd0, 0xaa,
774 0xf3, 0x3b, 0x5b, 0x59, 0xbd, 0x33, 0x5e, 0x7d, 0x74, 0x7c, 0xaf, 0xe9,
775 0x54, 0x80, 0xc4, 0xb4, 0xa1, 0x24, 0x9e, 0x23, 0x0d, 0xbf, 0x4e, 0x0f,
776 0xaf, 0xa5, 0x16, 0xcb, 0x3b, 0xfa, 0x33, 0xa5, 0x68, 0xa6, 0x64, 0x48,
777 0x2f, 0x5e, 0xfa, 0x64, 0x4e, 0xe3, 0x27, 0x4f, 0x13, 0xe6, 0x37, 0xf6,
778 0xb9, 0x63, 0x4b, 0xdc, 0x49, 0x3c, 0x5e, 0x9e, 0x06, 0xea, 0xac, 0xa3,
779 0xdf, 0x6c, 0x49, 0xfb, 0xa1, 0x01, 0x4f, 0x6f, 0x74, 0x1f, 0xd3, 0x26,
780 0xa1, 0x92, 0x3e, 0xe0, 0x73, 0xd6, 0x3b, 0x67, 0x13, 0x53, 0x2e, 0xcb,
781 0xbc, 0x83, 0xd0, 0x6e, 0x28, 0xb1, 0xcb, 0xd9, 0x66, 0xe0, 0x33, 0x59,
782 0x45, 0xd3, 0x13, 0xc2, 0x48, 0xd5, 0x9e, 0x88, 0xba, 0x75, 0x7b, 0xb1,
783 0xfe, 0x6f, 0xec, 0xde, 0xff, 0x14, 0x59, 0x75, 0xbf, 0x1a, 0x74, 0x47,
784 0xc5, 0xd8, 0xe8, 0x1b, 0x3c, 0x86, 0xd7, 0x1f, 0x99, 0x11, 0xd3, 0x29,
785 0xfd, 0x5d, 0x22, 0x7e, 0x03, 0x78, 0xed, 0x62, 0x0e, 0xbe, 0x6d, 0x75,
786 0xf4, 0xa8, 0x6e, 0xc7, 0x21, 0x76, 0xc5, 0xa0, 0x0c, 0xaa, 0x58, 0x78,
787 0x7e, 0x6e, 0xfc, 0x1e, 0x2a, 0x1c, 0xdd, 0xe5, 0x78, 0x08, 0xbd, 0xdb,
788 0xea, 0x8f, 0x8a, 0xa5, 0xbf, 0x93, 0xfe, 0x0f, 0x03, 0xa1, 0xc8, 0x64,
791 /* Third Packet: 1-RTT */
792 0x48, /* Short, 1-RTT, Spin=0, KP=0, PN Length=2 bytes */
793 0x3e, 0x28, /* PN (0) */
794 0xb9, 0xdb, 0x61, 0xf8, 0x8b, 0x3a, 0xef, 0x26, 0x69, 0xf2, 0x57, 0xc6,
795 0x84, 0x25, 0x6b, 0x77, 0xbe, 0x8c, 0x43, 0x32, 0xf3, 0x9a, 0xd1, 0x85,
796 0x14, 0xbc, 0x89, 0x3b, 0x9c, 0xf3, 0xfc, 0x00, 0xa1, 0x3a, 0xc3, 0xc4,
797 0x1e, 0xdf, 0xd0, 0x11, 0x70, 0xd9, 0x02, 0x7a, 0xd4, 0xef, 0x86, 0x67,
798 0xb1, 0x1e, 0x5d, 0xe3, 0x7f, 0x82, 0x14, 0x52, 0xa5, 0x8a, 0x89, 0xa7,
799 0x98, 0x75, 0x2f, 0x8a, 0x00, 0xf3, 0xbd, 0x49, 0x26, 0x4d, 0x0c, 0xc7,
800 0x38, 0xe7, 0x91, 0x85, 0xc9, 0x21, 0x6a, 0x1c, 0xc4, 0xa3, 0x0e, 0xd8,
801 0xfe, 0xb1, 0x25, 0x1a,
804 static const QUIC_PKT_HDR rx_script_6a_expect_hdr = {
805 QUIC_PKT_TYPE_INITIAL,
815 {4, {0x36, 0xf4, 0x75, 0x2d}}, /* SCID */
817 NULL, 0, /* Token/Token Len */
821 static const unsigned char rx_script_6a_body[] = {
822 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
823 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
824 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
825 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
826 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
827 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
828 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
829 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
830 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
831 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
832 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
833 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
834 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
835 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
836 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
837 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
838 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
839 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
840 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
841 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
842 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
843 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
844 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
845 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
846 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
847 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
848 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
849 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
850 0x40, 0x5a, 0x02, 0x00, 0x00, 0x56, 0x03, 0x03, 0xc3, 0x45, 0xe8, 0xb8,
851 0xf9, 0x7c, 0x9f, 0x5d, 0xcf, 0x66, 0x25, 0xe4, 0x91, 0x0e, 0xb0, 0x5a,
852 0x14, 0xce, 0xaf, 0xea, 0x83, 0x12, 0xde, 0x68, 0xd9, 0x31, 0xf2, 0x23,
853 0x11, 0x3a, 0x15, 0xcb, 0x00, 0x13, 0x02, 0x00, 0x00, 0x2e, 0x00, 0x2b,
854 0x00, 0x02, 0x03, 0x04, 0x00, 0x33, 0x00, 0x24, 0x00, 0x1d, 0x00, 0x20,
855 0xab, 0xd3, 0xc6, 0x9f, 0x36, 0xd3, 0x52, 0x93, 0x87, 0xee, 0x92, 0x01,
856 0xa2, 0xd6, 0x9a, 0x5e, 0x61, 0x43, 0xcc, 0x4a, 0xcc, 0x7a, 0xcd, 0x83,
857 0xb2, 0xd9, 0xad, 0xd1, 0x14, 0xdc, 0x84, 0x61,
860 static const QUIC_PKT_HDR rx_script_6b_expect_hdr = {
861 QUIC_PKT_TYPE_HANDSHAKE,
871 {4, {0x36, 0xf4, 0x75, 0x2d}}, /* SCID */
873 NULL, 0, /* Token/Token Len */
877 static const unsigned char rx_script_6b_body[] = {
878 0x06, 0x00, 0x42, 0x9a, 0x08, 0x00, 0x00, 0x80, 0x00, 0x7e, 0x00, 0x10,
879 0x00, 0x08, 0x00, 0x06, 0x05, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x00, 0x39,
880 0x00, 0x6e, 0x47, 0xfa, 0x05, 0x5a, 0xe0, 0xec, 0x4a, 0xf3, 0x05, 0x04,
881 0x80, 0x08, 0x00, 0x00, 0x06, 0x04, 0x80, 0x08, 0x00, 0x00, 0x07, 0x04,
882 0x80, 0x08, 0x00, 0x00, 0x04, 0x04, 0x80, 0x0c, 0x00, 0x00, 0x08, 0x02,
883 0x40, 0x64, 0x09, 0x02, 0x40, 0x64, 0x01, 0x04, 0x80, 0x00, 0x75, 0x30,
884 0x03, 0x02, 0x45, 0xac, 0x0b, 0x01, 0x1a, 0x0c, 0x00, 0x02, 0x10, 0x35,
885 0xd7, 0x7d, 0x8b, 0xc5, 0xb1, 0x89, 0xb1, 0x5c, 0x23, 0x74, 0x50, 0xfd,
886 0x47, 0xfe, 0xd2, 0x00, 0x11, 0x96, 0x38, 0x27, 0xde, 0x7d, 0xfb, 0x2b,
887 0x38, 0x56, 0xe5, 0x2a, 0xb8, 0x6b, 0xfa, 0xaa, 0xde, 0x81, 0x0e, 0x01,
888 0x04, 0x0f, 0x04, 0x36, 0xf4, 0x75, 0x2d, 0x10, 0x04, 0xac, 0x88, 0x95,
889 0xbd, 0x20, 0x01, 0x00, 0x0b, 0x00, 0x01, 0x8f, 0x00, 0x00, 0x01, 0x8b,
890 0x00, 0x01, 0x86, 0x30, 0x82, 0x01, 0x82, 0x30, 0x82, 0x01, 0x29, 0xa0,
891 0x03, 0x02, 0x01, 0x02, 0x02, 0x14, 0x0a, 0x73, 0x0f, 0x86, 0x18, 0xf2,
892 0xc3, 0x30, 0x01, 0xd2, 0xc0, 0xc1, 0x62, 0x52, 0x13, 0xf1, 0x9c, 0x13,
893 0x39, 0xb5, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04,
894 0x03, 0x02, 0x30, 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04,
895 0x03, 0x0c, 0x0c, 0x6d, 0x61, 0x70, 0x61, 0x6b, 0x74, 0x2e, 0x6c, 0x6f,
896 0x63, 0x61, 0x6c, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x32, 0x30, 0x38, 0x30,
897 0x32, 0x31, 0x32, 0x30, 0x30, 0x31, 0x38, 0x5a, 0x17, 0x0d, 0x32, 0x32,
898 0x30, 0x39, 0x30, 0x31, 0x31, 0x32, 0x30, 0x30, 0x31, 0x38, 0x5a, 0x30,
899 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c,
900 0x6d, 0x61, 0x70, 0x61, 0x6b, 0x74, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
901 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
902 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03,
903 0x42, 0x00, 0x04, 0x67, 0xf4, 0xd3, 0x8f, 0x15, 0x6d, 0xee, 0x85, 0xcc,
904 0x2a, 0x77, 0xfc, 0x0b, 0x8f, 0x9f, 0xcf, 0xa9, 0x95, 0x5d, 0x5b, 0xcd,
905 0xb7, 0x8b, 0xba, 0x31, 0x0a, 0x73, 0x62, 0xc5, 0xd0, 0x0e, 0x07, 0x90,
906 0xae, 0x38, 0x43, 0x79, 0xce, 0x5e, 0x33, 0xad, 0x31, 0xbf, 0x9f, 0x2a,
907 0x56, 0x83, 0xa5, 0x24, 0x16, 0xab, 0x0c, 0xf1, 0x64, 0xbe, 0xe4, 0x93,
908 0xb5, 0x89, 0xd6, 0x05, 0xe4, 0xf7, 0x7b, 0xa3, 0x53, 0x30, 0x51, 0x30,
909 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x02, 0x64,
910 0x0f, 0x55, 0x69, 0x14, 0x91, 0x19, 0xed, 0xf9, 0x1a, 0xe9, 0x1d, 0xa5,
911 0x5a, 0xd0, 0x48, 0x96, 0x9f, 0x60, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d,
912 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x02, 0x64, 0x0f, 0x55, 0x69,
913 0x14, 0x91, 0x19, 0xed, 0xf9, 0x1a, 0xe9, 0x1d, 0xa5, 0x5a, 0xd0, 0x48,
914 0x96, 0x9f, 0x60, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01,
915 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0a, 0x06, 0x08,
916 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x47, 0x00, 0x30,
917 0x44, 0x02, 0x20, 0x0a, 0x82, 0x92, 0x6e, 0xd3, 0xc6, 0x66, 0xd9, 0xd3,
918 0x75, 0xff, 0x71, 0x3b, 0x61, 0x46, 0x21, 0x00, 0xe6, 0x21, 0x5d, 0x9c,
919 0x86, 0xe9, 0x65, 0x40, 0x4f, 0xeb, 0x70, 0x4f, 0x2c, 0xad, 0x00, 0x02,
920 0x20, 0x08, 0xc2, 0x07, 0x5d, 0x16, 0xfc, 0x54, 0x34, 0x2b, 0xb4, 0x18,
921 0x67, 0x44, 0x81, 0xc9, 0xa9, 0x67, 0x2e, 0xce, 0xa1, 0x02, 0x9f, 0x3b,
922 0xe5, 0x61, 0x16, 0x0b, 0x50, 0xf6, 0xa1, 0x50, 0x94, 0x00, 0x00, 0x0f,
923 0x00, 0x00, 0x4b, 0x04, 0x03, 0x00, 0x47, 0x30, 0x45, 0x02, 0x20, 0x78,
924 0x9e, 0xe0, 0x6a, 0x7a, 0xbd, 0xc3, 0x84, 0x3d, 0x25, 0x6a, 0x59, 0x23,
925 0x97, 0x52, 0x64, 0x4e, 0xb6, 0x9f, 0xcc, 0xd3, 0xd7, 0xa9, 0x29, 0x44,
926 0x75, 0x6d, 0x50, 0xfc, 0x22, 0xde, 0xd3, 0x02, 0x21, 0x00, 0xe5, 0x28,
927 0xd6, 0x5a, 0xd1, 0xec, 0x4a, 0xcc, 0x20, 0xb4, 0xea, 0x15, 0xfb, 0x8e,
928 0x73, 0xa8, 0x6b, 0xbb, 0x42, 0x70, 0x90, 0x08, 0x6e, 0x74, 0x6f, 0x5a,
929 0x05, 0xb5, 0x39, 0xee, 0x01, 0x04, 0x14, 0x00, 0x00, 0x30, 0xff, 0x9f,
930 0xb2, 0x1d, 0xcb, 0x4f, 0xfc, 0x7a, 0xac, 0xf4, 0x75, 0x24, 0x83, 0x5f,
931 0x8d, 0xa3, 0x3e, 0x9d, 0xef, 0x43, 0x67, 0x89, 0x5d, 0x55, 0xc7, 0xce,
932 0x80, 0xab, 0xc3, 0xc7, 0x74, 0xc7, 0xb2, 0x91, 0x27, 0xce, 0xd8, 0x5e,
933 0xc4, 0x4e, 0x96, 0x19, 0x68, 0x2d, 0xbe, 0x6f, 0x49, 0xfa,
936 static const QUIC_PKT_HDR rx_script_6c_expect_hdr = {
949 NULL, 0, /* Token/Token Len */
953 static const unsigned char rx_script_6c_body[] = {
954 0x18, 0x03, 0x00, 0x04, 0xf2, 0x94, 0x49, 0xc3, 0x34, 0xa1, 0xf4, 0x0f,
955 0xcb, 0xb8, 0x03, 0x04, 0x1f, 0xc8, 0x69, 0xb9, 0x3b, 0xd5, 0xc6, 0x93,
956 0x18, 0x02, 0x00, 0x04, 0x9a, 0x4f, 0xec, 0x52, 0xde, 0xd2, 0xc8, 0xb7,
957 0x1c, 0x0c, 0xf3, 0x4e, 0x46, 0xf0, 0x6c, 0x54, 0x34, 0x1b, 0x0d, 0x98,
958 0x18, 0x01, 0x00, 0x04, 0xe3, 0x33, 0x9e, 0x59, 0x00, 0x69, 0xc3, 0xac,
959 0xfc, 0x58, 0x0e, 0xa4, 0xf4, 0xf3, 0x23, 0x1b, 0xd6, 0x8e, 0x5b, 0x08,
962 static const struct rx_test_op rx_script_6[] = {
964 RX_OP_SET_RX_DCID(empty_conn_id)
965 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_6_c2s_init_dcid)
967 RX_OP_CHECK_PKT_N(6a)
968 RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
969 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
970 QRL_SUITE_AES256GCM, rx_script_6_handshake_secret)
971 RX_OP_CHECK_PKT_N(6b)
972 RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
973 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
974 QRL_SUITE_AES256GCM, rx_script_6_1rtt_secret)
975 RX_OP_CHECK_PKT_N(6c)
978 /* Discard Initial EL and try injecting the packet again */
979 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_INITIAL)
981 /* Initial packet is not output because we have discarded Initial keys */
982 RX_OP_CHECK_PKT_N(6b)
983 RX_OP_CHECK_PKT_N(6c)
985 /* Try again with discarded keys */
986 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_HANDSHAKE)
988 RX_OP_CHECK_PKT_N(6c)
992 RX_OP_CHECK_PKT_N(6c)
994 /* Try again with discarded 1-RTT keys */
995 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_1RTT)
999 /* Recreate QRL, test reading packets received before key */
1000 RX_OP_SET_SCID_LEN(0)
1001 RX_OP_SET_RX_DCID(empty_conn_id)
1003 RX_OP_CHECK_NO_PKT()
1004 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_6_c2s_init_dcid)
1005 RX_OP_CHECK_PKT_N(6a)
1006 RX_OP_CHECK_NO_PKT()
1007 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
1008 QRL_SUITE_AES256GCM, rx_script_6_handshake_secret)
1009 RX_OP_CHECK_PKT_N(6b)
1010 RX_OP_CHECK_NO_PKT()
1011 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
1012 QRL_SUITE_AES256GCM, rx_script_6_1rtt_secret)
1013 RX_OP_CHECK_PKT_N(6c)
1014 RX_OP_CHECK_NO_PKT()
1020 * 7. Real World - S2C Multiple Packets
1021 * - Initial, Handshake, 1-RTT (ChaCha20-Poly1305)
1023 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
1024 static const QUIC_CONN_ID rx_script_7_c2s_init_dcid = {
1025 4, {0xfa, 0x5d, 0xd6, 0x80}
1028 static const unsigned char rx_script_7_handshake_secret[32] = {
1029 0x85, 0x44, 0xa4, 0x02, 0x46, 0x5b, 0x2a, 0x92, 0x80, 0x71, 0xfd, 0x11,
1030 0x89, 0x73, 0x84, 0xeb, 0x3e, 0x0d, 0x89, 0x4f, 0x71, 0xdc, 0x9c, 0xdd,
1031 0x55, 0x77, 0x9e, 0x79, 0x7b, 0xeb, 0xfa, 0x86,
1034 static const unsigned char rx_script_7_1rtt_secret[32] = {
1035 0x4a, 0x77, 0xb6, 0x0e, 0xfd, 0x90, 0xca, 0xbf, 0xc0, 0x1a, 0x64, 0x9f,
1036 0xc0, 0x03, 0xd3, 0x8d, 0xc5, 0x41, 0x04, 0x50, 0xb1, 0x5b, 0x74, 0xe7,
1037 0xe3, 0x99, 0x0c, 0xdf, 0x74, 0x61, 0x35, 0xe6,
1040 static const unsigned char rx_script_7_in[] = {
1041 /* First Packet: Initial */
1042 0xc2, /* Long, Initial, PN Length=2 bytes */
1043 0x00, 0x00, 0x00, 0x01, /* Version */
1045 0x04, 0x03, 0x45, 0x0c, 0x7a, /* SCID */
1046 0x00, /* Token Length */
1047 0x41, 0xcb, /* Length (459) */
1048 0x3c, 0xe0, /* PN (0) */
1049 0x85, 0x05, 0xc2, 0x4d, 0x0f, 0xf3, 0x62, 0x51, 0x04, 0x33, 0xfa, 0xb5,
1050 0xa3, 0x02, 0xbd, 0x5c, 0x22, 0x0c, 0x1d, 0xda, 0x06, 0xf1, 0xd7, 0xe0,
1051 0xc8, 0x56, 0xb0, 0x3d, 0xc1, 0x49, 0x8c, 0xc2, 0x88, 0x5a, 0x0e, 0xd5,
1052 0x67, 0x72, 0xec, 0xcc, 0x7a, 0x2b, 0x46, 0x17, 0x49, 0x4b, 0x28, 0x6a,
1053 0x89, 0x71, 0xfd, 0x31, 0x9a, 0xa1, 0x97, 0x64, 0xe2, 0xbf, 0xa0, 0x6d,
1054 0xf6, 0x76, 0x83, 0x28, 0xc4, 0xd5, 0x39, 0x87, 0x22, 0x7c, 0x11, 0x9a,
1055 0x53, 0x66, 0xb4, 0x27, 0xf1, 0xab, 0x6f, 0x49, 0x43, 0x3f, 0x9a, 0x23,
1056 0xd3, 0x53, 0x06, 0xe8, 0x14, 0xfd, 0xc0, 0x67, 0x1f, 0x88, 0x2a, 0xa8,
1057 0xae, 0x5f, 0x05, 0x0a, 0xeb, 0x66, 0x72, 0x8c, 0x46, 0xcc, 0x54, 0x21,
1058 0x5e, 0x14, 0xfe, 0x68, 0xc7, 0xf7, 0x60, 0x67, 0xb5, 0xa7, 0x0d, 0xf4,
1059 0xe1, 0xff, 0x60, 0xe3, 0x11, 0x38, 0x92, 0x90, 0xc2, 0x48, 0x28, 0xbf,
1060 0xf3, 0x85, 0x27, 0xfe, 0xbf, 0x42, 0x26, 0x1a, 0x4e, 0x78, 0xf1, 0xf0,
1061 0x88, 0x16, 0x1b, 0x64, 0x5f, 0x66, 0x02, 0x0b, 0x45, 0x3d, 0x38, 0xd9,
1062 0x09, 0xd5, 0xff, 0xc2, 0x68, 0x02, 0x2c, 0xc4, 0x3f, 0x60, 0x6e, 0x2f,
1063 0x7f, 0x43, 0xf7, 0x1a, 0x37, 0xcc, 0xe0, 0xe0, 0x4b, 0x96, 0xc1, 0xb1,
1064 0x8b, 0x1c, 0x7c, 0x6e, 0x80, 0xe3, 0x92, 0x9b, 0x86, 0x87, 0x1f, 0x9a,
1065 0x6a, 0x62, 0x18, 0xf4, 0x86, 0xc2, 0x3e, 0x33, 0xa3, 0xbf, 0x43, 0x96,
1066 0x6e, 0xff, 0x94, 0xaf, 0x6d, 0x23, 0x5c, 0x42, 0xed, 0xe7, 0xb9, 0x2c,
1067 0x33, 0xb0, 0xc6, 0x3d, 0x44, 0x00, 0x0b, 0xa3, 0x39, 0xa8, 0xeb, 0x8c,
1068 0x81, 0x1a, 0x99, 0x20, 0xbd, 0xfa, 0xf3, 0xf4, 0xf0, 0x11, 0xd8, 0x41,
1069 0x31, 0x8d, 0xdc, 0x0d, 0x00, 0xa6, 0x31, 0x40, 0xc6, 0xc6, 0xad, 0x74,
1070 0x93, 0x62, 0x1c, 0x55, 0xce, 0x5f, 0x8c, 0x5b, 0x3c, 0xcb, 0x25, 0x5e,
1071 0xbf, 0xed, 0xbb, 0x3c, 0x97, 0x4b, 0x62, 0xe0, 0xba, 0xf1, 0xb0, 0x30,
1072 0xbf, 0x35, 0x89, 0x7e, 0x25, 0x61, 0x54, 0x86, 0x52, 0x11, 0x86, 0x90,
1073 0xc3, 0xf5, 0xad, 0xa0, 0x96, 0x30, 0xb2, 0xf0, 0xa6, 0x79, 0x39, 0x1c,
1074 0x51, 0x42, 0xa1, 0x00, 0x6f, 0x55, 0x7d, 0xdc, 0xd0, 0x7c, 0xcf, 0x01,
1075 0x88, 0x03, 0xd7, 0x2d, 0x65, 0x2b, 0x40, 0xee, 0xba, 0x10, 0xd8, 0x0c,
1076 0x85, 0x14, 0xb7, 0x4d, 0x9e, 0x7d, 0x7c, 0xde, 0x7f, 0x0d, 0x0e, 0x3b,
1077 0x3d, 0xe3, 0xd3, 0x63, 0xc2, 0xed, 0xc7, 0x41, 0xaf, 0x05, 0x85, 0x87,
1078 0x46, 0x55, 0x7e, 0xbe, 0x14, 0x5b, 0x98, 0xae, 0x6e, 0x67, 0x1a, 0x65,
1079 0xc6, 0xcf, 0xe1, 0x28, 0x50, 0x6b, 0xb4, 0xf6, 0xba, 0x63, 0xbc, 0xf1,
1080 0xd7, 0xa4, 0x97, 0x2d, 0x4d, 0x04, 0x26, 0x96, 0xec, 0x0c, 0xd4, 0xae,
1081 0x6a, 0xca, 0x7e, 0x65, 0xc5, 0x43, 0x7e, 0xf8, 0x77, 0x61, 0xd0, 0x2c,
1082 0xe5, 0x37, 0x0a, 0xb3, 0x7a, 0x8c, 0x2a, 0xa1, 0xdc, 0x29, 0xdb, 0xec,
1083 0xca, 0xdc, 0xfe, 0xdd, 0x38, 0xd2, 0x13, 0x9f, 0x94, 0x6d, 0x5b, 0x87,
1084 0xf3, 0x15, 0xa8, 0xe5, 0xe9, 0x65, 0x1d, 0x4f, 0x92, 0x1b, 0xf4, 0xa6,
1085 0xa4, 0xd6, 0x22, 0xfc, 0x26, 0x1b, 0x35, 0xa4, 0x1c, 0x88, 0x9f, 0x7d,
1086 0xe0, 0x9a, 0x89, 0x0f, 0x6c, 0xc1, 0xda, 0x6e, 0x45, 0xce, 0x74, 0xb1,
1089 /* Second Packet: Handshake */
1090 0xeb, /* Long, Handshake, PN Length=2 bytes */
1091 0x00, 0x00, 0x00, 0x01, /* Version */
1093 0x04, 0x03, 0x45, 0x0c, 0x7a, /* SCID */
1094 0x42, 0xa3, /* Length (675) */
1095 0x43, 0x29, /* PN (0) */
1096 0xff, 0xdb, 0xcf, 0x3c, 0x17, 0xcf, 0xdc, 0x42, 0x3a, 0x59, 0x88, 0xdb,
1097 0x13, 0xef, 0x09, 0x3d, 0xf2, 0x24, 0xf3, 0xeb, 0xca, 0xb0, 0xe1, 0xa4,
1098 0x67, 0x64, 0x65, 0x80, 0x5f, 0x73, 0x29, 0x69, 0x29, 0xba, 0x03, 0x77,
1099 0x22, 0xc8, 0xa8, 0xd5, 0x21, 0xf2, 0xa2, 0x30, 0x7f, 0x86, 0x3a, 0x8a,
1100 0xdd, 0x92, 0x33, 0xa6, 0x57, 0x21, 0x39, 0xdd, 0x34, 0xb4, 0x39, 0xa7,
1101 0x6f, 0x0a, 0x14, 0xba, 0x9e, 0x3b, 0x3a, 0x6a, 0x4b, 0xc5, 0xda, 0x44,
1102 0x82, 0xca, 0x52, 0x86, 0x68, 0x8a, 0x0c, 0x5e, 0xeb, 0x1e, 0x81, 0x43,
1103 0x3a, 0x59, 0x2c, 0x26, 0x63, 0xa3, 0x89, 0x92, 0x80, 0xe9, 0x75, 0xc2,
1104 0xdb, 0xb9, 0x58, 0x6d, 0xab, 0xfd, 0x21, 0xe0, 0x35, 0x79, 0x2e, 0x56,
1105 0x7b, 0xfb, 0xb3, 0x7a, 0x05, 0x33, 0x0f, 0x13, 0xe5, 0xef, 0x04, 0x41,
1106 0x69, 0x85, 0x91, 0x24, 0xce, 0xb5, 0x21, 0x8d, 0x0a, 0x13, 0xda, 0xae,
1107 0x86, 0x2f, 0x25, 0x1f, 0x9c, 0x70, 0x8a, 0xaa, 0x05, 0xeb, 0x30, 0x93,
1108 0x50, 0xc1, 0x39, 0xab, 0x99, 0x8a, 0x31, 0xc1, 0xc1, 0x5e, 0x39, 0xcf,
1109 0x64, 0x3f, 0x9f, 0x5c, 0xa5, 0xa1, 0x88, 0xb2, 0x5f, 0x23, 0xcb, 0x76,
1110 0xe5, 0xf3, 0x2d, 0xa0, 0xed, 0xad, 0xcf, 0x30, 0x05, 0x44, 0xdc, 0xa5,
1111 0x81, 0xb1, 0x7f, 0x78, 0x0d, 0x4d, 0x96, 0xa3, 0xcb, 0xcb, 0x45, 0xcf,
1112 0x5f, 0x22, 0xb8, 0x93, 0x2b, 0x16, 0xe0, 0x1c, 0x53, 0x34, 0x76, 0x3b,
1113 0x7b, 0x78, 0xa1, 0x46, 0x40, 0x43, 0x4b, 0x0e, 0x1c, 0xfd, 0xcf, 0x01,
1114 0xf1, 0x2c, 0xee, 0xd0, 0xbd, 0x9f, 0x44, 0xd2, 0xd7, 0x13, 0xf9, 0x65,
1115 0x82, 0xf5, 0x42, 0xec, 0x9f, 0x5d, 0x51, 0x5a, 0x7b, 0xf2, 0x39, 0xbb,
1116 0xa6, 0x19, 0x5c, 0x73, 0x95, 0x65, 0x5b, 0x64, 0x2f, 0xda, 0x50, 0xd0,
1117 0x02, 0x34, 0x3f, 0x35, 0xc1, 0xd6, 0x31, 0x3b, 0xcf, 0x3f, 0x81, 0x8d,
1118 0xe0, 0x40, 0xfd, 0x6d, 0x32, 0x68, 0xa4, 0xf2, 0x4e, 0x3a, 0x4a, 0x42,
1119 0x2c, 0x07, 0x2d, 0x27, 0xa3, 0x34, 0xe7, 0x27, 0x87, 0x80, 0x76, 0xc0,
1120 0xa0, 0x72, 0x05, 0xf2, 0x88, 0x81, 0xe3, 0x32, 0x00, 0x76, 0x8d, 0x24,
1121 0x5c, 0x97, 0x2d, 0xd6, 0xb8, 0x34, 0xf8, 0x1c, 0x1a, 0x6d, 0xc7, 0x3f,
1122 0xcf, 0x56, 0xae, 0xec, 0x26, 0x74, 0x53, 0x69, 0xcd, 0x7a, 0x97, 0x29,
1123 0xab, 0x12, 0x7d, 0x75, 0xf8, 0x8d, 0x5b, 0xc0, 0x77, 0x20, 0xb6, 0x6a,
1124 0x0b, 0xce, 0x98, 0x50, 0xca, 0x47, 0x42, 0x1e, 0x5d, 0xc3, 0x24, 0x5a,
1125 0x47, 0x48, 0x3b, 0xa0, 0x9e, 0x43, 0xe9, 0x8d, 0x18, 0x23, 0xda, 0x6f,
1126 0x8c, 0xda, 0xd0, 0x3e, 0xdb, 0x37, 0xff, 0xfc, 0x7e, 0x17, 0xbe, 0x42,
1127 0xfd, 0xdb, 0x51, 0xb1, 0xa4, 0xfd, 0x9a, 0x20, 0x27, 0x24, 0x17, 0x04,
1128 0x70, 0xb6, 0x21, 0x87, 0x88, 0xe9, 0xda, 0x63, 0xcb, 0xcb, 0x1d, 0xaf,
1129 0x4a, 0x46, 0x76, 0x88, 0xa1, 0xf8, 0x48, 0x6c, 0x06, 0xb4, 0x62, 0x1a,
1130 0x67, 0x18, 0xb0, 0x1d, 0x58, 0x6a, 0xfe, 0x1f, 0xf1, 0x48, 0xff, 0xcb,
1131 0xa4, 0xd1, 0xa8, 0x12, 0x1f, 0x45, 0x94, 0x2f, 0x55, 0x80, 0x6a, 0x06,
1132 0xcc, 0x7b, 0xb0, 0xcc, 0xb8, 0x06, 0x52, 0x16, 0xe3, 0x6e, 0x7e, 0xb0,
1133 0x42, 0xfd, 0x3b, 0x7e, 0x0a, 0x42, 0x7b, 0x73, 0xaf, 0x2c, 0xf3, 0xbd,
1134 0xe5, 0x72, 0x8c, 0x16, 0xb2, 0xd7, 0x7a, 0x11, 0xb6, 0x9f, 0xd1, 0x69,
1135 0xc1, 0x1a, 0xe0, 0x26, 0x26, 0x13, 0xe2, 0x75, 0xf5, 0x74, 0xae, 0x3f,
1136 0xee, 0x1e, 0x09, 0x63, 0x5a, 0x30, 0x19, 0xa5, 0x59, 0x48, 0x90, 0x9b,
1137 0x46, 0x56, 0xd8, 0x6f, 0x6b, 0x76, 0x82, 0x32, 0xc7, 0x29, 0x76, 0x2e,
1138 0x32, 0xb6, 0x23, 0x99, 0xeb, 0x92, 0x5d, 0xc4, 0x4c, 0xa1, 0xe9, 0x26,
1139 0x37, 0x9a, 0x7d, 0x4c, 0x16, 0x9c, 0x18, 0xe9, 0xc0, 0xff, 0x48, 0x79,
1140 0xb1, 0x7b, 0x0b, 0x1e, 0x6f, 0xb1, 0x77, 0xa5, 0xd2, 0xc6, 0x9a, 0xa9,
1141 0xfc, 0xd1, 0x0f, 0x69, 0xf3, 0xe0, 0x49, 0x70, 0x57, 0x80, 0x86, 0xa7,
1142 0x3f, 0x54, 0xa8, 0x60, 0xfb, 0xe4, 0x06, 0xa3, 0x13, 0xb9, 0x2f, 0xa7,
1143 0x37, 0x80, 0x0c, 0x43, 0xac, 0x2f, 0xae, 0x6e, 0x62, 0x2b, 0x53, 0xe4,
1144 0xfe, 0x58, 0xd7, 0x8b, 0x96, 0xdc, 0xe6, 0xd3, 0x86, 0xb8, 0xd6, 0x42,
1145 0x5b, 0x68, 0x03, 0x48, 0x3f, 0xcd, 0xee, 0x39, 0x8b, 0xc4, 0x53, 0x30,
1146 0x87, 0x48, 0x2a, 0x01, 0x9d, 0x6f, 0x8e, 0x36, 0x75, 0x73, 0xef, 0x77,
1147 0x3a, 0x82, 0xd8, 0x4c, 0x0e, 0x7f, 0xb3, 0x8f, 0x16, 0xd1, 0x10, 0xcf,
1148 0x2f, 0xa3, 0xdf, 0x65, 0xba, 0x91, 0x79, 0xf6, 0x93, 0x60, 0x08, 0xe5,
1149 0xdb, 0x73, 0x02, 0x7a, 0x0b, 0x0e, 0xcc, 0x3b, 0x1f, 0x08, 0x2d, 0x51,
1150 0x3e, 0x87, 0x48, 0xd3, 0xd3, 0x75, 0xc2, 0x28, 0xa3, 0xf3, 0x02, 0xde,
1151 0x8f, 0xa6, 0xbd, 0xb3, 0x19, 0xa0, 0xdb, 0x48, 0x51, 0x03, 0x5f, 0x98,
1154 /* Third Packet: 1-RTT */
1155 0x5c, /* Short, 1-RTT, Spin=0, KP=0, PN Length=2 bytes */
1156 0x4f, 0x33, /* PN (0) */
1157 0x16, 0x75, 0x98, 0x67, 0x04, 0x16, 0x61, 0xe3, 0x00, 0xb7, 0x9d, 0x5c,
1158 0x53, 0x4c, 0x26, 0x90, 0x92, 0x8e, 0x0e, 0xc0, 0x9c, 0x6d, 0x8b, 0xac,
1159 0x15, 0x6d, 0x89, 0x74, 0x2f, 0xe7, 0x84, 0xe3, 0x46, 0x46, 0x8c, 0xc1,
1160 0x21, 0x7c, 0x44, 0xa5, 0x00, 0x29, 0xca, 0xf2, 0x11, 0x18, 0xe0, 0x04,
1161 0x40, 0x55, 0xd2, 0xa7, 0xe5, 0x9d, 0x22, 0xa2, 0x2a, 0x6c, 0x03, 0x87,
1162 0xa3, 0xa3, 0xfa, 0xf5, 0x6c, 0xd7, 0x7d, 0xae, 0x3f, 0x28, 0x01, 0xae,
1163 0x06, 0x11, 0x69, 0x67, 0x90, 0x57, 0x5a, 0xd0, 0xeb, 0xdd, 0xac, 0xbd,
1164 0x7f, 0x33, 0x86, 0xbb,
1167 static const QUIC_PKT_HDR rx_script_7a_expect_hdr = {
1168 QUIC_PKT_TYPE_INITIAL,
1177 {0, {0}}, /* DCID */
1178 {4, {0x03, 0x45, 0x0c, 0x7a}}, /* SCID */
1180 NULL, 0, /* Token/Token Len */
1184 static const unsigned char rx_script_7a_body[] = {
1185 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1186 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1187 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1188 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1189 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1190 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1191 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1192 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1194 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1195 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1196 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1197 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1198 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1199 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1200 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1201 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1202 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1203 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1204 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1205 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1206 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1207 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1208 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1209 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1210 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1211 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1212 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1213 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
1214 0x00, 0x40, 0x5a, 0x02, 0x00, 0x00, 0x56, 0x03, 0x03, 0xd5, 0xfb, 0x6a,
1215 0x81, 0x1c, 0xdb, 0xa2, 0x5c, 0x11, 0x31, 0xda, 0x15, 0x28, 0x97, 0x94,
1216 0x83, 0xfd, 0x9d, 0x91, 0x0e, 0x87, 0x71, 0x46, 0x64, 0xb4, 0xd9, 0x9e,
1217 0xbd, 0xa8, 0x48, 0x32, 0xbf, 0x00, 0x13, 0x03, 0x00, 0x00, 0x2e, 0x00,
1218 0x2b, 0x00, 0x02, 0x03, 0x04, 0x00, 0x33, 0x00, 0x24, 0x00, 0x1d, 0x00,
1219 0x20, 0xef, 0xbb, 0x46, 0xe9, 0xb4, 0xf6, 0x54, 0xc4, 0x07, 0x71, 0xdc,
1220 0x50, 0xd5, 0x69, 0x40, 0xbc, 0x85, 0x7f, 0xf9, 0x48, 0x14, 0xe3, 0xd6,
1221 0x08, 0xa9, 0x0b, 0xfd, 0xbe, 0xf1, 0x57, 0x21, 0x34,
1224 static const QUIC_PKT_HDR rx_script_7b_expect_hdr = {
1225 QUIC_PKT_TYPE_HANDSHAKE,
1234 {0, {0}}, /* DCID */
1235 {4, {0x03, 0x45, 0x0c, 0x7a}}, /* SCID */
1237 NULL, 0, /* Token/Token Len */
1241 static const unsigned char rx_script_7b_body[] = {
1242 0x06, 0x00, 0x42, 0x8d, 0x08, 0x00, 0x00, 0x82, 0x00, 0x80, 0x00, 0x10,
1243 0x00, 0x08, 0x00, 0x06, 0x05, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x00, 0x39,
1244 0x00, 0x70, 0x46, 0x0a, 0x0d, 0xdc, 0x59, 0xf0, 0x4e, 0xb2, 0x2c, 0xac,
1245 0x69, 0x6a, 0xc9, 0x77, 0xa9, 0x99, 0x05, 0x04, 0x80, 0x08, 0x00, 0x00,
1246 0x06, 0x04, 0x80, 0x08, 0x00, 0x00, 0x07, 0x04, 0x80, 0x08, 0x00, 0x00,
1247 0x04, 0x04, 0x80, 0x0c, 0x00, 0x00, 0x08, 0x02, 0x40, 0x64, 0x09, 0x02,
1248 0x40, 0x64, 0x01, 0x04, 0x80, 0x00, 0x75, 0x30, 0x03, 0x02, 0x45, 0xac,
1249 0x0b, 0x01, 0x1a, 0x0c, 0x00, 0x02, 0x10, 0x42, 0xf0, 0xed, 0x09, 0x07,
1250 0x5b, 0xd9, 0x5a, 0xb2, 0x39, 0x5d, 0x73, 0x2c, 0x57, 0x1f, 0x50, 0x00,
1251 0x0b, 0xe0, 0x3e, 0xf3, 0xd6, 0x91, 0x6f, 0x9c, 0xcc, 0x31, 0xf7, 0xa5,
1252 0x0e, 0x01, 0x04, 0x0f, 0x04, 0x03, 0x45, 0x0c, 0x7a, 0x10, 0x04, 0xfa,
1253 0x5d, 0xd6, 0x80, 0x20, 0x01, 0x00, 0x0b, 0x00, 0x01, 0x8f, 0x00, 0x00,
1254 0x01, 0x8b, 0x00, 0x01, 0x86, 0x30, 0x82, 0x01, 0x82, 0x30, 0x82, 0x01,
1255 0x29, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x14, 0x0a, 0x73, 0x0f, 0x86,
1256 0x18, 0xf2, 0xc3, 0x30, 0x01, 0xd2, 0xc0, 0xc1, 0x62, 0x52, 0x13, 0xf1,
1257 0x9c, 0x13, 0x39, 0xb5, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce,
1258 0x3d, 0x04, 0x03, 0x02, 0x30, 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03,
1259 0x55, 0x04, 0x03, 0x0c, 0x0c, 0x6d, 0x61, 0x70, 0x61, 0x6b, 0x74, 0x2e,
1260 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x32, 0x30,
1261 0x38, 0x30, 0x32, 0x31, 0x32, 0x30, 0x30, 0x31, 0x38, 0x5a, 0x17, 0x0d,
1262 0x32, 0x32, 0x30, 0x39, 0x30, 0x31, 0x31, 0x32, 0x30, 0x30, 0x31, 0x38,
1263 0x5a, 0x30, 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03,
1264 0x0c, 0x0c, 0x6d, 0x61, 0x70, 0x61, 0x6b, 0x74, 0x2e, 0x6c, 0x6f, 0x63,
1265 0x61, 0x6c, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce,
1266 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01,
1267 0x07, 0x03, 0x42, 0x00, 0x04, 0x67, 0xf4, 0xd3, 0x8f, 0x15, 0x6d, 0xee,
1268 0x85, 0xcc, 0x2a, 0x77, 0xfc, 0x0b, 0x8f, 0x9f, 0xcf, 0xa9, 0x95, 0x5d,
1269 0x5b, 0xcd, 0xb7, 0x8b, 0xba, 0x31, 0x0a, 0x73, 0x62, 0xc5, 0xd0, 0x0e,
1270 0x07, 0x90, 0xae, 0x38, 0x43, 0x79, 0xce, 0x5e, 0x33, 0xad, 0x31, 0xbf,
1271 0x9f, 0x2a, 0x56, 0x83, 0xa5, 0x24, 0x16, 0xab, 0x0c, 0xf1, 0x64, 0xbe,
1272 0xe4, 0x93, 0xb5, 0x89, 0xd6, 0x05, 0xe4, 0xf7, 0x7b, 0xa3, 0x53, 0x30,
1273 0x51, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14,
1274 0x02, 0x64, 0x0f, 0x55, 0x69, 0x14, 0x91, 0x19, 0xed, 0xf9, 0x1a, 0xe9,
1275 0x1d, 0xa5, 0x5a, 0xd0, 0x48, 0x96, 0x9f, 0x60, 0x30, 0x1f, 0x06, 0x03,
1276 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x02, 0x64, 0x0f,
1277 0x55, 0x69, 0x14, 0x91, 0x19, 0xed, 0xf9, 0x1a, 0xe9, 0x1d, 0xa5, 0x5a,
1278 0xd0, 0x48, 0x96, 0x9f, 0x60, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13,
1279 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0a,
1280 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x47,
1281 0x00, 0x30, 0x44, 0x02, 0x20, 0x0a, 0x82, 0x92, 0x6e, 0xd3, 0xc6, 0x66,
1282 0xd9, 0xd3, 0x75, 0xff, 0x71, 0x3b, 0x61, 0x46, 0x21, 0x00, 0xe6, 0x21,
1283 0x5d, 0x9c, 0x86, 0xe9, 0x65, 0x40, 0x4f, 0xeb, 0x70, 0x4f, 0x2c, 0xad,
1284 0x00, 0x02, 0x20, 0x08, 0xc2, 0x07, 0x5d, 0x16, 0xfc, 0x54, 0x34, 0x2b,
1285 0xb4, 0x18, 0x67, 0x44, 0x81, 0xc9, 0xa9, 0x67, 0x2e, 0xce, 0xa1, 0x02,
1286 0x9f, 0x3b, 0xe5, 0x61, 0x16, 0x0b, 0x50, 0xf6, 0xa1, 0x50, 0x94, 0x00,
1287 0x00, 0x0f, 0x00, 0x00, 0x4c, 0x04, 0x03, 0x00, 0x48, 0x30, 0x46, 0x02,
1288 0x21, 0x00, 0xaa, 0x18, 0x61, 0x93, 0xdf, 0xbb, 0x79, 0xe7, 0x34, 0x7e,
1289 0x2e, 0x61, 0x13, 0x8c, 0xa0, 0x33, 0xfb, 0x33, 0xca, 0xfc, 0xd2, 0x45,
1290 0xb0, 0xc7, 0x89, 0x3d, 0xf1, 0xd6, 0x54, 0x94, 0x05, 0xb6, 0x02, 0x21,
1291 0x00, 0xef, 0x6c, 0xb6, 0xf2, 0x00, 0xb2, 0x32, 0xb1, 0xf3, 0x3f, 0x59,
1292 0xf5, 0xc8, 0x18, 0xbe, 0x39, 0xbb, 0x27, 0xf8, 0x67, 0xac, 0xcb, 0x63,
1293 0xa4, 0x29, 0xfb, 0x8e, 0x88, 0x0f, 0xe5, 0xe9, 0x7e, 0x14, 0x00, 0x00,
1294 0x20, 0xfc, 0x2c, 0x4c, 0xa7, 0x77, 0x24, 0x79, 0x29, 0xa8, 0x82, 0x1a,
1295 0x4d, 0x58, 0x9d, 0x82, 0xe2, 0x09, 0x36, 0x63, 0x0e, 0x0b, 0x55, 0x51,
1296 0x80, 0x93, 0x40, 0xda, 0x41, 0x33, 0x08, 0x10, 0x2c,
1299 static const QUIC_PKT_HDR rx_script_7c_expect_hdr = {
1309 {0, {0}}, /* DCID */
1310 {0, {0}}, /* SCID */
1312 NULL, 0, /* Token/Token Len */
1316 static const unsigned char rx_script_7c_body[] = {
1317 0x18, 0x03, 0x00, 0x04, 0xf7, 0x75, 0x72, 0xa2, 0xfd, 0x17, 0xd4, 0x82,
1318 0x8e, 0xe9, 0x5b, 0xce, 0xed, 0xec, 0x88, 0xb9, 0x73, 0xbf, 0x36, 0x9f,
1319 0x18, 0x02, 0x00, 0x04, 0x5f, 0x43, 0x96, 0xe4, 0x15, 0xdc, 0x56, 0x6b,
1320 0x67, 0x4c, 0x36, 0xb2, 0xe2, 0x77, 0xdc, 0x6e, 0xb9, 0x2c, 0x0d, 0x79,
1321 0x18, 0x01, 0x00, 0x04, 0xcb, 0x83, 0x4a, 0xf4, 0x8d, 0x7b, 0x69, 0x90,
1322 0xaf, 0x0d, 0xd2, 0x38, 0xa4, 0xf1, 0x94, 0xff, 0x63, 0x24, 0xd3, 0x7a,
1325 static const struct rx_test_op rx_script_7[] = {
1327 RX_OP_SET_RX_DCID(empty_conn_id)
1328 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_7_c2s_init_dcid)
1330 RX_OP_CHECK_PKT_N(7a)
1331 RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
1332 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
1333 QRL_SUITE_CHACHA20POLY1305, rx_script_7_handshake_secret)
1334 RX_OP_CHECK_PKT_N(7b)
1335 RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
1336 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
1337 QRL_SUITE_CHACHA20POLY1305, rx_script_7_1rtt_secret)
1338 RX_OP_CHECK_PKT_N(7c)
1339 RX_OP_CHECK_NO_PKT()
1341 /* Discard Initial EL and try injecting the packet again */
1342 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_INITIAL)
1344 /* Initial packet is not output because we have discarded Initial keys */
1345 RX_OP_CHECK_PKT_N(7b)
1346 RX_OP_CHECK_PKT_N(7c)
1347 RX_OP_CHECK_NO_PKT()
1348 /* Try again with discarded keys */
1349 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_HANDSHAKE)
1351 RX_OP_CHECK_PKT_N(7c)
1352 RX_OP_CHECK_NO_PKT()
1355 RX_OP_CHECK_PKT_N(7c)
1356 RX_OP_CHECK_NO_PKT()
1357 /* Try again with discarded 1-RTT keys */
1358 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_1RTT)
1360 RX_OP_CHECK_NO_PKT()
1362 /* Recreate QRL, test reading packets received before key */
1363 RX_OP_SET_SCID_LEN(0)
1364 RX_OP_SET_RX_DCID(empty_conn_id)
1366 RX_OP_CHECK_NO_PKT()
1367 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_7_c2s_init_dcid)
1368 RX_OP_CHECK_PKT_N(7a)
1369 RX_OP_CHECK_NO_PKT()
1370 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
1371 QRL_SUITE_CHACHA20POLY1305, rx_script_7_handshake_secret)
1372 RX_OP_CHECK_PKT_N(7b)
1373 RX_OP_CHECK_NO_PKT()
1374 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
1375 QRL_SUITE_CHACHA20POLY1305, rx_script_7_1rtt_secret)
1376 RX_OP_CHECK_PKT_N(7c)
1377 RX_OP_CHECK_NO_PKT()
1381 #endif /* !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) */
1384 * 8. Real World - S2C Multiple Packets with Peer Initiated Key Phase Update
1386 static const unsigned char rx_script_8_1rtt_secret[32] = {
1387 0x5f, 0x1f, 0x47, 0xea, 0xc3, 0xb2, 0xce, 0x73, 0xfb, 0xa2, 0x9f, 0xac,
1388 0xc3, 0xa0, 0xfe, 0x9b, 0xf3, 0xc0, 0xde, 0x5d, 0x33, 0x11, 0x1c, 0x70,
1389 0xdd, 0xb4, 0x06, 0xcc, 0xdf, 0x7d, 0xe9, 0x9a
1392 static const unsigned char rx_script_8a_in[] = {
1393 0x51, /* Short, 1-RTT, PN Length=2 bytes, KP=0 */
1394 0xcb, 0xf4, /* PN (4) */
1395 0x3f, 0x68, 0x7b, 0xa8, 0x2b, 0xb9, 0xfa, 0x7d, 0xe4, 0x6b, 0x20, 0x48,
1396 0xd1, 0x3c, 0xcb, 0x4b, 0xef, 0xb1, 0xfd, 0x5e, 0x1b, 0x19, 0x83, 0xa9,
1397 0x47, 0x62, 0xc1, 0x6e, 0xef, 0x27, 0xc3, 0x9b, 0x8f, 0x3f, 0xce, 0x11,
1398 0x68, 0xf5, 0x73, 0x0d, 0xf2, 0xdc, 0xe0, 0x28, 0x28, 0x79, 0xa6, 0x39,
1402 static const QUIC_PKT_HDR rx_script_8a_expect_hdr = {
1412 {0, {0}}, /* DCID */
1413 {0, {0}}, /* SCID */
1415 NULL, 0, /* Token/Token Len */
1419 static const unsigned char rx_script_8a_body[] = {
1420 0x02, 0x03, 0x06, 0x00, 0x03, 0x0c, 0x00, 0x1b, 0x49, 0x27, 0x6d, 0x20,
1421 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x6e,
1422 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65
1425 static const unsigned char rx_script_8b_in[] = {
1426 0x52, /* Short, 1-RTT, PN Length=2 bytes, KP=1 */
1427 0x21, 0x8e, /* PN (5) */
1428 0xa2, 0x6a, 0x9c, 0x83, 0x24, 0x48, 0xae, 0x60, 0x1e, 0xc2, 0xa5, 0x91,
1429 0xfa, 0xe5, 0xf2, 0x05, 0x14, 0x37, 0x04, 0x6a, 0xa8, 0xae, 0x06, 0x58,
1430 0xd7, 0x85, 0x48, 0xd7, 0x3b, 0x85, 0x9e, 0x5a, 0xb3, 0x46, 0x89, 0x1b,
1431 0x4b, 0x6e, 0x1d, 0xd1, 0xfc, 0xb7, 0x47, 0xda, 0x6a, 0x64, 0x4b, 0x8e,
1435 static const QUIC_PKT_HDR rx_script_8b_expect_hdr = {
1445 {0, {0}}, /* DCID */
1446 {0, {0}}, /* SCID */
1448 NULL, 0, /* Token/Token Len */
1452 static const unsigned char rx_script_8b_body[] = {
1453 0x02, 0x04, 0x03, 0x00, 0x00, 0x0c, 0x00, 0x36, 0x49, 0x27, 0x6d, 0x20,
1454 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x6e,
1455 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65,
1458 static const unsigned char rx_script_8c_in[] = {
1459 0x5b, /* Short, 1-RTT, PN Length=2 bytes, KP=0 */
1460 0x98, 0xd6, /* PN (3) */
1461 0x3c, 0x6f, 0x94, 0x20, 0x5e, 0xfc, 0x5b, 0x3a, 0x4a, 0x65, 0x1a, 0x9a,
1462 0x6c, 0x00, 0x52, 0xb6, 0x0c, 0x9b, 0x07, 0xf9, 0x6f, 0xbc, 0x3d, 0xb4,
1463 0x57, 0xe0, 0x15, 0x74, 0xfe, 0x76, 0xea, 0x1f, 0x23, 0xae, 0x22, 0x62,
1464 0xb7, 0x90, 0x94, 0x89, 0x38, 0x9b, 0x5b, 0x47, 0xed,
1467 static const QUIC_PKT_HDR rx_script_8c_expect_hdr = {
1477 {0, {0}}, /* DCID */
1478 {0, {0}}, /* SCID */
1480 NULL, 0, /* Token/Token Len */
1484 static const unsigned char rx_script_8c_body[] = {
1485 0x08, 0x00, 0x49, 0x27, 0x6d, 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67,
1486 0x20, 0x61, 0x20, 0x77, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c,
1487 0x20, 0x74, 0x69, 0x6d, 0x65,
1490 static const unsigned char rx_script_8d_in[] = {
1491 0x55, /* Short, 1-RTT, PN Length=2 bytes, KP=1 */
1492 0x98, 0x20, /* PN (6) */
1493 0x45, 0x53, 0x05, 0x29, 0x30, 0x42, 0x29, 0x02, 0xf2, 0xa7, 0x27, 0xd6,
1494 0xb0, 0xb7, 0x30, 0xad, 0x45, 0xd8, 0x73, 0xd7, 0xe3, 0x65, 0xee, 0xd9,
1495 0x35, 0x33, 0x03, 0x3a, 0x35, 0x0b, 0x59, 0xa7, 0xbc, 0x23, 0x37, 0xc2,
1496 0x5e, 0x13, 0x88, 0x18, 0x79, 0x94, 0x6c, 0x15, 0xe3, 0x1f, 0x0d, 0xd1,
1497 0xc3, 0xfa, 0x40, 0xff,
1500 static const QUIC_PKT_HDR rx_script_8d_expect_hdr = {
1510 {0, {0}}, /* DCID */
1511 {0, {0}}, /* SCID */
1513 NULL, 0, /* Token/Token Len */
1517 static const unsigned char rx_script_8d_body[] = {
1518 0x02, 0x05, 0x03, 0x00, 0x00, 0x0c, 0x00, 0x40, 0x51, 0x49, 0x27, 0x6d,
1519 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f,
1520 0x6e, 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65,
1523 static const unsigned char rx_script_8e_in[] = {
1524 0x55, /* Short, 1-RTTT, PN Length=2 bytes, KP=0 */
1525 0x76, 0x25, /* PN (10) */
1526 0x1c, 0x0d, 0x70, 0x4c, 0x2b, 0xc5, 0x7d, 0x7b, 0x77, 0x64, 0x03, 0x27,
1527 0xb3, 0x5d, 0x83, 0x9e, 0x35, 0x05, 0x10, 0xd2, 0xa4, 0x5c, 0x83, 0xd6,
1528 0x94, 0x12, 0x18, 0xc5, 0xb3, 0x0f, 0x0a, 0xb1, 0x8a, 0x82, 0x9f, 0xd6,
1529 0xa9, 0xab, 0x40, 0xc1, 0x05, 0xe8, 0x1b, 0x74, 0xaa, 0x8e, 0xd6, 0x8b,
1530 0xa5, 0xa3, 0x77, 0x79,
1533 static const QUIC_PKT_HDR rx_script_8e_expect_hdr = {
1543 {0, {0}}, /* DCID */
1544 {0, {0}}, /* SCID */
1546 NULL, 0, /* Token/Token Len */
1550 static const unsigned char rx_script_8e_body[] = {
1551 0x02, 0x09, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x40, 0xbd, 0x49, 0x27, 0x6d,
1552 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f,
1553 0x6e, 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65,
1556 static const unsigned char rx_script_8f_in[] = {
1557 0x48, /* Short, 1-RTT, PN Length=2 Bytes, KP=1 */
1558 0x4d, 0xf6, /* PN (15) */
1559 0x42, 0x86, 0xa1, 0xfa, 0x69, 0x6b, 0x1a, 0x45, 0xf2, 0xcd, 0xf6, 0x92,
1560 0xe1, 0xe6, 0x1a, 0x49, 0x37, 0xd7, 0x10, 0xae, 0x09, 0xbd
1563 static const QUIC_PKT_HDR rx_script_8f_expect_hdr = {
1573 {0, {0}}, /* DCID */
1574 {0, {0}}, /* SCID */
1576 NULL, 0, /* Token/Token Len */
1580 static const unsigned char rx_script_8f_body[] = {
1581 0x02, 0x0e, 0x4c, 0x54, 0x00, 0x02
1584 static const struct rx_test_op rx_script_8[] = {
1586 RX_OP_SET_RX_DCID(empty_conn_id)
1587 /* Inject before we get the keys */
1590 RX_OP_CHECK_NO_PKT()
1592 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
1593 QRL_SUITE_AES128GCM, rx_script_8_1rtt_secret)
1594 /* Now the injected packet is successfully returned */
1595 RX_OP_CHECK_PKT_N(8a)
1596 RX_OP_CHECK_NO_PKT()
1597 RX_OP_CHECK_KEY_EPOCH(0)
1598 RX_OP_CHECK_PKT_EPOCH(0)
1600 /* Packet with new key phase */
1602 /* Packet is successfully decrypted and returned */
1603 RX_OP_CHECK_PKT_N(8b)
1604 RX_OP_CHECK_NO_PKT()
1605 /* Key epoch has increased */
1606 RX_OP_CHECK_KEY_EPOCH(1)
1607 RX_OP_CHECK_PKT_EPOCH(1)
1610 * Now inject an old packet with the old keys (perhaps reordered in
1614 /* Should still be decrypted OK */
1615 RX_OP_CHECK_PKT_N(8c)
1616 RX_OP_CHECK_NO_PKT()
1617 /* Epoch has not changed */
1618 RX_OP_CHECK_KEY_EPOCH(1)
1619 RX_OP_CHECK_PKT_EPOCH(0)
1621 /* Another packet with the new keys. */
1623 RX_OP_CHECK_PKT_N(8d)
1624 RX_OP_CHECK_NO_PKT()
1625 RX_OP_CHECK_KEY_EPOCH(1)
1626 RX_OP_CHECK_PKT_EPOCH(1)
1628 /* We can inject the old packet multiple times and it still works */
1630 RX_OP_CHECK_PKT_N(8c)
1631 RX_OP_CHECK_NO_PKT()
1632 RX_OP_CHECK_KEY_EPOCH(1)
1633 RX_OP_CHECK_PKT_EPOCH(0)
1635 /* Until we move from UPDATING to COOLDOWN */
1636 RX_OP_KEY_UPDATE_TIMEOUT(0)
1638 RX_OP_CHECK_NO_PKT()
1639 RX_OP_CHECK_KEY_EPOCH(1)
1642 * Injecting a packet from the next epoch (epoch 2) while in COOLDOWN
1646 RX_OP_CHECK_NO_PKT()
1647 RX_OP_CHECK_KEY_EPOCH(1)
1649 /* Move from COOLDOWN to NORMAL and try again */
1650 RX_OP_KEY_UPDATE_TIMEOUT(1)
1652 RX_OP_CHECK_PKT_N(8e)
1653 RX_OP_CHECK_NO_PKT()
1654 RX_OP_CHECK_KEY_EPOCH(2)
1655 RX_OP_CHECK_PKT_EPOCH(2)
1657 /* Can still receive old packet */
1659 RX_OP_CHECK_PKT_N(8d)
1660 RX_OP_CHECK_NO_PKT()
1661 RX_OP_CHECK_KEY_EPOCH(2)
1662 RX_OP_CHECK_PKT_EPOCH(1)
1664 /* Move straight from UPDATING to NORMAL */
1665 RX_OP_KEY_UPDATE_TIMEOUT(1)
1667 /* Try a packet from epoch 3 */
1669 RX_OP_CHECK_PKT_N(8f)
1670 RX_OP_CHECK_NO_PKT()
1671 RX_OP_CHECK_KEY_EPOCH(3)
1672 RX_OP_CHECK_PKT_EPOCH(3)
1677 /* 9. 1-RTT Deferral Test */
1678 static const struct rx_test_op rx_script_9[] = {
1679 RX_OP_SET_RX_DCID(empty_conn_id)
1680 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_5_c2s_init_dcid)
1683 RX_OP_CHECK_PKT_N(5a)
1684 RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
1685 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
1686 QRL_SUITE_AES128GCM, rx_script_5_handshake_secret)
1687 RX_OP_CHECK_PKT_N(5b)
1688 RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
1689 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
1690 QRL_SUITE_AES128GCM, rx_script_5_1rtt_secret)
1691 RX_OP_CHECK_NO_PKT() /* still nothing - 1-RTT not enabled */
1693 RX_OP_CHECK_PKT_N(5c) /* now we get the 1-RTT packet */
1694 RX_OP_CHECK_NO_PKT()
1699 static const struct rx_test_op *rx_scripts[] = {
1701 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
1708 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
1718 /* OSSL_QRX with necessary data */
1722 /* Used for the RX depacketizer */
1723 SSL_CTX *quic_ssl_ctx;
1724 QUIC_CONNECTION *quic_conn;
1726 QUIC_CONN_ID rx_dcid;
1731 static void rx_state_teardown(struct rx_state *s)
1733 if (s->quic_conn != NULL) {
1734 SSL_free((SSL *)s->quic_conn);
1735 s->quic_conn = NULL;
1737 if (s->quic_ssl_ctx != NULL) {
1738 SSL_CTX_free(s->quic_ssl_ctx);
1739 s->quic_ssl_ctx = NULL;
1742 if (s->qrx != NULL) {
1743 ossl_qrx_free(s->qrx);
1747 if (s->demux != NULL) {
1748 ossl_quic_demux_free(s->demux);
1753 static uint64_t time_counter = 0;
1755 static OSSL_TIME expected_time(uint64_t counter)
1757 return ossl_time_multiply(ossl_ticks2time(OSSL_TIME_MS), counter);
1760 static OSSL_TIME fake_time(void *arg)
1762 return expected_time(++time_counter);
1765 static void demux_default_handler(QUIC_URXE *e, void *arg,
1766 const QUIC_CONN_ID *dcid)
1768 struct rx_state *s = arg;
1770 if (dcid == NULL || !ossl_quic_conn_id_eq(dcid, &s->rx_dcid))
1773 ossl_qrx_inject_urxe(s->qrx, e);
1776 static int rx_state_ensure(struct rx_state *s)
1778 if (s->demux == NULL
1779 && !TEST_ptr(s->demux = ossl_quic_demux_new(NULL,
1780 s->args.short_conn_id_len,
1785 s->args.demux = s->demux;
1786 s->args.max_deferred = 32;
1788 /* Initialise OSSL_QRX */
1790 && !TEST_ptr(s->qrx = ossl_qrx_new(&s->args)))
1793 ossl_quic_demux_set_default_handler(s->demux, demux_default_handler, s);
1796 ossl_qrx_allow_1rtt_processing(s->qrx);
1801 static int rx_run_script(const struct rx_test_op *script)
1804 struct rx_state s = {0};
1806 OSSL_QRX_PKT *pkt = NULL;
1807 const struct rx_test_op *op = script;
1808 uint64_t last_key_epoch = UINT64_MAX;
1810 for (; op->op != RX_TEST_OP_END; ++op)
1812 case RX_TEST_OP_SET_SCID_LEN:
1813 rx_state_teardown(&s);
1814 s.args.short_conn_id_len = op->enc_level;
1816 case RX_TEST_OP_SET_INIT_LARGEST_PN:
1817 rx_state_teardown(&s);
1818 for (i = 0; i < QUIC_PN_SPACE_NUM; ++i)
1819 s.args.init_largest_pn[i] = op->largest_pn;
1821 case RX_TEST_OP_SET_RX_DCID:
1822 if (!TEST_true(rx_state_ensure(&s)))
1824 s.rx_dcid = *op->dcid;
1826 case RX_TEST_OP_PROVIDE_SECRET:
1827 if (!TEST_true(rx_state_ensure(&s)))
1829 if (!TEST_true(ossl_qrx_provide_secret(s.qrx, op->enc_level,
1835 case RX_TEST_OP_PROVIDE_SECRET_INITIAL:
1836 if (!TEST_true(rx_state_ensure(&s)))
1838 if (!TEST_true(ossl_quic_provide_initial_secret(NULL, NULL,
1843 case RX_TEST_OP_DISCARD_EL:
1844 if (!TEST_true(rx_state_ensure(&s)))
1846 if (!TEST_true(ossl_qrx_discard_enc_level(s.qrx, op->enc_level)))
1849 case RX_TEST_OP_INJECT:
1850 if (!TEST_true(rx_state_ensure(&s)))
1852 if (!TEST_true(ossl_quic_demux_inject(s.demux,
1853 op->buf, op->buf_len,
1857 case RX_TEST_OP_CHECK_PKT:
1858 if (!TEST_true(rx_state_ensure(&s)))
1861 if (!TEST_true(ossl_qrx_read_pkt(s.qrx, &pkt)))
1864 if (!TEST_ptr(pkt) || !TEST_ptr(pkt->hdr))
1867 if (!TEST_mem_eq(pkt->hdr->data, pkt->hdr->len,
1868 op->buf, op->buf_len))
1871 if (!TEST_true(cmp_pkt_hdr(pkt->hdr, op->hdr,
1872 op->buf, op->buf_len, 1)))
1875 last_key_epoch = pkt->key_epoch;
1877 ossl_qrx_pkt_release(pkt);
1880 case RX_TEST_OP_CHECK_NO_PKT:
1881 if (!TEST_true(rx_state_ensure(&s)))
1884 if (!TEST_false(ossl_qrx_read_pkt(s.qrx, &pkt)))
1888 case RX_TEST_OP_CHECK_KEY_EPOCH:
1889 if (!TEST_true(rx_state_ensure(&s)))
1892 if (!TEST_uint64_t_eq(ossl_qrx_get_key_epoch(s.qrx),
1897 case RX_TEST_OP_CHECK_PKT_EPOCH:
1898 if (!TEST_true(rx_state_ensure(&s)))
1901 if (!TEST_uint64_t_eq(last_key_epoch, op->largest_pn))
1905 case RX_TEST_OP_KEY_UPDATE_TIMEOUT:
1906 if (!TEST_true(rx_state_ensure(&s)))
1909 if (!TEST_true(ossl_qrx_key_update_timeout(s.qrx,
1914 case RX_TEST_OP_SET_INIT_KEY_PHASE:
1915 rx_state_teardown(&s);
1916 s.args.init_key_phase_bit = (unsigned char)op->enc_level;
1918 case RX_TEST_OP_ALLOW_1RTT:
1921 if (!TEST_true(rx_state_ensure(&s)))
1932 ossl_qrx_pkt_release(pkt);
1933 rx_state_teardown(&s);
1937 static int test_rx_script(int idx)
1939 return rx_run_script(rx_scripts[idx]);
1942 /* Packet Header Tests */
1943 struct pkt_hdr_test {
1945 const unsigned char *expected;
1946 size_t expected_len;
1947 const unsigned char *payload;
1949 size_t short_conn_id_len;
1951 * Minimum number of bytes which should be required for a successful decode.
1952 * SIZE_MAX if should never decode successfully.
1954 size_t min_success_len;
1955 size_t pn_offset, sample_offset;
1958 /* Packet Header Test 1: INITIAL With SCID */
1959 static const unsigned char pkt_hdr_test_1_expected[] = {
1960 0xc1, /* Long|Fixed, Type=Initial, PN Len=2 */
1961 0x00, 0x00, 0x00, 0x01, /* Version */
1962 0x00, /* DCID Length */
1963 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
1964 0x00, /* Token Length */
1965 0x15, /* Length=21 */
1966 0x33, 0x44, /* Encoded PN */
1967 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
1968 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
1972 static const unsigned char pkt_hdr_test_1_payload[] = {
1973 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1974 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
1978 static const struct pkt_hdr_test pkt_hdr_test_1 = {
1980 QUIC_PKT_TYPE_INITIAL, /* type */
1989 { 0, {0} }, /* DCID */
1990 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
1991 { 0x33, 0x44 }, /* PN */
1992 NULL, 0, /* Token/Token Len */
1993 19, NULL /* Len/Data */
1995 pkt_hdr_test_1_expected, OSSL_NELEM(pkt_hdr_test_1_expected),
1996 pkt_hdr_test_1_payload, OSSL_NELEM(pkt_hdr_test_1_payload),
1997 0, sizeof(pkt_hdr_test_1_expected),
2001 /* Packet Header Test 2: INITIAL With SCID and Token */
2002 static const unsigned char pkt_hdr_test_2_expected[] = {
2003 0xc1, /* Long|Fixed, Type=Initial, PN Len=2 */
2004 0x00, 0x00, 0x00, 0x01, /* Version */
2005 0x00, /* DCID Length */
2006 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2007 0x07, /* Token Length */
2008 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
2009 0x15, /* Length=21 */
2010 0x33, 0x44, /* Encoded PN */
2011 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2012 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2016 static const unsigned char pkt_hdr_test_2_payload[] = {
2017 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2018 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2022 static const unsigned char pkt_hdr_test_2_token[] = {
2023 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96
2026 static const struct pkt_hdr_test pkt_hdr_test_2 = {
2028 QUIC_PKT_TYPE_INITIAL, /* type */
2037 { 0, {0} }, /* DCID */
2038 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
2039 { 0x33, 0x44 }, /* PN */
2040 pkt_hdr_test_2_token, sizeof(pkt_hdr_test_2_token), /* Token */
2041 19, NULL /* Len/Data */
2043 pkt_hdr_test_2_expected, OSSL_NELEM(pkt_hdr_test_2_expected),
2044 pkt_hdr_test_2_payload, OSSL_NELEM(pkt_hdr_test_2_payload),
2045 0, sizeof(pkt_hdr_test_2_expected),
2049 /* Packet Header Test 3: INITIAL With DCID and SCID and Token */
2050 static const unsigned char pkt_hdr_test_3_expected[] = {
2051 0xc1, /* Long|Fixed, Type=Initial, PN Len=2 */
2052 0x00, 0x00, 0x00, 0x01, /* Version */
2053 0x03, /* DCID Length */
2054 0x70, 0x71, 0x72, /* DCID */
2055 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2056 0x06, /* Token Length */
2057 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
2058 0x15, /* Length=21 */
2059 0x33, 0x44, /* Encoded PN */
2060 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2061 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2065 static const unsigned char pkt_hdr_test_3_payload[] = {
2066 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2067 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2071 static const unsigned char pkt_hdr_test_3_token[] = {
2072 0x91, 0x92, 0x93, 0x94, 0x95, 0x96
2075 static const struct pkt_hdr_test pkt_hdr_test_3 = {
2077 QUIC_PKT_TYPE_INITIAL, /* type */
2086 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2087 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
2088 { 0x33, 0x44 }, /* PN */
2089 pkt_hdr_test_3_token, sizeof(pkt_hdr_test_3_token), /* Token */
2090 19, NULL /* Len/Data */
2092 pkt_hdr_test_3_expected, OSSL_NELEM(pkt_hdr_test_3_expected),
2093 pkt_hdr_test_3_payload, OSSL_NELEM(pkt_hdr_test_3_payload),
2094 0, sizeof(pkt_hdr_test_3_expected),
2098 /* Packet Header Test 4: 0-RTT */
2099 static const unsigned char pkt_hdr_test_4_expected[] = {
2100 0xd0, /* Long|Fixed, Type=0-RTT, PN Len=1 */
2101 0x00, 0x00, 0x00, 0x01, /* Version */
2102 0x03, /* DCID Length */
2103 0x70, 0x71, 0x72, /* DCID */
2104 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2105 0x14, /* Length=20 */
2106 0x33, /* Encoded PN */
2107 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2108 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2112 static const unsigned char pkt_hdr_test_4_payload[] = {
2113 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2114 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2118 static const struct pkt_hdr_test pkt_hdr_test_4 = {
2120 QUIC_PKT_TYPE_0RTT, /* type */
2129 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2130 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
2132 NULL, 0, /* Token */
2133 19, NULL /* Len/Data */
2135 pkt_hdr_test_4_expected, OSSL_NELEM(pkt_hdr_test_4_expected),
2136 pkt_hdr_test_4_payload, OSSL_NELEM(pkt_hdr_test_4_payload),
2137 0, sizeof(pkt_hdr_test_4_expected),
2141 /* Packet Header Test 5: Handshake */
2142 static const unsigned char pkt_hdr_test_5_expected[] = {
2143 0xe0, /* Long|Fixed, Type=Handshake, PN Len=1 */
2144 0x00, 0x00, 0x00, 0x01, /* Version */
2145 0x03, /* DCID Length */
2146 0x70, 0x71, 0x72, /* DCID */
2147 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2148 0x14, /* Length=20 */
2149 0x33, /* Encoded PN */
2150 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2151 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2155 static const unsigned char pkt_hdr_test_5_payload[] = {
2156 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2157 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2161 static const struct pkt_hdr_test pkt_hdr_test_5 = {
2163 QUIC_PKT_TYPE_HANDSHAKE, /* type */
2172 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2173 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
2175 NULL, 0, /* Token */
2176 19, NULL /* Len/Data */
2178 pkt_hdr_test_5_expected, OSSL_NELEM(pkt_hdr_test_5_expected),
2179 pkt_hdr_test_5_payload, OSSL_NELEM(pkt_hdr_test_5_payload),
2180 0, sizeof(pkt_hdr_test_5_expected),
2184 /* Packet Header Test 6: Retry */
2185 static const unsigned char pkt_hdr_test_6_expected[] = {
2186 0xf0, /* Long|Fixed, Type=Retry */
2187 0x00, 0x00, 0x00, 0x01, /* Version */
2188 0x03, /* DCID Length */
2189 0x70, 0x71, 0x72, /* DCID */
2190 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2191 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* Retry Token */
2192 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
2193 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f /* Retry Integrity Tag */
2196 static const unsigned char pkt_hdr_test_6_payload[] = {
2197 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* Retry Token */
2198 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
2199 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f /* Retry Integrity Tag */
2202 static const struct pkt_hdr_test pkt_hdr_test_6 = {
2204 QUIC_PKT_TYPE_RETRY, /* type */
2213 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2214 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
2216 NULL, 0, /* Token */
2217 24, NULL /* Len/Data */
2219 pkt_hdr_test_6_expected, OSSL_NELEM(pkt_hdr_test_6_expected),
2220 pkt_hdr_test_6_payload, OSSL_NELEM(pkt_hdr_test_6_payload),
2225 /* Packet Header Test 7: 1-RTT */
2226 static const unsigned char pkt_hdr_test_7_expected[] = {
2227 0x42, /* Short|Fixed, Type=1-RTT, PN Len=3 */
2228 0x70, 0x71, 0x72, /* DCID */
2229 0x50, 0x51, 0x52, /* PN */
2230 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2231 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2234 static const unsigned char pkt_hdr_test_7_payload[] = {
2235 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2236 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2239 static const struct pkt_hdr_test pkt_hdr_test_7 = {
2241 QUIC_PKT_TYPE_1RTT, /* type */
2250 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2251 { 0, {0} }, /* SCID */
2252 { 0x50, 0x51, 0x52 }, /* PN */
2253 NULL, 0, /* Token */
2254 18, NULL /* Len/Data */
2256 pkt_hdr_test_7_expected, OSSL_NELEM(pkt_hdr_test_7_expected),
2257 pkt_hdr_test_7_payload, OSSL_NELEM(pkt_hdr_test_7_payload),
2262 /* Packet Header Test 8: 1-RTT with Spin Bit */
2263 static const unsigned char pkt_hdr_test_8_expected[] = {
2264 0x62, /* Short|Fixed, Type=1-RTT, PN Len=3, Spin=1 */
2265 0x70, 0x71, 0x72, /* DCID */
2266 0x50, 0x51, 0x52, /* PN */
2267 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2268 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2271 static const unsigned char pkt_hdr_test_8_payload[] = {
2272 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2273 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2276 static const struct pkt_hdr_test pkt_hdr_test_8 = {
2278 QUIC_PKT_TYPE_1RTT, /* type */
2287 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2288 { 0, {0} }, /* SCID */
2289 { 0x50, 0x51, 0x52 }, /* PN */
2290 NULL, 0, /* Token */
2291 18, NULL /* Len/Data */
2293 pkt_hdr_test_8_expected, OSSL_NELEM(pkt_hdr_test_8_expected),
2294 pkt_hdr_test_8_payload, OSSL_NELEM(pkt_hdr_test_8_payload),
2299 /* Packet Header Test 9: 1-RTT with Key Phase Bit */
2300 static const unsigned char pkt_hdr_test_9_expected[] = {
2301 0x46, /* Short|Fixed, Type=1-RTT, PN Len=3, Key Phase=1 */
2302 0x70, 0x71, 0x72, /* DCID */
2303 0x50, 0x51, 0x52, /* PN */
2304 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2305 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2308 static const unsigned char pkt_hdr_test_9_payload[] = {
2309 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2310 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2313 static const struct pkt_hdr_test pkt_hdr_test_9 = {
2315 QUIC_PKT_TYPE_1RTT, /* type */
2324 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2325 { 0, {0} }, /* SCID */
2326 { 0x50, 0x51, 0x52 }, /* PN */
2327 NULL, 0, /* Token */
2328 18, NULL /* Len/Data */
2330 pkt_hdr_test_9_expected, OSSL_NELEM(pkt_hdr_test_9_expected),
2331 pkt_hdr_test_9_payload, OSSL_NELEM(pkt_hdr_test_9_payload),
2336 /* Packet Header Test 10: Handshake with 4-Byte PN */
2337 static const unsigned char pkt_hdr_test_10_expected[] = {
2338 0xe3, /* Long|Fixed, Type=Handshake, PN Len=4 */
2339 0x00, 0x00, 0x00, 0x01, /* Version */
2340 0x03, /* DCID Length */
2341 0x70, 0x71, 0x72, /* DCID */
2342 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2343 0x17, /* Length=20 */
2344 0x33, 0x44, 0x55, 0x66, /* Encoded PN */
2345 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2346 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2350 static const unsigned char pkt_hdr_test_10_payload[] = {
2351 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2352 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2356 static const struct pkt_hdr_test pkt_hdr_test_10 = {
2358 QUIC_PKT_TYPE_HANDSHAKE, /* type */
2367 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2368 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
2369 { 0x33, 0x44, 0x55, 0x66 }, /* PN */
2370 NULL, 0, /* Token */
2371 19, NULL /* Len/Data */
2373 pkt_hdr_test_10_expected, OSSL_NELEM(pkt_hdr_test_10_expected),
2374 pkt_hdr_test_10_payload, OSSL_NELEM(pkt_hdr_test_10_payload),
2375 0, sizeof(pkt_hdr_test_10_expected),
2379 /* Packet Header Test 11: 1-RTT with 4-Byte PN */
2380 static const unsigned char pkt_hdr_test_11_expected[] = {
2381 0x43, /* Short|Fixed, Type=1-RTT, PN Len=4 */
2382 0x70, 0x71, 0x72, /* DCID */
2383 0x50, 0x51, 0x52, 0x53, /* PN */
2384 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2385 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2388 static const unsigned char pkt_hdr_test_11_payload[] = {
2389 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2390 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2393 static const struct pkt_hdr_test pkt_hdr_test_11 = {
2395 QUIC_PKT_TYPE_1RTT, /* type */
2404 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2405 { 0, {0} }, /* SCID */
2406 { 0x50, 0x51, 0x52, 0x53 }, /* PN */
2407 NULL, 0, /* Token */
2408 18, NULL /* Len/Data */
2410 pkt_hdr_test_11_expected, OSSL_NELEM(pkt_hdr_test_11_expected),
2411 pkt_hdr_test_11_payload, OSSL_NELEM(pkt_hdr_test_11_payload),
2416 /* Packet Header Test 12: Version Negotiation */
2417 static const unsigned char pkt_hdr_test_12_expected[] = {
2418 0xc0, /* Long|Fixed, Type=Version Neg */
2419 0x00, 0x00, 0x00, 0x00, /* Version (0) */
2420 0x03, 0x70, 0x71, 0x72, /* DCID */
2421 0x02, 0x81, 0x82, /* SCID */
2422 0x11, 0x22, 0x33, 0x44 /* One Version */
2425 static const unsigned char pkt_hdr_test_12_payload[] = {
2426 0x11, 0x22, 0x33, 0x44
2429 static const struct pkt_hdr_test pkt_hdr_test_12 = {
2431 QUIC_PKT_TYPE_VERSION_NEG, /* type */
2440 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2441 { 2, {0x81, 0x82} }, /* SCID */
2443 NULL, 0, /* Token */
2444 4, NULL /* Len/Data */
2446 pkt_hdr_test_12_expected, OSSL_NELEM(pkt_hdr_test_12_expected),
2447 pkt_hdr_test_12_payload, OSSL_NELEM(pkt_hdr_test_12_payload),
2452 /* Packet Header Test 13: Version Negotiation without Fixed Bit */
2453 static const unsigned char pkt_hdr_test_13_expected[] = {
2454 0x80, /* Long|Fixed, Type=Version Neg */
2455 0x00, 0x00, 0x00, 0x00, /* Version (0) */
2456 0x03, 0x70, 0x71, 0x72, /* DCID */
2457 0x02, 0x81, 0x82, /* SCID */
2458 0x11, 0x22, 0x33, 0x44 /* One Version */
2461 static const unsigned char pkt_hdr_test_13_payload[] = {
2462 0x11, 0x22, 0x33, 0x44
2465 static const struct pkt_hdr_test pkt_hdr_test_13 = {
2467 QUIC_PKT_TYPE_VERSION_NEG, /* type */
2476 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2477 { 2, {0x81, 0x82} }, /* SCID */
2479 NULL, 0, /* Token */
2480 4, NULL /* Len/Data */
2482 pkt_hdr_test_13_expected, OSSL_NELEM(pkt_hdr_test_13_expected),
2483 pkt_hdr_test_13_payload, OSSL_NELEM(pkt_hdr_test_13_payload),
2488 /* Packet Header Test 14: 1-RTT - Malformed - No Fixed Bit */
2489 static const unsigned char pkt_hdr_test_14_expected[] = {
2490 0x02, /* Fixed, Type=1-RTT, PN Len=3 */
2491 0x70, 0x71, 0x72, /* DCID */
2492 0x50, 0x51, 0x52, /* PN */
2493 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2494 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2497 static const struct pkt_hdr_test pkt_hdr_test_14 = {
2499 pkt_hdr_test_14_expected, OSSL_NELEM(pkt_hdr_test_14_expected),
2505 /* Packet Header Test 15: Handshake - Malformed - No Fixed Bit */
2506 static const unsigned char pkt_hdr_test_15_expected[] = {
2507 0xa0, /* Long, Type=Handshake, PN Len=1 */
2508 0x00, 0x00, 0x00, 0x01, /* Version */
2509 0x03, /* DCID Length */
2510 0x70, 0x71, 0x72, /* DCID */
2511 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2512 0x14, /* Length=20 */
2513 0x33, /* Encoded PN */
2514 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2515 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2519 static const struct pkt_hdr_test pkt_hdr_test_15 = {
2521 pkt_hdr_test_15_expected, OSSL_NELEM(pkt_hdr_test_15_expected),
2527 /* Packet Header Test 16: Handshake - Malformed - Wrong Version */
2528 static const unsigned char pkt_hdr_test_16_expected[] = {
2529 0xe0, /* Long|Fixed, Type=Handshake, PN Len=1 */
2530 0x00, 0x00, 0x00, 0x02, /* Version */
2531 0x03, /* DCID Length */
2532 0x70, 0x71, 0x72, /* DCID */
2533 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2534 0x14, /* Length=20 */
2535 0x33, /* Encoded PN */
2536 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2537 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2541 static const struct pkt_hdr_test pkt_hdr_test_16 = {
2543 pkt_hdr_test_16_expected, OSSL_NELEM(pkt_hdr_test_16_expected),
2549 /* Packet Header Test 17: Initial - Non-Zero Reserved Bits */
2550 static const unsigned char pkt_hdr_test_17_expected[] = {
2551 0xcd, /* Long|Fixed, Type=Initial, PN Len=2 */
2552 0x00, 0x00, 0x00, 0x01, /* Version */
2553 0x00, /* DCID Length */
2554 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2555 0x00, /* Token Length */
2556 0x15, /* Length=21 */
2557 0x33, 0x44, /* Encoded PN */
2558 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2559 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2563 static const unsigned char pkt_hdr_test_17_payload[] = {
2564 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2565 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2569 static const struct pkt_hdr_test pkt_hdr_test_17 = {
2571 QUIC_PKT_TYPE_INITIAL, /* type */
2580 { 0, {0} }, /* DCID */
2581 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
2582 { 0x33, 0x44 }, /* PN */
2583 NULL, 0, /* Token/Token Len */
2584 19, NULL /* Len/Data */
2586 pkt_hdr_test_17_expected, OSSL_NELEM(pkt_hdr_test_17_expected),
2587 pkt_hdr_test_17_payload, OSSL_NELEM(pkt_hdr_test_17_payload),
2588 0, sizeof(pkt_hdr_test_17_expected),
2592 /* Packet Header Test 18: 0-RTT - Non-Zero Reserved Bits */
2593 static const unsigned char pkt_hdr_test_18_expected[] = {
2594 0xd8, /* Long|Fixed, Type=0-RTT, PN Len=1 */
2595 0x00, 0x00, 0x00, 0x01, /* Version */
2596 0x03, /* DCID Length */
2597 0x70, 0x71, 0x72, /* DCID */
2598 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2599 0x14, /* Length=20 */
2600 0x33, /* Encoded PN */
2601 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2602 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2606 static const unsigned char pkt_hdr_test_18_payload[] = {
2607 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2608 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2612 static const struct pkt_hdr_test pkt_hdr_test_18 = {
2614 QUIC_PKT_TYPE_0RTT, /* type */
2623 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2624 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
2626 NULL, 0, /* Token */
2627 19, NULL /* Len/Data */
2629 pkt_hdr_test_18_expected, OSSL_NELEM(pkt_hdr_test_18_expected),
2630 pkt_hdr_test_18_payload, OSSL_NELEM(pkt_hdr_test_18_payload),
2631 0, sizeof(pkt_hdr_test_18_expected),
2635 /* Packet Header Test 19: Handshake - Non-Zero Reserved Bits */
2636 static const unsigned char pkt_hdr_test_19_expected[] = {
2637 0xe4, /* Long|Fixed, Type=Handshake, PN Len=1 */
2638 0x00, 0x00, 0x00, 0x01, /* Version */
2639 0x03, /* DCID Length */
2640 0x70, 0x71, 0x72, /* DCID */
2641 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2642 0x14, /* Length=20 */
2643 0x33, /* Encoded PN */
2644 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2645 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2649 static const unsigned char pkt_hdr_test_19_payload[] = {
2650 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2651 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2655 static const struct pkt_hdr_test pkt_hdr_test_19 = {
2657 QUIC_PKT_TYPE_HANDSHAKE, /* type */
2666 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2667 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
2669 NULL, 0, /* Token */
2670 19, NULL /* Len/Data */
2672 pkt_hdr_test_19_expected, OSSL_NELEM(pkt_hdr_test_19_expected),
2673 pkt_hdr_test_19_payload, OSSL_NELEM(pkt_hdr_test_19_payload),
2674 0, sizeof(pkt_hdr_test_19_expected),
2678 /* Packet Header Test 20: 1-RTT with Non-Zero Reserved Bits */
2679 static const unsigned char pkt_hdr_test_20_expected[] = {
2680 0x5a, /* Short|Fixed, Type=1-RTT, PN Len=3 */
2681 0x70, 0x71, 0x72, /* DCID */
2682 0x50, 0x51, 0x52, /* PN */
2683 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2684 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2687 static const unsigned char pkt_hdr_test_20_payload[] = {
2688 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2689 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2692 static const struct pkt_hdr_test pkt_hdr_test_20 = {
2694 QUIC_PKT_TYPE_1RTT, /* type */
2703 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2704 { 0, {0} }, /* SCID */
2705 { 0x50, 0x51, 0x52 }, /* PN */
2706 NULL, 0, /* Token */
2707 18, NULL /* Len/Data */
2709 pkt_hdr_test_20_expected, OSSL_NELEM(pkt_hdr_test_20_expected),
2710 pkt_hdr_test_20_payload, OSSL_NELEM(pkt_hdr_test_20_payload),
2715 static const struct pkt_hdr_test *const pkt_hdr_tests[] = {
2738 #define HPR_REPEAT_COUNT 4
2739 #define HPR_CIPHER_COUNT 3
2742 * Count of number of times we observed an unchanged (u) or changed (c) bit in
2743 * each header-protectable bit over all test suites.
2745 static unsigned int counts_u[HPR_CIPHER_COUNT][37] = {0};
2746 static unsigned int counts_c[HPR_CIPHER_COUNT][37] = {0};
2748 #define TEST_PKT_BUF_LEN 20000
2750 static int test_wire_pkt_hdr_actual(int tidx, int repeat, int cipher,
2754 const struct pkt_hdr_test *t = pkt_hdr_tests[tidx];
2755 QUIC_PKT_HDR hdr = {0};
2756 QUIC_PKT_HDR_PTRS ptrs = {0}, wptrs = {0};
2759 unsigned char *buf = NULL;
2761 QUIC_HDR_PROTECTOR hpr = {0};
2762 unsigned char hpr_key[32] = {0,1,2,3,4,5,6,7};
2763 int have_hpr = 0, hpr_cipher_id, hpr_key_len;
2764 unsigned char *hbuf = NULL;
2765 int is_trunc = trunc_len < t->expected_len;
2766 int expect_fail = trunc_len < t->min_success_len;
2767 hpr_key[8] = (unsigned char)tidx;
2768 hpr_key[9] = (unsigned char)repeat;
2770 if (is_trunc && trunc_len > t->min_success_len
2771 && t->hdr.type == QUIC_PKT_TYPE_VERSION_NEG
2772 && ((trunc_len - t->min_success_len) % 4) != 0)
2777 hpr_cipher_id = QUIC_HDR_PROT_CIPHER_AES_128;
2781 hpr_cipher_id = QUIC_HDR_PROT_CIPHER_AES_256;
2786 * In a build without CHACHA, we rerun the AES 256 tests.
2787 * Removing all dependence on CHACHA is more difficult and these
2788 * tests are fast enough.
2790 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
2791 hpr_cipher_id = QUIC_HDR_PROT_CIPHER_CHACHA;
2793 hpr_cipher_id = QUIC_HDR_PROT_CIPHER_AES_256;
2801 if (!TEST_ptr(buf = OPENSSL_malloc(TEST_PKT_BUF_LEN)))
2804 if (!TEST_true(WPACKET_init_static_len(&wpkt, buf, TEST_PKT_BUF_LEN, 0)))
2807 if (!TEST_true(PACKET_buf_init(&pkt, t->expected, trunc_len)))
2810 if (!TEST_int_eq(ossl_quic_wire_decode_pkt_hdr(&pkt, t->short_conn_id_len,
2815 if (!expect_fail && !is_trunc) {
2816 if (!TEST_true(cmp_pkt_hdr(&hdr, &t->hdr, t->payload, t->payload_len, 1)))
2819 if (!TEST_ptr_eq(ptrs.raw_start, t->expected))
2822 if (t->pn_offset == SIZE_MAX) {
2823 if (!TEST_ptr_null(ptrs.raw_pn))
2826 if (!TEST_ptr_eq(ptrs.raw_pn, t->expected + t->pn_offset))
2830 if (t->sample_offset != SIZE_MAX) {
2831 if (!TEST_ptr_eq(ptrs.raw_sample, t->expected + t->sample_offset))
2833 if (!TEST_size_t_eq(ptrs.raw_sample_len,
2834 t->expected_len - t->sample_offset))
2838 if (!TEST_true(ossl_quic_wire_encode_pkt_hdr(&wpkt, t->short_conn_id_len, &hdr, &wptrs)))
2841 if (!TEST_true(WPACKET_memcpy(&wpkt, t->payload, t->payload_len)))
2844 if (!TEST_true(WPACKET_get_total_written(&wpkt, &l)))
2847 if (!TEST_mem_eq(buf, l, t->expected, t->expected_len))
2850 /* Test header protection. */
2851 if (t->sample_offset != SIZE_MAX) { /* if packet type has protection */
2852 if (!TEST_true(ossl_quic_hdr_protector_init(&hpr, NULL, NULL,
2861 * Copy into a duplicate buffer to test header protection by
2862 * comparing it against the original.
2864 hbuf = OPENSSL_malloc(t->expected_len);
2865 if (!TEST_ptr(hbuf))
2868 memcpy(hbuf, t->expected, t->expected_len);
2870 /* Fixup pointers to new buffer and encrypt. */
2871 ptrs.raw_pn = hbuf + (ptrs.raw_pn - ptrs.raw_start);
2872 ptrs.raw_sample = hbuf + (ptrs.raw_sample - ptrs.raw_start);
2873 ptrs.raw_start = hbuf;
2874 if (!TEST_true(ossl_quic_hdr_protector_encrypt(&hpr, &ptrs)))
2877 /* Ensure that bytes which should not have changed did not change */
2878 for (i = 0; i < t->expected_len; ++i) {
2879 unsigned char d = t->expected[i] ^ hbuf[i], rej_mask = 0xff;
2882 /* Bits in first byte which must not change */
2883 rej_mask = (t->hdr.type == QUIC_PKT_TYPE_1RTT) ? ~0x1f : ~0xf;
2884 } else if (i >= t->pn_offset && i < t->pn_offset + t->hdr.pn_len) {
2885 /* PN bytes change */
2887 jrel = 5 + (i - t->pn_offset) * 8;
2890 if (rej_mask != 0xff)
2891 for (j = 0; j < 8; ++j) {
2892 if (((1U << j) & rej_mask) != 0)
2894 * Bit unrelated to header protection, do not record
2899 OPENSSL_assert(jrel + j < OSSL_NELEM(counts_u[cipher]));
2900 if ((d & (1U << j)) != 0)
2901 ++counts_c[cipher][jrel + j]; /* bit did change */
2903 ++counts_u[cipher][jrel + j]; /* bit did not change */
2906 /* Bits in rej_mask must not change */
2907 if (!TEST_int_eq(d & rej_mask, 0))
2911 /* Decrypt and check matches original. */
2912 if (!TEST_true(ossl_quic_hdr_protector_decrypt(&hpr, &ptrs)))
2915 if (!TEST_mem_eq(hbuf, t->expected_len, t->expected, t->expected_len))
2923 ossl_quic_hdr_protector_cleanup(&hpr);
2924 WPACKET_finish(&wpkt);
2930 static int test_wire_pkt_hdr_inner(int tidx, int repeat, int cipher)
2933 const struct pkt_hdr_test *t = pkt_hdr_tests[tidx];
2936 /* Test with entire packet */
2937 if (!TEST_true(test_wire_pkt_hdr_actual(tidx, repeat, cipher,
2941 /* Now repeat for every possible truncation of the packet */
2942 for (i = 0; i < t->expected_len; ++i)
2943 if (!TEST_true(test_wire_pkt_hdr_actual(tidx, repeat, cipher, i)))
2951 static int test_hdr_prot_stats(void)
2957 * Test that, across all previously executed tests for each header
2958 * protection cipher, every bit which can have header protection applied a)
2959 * was changed in at least one test of applying header protection, and b)
2960 * was unchanged in at least one test of applying header protection.
2962 for (cipher = 0; cipher < HPR_CIPHER_COUNT; ++cipher)
2963 for (i = 0; i < OSSL_NELEM(counts_u[0]); ++i) {
2964 if (!TEST_uint_gt(counts_u[cipher][i], 0))
2966 if (!TEST_uint_gt(counts_c[cipher][i], 0))
2975 #define NUM_WIRE_PKT_HDR_TESTS \
2976 (OSSL_NELEM(pkt_hdr_tests) * HPR_REPEAT_COUNT * HPR_CIPHER_COUNT)
2978 static int test_wire_pkt_hdr(int idx)
2980 int tidx, repeat, cipher;
2982 if (idx == NUM_WIRE_PKT_HDR_TESTS)
2983 return test_hdr_prot_stats();
2985 cipher = idx % HPR_CIPHER_COUNT;
2986 idx /= HPR_CIPHER_COUNT;
2988 repeat = idx % HPR_REPEAT_COUNT;
2989 idx /= HPR_REPEAT_COUNT;
2993 return test_wire_pkt_hdr_inner(tidx, repeat, cipher);
2997 #define TX_TEST_OP_END 0 /* end of script */
2998 #define TX_TEST_OP_WRITE 1 /* write packet */
2999 #define TX_TEST_OP_PROVIDE_SECRET 2 /* provide TX secret */
3000 #define TX_TEST_OP_PROVIDE_SECRET_INITIAL 3 /* provide TX secret for initial */
3001 #define TX_TEST_OP_DISCARD_EL 4 /* discard an encryption level */
3002 #define TX_TEST_OP_CHECK_DGRAM 5 /* read datagram, compare to expected */
3003 #define TX_TEST_OP_CHECK_NO_DGRAM 6 /* check no datagram is in queue */
3004 #define TX_TEST_OP_KEY_UPDATE 7 /* perform key update for 1-RTT */
3008 const unsigned char *buf;
3010 const OSSL_QTX_PKT *pkt;
3011 uint32_t enc_level, suite_id;
3012 const QUIC_CONN_ID *dcid;
3017 #define TX_OP_WRITE(pkt) \
3018 { TX_TEST_OP_WRITE, NULL, 0, &(pkt), 0, 0, NULL },
3019 #define TX_OP_PROVIDE_SECRET(el, suite, key) \
3021 TX_TEST_OP_PROVIDE_SECRET, (key), sizeof(key), \
3022 NULL, (el), (suite), NULL \
3024 #define TX_OP_PROVIDE_SECRET_INITIAL(dcid, is_server) \
3025 { TX_TEST_OP_PROVIDE_SECRET_INITIAL, \
3026 NULL, 0, NULL, 0, (is_server), &(dcid) },
3027 #define TX_OP_DISCARD_EL(el) \
3028 { TX_TEST_OP_DISCARD_EL, NULL, 0, NULL, (el), 0, NULL },
3029 #define TX_OP_CHECK_DGRAM(expect_dgram) \
3031 TX_TEST_OP_CHECK_DGRAM, (expect_dgram), sizeof(expect_dgram), \
3034 #define TX_OP_CHECK_NO_DGRAM() \
3035 { TX_TEST_OP_CHECK_NO_PKT, NULL, 0, NULL, 0, 0, NULL },
3037 #define TX_OP_WRITE_N(n) \
3038 TX_OP_WRITE(tx_script_##n##_pkt)
3039 #define TX_OP_CHECK_DGRAM_N(n) \
3040 TX_OP_CHECK_DGRAM(tx_script_##n##_dgram)
3042 #define TX_OP_WRITE_CHECK(n) \
3044 TX_OP_CHECK_DGRAM_N(n)
3046 #define TX_OP_KEY_UPDATE() \
3047 { TX_TEST_OP_KEY_UPDATE, NULL, 0, NULL, 0, 0, NULL },
3049 /* 1. RFC 9001 - A.2 Client Initial */
3050 static const unsigned char tx_script_1_body[1162] = {
3051 0x06, 0x00, 0x40, 0xf1, 0x01, 0x00, 0x00, 0xed, 0x03, 0x03, 0xeb, 0xf8,
3052 0xfa, 0x56, 0xf1, 0x29, 0x39, 0xb9, 0x58, 0x4a, 0x38, 0x96, 0x47, 0x2e,
3053 0xc4, 0x0b, 0xb8, 0x63, 0xcf, 0xd3, 0xe8, 0x68, 0x04, 0xfe, 0x3a, 0x47,
3054 0xf0, 0x6a, 0x2b, 0x69, 0x48, 0x4c, 0x00, 0x00, 0x04, 0x13, 0x01, 0x13,
3055 0x02, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0e, 0x00,
3056 0x00, 0x0b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f,
3057 0x6d, 0xff, 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x08, 0x00, 0x06,
3058 0x00, 0x1d, 0x00, 0x17, 0x00, 0x18, 0x00, 0x10, 0x00, 0x07, 0x00, 0x05,
3059 0x04, 0x61, 0x6c, 0x70, 0x6e, 0x00, 0x05, 0x00, 0x05, 0x01, 0x00, 0x00,
3060 0x00, 0x00, 0x00, 0x33, 0x00, 0x26, 0x00, 0x24, 0x00, 0x1d, 0x00, 0x20,
3061 0x93, 0x70, 0xb2, 0xc9, 0xca, 0xa4, 0x7f, 0xba, 0xba, 0xf4, 0x55, 0x9f,
3062 0xed, 0xba, 0x75, 0x3d, 0xe1, 0x71, 0xfa, 0x71, 0xf5, 0x0f, 0x1c, 0xe1,
3063 0x5d, 0x43, 0xe9, 0x94, 0xec, 0x74, 0xd7, 0x48, 0x00, 0x2b, 0x00, 0x03,
3064 0x02, 0x03, 0x04, 0x00, 0x0d, 0x00, 0x10, 0x00, 0x0e, 0x04, 0x03, 0x05,
3065 0x03, 0x06, 0x03, 0x02, 0x03, 0x08, 0x04, 0x08, 0x05, 0x08, 0x06, 0x00,
3066 0x2d, 0x00, 0x02, 0x01, 0x01, 0x00, 0x1c, 0x00, 0x02, 0x40, 0x01, 0x00,
3067 0x39, 0x00, 0x32, 0x04, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3068 0xff, 0x05, 0x04, 0x80, 0x00, 0xff, 0xff, 0x07, 0x04, 0x80, 0x00, 0xff,
3069 0xff, 0x08, 0x01, 0x10, 0x01, 0x04, 0x80, 0x00, 0x75, 0x30, 0x09, 0x01,
3070 0x10, 0x0f, 0x08, 0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51, 0x57, 0x08, 0x06,
3071 0x04, 0x80, 0x00, 0xff, 0xff /* followed by zero padding */
3074 static const unsigned char tx_script_1_dgram[] = {
3075 0xc0, 0x00, 0x00, 0x00, 0x01, 0x08, 0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51,
3076 0x57, 0x08, 0x00, 0x00, 0x44, 0x9e, 0x7b, 0x9a, 0xec, 0x34, 0xd1, 0xb1,
3077 0xc9, 0x8d, 0xd7, 0x68, 0x9f, 0xb8, 0xec, 0x11, 0xd2, 0x42, 0xb1, 0x23,
3078 0xdc, 0x9b, 0xd8, 0xba, 0xb9, 0x36, 0xb4, 0x7d, 0x92, 0xec, 0x35, 0x6c,
3079 0x0b, 0xab, 0x7d, 0xf5, 0x97, 0x6d, 0x27, 0xcd, 0x44, 0x9f, 0x63, 0x30,
3080 0x00, 0x99, 0xf3, 0x99, 0x1c, 0x26, 0x0e, 0xc4, 0xc6, 0x0d, 0x17, 0xb3,
3081 0x1f, 0x84, 0x29, 0x15, 0x7b, 0xb3, 0x5a, 0x12, 0x82, 0xa6, 0x43, 0xa8,
3082 0xd2, 0x26, 0x2c, 0xad, 0x67, 0x50, 0x0c, 0xad, 0xb8, 0xe7, 0x37, 0x8c,
3083 0x8e, 0xb7, 0x53, 0x9e, 0xc4, 0xd4, 0x90, 0x5f, 0xed, 0x1b, 0xee, 0x1f,
3084 0xc8, 0xaa, 0xfb, 0xa1, 0x7c, 0x75, 0x0e, 0x2c, 0x7a, 0xce, 0x01, 0xe6,
3085 0x00, 0x5f, 0x80, 0xfc, 0xb7, 0xdf, 0x62, 0x12, 0x30, 0xc8, 0x37, 0x11,
3086 0xb3, 0x93, 0x43, 0xfa, 0x02, 0x8c, 0xea, 0x7f, 0x7f, 0xb5, 0xff, 0x89,
3087 0xea, 0xc2, 0x30, 0x82, 0x49, 0xa0, 0x22, 0x52, 0x15, 0x5e, 0x23, 0x47,
3088 0xb6, 0x3d, 0x58, 0xc5, 0x45, 0x7a, 0xfd, 0x84, 0xd0, 0x5d, 0xff, 0xfd,
3089 0xb2, 0x03, 0x92, 0x84, 0x4a, 0xe8, 0x12, 0x15, 0x46, 0x82, 0xe9, 0xcf,
3090 0x01, 0x2f, 0x90, 0x21, 0xa6, 0xf0, 0xbe, 0x17, 0xdd, 0xd0, 0xc2, 0x08,
3091 0x4d, 0xce, 0x25, 0xff, 0x9b, 0x06, 0xcd, 0xe5, 0x35, 0xd0, 0xf9, 0x20,
3092 0xa2, 0xdb, 0x1b, 0xf3, 0x62, 0xc2, 0x3e, 0x59, 0x6d, 0x11, 0xa4, 0xf5,
3093 0xa6, 0xcf, 0x39, 0x48, 0x83, 0x8a, 0x3a, 0xec, 0x4e, 0x15, 0xda, 0xf8,
3094 0x50, 0x0a, 0x6e, 0xf6, 0x9e, 0xc4, 0xe3, 0xfe, 0xb6, 0xb1, 0xd9, 0x8e,
3095 0x61, 0x0a, 0xc8, 0xb7, 0xec, 0x3f, 0xaf, 0x6a, 0xd7, 0x60, 0xb7, 0xba,
3096 0xd1, 0xdb, 0x4b, 0xa3, 0x48, 0x5e, 0x8a, 0x94, 0xdc, 0x25, 0x0a, 0xe3,
3097 0xfd, 0xb4, 0x1e, 0xd1, 0x5f, 0xb6, 0xa8, 0xe5, 0xeb, 0xa0, 0xfc, 0x3d,
3098 0xd6, 0x0b, 0xc8, 0xe3, 0x0c, 0x5c, 0x42, 0x87, 0xe5, 0x38, 0x05, 0xdb,
3099 0x05, 0x9a, 0xe0, 0x64, 0x8d, 0xb2, 0xf6, 0x42, 0x64, 0xed, 0x5e, 0x39,
3100 0xbe, 0x2e, 0x20, 0xd8, 0x2d, 0xf5, 0x66, 0xda, 0x8d, 0xd5, 0x99, 0x8c,
3101 0xca, 0xbd, 0xae, 0x05, 0x30, 0x60, 0xae, 0x6c, 0x7b, 0x43, 0x78, 0xe8,
3102 0x46, 0xd2, 0x9f, 0x37, 0xed, 0x7b, 0x4e, 0xa9, 0xec, 0x5d, 0x82, 0xe7,
3103 0x96, 0x1b, 0x7f, 0x25, 0xa9, 0x32, 0x38, 0x51, 0xf6, 0x81, 0xd5, 0x82,
3104 0x36, 0x3a, 0xa5, 0xf8, 0x99, 0x37, 0xf5, 0xa6, 0x72, 0x58, 0xbf, 0x63,
3105 0xad, 0x6f, 0x1a, 0x0b, 0x1d, 0x96, 0xdb, 0xd4, 0xfa, 0xdd, 0xfc, 0xef,
3106 0xc5, 0x26, 0x6b, 0xa6, 0x61, 0x17, 0x22, 0x39, 0x5c, 0x90, 0x65, 0x56,
3107 0xbe, 0x52, 0xaf, 0xe3, 0xf5, 0x65, 0x63, 0x6a, 0xd1, 0xb1, 0x7d, 0x50,
3108 0x8b, 0x73, 0xd8, 0x74, 0x3e, 0xeb, 0x52, 0x4b, 0xe2, 0x2b, 0x3d, 0xcb,
3109 0xc2, 0xc7, 0x46, 0x8d, 0x54, 0x11, 0x9c, 0x74, 0x68, 0x44, 0x9a, 0x13,
3110 0xd8, 0xe3, 0xb9, 0x58, 0x11, 0xa1, 0x98, 0xf3, 0x49, 0x1d, 0xe3, 0xe7,
3111 0xfe, 0x94, 0x2b, 0x33, 0x04, 0x07, 0xab, 0xf8, 0x2a, 0x4e, 0xd7, 0xc1,
3112 0xb3, 0x11, 0x66, 0x3a, 0xc6, 0x98, 0x90, 0xf4, 0x15, 0x70, 0x15, 0x85,
3113 0x3d, 0x91, 0xe9, 0x23, 0x03, 0x7c, 0x22, 0x7a, 0x33, 0xcd, 0xd5, 0xec,
3114 0x28, 0x1c, 0xa3, 0xf7, 0x9c, 0x44, 0x54, 0x6b, 0x9d, 0x90, 0xca, 0x00,
3115 0xf0, 0x64, 0xc9, 0x9e, 0x3d, 0xd9, 0x79, 0x11, 0xd3, 0x9f, 0xe9, 0xc5,
3116 0xd0, 0xb2, 0x3a, 0x22, 0x9a, 0x23, 0x4c, 0xb3, 0x61, 0x86, 0xc4, 0x81,
3117 0x9e, 0x8b, 0x9c, 0x59, 0x27, 0x72, 0x66, 0x32, 0x29, 0x1d, 0x6a, 0x41,
3118 0x82, 0x11, 0xcc, 0x29, 0x62, 0xe2, 0x0f, 0xe4, 0x7f, 0xeb, 0x3e, 0xdf,
3119 0x33, 0x0f, 0x2c, 0x60, 0x3a, 0x9d, 0x48, 0xc0, 0xfc, 0xb5, 0x69, 0x9d,
3120 0xbf, 0xe5, 0x89, 0x64, 0x25, 0xc5, 0xba, 0xc4, 0xae, 0xe8, 0x2e, 0x57,
3121 0xa8, 0x5a, 0xaf, 0x4e, 0x25, 0x13, 0xe4, 0xf0, 0x57, 0x96, 0xb0, 0x7b,
3122 0xa2, 0xee, 0x47, 0xd8, 0x05, 0x06, 0xf8, 0xd2, 0xc2, 0x5e, 0x50, 0xfd,
3123 0x14, 0xde, 0x71, 0xe6, 0xc4, 0x18, 0x55, 0x93, 0x02, 0xf9, 0x39, 0xb0,
3124 0xe1, 0xab, 0xd5, 0x76, 0xf2, 0x79, 0xc4, 0xb2, 0xe0, 0xfe, 0xb8, 0x5c,
3125 0x1f, 0x28, 0xff, 0x18, 0xf5, 0x88, 0x91, 0xff, 0xef, 0x13, 0x2e, 0xef,
3126 0x2f, 0xa0, 0x93, 0x46, 0xae, 0xe3, 0x3c, 0x28, 0xeb, 0x13, 0x0f, 0xf2,
3127 0x8f, 0x5b, 0x76, 0x69, 0x53, 0x33, 0x41, 0x13, 0x21, 0x19, 0x96, 0xd2,
3128 0x00, 0x11, 0xa1, 0x98, 0xe3, 0xfc, 0x43, 0x3f, 0x9f, 0x25, 0x41, 0x01,
3129 0x0a, 0xe1, 0x7c, 0x1b, 0xf2, 0x02, 0x58, 0x0f, 0x60, 0x47, 0x47, 0x2f,
3130 0xb3, 0x68, 0x57, 0xfe, 0x84, 0x3b, 0x19, 0xf5, 0x98, 0x40, 0x09, 0xdd,
3131 0xc3, 0x24, 0x04, 0x4e, 0x84, 0x7a, 0x4f, 0x4a, 0x0a, 0xb3, 0x4f, 0x71,
3132 0x95, 0x95, 0xde, 0x37, 0x25, 0x2d, 0x62, 0x35, 0x36, 0x5e, 0x9b, 0x84,
3133 0x39, 0x2b, 0x06, 0x10, 0x85, 0x34, 0x9d, 0x73, 0x20, 0x3a, 0x4a, 0x13,
3134 0xe9, 0x6f, 0x54, 0x32, 0xec, 0x0f, 0xd4, 0xa1, 0xee, 0x65, 0xac, 0xcd,
3135 0xd5, 0xe3, 0x90, 0x4d, 0xf5, 0x4c, 0x1d, 0xa5, 0x10, 0xb0, 0xff, 0x20,
3136 0xdc, 0xc0, 0xc7, 0x7f, 0xcb, 0x2c, 0x0e, 0x0e, 0xb6, 0x05, 0xcb, 0x05,
3137 0x04, 0xdb, 0x87, 0x63, 0x2c, 0xf3, 0xd8, 0xb4, 0xda, 0xe6, 0xe7, 0x05,
3138 0x76, 0x9d, 0x1d, 0xe3, 0x54, 0x27, 0x01, 0x23, 0xcb, 0x11, 0x45, 0x0e,
3139 0xfc, 0x60, 0xac, 0x47, 0x68, 0x3d, 0x7b, 0x8d, 0x0f, 0x81, 0x13, 0x65,
3140 0x56, 0x5f, 0xd9, 0x8c, 0x4c, 0x8e, 0xb9, 0x36, 0xbc, 0xab, 0x8d, 0x06,
3141 0x9f, 0xc3, 0x3b, 0xd8, 0x01, 0xb0, 0x3a, 0xde, 0xa2, 0xe1, 0xfb, 0xc5,
3142 0xaa, 0x46, 0x3d, 0x08, 0xca, 0x19, 0x89, 0x6d, 0x2b, 0xf5, 0x9a, 0x07,
3143 0x1b, 0x85, 0x1e, 0x6c, 0x23, 0x90, 0x52, 0x17, 0x2f, 0x29, 0x6b, 0xfb,
3144 0x5e, 0x72, 0x40, 0x47, 0x90, 0xa2, 0x18, 0x10, 0x14, 0xf3, 0xb9, 0x4a,
3145 0x4e, 0x97, 0xd1, 0x17, 0xb4, 0x38, 0x13, 0x03, 0x68, 0xcc, 0x39, 0xdb,
3146 0xb2, 0xd1, 0x98, 0x06, 0x5a, 0xe3, 0x98, 0x65, 0x47, 0x92, 0x6c, 0xd2,
3147 0x16, 0x2f, 0x40, 0xa2, 0x9f, 0x0c, 0x3c, 0x87, 0x45, 0xc0, 0xf5, 0x0f,
3148 0xba, 0x38, 0x52, 0xe5, 0x66, 0xd4, 0x45, 0x75, 0xc2, 0x9d, 0x39, 0xa0,
3149 0x3f, 0x0c, 0xda, 0x72, 0x19, 0x84, 0xb6, 0xf4, 0x40, 0x59, 0x1f, 0x35,
3150 0x5e, 0x12, 0xd4, 0x39, 0xff, 0x15, 0x0a, 0xab, 0x76, 0x13, 0x49, 0x9d,
3151 0xbd, 0x49, 0xad, 0xab, 0xc8, 0x67, 0x6e, 0xef, 0x02, 0x3b, 0x15, 0xb6,
3152 0x5b, 0xfc, 0x5c, 0xa0, 0x69, 0x48, 0x10, 0x9f, 0x23, 0xf3, 0x50, 0xdb,
3153 0x82, 0x12, 0x35, 0x35, 0xeb, 0x8a, 0x74, 0x33, 0xbd, 0xab, 0xcb, 0x90,
3154 0x92, 0x71, 0xa6, 0xec, 0xbc, 0xb5, 0x8b, 0x93, 0x6a, 0x88, 0xcd, 0x4e,
3155 0x8f, 0x2e, 0x6f, 0xf5, 0x80, 0x01, 0x75, 0xf1, 0x13, 0x25, 0x3d, 0x8f,
3156 0xa9, 0xca, 0x88, 0x85, 0xc2, 0xf5, 0x52, 0xe6, 0x57, 0xdc, 0x60, 0x3f,
3157 0x25, 0x2e, 0x1a, 0x8e, 0x30, 0x8f, 0x76, 0xf0, 0xbe, 0x79, 0xe2, 0xfb,
3158 0x8f, 0x5d, 0x5f, 0xbb, 0xe2, 0xe3, 0x0e, 0xca, 0xdd, 0x22, 0x07, 0x23,
3159 0xc8, 0xc0, 0xae, 0xa8, 0x07, 0x8c, 0xdf, 0xcb, 0x38, 0x68, 0x26, 0x3f,
3160 0xf8, 0xf0, 0x94, 0x00, 0x54, 0xda, 0x48, 0x78, 0x18, 0x93, 0xa7, 0xe4,
3161 0x9a, 0xd5, 0xaf, 0xf4, 0xaf, 0x30, 0x0c, 0xd8, 0x04, 0xa6, 0xb6, 0x27,
3162 0x9a, 0xb3, 0xff, 0x3a, 0xfb, 0x64, 0x49, 0x1c, 0x85, 0x19, 0x4a, 0xab,
3163 0x76, 0x0d, 0x58, 0xa6, 0x06, 0x65, 0x4f, 0x9f, 0x44, 0x00, 0xe8, 0xb3,
3164 0x85, 0x91, 0x35, 0x6f, 0xbf, 0x64, 0x25, 0xac, 0xa2, 0x6d, 0xc8, 0x52,
3165 0x44, 0x25, 0x9f, 0xf2, 0xb1, 0x9c, 0x41, 0xb9, 0xf9, 0x6f, 0x3c, 0xa9,
3166 0xec, 0x1d, 0xde, 0x43, 0x4d, 0xa7, 0xd2, 0xd3, 0x92, 0xb9, 0x05, 0xdd,
3167 0xf3, 0xd1, 0xf9, 0xaf, 0x93, 0xd1, 0xaf, 0x59, 0x50, 0xbd, 0x49, 0x3f,
3168 0x5a, 0xa7, 0x31, 0xb4, 0x05, 0x6d, 0xf3, 0x1b, 0xd2, 0x67, 0xb6, 0xb9,
3169 0x0a, 0x07, 0x98, 0x31, 0xaa, 0xf5, 0x79, 0xbe, 0x0a, 0x39, 0x01, 0x31,
3170 0x37, 0xaa, 0xc6, 0xd4, 0x04, 0xf5, 0x18, 0xcf, 0xd4, 0x68, 0x40, 0x64,
3171 0x7e, 0x78, 0xbf, 0xe7, 0x06, 0xca, 0x4c, 0xf5, 0xe9, 0xc5, 0x45, 0x3e,
3172 0x9f, 0x7c, 0xfd, 0x2b, 0x8b, 0x4c, 0x8d, 0x16, 0x9a, 0x44, 0xe5, 0x5c,
3173 0x88, 0xd4, 0xa9, 0xa7, 0xf9, 0x47, 0x42, 0x41, 0xe2, 0x21, 0xaf, 0x44,
3174 0x86, 0x00, 0x18, 0xab, 0x08, 0x56, 0x97, 0x2e, 0x19, 0x4c, 0xd9, 0x34
3177 static QUIC_PKT_HDR tx_script_1_hdr = {
3178 QUIC_PKT_TYPE_INITIAL, /* type */
3187 {8, {0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51, 0x57, 0x08}}, /* DCID */
3188 { 0, {0} }, /* SCID */
3190 NULL, 0, /* Token */
3191 5555, NULL /* Len/Data */
3194 static const OSSL_QTX_IOVEC tx_script_1_iovec[] = {
3195 { tx_script_1_body, sizeof(tx_script_1_body) }
3198 static const OSSL_QTX_PKT tx_script_1_pkt = {
3201 OSSL_NELEM(tx_script_1_iovec),
3207 static const struct tx_test_op tx_script_1[] = {
3208 TX_OP_PROVIDE_SECRET_INITIAL(tx_script_1_hdr.dst_conn_id, 0)
3209 TX_OP_WRITE_CHECK(1)
3213 /* 2. RFC 9001 - A.3 Server Initial */
3214 static const unsigned char tx_script_2_body[] = {
3215 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x40, 0x5a, 0x02, 0x00, 0x00,
3216 0x56, 0x03, 0x03, 0xee, 0xfc, 0xe7, 0xf7, 0xb3, 0x7b, 0xa1, 0xd1, 0x63,
3217 0x2e, 0x96, 0x67, 0x78, 0x25, 0xdd, 0xf7, 0x39, 0x88, 0xcf, 0xc7, 0x98,
3218 0x25, 0xdf, 0x56, 0x6d, 0xc5, 0x43, 0x0b, 0x9a, 0x04, 0x5a, 0x12, 0x00,
3219 0x13, 0x01, 0x00, 0x00, 0x2e, 0x00, 0x33, 0x00, 0x24, 0x00, 0x1d, 0x00,
3220 0x20, 0x9d, 0x3c, 0x94, 0x0d, 0x89, 0x69, 0x0b, 0x84, 0xd0, 0x8a, 0x60,
3221 0x99, 0x3c, 0x14, 0x4e, 0xca, 0x68, 0x4d, 0x10, 0x81, 0x28, 0x7c, 0x83,
3222 0x4d, 0x53, 0x11, 0xbc, 0xf3, 0x2b, 0xb9, 0xda, 0x1a, 0x00, 0x2b, 0x00,
3226 static const unsigned char tx_script_2_dgram[] = {
3228 0xcf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a,
3229 0x42, 0x62, 0xb5, 0x00, 0x40, 0x75, 0xc0, 0xd9, 0x5a, 0x48, 0x2c, 0xd0,
3230 0x99, 0x1c, 0xd2, 0x5b, 0x0a, 0xac, 0x40, 0x6a, 0x58, 0x16, 0xb6, 0x39,
3231 0x41, 0x00, 0xf3, 0x7a, 0x1c, 0x69, 0x79, 0x75, 0x54, 0x78, 0x0b, 0xb3,
3232 0x8c, 0xc5, 0xa9, 0x9f, 0x5e, 0xde, 0x4c, 0xf7, 0x3c, 0x3e, 0xc2, 0x49,
3233 0x3a, 0x18, 0x39, 0xb3, 0xdb, 0xcb, 0xa3, 0xf6, 0xea, 0x46, 0xc5, 0xb7,
3234 0x68, 0x4d, 0xf3, 0x54, 0x8e, 0x7d, 0xde, 0xb9, 0xc3, 0xbf, 0x9c, 0x73,
3235 0xcc, 0x3f, 0x3b, 0xde, 0xd7, 0x4b, 0x56, 0x2b, 0xfb, 0x19, 0xfb, 0x84,
3236 0x02, 0x2f, 0x8e, 0xf4, 0xcd, 0xd9, 0x37, 0x95, 0xd7, 0x7d, 0x06, 0xed,
3237 0xbb, 0x7a, 0xaf, 0x2f, 0x58, 0x89, 0x18, 0x50, 0xab, 0xbd, 0xca, 0x3d,
3238 0x20, 0x39, 0x8c, 0x27, 0x64, 0x56, 0xcb, 0xc4, 0x21, 0x58, 0x40, 0x7d,
3242 static QUIC_PKT_HDR tx_script_2_hdr = {
3243 QUIC_PKT_TYPE_INITIAL, /* type */
3252 { 0, {0} }, /* DCID */
3253 {8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5}}, /* SCID */
3255 NULL, 0, /* Token */
3256 5555, NULL /* Len/Data */
3259 static const OSSL_QTX_IOVEC tx_script_2_iovec[] = {
3260 { tx_script_2_body, sizeof(tx_script_2_body) }
3263 static const OSSL_QTX_PKT tx_script_2_pkt = {
3266 OSSL_NELEM(tx_script_2_iovec),
3272 static const struct tx_test_op tx_script_2[] = {
3273 TX_OP_PROVIDE_SECRET_INITIAL(tx_script_1_hdr.dst_conn_id, 1)
3274 TX_OP_WRITE_CHECK(2)
3278 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
3279 /* 3. RFC 9001 - A.5 ChaCha20-Poly1305 Short Header Packet */
3280 static const unsigned char tx_script_3_body[] = {
3284 static const unsigned char tx_script_3_dgram[] = {
3285 0x4c, 0xfe, 0x41, 0x89, 0x65, 0x5e, 0x5c, 0xd5, 0x5c, 0x41, 0xf6, 0x90,
3286 0x80, 0x57, 0x5d, 0x79, 0x99, 0xc2, 0x5a, 0x5b, 0xfb
3288 static const unsigned char tx_script_3_secret[] = {
3289 0x9a, 0xc3, 0x12, 0xa7, 0xf8, 0x77, 0x46, 0x8e, 0xbe, 0x69, 0x42, 0x27,
3290 0x48, 0xad, 0x00, 0xa1, 0x54, 0x43, 0xf1, 0x82, 0x03, 0xa0, 0x7d, 0x60,
3291 0x60, 0xf6, 0x88, 0xf3, 0x0f, 0x21, 0x63, 0x2b
3294 static QUIC_PKT_HDR tx_script_3_hdr = {
3295 QUIC_PKT_TYPE_1RTT, /* type */
3304 { 0, {0} }, /* DCID */
3305 { 0, {0} }, /* SCID */
3307 NULL, 0, /* Token */
3308 5555, NULL /* Len/Data */
3311 static const OSSL_QTX_IOVEC tx_script_3_iovec[] = {
3312 { tx_script_3_body, sizeof(tx_script_3_body) }
3315 static const OSSL_QTX_PKT tx_script_3_pkt = {
3318 OSSL_NELEM(tx_script_3_iovec),
3324 static const struct tx_test_op tx_script_3[] = {
3325 TX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT, QRL_SUITE_CHACHA20POLY1305, tx_script_3_secret)
3326 TX_OP_WRITE_CHECK(3)
3329 #endif /* !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) */
3331 /* 4. Real World - AES-128-GCM Key Update */
3332 static const unsigned char tx_script_4_secret[] = {
3333 0x70, 0x82, 0xc0, 0x45, 0x61, 0x4d, 0xfe, 0x04, 0x76, 0xa6, 0x4e, 0xf0,
3334 0x38, 0xe6, 0x63, 0xd9, 0xdd, 0x4a, 0x75, 0x16, 0xa8, 0xa0, 0x06, 0x5a,
3335 0xf2, 0x56, 0xfd, 0x84, 0x78, 0xfd, 0xf6, 0x5e
3338 static const unsigned char tx_script_4a_body[] = {
3339 0x02, 0x03, 0x09, 0x00, 0x03, 0x0c, 0x00, 0x36, 0x49, 0x27, 0x6d, 0x20,
3340 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x6e,
3341 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65,
3344 static const unsigned char tx_script_4a_dgram[] = {
3345 0x47, 0x6e, 0x4e, 0xbd, 0x49, 0x7e, 0xbd, 0x15, 0x1c, 0xd1, 0x3e, 0xc8,
3346 0xcd, 0x43, 0x87, 0x6b, 0x84, 0xdb, 0xeb, 0x06, 0x8b, 0x8a, 0xae, 0x37,
3347 0xed, 0x9c, 0xeb, 0xbc, 0xcf, 0x0d, 0x3c, 0xf0, 0xa1, 0x6f, 0xee, 0xd2,
3348 0x7c, 0x07, 0x6e, 0xd1, 0xbe, 0x40, 0x6a, 0xd4, 0x53, 0x38, 0x9e, 0x63,
3349 0xb5, 0xde, 0x35, 0x09, 0xb2, 0x78, 0x94, 0xe4, 0x2b, 0x37
3352 static QUIC_PKT_HDR tx_script_4a_hdr = {
3353 QUIC_PKT_TYPE_1RTT, /* type */
3362 { 4, {0x6e, 0x4e, 0xbd, 0x49} }, /* DCID */
3363 { 0, {0} }, /* SCID */
3365 NULL, 0, /* Token */
3366 5555, NULL /* Len/Data */
3369 static const OSSL_QTX_IOVEC tx_script_4a_iovec[] = {
3370 { tx_script_4a_body, sizeof(tx_script_4a_body) }
3373 static const OSSL_QTX_PKT tx_script_4a_pkt = {
3376 OSSL_NELEM(tx_script_4a_iovec),
3382 static const unsigned char tx_script_4b_body[] = {
3383 0x02, 0x04, 0x07, 0x00, 0x00, 0x0c, 0x00, 0x40, 0x51, 0x49, 0x27, 0x6d,
3384 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f,
3385 0x6e, 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65,
3388 static const unsigned char tx_script_4b_dgram[] = {
3389 0x58, 0x6e, 0x4e, 0xbd, 0x49, 0xa4, 0x43, 0x33, 0xea, 0x11, 0x3a, 0x6c,
3390 0xf5, 0x20, 0xef, 0x55, 0x8d, 0x25, 0xe2, 0x3b, 0x0e, 0x8c, 0xea, 0x17,
3391 0xfc, 0x2b, 0x7a, 0xab, 0xfa, 0x3d, 0x07, 0xda, 0xa7, 0x7c, 0xc7, 0x47,
3392 0x82, 0x02, 0x46, 0x40, 0x4f, 0x01, 0xad, 0xb2, 0x9d, 0x97, 0xdb, 0xfc,
3393 0x9c, 0x4b, 0x46, 0xb1, 0x5a, 0x7f, 0x0b, 0x12, 0xaf, 0x49, 0xdf,
3396 static QUIC_PKT_HDR tx_script_4b_hdr = {
3397 QUIC_PKT_TYPE_1RTT, /* type */
3406 { 4, {0x6e, 0x4e, 0xbd, 0x49} }, /* DCID */
3407 { 0, {0} }, /* SCID */
3409 NULL, 0, /* Token */
3410 5555, NULL /* Len/Data */
3413 static const OSSL_QTX_IOVEC tx_script_4b_iovec[] = {
3414 { tx_script_4b_body, sizeof(tx_script_4b_body) }
3417 static const OSSL_QTX_PKT tx_script_4b_pkt = {
3420 OSSL_NELEM(tx_script_4b_iovec),
3426 static const unsigned char tx_script_4c_body[] = {
3427 0x02, 0x09, 0x0e, 0x00, 0x00, 0x0c, 0x00, 0x40, 0xd8, 0x49, 0x27, 0x6d,
3428 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f,
3429 0x6e, 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65,
3432 static const unsigned char tx_script_4c_dgram[] = {
3433 0x49, 0x6e, 0x4e, 0xbd, 0x49, 0x4d, 0xd9, 0x85, 0xba, 0x26, 0xfb, 0x68,
3434 0x83, 0x9b, 0x94, 0x34, 0x7d, 0xc1, 0x7a, 0x05, 0xb7, 0x38, 0x43, 0x21,
3435 0xe2, 0xec, 0x2b, 0xc1, 0x81, 0x74, 0x2d, 0xda, 0x24, 0xba, 0xbd, 0x99,
3436 0x69, 0xd2, 0x56, 0xfa, 0xae, 0x29, 0x24, 0xb2, 0xaa, 0xda, 0xbd, 0x82,
3437 0x80, 0xf1, 0xbb, 0x6a, 0xfd, 0xae, 0xda, 0x0e, 0x09, 0xcf, 0x09,
3440 static QUIC_PKT_HDR tx_script_4c_hdr = {
3441 QUIC_PKT_TYPE_1RTT, /* type */
3450 { 4, {0x6e, 0x4e, 0xbd, 0x49} }, /* DCID */
3451 { 0, {0} }, /* SCID */
3453 NULL, 0, /* Token */
3454 5555, NULL /* Len/Data */
3457 static const OSSL_QTX_IOVEC tx_script_4c_iovec[] = {
3458 { tx_script_4c_body, sizeof(tx_script_4c_body) }
3461 static const OSSL_QTX_PKT tx_script_4c_pkt = {
3464 OSSL_NELEM(tx_script_4c_iovec),
3470 static const struct tx_test_op tx_script_4[] = {
3471 TX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT, QRL_SUITE_AES128GCM, tx_script_4_secret)
3472 TX_OP_WRITE_CHECK(4a)
3474 TX_OP_WRITE_CHECK(4b)
3476 TX_OP_WRITE_CHECK(4c)
3480 /* 5. Real World - Retry Packet */
3481 static const unsigned char tx_script_5_body[] = {
3483 0x92, 0xe7, 0xc6, 0xd8, 0x09, 0x65, 0x72, 0x55, 0xe5, 0xe2, 0x73, 0x04,
3484 0xf3, 0x07, 0x5b, 0x21, 0x9f, 0x50, 0xcb, 0xbc, 0x79, 0xc5, 0x77, 0x5a,
3485 0x29, 0x43, 0x65, 0x49, 0xf0, 0x6e, 0xc1, 0xc0, 0x3a, 0xe8, 0xca, 0xd2,
3486 0x44, 0x69, 0xdd, 0x23, 0x31, 0x93, 0x52, 0x02, 0xf7, 0x42, 0x07, 0x78,
3487 0xa1, 0x81, 0x61, 0x9c, 0x39, 0x07, 0x18, 0x69, 0x6e, 0x4f, 0xdc, 0xa0,
3488 0xbe, 0x4b, 0xe5, 0xf2, 0xe9, 0xd2, 0xa4, 0xa7, 0x34, 0x55, 0x5e, 0xf3,
3489 0xf8, 0x9c, 0x49, 0x8f, 0x0c, 0xc8, 0xb2, 0x75, 0x4b, 0x4d, 0x2f, 0xfe,
3490 0x05, 0x5a, 0xdd, 0x4b, 0xe6, 0x14, 0xb4, 0xd2, 0xc0, 0x93, 0x6e, 0x0e,
3491 0x84, 0x41, 0x4d, 0x31,
3492 /* Retry Integrity Tag */
3493 0x43, 0x8e, 0xab, 0xcd, 0xce, 0x24, 0x44, 0xc2, 0x20, 0xe1, 0xe2, 0xc8,
3494 0xae, 0xa3, 0x8d, 0x4e,
3497 static const unsigned char tx_script_5_dgram[] = {
3498 0xf0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0xa9, 0x20, 0xcc, 0xc2, 0x92,
3499 0xe7, 0xc6, 0xd8, 0x09, 0x65, 0x72, 0x55, 0xe5, 0xe2, 0x73, 0x04, 0xf3,
3500 0x07, 0x5b, 0x21, 0x9f, 0x50, 0xcb, 0xbc, 0x79, 0xc5, 0x77, 0x5a, 0x29,
3501 0x43, 0x65, 0x49, 0xf0, 0x6e, 0xc1, 0xc0, 0x3a, 0xe8, 0xca, 0xd2, 0x44,
3502 0x69, 0xdd, 0x23, 0x31, 0x93, 0x52, 0x02, 0xf7, 0x42, 0x07, 0x78, 0xa1,
3503 0x81, 0x61, 0x9c, 0x39, 0x07, 0x18, 0x69, 0x6e, 0x4f, 0xdc, 0xa0, 0xbe,
3504 0x4b, 0xe5, 0xf2, 0xe9, 0xd2, 0xa4, 0xa7, 0x34, 0x55, 0x5e, 0xf3, 0xf8,
3505 0x9c, 0x49, 0x8f, 0x0c, 0xc8, 0xb2, 0x75, 0x4b, 0x4d, 0x2f, 0xfe, 0x05,
3506 0x5a, 0xdd, 0x4b, 0xe6, 0x14, 0xb4, 0xd2, 0xc0, 0x93, 0x6e, 0x0e, 0x84,
3507 0x41, 0x4d, 0x31, 0x43, 0x8e, 0xab, 0xcd, 0xce, 0x24, 0x44, 0xc2, 0x20,
3508 0xe1, 0xe2, 0xc8, 0xae, 0xa3, 0x8d, 0x4e,
3511 static QUIC_PKT_HDR tx_script_5_hdr = {
3512 QUIC_PKT_TYPE_RETRY, /* type */
3521 { 0, {0} }, /* DCID */
3522 { 4, {0xa9, 0x20, 0xcc, 0xc2} }, /* SCID */
3524 NULL, 0, /* Token */
3525 5555, NULL /* Len/Data */
3528 static const OSSL_QTX_IOVEC tx_script_5_iovec[] = {
3529 { tx_script_5_body, sizeof(tx_script_5_body) }
3532 static const OSSL_QTX_PKT tx_script_5_pkt = {
3535 OSSL_NELEM(tx_script_5_iovec),
3541 static const struct tx_test_op tx_script_5[] = {
3542 TX_OP_WRITE_CHECK(5)
3546 /* 6. Real World - Version Negotiation Packet */
3547 static const unsigned char tx_script_6_body[] = {
3548 0x00, 0x00, 0x00, 0x01, /* Supported Version: 1 */
3549 0xaa, 0x9a, 0x3a, 0x9a /* Supported Version: Random (GREASE) */
3552 static const unsigned char tx_script_6_dgram[] = {
3554 0x00, 0x00, 0x00, 0x00, /* Version 0 (Version Negotiation) */
3556 0x0c, 0x35, 0x3c, 0x1b, 0x97, 0xca, /* SCID */
3557 0xf8, 0x99, 0x11, 0x39, 0xad, 0x79,
3559 0x00, 0x00, 0x00, 0x01, /* Supported Version: 1 */
3560 0xaa, 0x9a, 0x3a, 0x9a /* Supported Version: Random (GREASE) */
3563 static QUIC_PKT_HDR tx_script_6_hdr = {
3564 QUIC_PKT_TYPE_VERSION_NEG, /* type */
3573 { 0, {0} }, /* DCID */
3574 { 12, {0x35, 0x3c, 0x1b, 0x97, 0xca, 0xf8, 0x99,
3575 0x11, 0x39, 0xad, 0x79, 0x1f} }, /* SCID */
3577 NULL, 0, /* Token */
3578 5555, NULL /* Len/Data */
3581 static const OSSL_QTX_IOVEC tx_script_6_iovec[] = {
3582 { tx_script_6_body, sizeof(tx_script_6_body) }
3585 static const OSSL_QTX_PKT tx_script_6_pkt = {
3588 OSSL_NELEM(tx_script_6_iovec),
3594 static const struct tx_test_op tx_script_6[] = {
3595 TX_OP_WRITE_CHECK(6)
3599 static const struct tx_test_op *const tx_scripts[] = {
3602 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
3610 static int tx_run_script(const struct tx_test_op *script)
3613 const struct tx_test_op *op = script;
3614 OSSL_QTX *qtx = NULL;
3616 OSSL_QTX_ARGS args = {0};
3620 if (!TEST_ptr(qtx = ossl_qtx_new(&args)))
3623 for (; op->op != TX_TEST_OP_END; ++op)
3625 case TX_TEST_OP_PROVIDE_SECRET:
3626 if (!TEST_true(ossl_qtx_provide_secret(qtx, op->enc_level,
3628 op->buf, op->buf_len)))
3631 case TX_TEST_OP_PROVIDE_SECRET_INITIAL:
3632 if (!TEST_true(ossl_quic_provide_initial_secret(NULL, NULL,
3638 case TX_TEST_OP_DISCARD_EL:
3639 if (!TEST_true(ossl_qtx_discard_enc_level(qtx, op->enc_level)))
3642 case TX_TEST_OP_WRITE:
3645 = ossl_quic_pkt_type_to_enc_level(op->pkt->hdr->type);
3646 uint64_t old_value = 0, new_value, max_value;
3648 if (enc_level < QUIC_ENC_LEVEL_NUM) { /* encrypted packet */
3649 max_value = ossl_qtx_get_max_epoch_pkt_count(qtx, enc_level);
3651 if (!TEST_uint64_t_lt(max_value, UINT64_MAX))
3654 old_value = ossl_qtx_get_cur_epoch_pkt_count(qtx, enc_level);
3655 if (!TEST_uint64_t_lt(old_value, UINT64_MAX))
3659 if (!TEST_true(ossl_qtx_write_pkt(qtx, op->pkt)))
3662 if (enc_level < QUIC_ENC_LEVEL_NUM) {
3663 new_value = ossl_qtx_get_cur_epoch_pkt_count(qtx, enc_level);
3664 if (!TEST_uint64_t_eq(old_value + 1, new_value))
3669 case TX_TEST_OP_CHECK_DGRAM:
3670 if (!TEST_true(ossl_qtx_pop_net(qtx, &msg)))
3673 if (!TEST_mem_eq(msg.data, msg.data_len, op->buf, op->buf_len))
3677 case TX_TEST_OP_CHECK_NO_DGRAM:
3678 if (!TEST_false(ossl_qtx_pop_net(qtx, &msg)))
3681 case TX_TEST_OP_KEY_UPDATE:
3682 if (!TEST_true(ossl_qtx_trigger_key_update(qtx)))
3698 static int test_tx_script(int idx)
3700 return tx_run_script(tx_scripts[idx]);
3703 int setup_tests(void)
3705 ADD_ALL_TESTS(test_rx_script, OSSL_NELEM(rx_scripts));
3707 * Each instance of this test is executed multiple times to get enough
3708 * statistical coverage for our statistical test, as well as for each
3709 * supported key type.
3711 * We call the statistical test as the last index in the wire_pkt_hdr
3712 * test rather than as a separate case, as it needs to execute last
3713 * and otherwise random test ordering will cause itt to randomly fail.
3715 ADD_ALL_TESTS(test_wire_pkt_hdr, NUM_WIRE_PKT_HDR_TESTS + 1);
3716 ADD_ALL_TESTS(test_tx_script, OSSL_NELEM(tx_scripts));