2 * Copyright 2022 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_ADD_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 */
38 const unsigned char *buf;
40 const QUIC_PKT_HDR *hdr;
41 uint32_t enc_level, suite_id;
43 const QUIC_CONN_ID *dcid;
44 int (*new_qrx)(QUIC_DEMUX **demux, OSSL_QRX **qrx);
46 /* For frame checking */
51 #define RX_OP_SET_SCID_LEN(scid_len) \
52 { RX_TEST_OP_SET_SCID_LEN, 0, NULL, 0, NULL, (scid_len), 0, 0, NULL, NULL },
53 #define RX_OP_SET_INIT_LARGEST_PN(largest_pn) \
54 { RX_TEST_OP_SET_INIT_LARGEST_PN, 0, NULL, 0, NULL, 0, 0, (largest_pn), NULL, NULL },
55 #define RX_OP_ADD_RX_DCID(dcid) \
56 { RX_TEST_OP_ADD_RX_DCID, 0, NULL, 0, NULL, 0, 0, 0, &(dcid), NULL },
57 #define RX_OP_INJECT(dgram) \
58 { RX_TEST_OP_INJECT, 0, (dgram), sizeof(dgram), NULL, 0, 0, 0, NULL },
59 #define RX_OP_PROVIDE_SECRET(el, suite, key) \
61 RX_TEST_OP_PROVIDE_SECRET, 0, (key), sizeof(key), \
62 NULL, (el), (suite), 0, NULL, NULL \
64 #define RX_OP_PROVIDE_SECRET_INITIAL(dcid) \
65 { RX_TEST_OP_PROVIDE_SECRET_INITIAL, 0, NULL, 0, NULL, 0, 0, 0, &(dcid), NULL },
66 #define RX_OP_DISCARD_EL(el) \
67 { RX_TEST_OP_DISCARD_EL, 0, NULL, 0, NULL, (el), 0, 0, NULL, NULL },
68 #define RX_OP_CHECK_PKT(expect_hdr, expect_body) \
70 RX_TEST_OP_CHECK_PKT, 0, (expect_body), sizeof(expect_body), \
71 &(expect_hdr), 0, 0, 0, NULL, NULL \
73 #define RX_OP_CHECK_NO_PKT() \
74 { RX_TEST_OP_CHECK_NO_PKT, 0, NULL, 0, NULL, 0, 0, 0, NULL, NULL },
75 #define RX_OP_CHECK_KEY_EPOCH(expected) \
76 { RX_TEST_OP_CHECK_KEY_EPOCH, 0, NULL, 0, NULL, 0, 0, (expected), NULL },
77 #define RX_OP_KEY_UPDATE_TIMEOUT(normal) \
78 { RX_TEST_OP_KEY_UPDATE_TIMEOUT, 0, NULL, 0, NULL, (normal), 0, 0, NULL },
79 #define RX_OP_SET_INIT_KEY_PHASE(kp_bit) \
80 { RX_TEST_OP_SET_INIT_KEY_PHASE, 0, NULL, 0, NULL, (kp_bit), 0, 0, NULL },
82 #define RX_OP_INJECT_N(n) \
83 RX_OP_INJECT(rx_script_##n##_in)
84 #define RX_OP_CHECK_PKT_N(n) \
85 RX_OP_CHECK_PKT(rx_script_##n##_expect_hdr, rx_script_##n##_body)
87 #define RX_OP_INJECT_CHECK(n) \
91 /* 1. RFC 9001 - A.3 Server Initial */
92 static const unsigned char rx_script_1_in[] = {
93 0xcf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a,
94 0x42, 0x62, 0xb5, 0x00, 0x40, 0x75, 0xc0, 0xd9, 0x5a, 0x48, 0x2c, 0xd0,
95 0x99, 0x1c, 0xd2, 0x5b, 0x0a, 0xac, 0x40, 0x6a, 0x58, 0x16, 0xb6, 0x39,
96 0x41, 0x00, 0xf3, 0x7a, 0x1c, 0x69, 0x79, 0x75, 0x54, 0x78, 0x0b, 0xb3,
97 0x8c, 0xc5, 0xa9, 0x9f, 0x5e, 0xde, 0x4c, 0xf7, 0x3c, 0x3e, 0xc2, 0x49,
98 0x3a, 0x18, 0x39, 0xb3, 0xdb, 0xcb, 0xa3, 0xf6, 0xea, 0x46, 0xc5, 0xb7,
99 0x68, 0x4d, 0xf3, 0x54, 0x8e, 0x7d, 0xde, 0xb9, 0xc3, 0xbf, 0x9c, 0x73,
100 0xcc, 0x3f, 0x3b, 0xde, 0xd7, 0x4b, 0x56, 0x2b, 0xfb, 0x19, 0xfb, 0x84,
101 0x02, 0x2f, 0x8e, 0xf4, 0xcd, 0xd9, 0x37, 0x95, 0xd7, 0x7d, 0x06, 0xed,
102 0xbb, 0x7a, 0xaf, 0x2f, 0x58, 0x89, 0x18, 0x50, 0xab, 0xbd, 0xca, 0x3d,
103 0x20, 0x39, 0x8c, 0x27, 0x64, 0x56, 0xcb, 0xc4, 0x21, 0x58, 0x40, 0x7d,
107 static const unsigned char rx_script_1_body[] = {
108 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x40, 0x5a, 0x02, 0x00, 0x00,
109 0x56, 0x03, 0x03, 0xee, 0xfc, 0xe7, 0xf7, 0xb3, 0x7b, 0xa1, 0xd1, 0x63,
110 0x2e, 0x96, 0x67, 0x78, 0x25, 0xdd, 0xf7, 0x39, 0x88, 0xcf, 0xc7, 0x98,
111 0x25, 0xdf, 0x56, 0x6d, 0xc5, 0x43, 0x0b, 0x9a, 0x04, 0x5a, 0x12, 0x00,
112 0x13, 0x01, 0x00, 0x00, 0x2e, 0x00, 0x33, 0x00, 0x24, 0x00, 0x1d, 0x00,
113 0x20, 0x9d, 0x3c, 0x94, 0x0d, 0x89, 0x69, 0x0b, 0x84, 0xd0, 0x8a, 0x60,
114 0x99, 0x3c, 0x14, 0x4e, 0xca, 0x68, 0x4d, 0x10, 0x81, 0x28, 0x7c, 0x83,
115 0x4d, 0x53, 0x11, 0xbc, 0xf3, 0x2b, 0xb9, 0xda, 0x1a, 0x00, 0x2b, 0x00,
119 static const QUIC_CONN_ID rx_script_1_dcid = {
120 8, { 0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51, 0x57, 0x08 }
123 static const QUIC_PKT_HDR rx_script_1_expect_hdr = {
124 QUIC_PKT_TYPE_INITIAL,
125 0, 0, 2, 0, 1, 0, 1, { 0, {0} },
126 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } },
132 static const struct rx_test_op rx_script_1[] = {
133 RX_OP_SET_SCID_LEN(2)
134 RX_OP_SET_INIT_LARGEST_PN(0)
135 RX_OP_ADD_RX_DCID(empty_conn_id)
136 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_1_dcid)
137 RX_OP_INJECT_CHECK(1)
142 /* 2. RFC 9001 - A.5 ChaCha20-Poly1305 Short Header Packet */
143 #ifndef OPENSSL_NO_CHACHA
144 static const unsigned char rx_script_2_in[] = {
145 0x4c, 0xfe, 0x41, 0x89, 0x65, 0x5e, 0x5c, 0xd5, 0x5c, 0x41, 0xf6, 0x90,
146 0x80, 0x57, 0x5d, 0x79, 0x99, 0xc2, 0x5a, 0x5b, 0xfb
149 static const unsigned char rx_script_2_secret[] = {
150 0x9a, 0xc3, 0x12, 0xa7, 0xf8, 0x77, 0x46, 0x8e, 0xbe, 0x69, 0x42, 0x27,
151 0x48, 0xad, 0x00, 0xa1, 0x54, 0x43, 0xf1, 0x82, 0x03, 0xa0, 0x7d, 0x60,
152 0x60, 0xf6, 0x88, 0xf3, 0x0f, 0x21, 0x63, 0x2b
155 static const unsigned char rx_script_2_body[] = {
159 static const QUIC_PKT_HDR rx_script_2_expect_hdr = {
161 0, 0, 3, 0, 1, 0, 0, {0, {0}}, {0, {0}},
162 {0x00, 0xbf, 0xf4, 0x00},
167 static const struct rx_test_op rx_script_2[] = {
168 RX_OP_SET_INIT_LARGEST_PN(654360560)
169 RX_OP_ADD_RX_DCID(empty_conn_id)
170 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT, QRL_SUITE_CHACHA20POLY1305,
172 RX_OP_INJECT_CHECK(2)
176 #endif /* !defined(OPENSSL_NO_CHACHA) */
178 /* 3. Real World - Version Negotiation Response */
179 static const unsigned char rx_script_3_in[] = {
180 0xc7, /* Long; Random Bits */
181 0x00, 0x00, 0x00, 0x00, /* Version 0 (Version Negotiation) */
183 0x0c, 0x35, 0x3c, 0x1b, 0x97, 0xca, /* SCID */
184 0xf8, 0x99, 0x11, 0x39, 0xad, 0x79,
186 0x00, 0x00, 0x00, 0x01, /* Supported Version: 1 */
187 0xaa, 0x9a, 0x3a, 0x9a /* Supported Version: Random (GREASE) */
190 static const QUIC_PKT_HDR rx_script_3_expect_hdr = {
191 QUIC_PKT_TYPE_VERSION_NEG,
200 {12, {0x35, 0x3c, 0x1b, 0x97, 0xca, 0xf8, /* SCID */
201 0x99, 0x11, 0x39, 0xad, 0x79, 0x1f}},
203 NULL, 0, /* Token/Token Len */
207 static const unsigned char rx_script_3_body[] = {
208 0x00, 0x00, 0x00, 0x01,
209 0xaa, 0x9a, 0x3a, 0x9a
212 static const struct rx_test_op rx_script_3[] = {
213 RX_OP_ADD_RX_DCID(empty_conn_id)
215 * This is a version negotiation packet, so doesn't have any frames.
216 * However, the depacketizer still handles this sort of packet, so
217 * we still pass the packet to it, to exercise what it does.
219 RX_OP_INJECT_CHECK(3)
224 /* 4. Real World - Retry (S2C) */
225 static const unsigned char rx_script_4_in[] = {
226 0xf0, /* Long; Retry */
227 0x00, 0x00, 0x00, 0x01, /* Version 1 */
229 0x04, 0xad, 0x15, 0x3f, 0xae, /* SCID */
230 /* Retry Token, including 16-byte Retry Integrity Tag */
231 0xf6, 0x8b, 0x6e, 0xa3, 0xdc, 0x40, 0x38, 0xc6, 0xa5, 0x99, 0x1c, 0xa9,
232 0x77, 0xe6, 0x1d, 0x4f, 0x09, 0x36, 0x12, 0x26, 0x00, 0x56, 0x0b, 0x29,
233 0x7d, 0x5e, 0xda, 0x39, 0xc6, 0x61, 0x57, 0x69, 0x15, 0xff, 0x93, 0x39,
234 0x95, 0xf0, 0x57, 0xf1, 0xe5, 0x36, 0x08, 0xad, 0xd2, 0x75, 0xa9, 0x68,
235 0x29, 0xed, 0xaa, 0x03, 0x0e, 0x5f, 0xac, 0xbd, 0x26, 0x07, 0x95, 0x4e,
236 0x48, 0x61, 0x26, 0xc5, 0xe2, 0x6c, 0x60, 0xbf, 0xa8, 0x6f, 0x51, 0xbb,
237 0x1d, 0xf7, 0x98, 0x95, 0x3b, 0x2c, 0x50, 0x79, 0xcc, 0xde, 0x27, 0x84,
238 0x44, 0x9b, 0xb2, 0x4a, 0x94, 0x4d, 0x4d, 0x3d, 0xbc, 0x00, 0x9d, 0x69,
239 0xad, 0x45, 0x89, 0x04, 0x48, 0xca, 0x04, 0xf6, 0x3a, 0x62, 0xc1, 0x38,
240 0x9d, 0x82, 0xb3, 0x45, 0x62, 0x4c,
243 static const QUIC_PKT_HDR rx_script_4_expect_hdr = {
253 {4, {0xad, 0x15, 0x3f, 0xae}}, /* SCID */
255 NULL, 0, /* Token/Token Len */
259 static const unsigned char rx_script_4_body[] = {
260 0xf6, 0x8b, 0x6e, 0xa3, 0xdc, 0x40, 0x38, 0xc6, 0xa5, 0x99, 0x1c, 0xa9,
261 0x77, 0xe6, 0x1d, 0x4f, 0x09, 0x36, 0x12, 0x26, 0x00, 0x56, 0x0b, 0x29,
262 0x7d, 0x5e, 0xda, 0x39, 0xc6, 0x61, 0x57, 0x69, 0x15, 0xff, 0x93, 0x39,
263 0x95, 0xf0, 0x57, 0xf1, 0xe5, 0x36, 0x08, 0xad, 0xd2, 0x75, 0xa9, 0x68,
264 0x29, 0xed, 0xaa, 0x03, 0x0e, 0x5f, 0xac, 0xbd, 0x26, 0x07, 0x95, 0x4e,
265 0x48, 0x61, 0x26, 0xc5, 0xe2, 0x6c, 0x60, 0xbf, 0xa8, 0x6f, 0x51, 0xbb,
266 0x1d, 0xf7, 0x98, 0x95, 0x3b, 0x2c, 0x50, 0x79, 0xcc, 0xde, 0x27, 0x84,
267 0x44, 0x9b, 0xb2, 0x4a, 0x94, 0x4d, 0x4d, 0x3d, 0xbc, 0x00, 0x9d, 0x69,
268 0xad, 0x45, 0x89, 0x04, 0x48, 0xca, 0x04, 0xf6, 0x3a, 0x62, 0xc1, 0x38,
269 0x9d, 0x82, 0xb3, 0x45, 0x62, 0x4c
272 static const struct rx_test_op rx_script_4[] = {
273 RX_OP_ADD_RX_DCID(empty_conn_id)
274 RX_OP_INJECT_CHECK(4)
280 * 5. Real World - S2C Multiple Packets
281 * - Initial, Handshake, 1-RTT (AES-128-GCM/SHA256)
283 static const QUIC_CONN_ID rx_script_5_c2s_init_dcid = {
284 4, {0xad, 0x15, 0x3f, 0xae}
287 static const unsigned char rx_script_5_handshake_secret[32] = {
288 0x5e, 0xc6, 0x4a, 0x4d, 0x0d, 0x40, 0x43, 0x3b, 0xd5, 0xbd, 0xe0, 0x19,
289 0x71, 0x47, 0x56, 0xf3, 0x59, 0x3a, 0xa6, 0xc9, 0x3e, 0xdc, 0x81, 0x1e,
290 0xc7, 0x72, 0x9d, 0x83, 0xd8, 0x8f, 0x88, 0x77
293 static const unsigned char rx_script_5_1rtt_secret[32] = {
294 0x53, 0xf2, 0x1b, 0x94, 0xa7, 0x65, 0xf7, 0x76, 0xfb, 0x06, 0x27, 0xaa,
295 0xd2, 0x3f, 0xe0, 0x9a, 0xbb, 0xcf, 0x99, 0x6f, 0x13, 0x2c, 0x6a, 0x37,
296 0x95, 0xf3, 0xda, 0x21, 0xcb, 0xcb, 0xa5, 0x26,
299 static const unsigned char rx_script_5_in[] = {
300 /* First Packet: Initial */
301 0xc4, /* Long, Initial, PN Length=2 bytes */
302 0x00, 0x00, 0x00, 0x01, /* Version */
304 0x04, 0x83, 0xd0, 0x0a, 0x27, /* SCID */
305 0x00, /* Token Length */
306 0x41, 0xd2, /* Length (466) */
307 0xe3, 0xab, /* PN (0) */
308 0x22, 0x35, 0x34, 0x12, 0xcf, 0x20, 0x2b, 0x16, 0xaf, 0x08, 0xd4, 0xe0,
309 0x94, 0x8b, 0x1e, 0x62, 0xdf, 0x31, 0x61, 0xcc, 0xf9, 0xfa, 0x66, 0x4f,
310 0x18, 0x61, 0x07, 0xcb, 0x13, 0xd3, 0xf9, 0xbf, 0xe2, 0x8e, 0x25, 0x8d,
311 0xd1, 0xdf, 0x58, 0x9c, 0x05, 0x20, 0xf9, 0xf2, 0x01, 0x20, 0xe9, 0x39,
312 0xc3, 0x80, 0x77, 0xec, 0xa4, 0x57, 0xcf, 0x57, 0x8c, 0xdd, 0x68, 0x82,
313 0x91, 0xfe, 0x71, 0xa0, 0xfa, 0x56, 0x4c, 0xf2, 0xe7, 0x2b, 0xd0, 0xc0,
314 0xda, 0x81, 0xe2, 0x39, 0xb5, 0xf0, 0x0f, 0xd9, 0x07, 0xd5, 0x67, 0x09,
315 0x02, 0xf0, 0xff, 0x74, 0xb0, 0xa0, 0xd9, 0x3a, 0x7e, 0xb6, 0x57, 0x82,
316 0x47, 0x18, 0x66, 0xed, 0xe2, 0x18, 0x4d, 0xc2, 0x5c, 0x9f, 0x05, 0x09,
317 0x18, 0x24, 0x0e, 0x3f, 0x3d, 0xf9, 0x15, 0x8b, 0x08, 0xfd, 0x25, 0xe9,
318 0xc9, 0xb7, 0x8c, 0x18, 0x7b, 0xf3, 0x37, 0x58, 0xf0, 0xf0, 0xac, 0x33,
319 0x55, 0x3f, 0x39, 0xbc, 0x62, 0x03, 0x8a, 0xc0, 0xd6, 0xcc, 0x49, 0x47,
320 0xeb, 0x85, 0xb6, 0x72, 0xd7, 0xf8, 0xdc, 0x01, 0x32, 0xec, 0x1b, 0x4e,
321 0x38, 0x6e, 0x2c, 0xc5, 0x80, 0xf2, 0x43, 0x4a, 0xf5, 0xe5, 0xa2, 0xf8,
322 0x76, 0xa7, 0xa8, 0x57, 0x32, 0x67, 0x72, 0xeb, 0x82, 0xac, 0x3e, 0xc0,
323 0x15, 0x67, 0xac, 0x32, 0x19, 0x18, 0x0a, 0xef, 0x20, 0xa1, 0xe8, 0xaf,
324 0xac, 0x33, 0x87, 0x4c, 0x55, 0x05, 0x9b, 0x78, 0xf0, 0x3a, 0xce, 0x02,
325 0x28, 0x06, 0x84, 0x61, 0x97, 0xac, 0x87, 0x8f, 0x25, 0xe7, 0x1b, 0xa3,
326 0x02, 0x08, 0x4c, 0x2e, 0xef, 0xbd, 0x4f, 0x82, 0xe7, 0x37, 0x6c, 0x27,
327 0x6f, 0x85, 0xb4, 0xbc, 0x79, 0x38, 0x45, 0x80, 0x8a, 0xda, 0x2f, 0x11,
328 0x11, 0xac, 0x9c, 0xf3, 0x93, 0xc1, 0x49, 0x1b, 0x94, 0x12, 0x77, 0x07,
329 0xdc, 0xbf, 0xc2, 0xfd, 0x8b, 0xf6, 0xf1, 0x66, 0x1c, 0x7f, 0x07, 0xbf,
330 0x1f, 0xae, 0x27, 0x6c, 0x66, 0xe9, 0xa3, 0x64, 0x7a, 0x96, 0x78, 0x45,
331 0xfe, 0x4b, 0x8c, 0x6f, 0x7f, 0x03, 0x47, 0x3c, 0xd7, 0xf7, 0x63, 0x92,
332 0x58, 0x5b, 0x63, 0x83, 0x03, 0x05, 0xc3, 0x5d, 0x36, 0x62, 0x63, 0x5e,
333 0xcf, 0xfe, 0x0a, 0x29, 0xfa, 0xeb, 0xc8, 0xaf, 0xce, 0x31, 0x07, 0x6a,
334 0x09, 0x41, 0xc0, 0x2d, 0x98, 0x70, 0x05, 0x3b, 0x41, 0xfc, 0x7d, 0x61,
335 0xe0, 0x41, 0x7d, 0x13, 0x41, 0x51, 0x52, 0xb4, 0x78, 0xd5, 0x46, 0x51,
336 0x3b, 0xf1, 0xcd, 0xcc, 0x2e, 0x49, 0x30, 0x8b, 0x2a, 0xd2, 0xe6, 0x69,
337 0xb5, 0x6b, 0x7a, 0xf4, 0xbb, 0xd1, 0xf8, 0x4a, 0xe8, 0x53, 0x10, 0x46,
338 0x85, 0x8d, 0x66, 0x8e, 0x2b, 0xe8, 0x5d, 0xab, 0x7e, 0xfe, 0x5a, 0x79,
339 0xcf, 0xc5, 0x0c, 0x30, 0x9e, 0x98, 0x02, 0xb3, 0xa6, 0xd5, 0xfa, 0x25,
340 0xa8, 0xc8, 0xc1, 0xd9, 0x51, 0x60, 0x57, 0x5d, 0xfe, 0x75, 0x97, 0x05,
341 0xda, 0xbb, 0xc6, 0x6a, 0xbe, 0x5c, 0xa5, 0x65, 0x0a, 0x12, 0x33, 0x1c,
342 0xdf, 0xee, 0x08, 0xa9, 0x13, 0x13, 0x28, 0xce, 0x61, 0x59, 0xd1, 0x4e,
343 0xc7, 0x74, 0xfd, 0x64, 0xde, 0x08, 0xce, 0xda, 0x3f, 0xec, 0xad, 0xc9,
344 0xe1, 0xf9, 0x1f, 0x74, 0xf6, 0x86, 0x37, 0x6a, 0xa0, 0xc8, 0x0b, 0x1b,
345 0x94, 0x98, 0x86, 0x81, 0x3b, 0xfc, 0x47, 0x6c, 0xc9, 0x3e, 0x3c, 0x30,
346 0xc5, 0x9e, 0xb2, 0x32, 0x47, 0xf5, 0x0c, 0x6f,
348 /* Second Packet: Handshake */
349 0xe6, /* Long, Handshake, PN Length=2 bytes */
350 0x00, 0x00, 0x00, 0x01, /* Version */
352 0x04, 0x83, 0xd0, 0x0a, 0x27, /* SCID */
353 0x42, 0x9c, /* Length (668) */
354 0x9c, 0x55, /* PN (0) */
355 0x55, 0xd4, 0x50, 0x02, 0x1a, 0x57, 0x84, 0x22, 0xcd, 0x01, 0xe5, 0x42,
356 0x1b, 0x1e, 0x06, 0xf1, 0x86, 0xe2, 0x90, 0xf8, 0x9c, 0x3d, 0xa2, 0x7c,
357 0xde, 0x2b, 0xc9, 0x2e, 0xcd, 0xa8, 0x4f, 0x5a, 0x20, 0xca, 0x96, 0xb6,
358 0x11, 0x4b, 0xc8, 0x71, 0x32, 0xb5, 0xc7, 0x1a, 0x69, 0x7f, 0x1e, 0x37,
359 0x49, 0xfb, 0x08, 0xce, 0x83, 0x5f, 0x02, 0x6d, 0x8a, 0x8f, 0xe7, 0x5d,
360 0xe1, 0x34, 0x31, 0x22, 0x53, 0x53, 0x32, 0xcb, 0x04, 0x21, 0xce, 0xbc,
361 0xa5, 0x1b, 0xdd, 0x4d, 0xd5, 0x1c, 0xd6, 0x5d, 0x88, 0x29, 0x5a, 0x19,
362 0x71, 0x6a, 0xc2, 0xfa, 0xb7, 0xb4, 0x7d, 0xd1, 0x72, 0x93, 0x8f, 0x7c,
363 0xb5, 0x36, 0x1b, 0xea, 0xf3, 0xf1, 0xd7, 0x6e, 0xd3, 0x91, 0x96, 0x62,
364 0x4d, 0xc6, 0xec, 0xb7, 0xb0, 0xb7, 0x9b, 0x95, 0x8b, 0x14, 0x8d, 0x1a,
365 0x0d, 0xb6, 0x3e, 0xec, 0xfe, 0x3b, 0x51, 0xea, 0x1a, 0x05, 0x14, 0x12,
366 0x93, 0x0e, 0x7e, 0xe6, 0xa2, 0xc5, 0x22, 0x87, 0x65, 0xf8, 0x5d, 0x3c,
367 0x55, 0x18, 0xcb, 0xe9, 0xef, 0x23, 0x43, 0xfe, 0xe8, 0x0d, 0xb2, 0x0f,
368 0xc5, 0xf4, 0xb3, 0xde, 0x0c, 0xea, 0xa4, 0x48, 0x8e, 0xbf, 0x1f, 0xc7,
369 0x99, 0x53, 0x8c, 0xc1, 0x3d, 0xba, 0xf4, 0x8e, 0x8e, 0x02, 0x52, 0xf6,
370 0x1f, 0xcf, 0x1d, 0xaa, 0xb3, 0xcb, 0x08, 0xc2, 0xe1, 0x70, 0x68, 0x74,
371 0x78, 0xa9, 0x30, 0x67, 0xba, 0x2b, 0xea, 0x35, 0x63, 0x47, 0xff, 0x29,
372 0x73, 0x29, 0xc6, 0xe8, 0x08, 0xa9, 0x1e, 0x8f, 0x28, 0x41, 0xa4, 0x24,
373 0x54, 0x26, 0x5f, 0x42, 0x77, 0xb1, 0x2b, 0x3d, 0x65, 0x67, 0x60, 0xa7,
374 0x23, 0x0d, 0xa7, 0xf4, 0xd6, 0xe9, 0x4e, 0x58, 0x43, 0x9f, 0x3c, 0x9e,
375 0x77, 0x61, 0xe5, 0x04, 0x4f, 0x73, 0xc9, 0x10, 0x79, 0xd0, 0xda, 0x3b,
376 0xc6, 0x19, 0x93, 0x9f, 0x48, 0x3b, 0x76, 0x38, 0xa1, 0x72, 0x49, 0x7d,
377 0x86, 0x7f, 0xe8, 0x1b, 0xa9, 0x5b, 0xc0, 0x47, 0xa0, 0x9c, 0x3f, 0x65,
378 0x60, 0x76, 0x59, 0xaf, 0x20, 0x2d, 0x40, 0xa6, 0x80, 0x49, 0x5a, 0x8f,
379 0x09, 0xf8, 0xf6, 0x97, 0xc1, 0xbd, 0xe1, 0x9f, 0x9b, 0xa2, 0x4c, 0x7b,
380 0x88, 0xac, 0xbe, 0x4b, 0x11, 0x28, 0xd7, 0x67, 0xe6, 0xad, 0xaf, 0xd0,
381 0xad, 0x01, 0x29, 0xa4, 0x4a, 0xc4, 0xb8, 0x2e, 0x42, 0x79, 0x24, 0x9e,
382 0xd5, 0x34, 0xae, 0x45, 0xf1, 0x0b, 0x38, 0x4a, 0x76, 0xfb, 0x50, 0xa2,
383 0x99, 0xc9, 0x5b, 0x6d, 0xc0, 0xb7, 0x55, 0xd8, 0x8d, 0x49, 0xdd, 0x1b,
384 0xb8, 0xec, 0x10, 0x57, 0x9e, 0x33, 0xb4, 0x10, 0x16, 0x19, 0xac, 0x69,
385 0xa2, 0x19, 0x1b, 0xd0, 0x77, 0x45, 0xeb, 0x49, 0x5c, 0xc5, 0x7c, 0xbe,
386 0x4b, 0x4a, 0x22, 0x5c, 0x3d, 0x0e, 0x6e, 0xe5, 0x4b, 0x36, 0x06, 0x63,
387 0x03, 0x97, 0xab, 0xed, 0xdc, 0xea, 0x64, 0xc2, 0x70, 0xb6, 0x7e, 0x35,
388 0xfb, 0x13, 0x66, 0x37, 0xa3, 0x3f, 0x28, 0x16, 0x6c, 0xe7, 0xd4, 0xe6,
389 0xca, 0x26, 0x0f, 0x19, 0xdd, 0x02, 0xae, 0xc1, 0xcf, 0x18, 0x7d, 0x56,
390 0xe6, 0x52, 0xf3, 0x37, 0xb5, 0x86, 0x9d, 0x1d, 0x55, 0xb3, 0x95, 0x19,
391 0x19, 0xa5, 0x44, 0x95, 0x81, 0xed, 0x02, 0x18, 0xf1, 0x85, 0x57, 0x78,
392 0x28, 0xc4, 0x9a, 0xba, 0xe8, 0x5e, 0x22, 0x8d, 0xc1, 0x7b, 0x2a, 0x8a,
393 0xc8, 0xb9, 0xdd, 0x82, 0xb2, 0x7b, 0x9f, 0x3d, 0xf5, 0x27, 0x2a, 0x48,
394 0x53, 0xc7, 0xa0, 0x70, 0x0e, 0x9d, 0x61, 0xaa, 0xe2, 0xad, 0x28, 0xf2,
395 0xb4, 0xfc, 0x56, 0x6b, 0x89, 0xe7, 0xf9, 0x51, 0xc9, 0xe9, 0xd3, 0x8a,
396 0x8c, 0x7e, 0x86, 0xdd, 0xba, 0x2f, 0x39, 0xbf, 0x26, 0x62, 0x23, 0xd6,
397 0x98, 0x6d, 0x3e, 0x72, 0xd7, 0x1b, 0xe1, 0x62, 0x94, 0x35, 0xe2, 0x18,
398 0x19, 0x46, 0xb8, 0x2c, 0xb5, 0x8f, 0x8f, 0xb0, 0x5b, 0x76, 0x7b, 0x7e,
399 0xb8, 0xc6, 0xb7, 0xe9, 0x4e, 0x9d, 0x30, 0x68, 0x03, 0x1e, 0x19, 0x73,
400 0xc5, 0x3e, 0x24, 0xe2, 0x95, 0x60, 0x1b, 0x27, 0x93, 0x7c, 0x17, 0xc2,
401 0xc6, 0xa3, 0xbd, 0xbd, 0x70, 0xc6, 0x60, 0x59, 0xc8, 0x5c, 0xd7, 0x9a,
402 0xc4, 0x29, 0xac, 0x0f, 0xaa, 0x0d, 0xa9, 0x92, 0xa3, 0x95, 0xd7, 0x0f,
403 0x6f, 0x74, 0x99, 0x9b, 0xc1, 0xd3, 0x68, 0x6d, 0xac, 0x82, 0x2d, 0x32,
404 0x41, 0x9e, 0x0c, 0xf7, 0x31, 0x59, 0x4c, 0x93, 0x1c, 0x3b, 0x71, 0x69,
405 0xcf, 0xc5, 0xca, 0x2b, 0xdf, 0xe7, 0xaa, 0xfd, 0x1d, 0x71, 0x01, 0x7e,
406 0x1c, 0x70, 0x62, 0x20, 0x61, 0xf8, 0x35, 0xc1, 0x71, 0xe7, 0x02, 0x0d,
407 0x88, 0x44, 0xd9, 0x00, 0xc5, 0xcc, 0x63, 0xe4, 0xf0, 0x86, 0xa7, 0xd0,
408 0xfe, 0xcc, 0xb7, 0x1d, 0xfc, 0x21, 0x61, 0x54, 0x15, 0xea, 0x81, 0x5e,
409 0xc0, 0x31, 0xfa, 0xbf, 0x7d, 0xb9, 0x3b, 0xa2, 0x1e, 0x42, 0x73, 0x05,
410 0x3c, 0xdb, 0x21, 0x59, 0x4f, 0x63,
412 /* Third Packet: 1-RTT */
413 0x5f, /* Short, 1-RTT, Spin=0, KP=0, PN Length=2 bytes */
414 0x68, 0x47, /* PN (0) */
415 0xa3, 0x3c, 0xa5, 0x27, 0x5e, 0xf9, 0x8d, 0xec, 0xea, 0x6c, 0x09, 0x18,
416 0x40, 0x80, 0xee, 0x9f, 0x6f, 0x73, 0x5c, 0x49, 0xe3, 0xec, 0xb7, 0x58,
417 0x05, 0x66, 0x8f, 0xa3, 0x52, 0x37, 0xa1, 0x22, 0x1f, 0xc6, 0x92, 0xd6,
418 0x59, 0x04, 0x99, 0xcb, 0x44, 0xef, 0x66, 0x05, 0x2d, 0xd0, 0x85, 0x24,
419 0xbb, 0xe3, 0xa1, 0xd1, 0xbe, 0xf7, 0x54, 0xad, 0x65, 0xf4, 0xd4, 0x59,
420 0x54, 0x87, 0x4e, 0x22, 0x4f, 0x06, 0x07, 0xa7, 0x8a, 0x14, 0x89, 0xd1,
421 0x3f, 0xd3, 0xe4, 0x6f, 0x71, 0x8f, 0x9a, 0xd2, 0x3b, 0x61, 0x0a, 0xba,
422 0x9a, 0x31, 0x56, 0xc7,
425 static const QUIC_PKT_HDR rx_script_5a_expect_hdr = {
426 QUIC_PKT_TYPE_INITIAL,
435 {4, {0x83, 0xd0, 0x0a, 0x27}}, /* SCID */
437 NULL, 0, /* Token/Token Len */
441 static const unsigned char rx_script_5a_body[] = {
442 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
443 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
444 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
445 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
446 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
447 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
448 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
449 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
450 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
451 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
452 0x00, 0x00, 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, 0x06, 0x00, 0x40, 0x5a, 0x02, 0x00,
472 0x00, 0x56, 0x03, 0x03, 0xe2, 0xd2, 0x0a, 0x3b, 0xa2, 0xc4, 0xd2, 0x29,
473 0xc8, 0xe8, 0xba, 0x23, 0x31, 0x88, 0x2c, 0x71, 0xeb, 0xba, 0x42, 0x5f,
474 0x94, 0xe9, 0x0a, 0x90, 0x35, 0x31, 0x1e, 0xca, 0xed, 0xf8, 0x8a, 0x8d,
475 0x00, 0x13, 0x01, 0x00, 0x00, 0x2e, 0x00, 0x2b, 0x00, 0x02, 0x03, 0x04,
476 0x00, 0x33, 0x00, 0x24, 0x00, 0x1d, 0x00, 0x20, 0x96, 0x0b, 0x4b, 0x30,
477 0x66, 0x3a, 0x75, 0x01, 0x4a, 0xdc, 0x2a, 0x75, 0x1f, 0xce, 0x7a, 0x30,
478 0x9d, 0x00, 0xca, 0x20, 0xb4, 0xe0, 0x6b, 0x81, 0x23, 0x18, 0x0b, 0x20,
479 0x1f, 0x54, 0x86, 0x1d,
482 static const QUIC_PKT_HDR rx_script_5b_expect_hdr = {
483 QUIC_PKT_TYPE_HANDSHAKE,
492 {4, {0x83, 0xd0, 0x0a, 0x27}}, /* SCID */
494 NULL, 0, /* Token/Token Len */
498 static const unsigned char rx_script_5b_body[] = {
499 0x06, 0x00, 0x42, 0x86, 0x08, 0x00, 0x00, 0x7d, 0x00, 0x7b, 0x00, 0x10,
500 0x00, 0x08, 0x00, 0x06, 0x05, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x00, 0x39,
501 0x00, 0x6b, 0x4b, 0x20, 0x0b, 0x1b, 0xe1, 0x1f, 0xd0, 0x78, 0xc0, 0x69,
502 0x72, 0x9c, 0xe2, 0xf7, 0x05, 0x04, 0x80, 0x08, 0x00, 0x00, 0x06, 0x04,
503 0x80, 0x08, 0x00, 0x00, 0x07, 0x04, 0x80, 0x08, 0x00, 0x00, 0x04, 0x04,
504 0x80, 0x0c, 0x00, 0x00, 0x08, 0x02, 0x40, 0x64, 0x09, 0x02, 0x40, 0x64,
505 0x01, 0x04, 0x80, 0x00, 0x75, 0x30, 0x03, 0x02, 0x45, 0xac, 0x0b, 0x01,
506 0x1a, 0x0c, 0x00, 0x02, 0x10, 0x41, 0x94, 0x41, 0x8d, 0x0d, 0xfb, 0x60,
507 0x7b, 0xdc, 0xcc, 0xa2, 0x9c, 0x3e, 0xa5, 0xdf, 0x8d, 0x00, 0x08, 0x2d,
508 0x71, 0x8a, 0x38, 0xdf, 0xdd, 0xe0, 0x03, 0x0e, 0x01, 0x04, 0x0f, 0x04,
509 0x83, 0xd0, 0x0a, 0x27, 0x10, 0x04, 0xad, 0x15, 0x3f, 0xae, 0x20, 0x01,
510 0x00, 0x0b, 0x00, 0x01, 0x8f, 0x00, 0x00, 0x01, 0x8b, 0x00, 0x01, 0x86,
511 0x30, 0x82, 0x01, 0x82, 0x30, 0x82, 0x01, 0x29, 0xa0, 0x03, 0x02, 0x01,
512 0x02, 0x02, 0x14, 0x0a, 0x73, 0x0f, 0x86, 0x18, 0xf2, 0xc3, 0x30, 0x01,
513 0xd2, 0xc0, 0xc1, 0x62, 0x52, 0x13, 0xf1, 0x9c, 0x13, 0x39, 0xb5, 0x30,
514 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x30,
515 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c,
516 0x6d, 0x61, 0x70, 0x61, 0x6b, 0x74, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
517 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x32, 0x30, 0x38, 0x30, 0x32, 0x31, 0x32,
518 0x30, 0x30, 0x31, 0x38, 0x5a, 0x17, 0x0d, 0x32, 0x32, 0x30, 0x39, 0x30,
519 0x31, 0x31, 0x32, 0x30, 0x30, 0x31, 0x38, 0x5a, 0x30, 0x17, 0x31, 0x15,
520 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c, 0x6d, 0x61, 0x70,
521 0x61, 0x6b, 0x74, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x30, 0x59, 0x30,
522 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08,
523 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04,
524 0x67, 0xf4, 0xd3, 0x8f, 0x15, 0x6d, 0xee, 0x85, 0xcc, 0x2a, 0x77, 0xfc,
525 0x0b, 0x8f, 0x9f, 0xcf, 0xa9, 0x95, 0x5d, 0x5b, 0xcd, 0xb7, 0x8b, 0xba,
526 0x31, 0x0a, 0x73, 0x62, 0xc5, 0xd0, 0x0e, 0x07, 0x90, 0xae, 0x38, 0x43,
527 0x79, 0xce, 0x5e, 0x33, 0xad, 0x31, 0xbf, 0x9f, 0x2a, 0x56, 0x83, 0xa5,
528 0x24, 0x16, 0xab, 0x0c, 0xf1, 0x64, 0xbe, 0xe4, 0x93, 0xb5, 0x89, 0xd6,
529 0x05, 0xe4, 0xf7, 0x7b, 0xa3, 0x53, 0x30, 0x51, 0x30, 0x1d, 0x06, 0x03,
530 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x02, 0x64, 0x0f, 0x55, 0x69,
531 0x14, 0x91, 0x19, 0xed, 0xf9, 0x1a, 0xe9, 0x1d, 0xa5, 0x5a, 0xd0, 0x48,
532 0x96, 0x9f, 0x60, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18,
533 0x30, 0x16, 0x80, 0x14, 0x02, 0x64, 0x0f, 0x55, 0x69, 0x14, 0x91, 0x19,
534 0xed, 0xf9, 0x1a, 0xe9, 0x1d, 0xa5, 0x5a, 0xd0, 0x48, 0x96, 0x9f, 0x60,
535 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05,
536 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48,
537 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x47, 0x00, 0x30, 0x44, 0x02, 0x20,
538 0x0a, 0x82, 0x92, 0x6e, 0xd3, 0xc6, 0x66, 0xd9, 0xd3, 0x75, 0xff, 0x71,
539 0x3b, 0x61, 0x46, 0x21, 0x00, 0xe6, 0x21, 0x5d, 0x9c, 0x86, 0xe9, 0x65,
540 0x40, 0x4f, 0xeb, 0x70, 0x4f, 0x2c, 0xad, 0x00, 0x02, 0x20, 0x08, 0xc2,
541 0x07, 0x5d, 0x16, 0xfc, 0x54, 0x34, 0x2b, 0xb4, 0x18, 0x67, 0x44, 0x81,
542 0xc9, 0xa9, 0x67, 0x2e, 0xce, 0xa1, 0x02, 0x9f, 0x3b, 0xe5, 0x61, 0x16,
543 0x0b, 0x50, 0xf6, 0xa1, 0x50, 0x94, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x4a,
544 0x04, 0x03, 0x00, 0x46, 0x30, 0x44, 0x02, 0x20, 0x7d, 0x57, 0x17, 0x14,
545 0x46, 0x09, 0x95, 0x70, 0x09, 0x45, 0xe8, 0x9e, 0x5c, 0x87, 0x55, 0xd9,
546 0x08, 0xc6, 0x5e, 0x47, 0x73, 0x5e, 0xb1, 0xc9, 0xef, 0xcb, 0xe5, 0x7f,
547 0xcc, 0xb0, 0x28, 0xbc, 0x02, 0x20, 0x5d, 0xe4, 0x2b, 0x83, 0xd9, 0x78,
548 0x75, 0x45, 0xf3, 0x22, 0x2b, 0x38, 0xeb, 0x68, 0xe5, 0x71, 0x5d, 0xcb,
549 0xc3, 0x68, 0xb3, 0x0e, 0x7d, 0x5e, 0x1d, 0xc2, 0x1b, 0x8a, 0x62, 0x80,
550 0x48, 0x3e, 0x14, 0x00, 0x00, 0x20, 0x37, 0xcd, 0x55, 0xca, 0x3f, 0x4b,
551 0xf0, 0x95, 0xf8, 0xe4, 0xfe, 0x59, 0xab, 0xbc, 0xc1, 0x8f, 0x0c, 0x3f,
552 0x41, 0x59, 0xf6, 0x96, 0xdb, 0x75, 0xae, 0xe7, 0x86, 0x1a, 0x92, 0xa7,
556 static const QUIC_PKT_HDR rx_script_5c_expect_hdr = {
568 NULL, 0, /* Token/Token Len */
572 static const unsigned char rx_script_5c_body[] = {
573 0x18, 0x03, 0x00, 0x04, 0x92, 0xec, 0xaa, 0xd6, 0x47, 0xd8, 0x8b, 0x56,
574 0x3b, 0x5f, 0x67, 0xe6, 0xb9, 0xb9, 0xca, 0x72, 0xca, 0xf2, 0x49, 0x7d,
575 0x18, 0x02, 0x00, 0x04, 0xa9, 0x6e, 0x9b, 0x84, 0x26, 0x43, 0x00, 0xc7,
576 0x55, 0x71, 0x67, 0x2e, 0x52, 0xdd, 0x47, 0xfd, 0x06, 0x51, 0x33, 0x08,
577 0x18, 0x01, 0x00, 0x04, 0x36, 0xd5, 0x1f, 0x06, 0x4e, 0xbf, 0xb4, 0xc9,
578 0xef, 0x97, 0x1e, 0x9a, 0x3c, 0xab, 0x1e, 0xfc, 0xb7, 0x90, 0xc3, 0x1a,
581 static const struct rx_test_op rx_script_5[] = {
582 RX_OP_ADD_RX_DCID(empty_conn_id)
583 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_5_c2s_init_dcid)
585 RX_OP_CHECK_PKT_N(5a)
586 RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
587 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
588 QRL_SUITE_AES128GCM, rx_script_5_handshake_secret)
589 RX_OP_CHECK_PKT_N(5b)
590 RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
591 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
592 QRL_SUITE_AES128GCM, rx_script_5_1rtt_secret)
593 RX_OP_CHECK_PKT_N(5c)
596 /* Discard Initial EL and try injecting the packet again */
597 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_INITIAL)
599 /* Initial packet is not output because we have discarded Initial keys */
600 RX_OP_CHECK_PKT_N(5b)
601 RX_OP_CHECK_PKT_N(5c)
603 /* Try again with discarded keys */
604 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_HANDSHAKE)
606 RX_OP_CHECK_PKT_N(5c)
610 RX_OP_CHECK_PKT_N(5c)
612 /* Try again with discarded 1-RTT keys */
613 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_1RTT)
617 /* Recreate QRL, test reading packets received before key */
618 RX_OP_SET_SCID_LEN(0)
619 RX_OP_ADD_RX_DCID(empty_conn_id)
622 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_5_c2s_init_dcid)
623 RX_OP_CHECK_PKT_N(5a)
625 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
626 QRL_SUITE_AES128GCM, rx_script_5_handshake_secret)
627 RX_OP_CHECK_PKT_N(5b)
629 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
630 QRL_SUITE_AES128GCM, rx_script_5_1rtt_secret)
631 RX_OP_CHECK_PKT_N(5c)
634 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_INITIAL)
635 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_HANDSHAKE)
636 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_1RTT)
644 * 6. Real World - S2C Multiple Packets
645 * - Initial, Handshake, 1-RTT (AES-256-GCM/SHA384)
647 static const QUIC_CONN_ID rx_script_6_c2s_init_dcid = {
648 4, {0xac, 0x88, 0x95, 0xbd}
651 static const unsigned char rx_script_6_handshake_secret[48] = {
652 0xd1, 0x41, 0xb0, 0xf6, 0x0d, 0x8b, 0xbd, 0xe8, 0x5b, 0xa8, 0xff, 0xd7,
653 0x18, 0x9a, 0x23, 0x7b, 0x13, 0x5c, 0x1e, 0x90, 0x1d, 0x08, 0x95, 0xcc,
654 0xc5, 0x8e, 0x73, 0x4e, 0x02, 0x6f, 0x3c, 0xb6, 0x26, 0x77, 0x8d, 0x53,
655 0xc5, 0x62, 0x9f, 0xb5, 0xf0, 0x88, 0xfb, 0xe5, 0x14, 0x71, 0xab, 0xe6,
658 static const unsigned char rx_script_6_1rtt_secret[48] = {
659 0x2d, 0x6b, 0x9d, 0xd4, 0x39, 0xa0, 0xe7, 0xff, 0x17, 0xe2, 0xcb, 0x5c,
660 0x0d, 0x4a, 0xf6, 0x3f, 0xf4, 0xfe, 0xfc, 0xe5, 0x22, 0xfa, 0xf5, 0x5b,
661 0xc0, 0xb2, 0x18, 0xbb, 0x92, 0x4d, 0x35, 0xea, 0x67, 0xa6, 0xe7, 0xc1,
662 0x90, 0x10, 0xc9, 0x14, 0x46, 0xf5, 0x95, 0x57, 0x8b, 0x90, 0x88, 0x5d,
665 static const unsigned char rx_script_6_in[] = {
666 /* First Packet: Initial */
667 0xc5, /* Long, Initial, PN Length=2 bytes */
668 0x00, 0x00, 0x00, 0x01, /* Version */
670 0x04, 0x36, 0xf4, 0x75, 0x2d, /* SCID */
671 0x00, /* Token Length */
672 0x41, 0xbe, /* Length (446) */
673 0xa9, 0xe2, /* PN (0) */
674 0x83, 0x39, 0x95, 0x8f, 0x8f, 0x8c, 0xa9, 0xaf, 0x10, 0x29, 0x3d, 0xfc,
675 0x56, 0x4a, 0x1c, 0x4b, 0xc9, 0x48, 0xb1, 0xaf, 0x36, 0xd5, 0xac, 0x95,
676 0xbf, 0xfd, 0x2c, 0x4d, 0x70, 0x2e, 0x5b, 0x7c, 0x22, 0x5f, 0x5f, 0xee,
677 0x10, 0x8f, 0xfb, 0x0b, 0x5f, 0x9d, 0x7e, 0x68, 0x2f, 0x94, 0x0b, 0xdb,
678 0xed, 0xef, 0xfa, 0x4e, 0xc6, 0xd5, 0xe7, 0xef, 0xe0, 0x78, 0x3c, 0xdc,
679 0xe9, 0xd8, 0xe8, 0x56, 0x71, 0xd7, 0xe7, 0x6c, 0x7f, 0x5d, 0xaa, 0x7a,
680 0x52, 0x1d, 0x95, 0x7a, 0x80, 0x70, 0x38, 0xc0, 0x8b, 0xa1, 0x2f, 0x09,
681 0x16, 0xd2, 0xec, 0xa3, 0x23, 0x72, 0x45, 0x3c, 0xbd, 0x8c, 0xda, 0xbb,
682 0x37, 0x5a, 0x8d, 0xb2, 0x00, 0x7e, 0x67, 0x0c, 0xa0, 0x32, 0xdd, 0x80,
683 0x07, 0x71, 0xb0, 0x95, 0x21, 0xbc, 0x1e, 0xbd, 0x63, 0x0a, 0x10, 0xe7,
684 0x4b, 0x6e, 0x2e, 0x85, 0x3a, 0x65, 0xf7, 0x06, 0x6e, 0x7e, 0x8f, 0x65,
685 0x8c, 0xb1, 0x93, 0xe9, 0x0d, 0xe8, 0x46, 0xe7, 0xcf, 0xa7, 0xd2, 0x8b,
686 0x15, 0x23, 0xec, 0xc3, 0xec, 0x44, 0xda, 0x62, 0x15, 0x35, 0x34, 0x2f,
687 0x62, 0x77, 0xc8, 0x1f, 0x83, 0x22, 0x00, 0xe5, 0xc0, 0x89, 0xb8, 0x97,
688 0xd2, 0x37, 0x02, 0xea, 0xa2, 0x35, 0xbf, 0x19, 0xf0, 0xba, 0x1d, 0xb7,
689 0xaa, 0x36, 0xbb, 0x11, 0x60, 0xc3, 0x45, 0x1f, 0xe5, 0x18, 0xde, 0x4c,
690 0x01, 0x23, 0x2d, 0x17, 0x78, 0xdd, 0x4c, 0x8a, 0x1e, 0x1b, 0xd4, 0xda,
691 0x56, 0x43, 0x13, 0xa4, 0x4f, 0xfd, 0xd5, 0x92, 0x6a, 0x05, 0x5f, 0x14,
692 0x63, 0x85, 0x7d, 0xf1, 0x31, 0xb8, 0x27, 0x0b, 0xa6, 0xb5, 0x50, 0xca,
693 0x8b, 0x0e, 0xa1, 0x0d, 0xf9, 0xc4, 0xea, 0x6a, 0x6e, 0x4b, 0x6d, 0xdf,
694 0x49, 0xe8, 0x32, 0xf6, 0x85, 0xc4, 0x29, 0x26, 0x32, 0xfb, 0x5e, 0xa8,
695 0x55, 0x6b, 0x67, 0xe9, 0xaa, 0x35, 0x33, 0x90, 0xd8, 0x2a, 0x71, 0x0b,
696 0x6a, 0x48, 0xc4, 0xa3, 0x8b, 0xe0, 0xe7, 0x00, 0x3d, 0xee, 0x30, 0x70,
697 0x84, 0xbd, 0xa3, 0x3c, 0x9e, 0xa3, 0x5c, 0x69, 0xab, 0x55, 0x7b, 0xe2,
698 0xe5, 0x86, 0x13, 0xcb, 0x93, 0x3f, 0xcb, 0x3e, 0x6d, 0xc9, 0xc2, 0x10,
699 0x2b, 0x00, 0x9b, 0x3f, 0x14, 0x4e, 0x04, 0x27, 0xc0, 0xae, 0x1d, 0x48,
700 0x89, 0x3a, 0xf4, 0xac, 0xe0, 0x05, 0x07, 0xc9, 0x74, 0x6e, 0x21, 0x01,
701 0xe9, 0x26, 0xfd, 0xb4, 0xb2, 0x2a, 0xda, 0x72, 0xda, 0xbf, 0x63, 0x9d,
702 0x37, 0xaf, 0x90, 0x05, 0xd6, 0x89, 0xc7, 0xa6, 0x81, 0x4e, 0x2a, 0x30,
703 0xe3, 0x05, 0x88, 0x9f, 0xd0, 0xba, 0x8d, 0xc4, 0x21, 0x52, 0x5a, 0x7a,
704 0xe1, 0xad, 0xd3, 0x88, 0xc2, 0x18, 0xad, 0x4c, 0xb1, 0x66, 0x73, 0x1b,
705 0xf2, 0xd1, 0xb9, 0x43, 0xaa, 0xc4, 0x66, 0xcd, 0x42, 0xfa, 0x80, 0xec,
706 0xa1, 0x7c, 0x45, 0x02, 0x53, 0x45, 0xd5, 0x07, 0xd4, 0x70, 0x12, 0x1b,
707 0x08, 0x05, 0x6e, 0x99, 0x0a, 0xd3, 0x5b, 0x99, 0x6b, 0x65, 0xc4, 0xc0,
708 0x04, 0x1b, 0x75, 0xf2, 0x86, 0x99, 0x09, 0x4a, 0x50, 0x70, 0x00, 0x7a,
709 0x93, 0xaa, 0xe6, 0xf4, 0x03, 0x29, 0x06, 0xa4, 0x30, 0x6d, 0x52, 0xbd,
710 0x60, 0xd1, 0x7e, 0xd6, 0x07, 0xc0, 0x41, 0x01, 0x12, 0x3e, 0x16, 0x94,
712 /* Second Packet: Handshake */
713 0xea, /* Long, Handshake, PN Length=2 bytes */
714 0x00, 0x00, 0x00, 0x01, /* Version */
716 0x04, 0x36, 0xf4, 0x75, 0x2d, /* SCID */
717 0x42, 0xb0, /* Length (688) */
718 0x3a, 0xc5, /* PN (0) */
719 0x3b, 0x8e, 0x4c, 0x01, 0x72, 0x6b, 0xfa, 0xbb, 0xad, 0xf9, 0x9e, 0x21,
720 0xb1, 0xd0, 0x01, 0xf1, 0xd4, 0x67, 0x8d, 0x2c, 0xee, 0x04, 0x60, 0x4a,
721 0xe2, 0xe4, 0xc6, 0x89, 0x01, 0xae, 0x3c, 0x1f, 0xf7, 0xe6, 0xf7, 0xac,
722 0x26, 0xcf, 0x3c, 0x6d, 0x1d, 0xfd, 0x11, 0x02, 0x51, 0x73, 0xb5, 0xe1,
723 0xb2, 0x44, 0x42, 0x32, 0x0f, 0xf5, 0x3d, 0x55, 0x2d, 0x1f, 0x02, 0x29,
724 0x51, 0x35, 0xdb, 0xc7, 0x7a, 0x34, 0x4b, 0xec, 0x60, 0x49, 0xa2, 0x90,
725 0x11, 0xef, 0x5a, 0xa9, 0x1c, 0xf7, 0xd9, 0x21, 0x68, 0x1c, 0x2b, 0xc6,
726 0x57, 0xde, 0xb1, 0x0b, 0x31, 0xed, 0xef, 0x16, 0xba, 0x08, 0xb9, 0xe2,
727 0xd9, 0xd0, 0xd8, 0x1f, 0xc4, 0x32, 0xe8, 0x45, 0x2a, 0x86, 0xe4, 0xd3,
728 0xaf, 0x72, 0x4f, 0x30, 0x01, 0x71, 0x15, 0x9b, 0xa9, 0x55, 0x35, 0xf7,
729 0x39, 0x7e, 0x6a, 0x59, 0x18, 0x4f, 0xe6, 0xdf, 0xb5, 0x0d, 0xc2, 0xe7,
730 0xb2, 0xa1, 0xa6, 0xa3, 0x9c, 0xf0, 0x0d, 0x59, 0x05, 0x49, 0x95, 0xfa,
731 0xcc, 0x72, 0xd7, 0xc0, 0x84, 0x2e, 0xc4, 0x1c, 0xd4, 0xa0, 0xe3, 0x6c,
732 0x5a, 0x8c, 0x94, 0x4d, 0x37, 0x1a, 0x1c, 0x68, 0x93, 0x5f, 0xe5, 0x99,
733 0x27, 0xc6, 0x06, 0xaa, 0x1f, 0x29, 0x17, 0xc5, 0x8c, 0x3d, 0x53, 0xa7,
734 0x05, 0x3a, 0x44, 0x53, 0x86, 0xed, 0x56, 0x99, 0x4c, 0xe2, 0x7b, 0x3a,
735 0x1e, 0x5d, 0x6d, 0xac, 0x78, 0x1e, 0xfa, 0x55, 0x58, 0x6e, 0x72, 0xee,
736 0xf9, 0x33, 0x64, 0x7f, 0x93, 0x3c, 0xfe, 0x18, 0x97, 0x6b, 0x02, 0x74,
737 0x90, 0x0d, 0xba, 0x89, 0xc0, 0x22, 0x0a, 0x0a, 0x37, 0x4c, 0x28, 0x74,
738 0xa7, 0x3a, 0x44, 0x74, 0x42, 0xff, 0xf1, 0xd2, 0x8d, 0x0c, 0xc1, 0xed,
739 0x98, 0x98, 0x8e, 0xa8, 0x6b, 0x95, 0x6a, 0x86, 0x0b, 0xb4, 0x95, 0x58,
740 0x34, 0x12, 0xb0, 0xc0, 0xf8, 0x2d, 0x5b, 0x40, 0x51, 0x80, 0x07, 0x91,
741 0x31, 0x77, 0xd3, 0x06, 0xa5, 0xe5, 0x1f, 0xe2, 0xf8, 0x92, 0xe4, 0x23,
742 0x2b, 0xf0, 0x4c, 0xa9, 0xa5, 0x6c, 0x6f, 0xaf, 0xaf, 0xbf, 0x97, 0xcf,
743 0x46, 0xf2, 0x8d, 0x61, 0x0e, 0x73, 0xcd, 0xc5, 0xde, 0xda, 0x50, 0x82,
744 0x61, 0x6d, 0xb1, 0xa2, 0xbe, 0x6b, 0x99, 0xcd, 0x5b, 0x99, 0x8f, 0x66,
745 0xab, 0x11, 0x78, 0xcc, 0xdb, 0x66, 0x98, 0xca, 0x19, 0x92, 0xf4, 0x05,
746 0xae, 0xe6, 0xf3, 0xe7, 0xf0, 0x30, 0x28, 0x31, 0x74, 0xff, 0xe2, 0xb3,
747 0x3a, 0x4f, 0x79, 0xe7, 0x2a, 0x9f, 0xe3, 0x41, 0xb2, 0x88, 0xc8, 0x8f,
748 0x77, 0x57, 0x42, 0x65, 0xdb, 0x07, 0xf6, 0x5f, 0xb8, 0x34, 0x17, 0xe3,
749 0x8d, 0x22, 0x5b, 0x88, 0x94, 0x60, 0x97, 0x32, 0x3d, 0x8a, 0x51, 0x9d,
750 0xb5, 0xac, 0xd7, 0x99, 0x96, 0x23, 0x6d, 0xc9, 0xab, 0x61, 0x41, 0x8f,
751 0x72, 0x1b, 0xf8, 0x84, 0xd9, 0x57, 0x88, 0x68, 0x3d, 0x73, 0x5f, 0xb1,
752 0x18, 0x5c, 0x3a, 0x35, 0xd2, 0xc5, 0xb7, 0x29, 0xc7, 0x95, 0xdd, 0x21,
753 0xc0, 0x78, 0x49, 0xf3, 0x24, 0xe0, 0x4c, 0x5c, 0x32, 0x08, 0xb7, 0x00,
754 0x43, 0x70, 0x5a, 0x95, 0x23, 0x91, 0xf5, 0xb7, 0x61, 0x85, 0x6f, 0xb3,
755 0xa4, 0x6b, 0x05, 0x9d, 0x39, 0xa3, 0xb1, 0x1c, 0x61, 0xc5, 0xa5, 0xe7,
756 0x9a, 0xe9, 0x5d, 0xaa, 0xca, 0x11, 0xd8, 0x4b, 0xa4, 0x9c, 0x18, 0x4e,
757 0x2b, 0x2d, 0x75, 0xc1, 0x12, 0x20, 0xe4, 0x66, 0xa5, 0x59, 0x67, 0x4b,
758 0xcc, 0x52, 0x2d, 0xfa, 0xaa, 0xa4, 0xe9, 0xfc, 0x79, 0xd7, 0xff, 0x03,
759 0x3e, 0xec, 0xba, 0x97, 0x37, 0x52, 0xc1, 0x57, 0x31, 0x8e, 0x57, 0x0c,
760 0x54, 0x92, 0x9c, 0x25, 0x5c, 0xfa, 0x9f, 0xa5, 0x36, 0x18, 0xd0, 0xaa,
761 0xf3, 0x3b, 0x5b, 0x59, 0xbd, 0x33, 0x5e, 0x7d, 0x74, 0x7c, 0xaf, 0xe9,
762 0x54, 0x80, 0xc4, 0xb4, 0xa1, 0x24, 0x9e, 0x23, 0x0d, 0xbf, 0x4e, 0x0f,
763 0xaf, 0xa5, 0x16, 0xcb, 0x3b, 0xfa, 0x33, 0xa5, 0x68, 0xa6, 0x64, 0x48,
764 0x2f, 0x5e, 0xfa, 0x64, 0x4e, 0xe3, 0x27, 0x4f, 0x13, 0xe6, 0x37, 0xf6,
765 0xb9, 0x63, 0x4b, 0xdc, 0x49, 0x3c, 0x5e, 0x9e, 0x06, 0xea, 0xac, 0xa3,
766 0xdf, 0x6c, 0x49, 0xfb, 0xa1, 0x01, 0x4f, 0x6f, 0x74, 0x1f, 0xd3, 0x26,
767 0xa1, 0x92, 0x3e, 0xe0, 0x73, 0xd6, 0x3b, 0x67, 0x13, 0x53, 0x2e, 0xcb,
768 0xbc, 0x83, 0xd0, 0x6e, 0x28, 0xb1, 0xcb, 0xd9, 0x66, 0xe0, 0x33, 0x59,
769 0x45, 0xd3, 0x13, 0xc2, 0x48, 0xd5, 0x9e, 0x88, 0xba, 0x75, 0x7b, 0xb1,
770 0xfe, 0x6f, 0xec, 0xde, 0xff, 0x14, 0x59, 0x75, 0xbf, 0x1a, 0x74, 0x47,
771 0xc5, 0xd8, 0xe8, 0x1b, 0x3c, 0x86, 0xd7, 0x1f, 0x99, 0x11, 0xd3, 0x29,
772 0xfd, 0x5d, 0x22, 0x7e, 0x03, 0x78, 0xed, 0x62, 0x0e, 0xbe, 0x6d, 0x75,
773 0xf4, 0xa8, 0x6e, 0xc7, 0x21, 0x76, 0xc5, 0xa0, 0x0c, 0xaa, 0x58, 0x78,
774 0x7e, 0x6e, 0xfc, 0x1e, 0x2a, 0x1c, 0xdd, 0xe5, 0x78, 0x08, 0xbd, 0xdb,
775 0xea, 0x8f, 0x8a, 0xa5, 0xbf, 0x93, 0xfe, 0x0f, 0x03, 0xa1, 0xc8, 0x64,
778 /* Third Packet: 1-RTT */
779 0x48, /* Short, 1-RTT, Spin=0, KP=0, PN Length=2 bytes */
780 0x3e, 0x28, /* PN (0) */
781 0xb9, 0xdb, 0x61, 0xf8, 0x8b, 0x3a, 0xef, 0x26, 0x69, 0xf2, 0x57, 0xc6,
782 0x84, 0x25, 0x6b, 0x77, 0xbe, 0x8c, 0x43, 0x32, 0xf3, 0x9a, 0xd1, 0x85,
783 0x14, 0xbc, 0x89, 0x3b, 0x9c, 0xf3, 0xfc, 0x00, 0xa1, 0x3a, 0xc3, 0xc4,
784 0x1e, 0xdf, 0xd0, 0x11, 0x70, 0xd9, 0x02, 0x7a, 0xd4, 0xef, 0x86, 0x67,
785 0xb1, 0x1e, 0x5d, 0xe3, 0x7f, 0x82, 0x14, 0x52, 0xa5, 0x8a, 0x89, 0xa7,
786 0x98, 0x75, 0x2f, 0x8a, 0x00, 0xf3, 0xbd, 0x49, 0x26, 0x4d, 0x0c, 0xc7,
787 0x38, 0xe7, 0x91, 0x85, 0xc9, 0x21, 0x6a, 0x1c, 0xc4, 0xa3, 0x0e, 0xd8,
788 0xfe, 0xb1, 0x25, 0x1a,
791 static const QUIC_PKT_HDR rx_script_6a_expect_hdr = {
792 QUIC_PKT_TYPE_INITIAL,
801 {4, {0x36, 0xf4, 0x75, 0x2d}}, /* SCID */
803 NULL, 0, /* Token/Token Len */
807 static const unsigned char rx_script_6a_body[] = {
808 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
809 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
810 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
811 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
812 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
813 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
814 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
815 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
816 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
817 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
818 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
819 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
820 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
821 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
822 0x00, 0x00, 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, 0x06, 0x00,
836 0x40, 0x5a, 0x02, 0x00, 0x00, 0x56, 0x03, 0x03, 0xc3, 0x45, 0xe8, 0xb8,
837 0xf9, 0x7c, 0x9f, 0x5d, 0xcf, 0x66, 0x25, 0xe4, 0x91, 0x0e, 0xb0, 0x5a,
838 0x14, 0xce, 0xaf, 0xea, 0x83, 0x12, 0xde, 0x68, 0xd9, 0x31, 0xf2, 0x23,
839 0x11, 0x3a, 0x15, 0xcb, 0x00, 0x13, 0x02, 0x00, 0x00, 0x2e, 0x00, 0x2b,
840 0x00, 0x02, 0x03, 0x04, 0x00, 0x33, 0x00, 0x24, 0x00, 0x1d, 0x00, 0x20,
841 0xab, 0xd3, 0xc6, 0x9f, 0x36, 0xd3, 0x52, 0x93, 0x87, 0xee, 0x92, 0x01,
842 0xa2, 0xd6, 0x9a, 0x5e, 0x61, 0x43, 0xcc, 0x4a, 0xcc, 0x7a, 0xcd, 0x83,
843 0xb2, 0xd9, 0xad, 0xd1, 0x14, 0xdc, 0x84, 0x61,
846 static const QUIC_PKT_HDR rx_script_6b_expect_hdr = {
847 QUIC_PKT_TYPE_HANDSHAKE,
856 {4, {0x36, 0xf4, 0x75, 0x2d}}, /* SCID */
858 NULL, 0, /* Token/Token Len */
862 static const unsigned char rx_script_6b_body[] = {
863 0x06, 0x00, 0x42, 0x9a, 0x08, 0x00, 0x00, 0x80, 0x00, 0x7e, 0x00, 0x10,
864 0x00, 0x08, 0x00, 0x06, 0x05, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x00, 0x39,
865 0x00, 0x6e, 0x47, 0xfa, 0x05, 0x5a, 0xe0, 0xec, 0x4a, 0xf3, 0x05, 0x04,
866 0x80, 0x08, 0x00, 0x00, 0x06, 0x04, 0x80, 0x08, 0x00, 0x00, 0x07, 0x04,
867 0x80, 0x08, 0x00, 0x00, 0x04, 0x04, 0x80, 0x0c, 0x00, 0x00, 0x08, 0x02,
868 0x40, 0x64, 0x09, 0x02, 0x40, 0x64, 0x01, 0x04, 0x80, 0x00, 0x75, 0x30,
869 0x03, 0x02, 0x45, 0xac, 0x0b, 0x01, 0x1a, 0x0c, 0x00, 0x02, 0x10, 0x35,
870 0xd7, 0x7d, 0x8b, 0xc5, 0xb1, 0x89, 0xb1, 0x5c, 0x23, 0x74, 0x50, 0xfd,
871 0x47, 0xfe, 0xd2, 0x00, 0x11, 0x96, 0x38, 0x27, 0xde, 0x7d, 0xfb, 0x2b,
872 0x38, 0x56, 0xe5, 0x2a, 0xb8, 0x6b, 0xfa, 0xaa, 0xde, 0x81, 0x0e, 0x01,
873 0x04, 0x0f, 0x04, 0x36, 0xf4, 0x75, 0x2d, 0x10, 0x04, 0xac, 0x88, 0x95,
874 0xbd, 0x20, 0x01, 0x00, 0x0b, 0x00, 0x01, 0x8f, 0x00, 0x00, 0x01, 0x8b,
875 0x00, 0x01, 0x86, 0x30, 0x82, 0x01, 0x82, 0x30, 0x82, 0x01, 0x29, 0xa0,
876 0x03, 0x02, 0x01, 0x02, 0x02, 0x14, 0x0a, 0x73, 0x0f, 0x86, 0x18, 0xf2,
877 0xc3, 0x30, 0x01, 0xd2, 0xc0, 0xc1, 0x62, 0x52, 0x13, 0xf1, 0x9c, 0x13,
878 0x39, 0xb5, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04,
879 0x03, 0x02, 0x30, 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04,
880 0x03, 0x0c, 0x0c, 0x6d, 0x61, 0x70, 0x61, 0x6b, 0x74, 0x2e, 0x6c, 0x6f,
881 0x63, 0x61, 0x6c, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x32, 0x30, 0x38, 0x30,
882 0x32, 0x31, 0x32, 0x30, 0x30, 0x31, 0x38, 0x5a, 0x17, 0x0d, 0x32, 0x32,
883 0x30, 0x39, 0x30, 0x31, 0x31, 0x32, 0x30, 0x30, 0x31, 0x38, 0x5a, 0x30,
884 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0c,
885 0x6d, 0x61, 0x70, 0x61, 0x6b, 0x74, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
886 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
887 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03,
888 0x42, 0x00, 0x04, 0x67, 0xf4, 0xd3, 0x8f, 0x15, 0x6d, 0xee, 0x85, 0xcc,
889 0x2a, 0x77, 0xfc, 0x0b, 0x8f, 0x9f, 0xcf, 0xa9, 0x95, 0x5d, 0x5b, 0xcd,
890 0xb7, 0x8b, 0xba, 0x31, 0x0a, 0x73, 0x62, 0xc5, 0xd0, 0x0e, 0x07, 0x90,
891 0xae, 0x38, 0x43, 0x79, 0xce, 0x5e, 0x33, 0xad, 0x31, 0xbf, 0x9f, 0x2a,
892 0x56, 0x83, 0xa5, 0x24, 0x16, 0xab, 0x0c, 0xf1, 0x64, 0xbe, 0xe4, 0x93,
893 0xb5, 0x89, 0xd6, 0x05, 0xe4, 0xf7, 0x7b, 0xa3, 0x53, 0x30, 0x51, 0x30,
894 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x02, 0x64,
895 0x0f, 0x55, 0x69, 0x14, 0x91, 0x19, 0xed, 0xf9, 0x1a, 0xe9, 0x1d, 0xa5,
896 0x5a, 0xd0, 0x48, 0x96, 0x9f, 0x60, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d,
897 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x02, 0x64, 0x0f, 0x55, 0x69,
898 0x14, 0x91, 0x19, 0xed, 0xf9, 0x1a, 0xe9, 0x1d, 0xa5, 0x5a, 0xd0, 0x48,
899 0x96, 0x9f, 0x60, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01,
900 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0a, 0x06, 0x08,
901 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x47, 0x00, 0x30,
902 0x44, 0x02, 0x20, 0x0a, 0x82, 0x92, 0x6e, 0xd3, 0xc6, 0x66, 0xd9, 0xd3,
903 0x75, 0xff, 0x71, 0x3b, 0x61, 0x46, 0x21, 0x00, 0xe6, 0x21, 0x5d, 0x9c,
904 0x86, 0xe9, 0x65, 0x40, 0x4f, 0xeb, 0x70, 0x4f, 0x2c, 0xad, 0x00, 0x02,
905 0x20, 0x08, 0xc2, 0x07, 0x5d, 0x16, 0xfc, 0x54, 0x34, 0x2b, 0xb4, 0x18,
906 0x67, 0x44, 0x81, 0xc9, 0xa9, 0x67, 0x2e, 0xce, 0xa1, 0x02, 0x9f, 0x3b,
907 0xe5, 0x61, 0x16, 0x0b, 0x50, 0xf6, 0xa1, 0x50, 0x94, 0x00, 0x00, 0x0f,
908 0x00, 0x00, 0x4b, 0x04, 0x03, 0x00, 0x47, 0x30, 0x45, 0x02, 0x20, 0x78,
909 0x9e, 0xe0, 0x6a, 0x7a, 0xbd, 0xc3, 0x84, 0x3d, 0x25, 0x6a, 0x59, 0x23,
910 0x97, 0x52, 0x64, 0x4e, 0xb6, 0x9f, 0xcc, 0xd3, 0xd7, 0xa9, 0x29, 0x44,
911 0x75, 0x6d, 0x50, 0xfc, 0x22, 0xde, 0xd3, 0x02, 0x21, 0x00, 0xe5, 0x28,
912 0xd6, 0x5a, 0xd1, 0xec, 0x4a, 0xcc, 0x20, 0xb4, 0xea, 0x15, 0xfb, 0x8e,
913 0x73, 0xa8, 0x6b, 0xbb, 0x42, 0x70, 0x90, 0x08, 0x6e, 0x74, 0x6f, 0x5a,
914 0x05, 0xb5, 0x39, 0xee, 0x01, 0x04, 0x14, 0x00, 0x00, 0x30, 0xff, 0x9f,
915 0xb2, 0x1d, 0xcb, 0x4f, 0xfc, 0x7a, 0xac, 0xf4, 0x75, 0x24, 0x83, 0x5f,
916 0x8d, 0xa3, 0x3e, 0x9d, 0xef, 0x43, 0x67, 0x89, 0x5d, 0x55, 0xc7, 0xce,
917 0x80, 0xab, 0xc3, 0xc7, 0x74, 0xc7, 0xb2, 0x91, 0x27, 0xce, 0xd8, 0x5e,
918 0xc4, 0x4e, 0x96, 0x19, 0x68, 0x2d, 0xbe, 0x6f, 0x49, 0xfa,
921 static const QUIC_PKT_HDR rx_script_6c_expect_hdr = {
933 NULL, 0, /* Token/Token Len */
937 static const unsigned char rx_script_6c_body[] = {
938 0x18, 0x03, 0x00, 0x04, 0xf2, 0x94, 0x49, 0xc3, 0x34, 0xa1, 0xf4, 0x0f,
939 0xcb, 0xb8, 0x03, 0x04, 0x1f, 0xc8, 0x69, 0xb9, 0x3b, 0xd5, 0xc6, 0x93,
940 0x18, 0x02, 0x00, 0x04, 0x9a, 0x4f, 0xec, 0x52, 0xde, 0xd2, 0xc8, 0xb7,
941 0x1c, 0x0c, 0xf3, 0x4e, 0x46, 0xf0, 0x6c, 0x54, 0x34, 0x1b, 0x0d, 0x98,
942 0x18, 0x01, 0x00, 0x04, 0xe3, 0x33, 0x9e, 0x59, 0x00, 0x69, 0xc3, 0xac,
943 0xfc, 0x58, 0x0e, 0xa4, 0xf4, 0xf3, 0x23, 0x1b, 0xd6, 0x8e, 0x5b, 0x08,
946 static const struct rx_test_op rx_script_6[] = {
947 RX_OP_ADD_RX_DCID(empty_conn_id)
948 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_6_c2s_init_dcid)
950 RX_OP_CHECK_PKT_N(6a)
951 RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
952 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
953 QRL_SUITE_AES256GCM, rx_script_6_handshake_secret)
954 RX_OP_CHECK_PKT_N(6b)
955 RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
956 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
957 QRL_SUITE_AES256GCM, rx_script_6_1rtt_secret)
958 RX_OP_CHECK_PKT_N(6c)
961 /* Discard Initial EL and try injecting the packet again */
962 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_INITIAL)
964 /* Initial packet is not output because we have discarded Initial keys */
965 RX_OP_CHECK_PKT_N(6b)
966 RX_OP_CHECK_PKT_N(6c)
968 /* Try again with discarded keys */
969 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_HANDSHAKE)
971 RX_OP_CHECK_PKT_N(6c)
975 RX_OP_CHECK_PKT_N(6c)
977 /* Try again with discarded 1-RTT keys */
978 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_1RTT)
982 /* Recreate QRL, test reading packets received before key */
983 RX_OP_SET_SCID_LEN(0)
984 RX_OP_ADD_RX_DCID(empty_conn_id)
987 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_6_c2s_init_dcid)
988 RX_OP_CHECK_PKT_N(6a)
990 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
991 QRL_SUITE_AES256GCM, rx_script_6_handshake_secret)
992 RX_OP_CHECK_PKT_N(6b)
994 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
995 QRL_SUITE_AES256GCM, rx_script_6_1rtt_secret)
996 RX_OP_CHECK_PKT_N(6c)
1003 * 7. Real World - S2C Multiple Packets
1004 * - Initial, Handshake, 1-RTT (ChaCha20-Poly1305)
1006 #ifndef OPENSSL_NO_CHACHA
1007 static const QUIC_CONN_ID rx_script_7_c2s_init_dcid = {
1008 4, {0xfa, 0x5d, 0xd6, 0x80}
1011 static const unsigned char rx_script_7_handshake_secret[32] = {
1012 0x85, 0x44, 0xa4, 0x02, 0x46, 0x5b, 0x2a, 0x92, 0x80, 0x71, 0xfd, 0x11,
1013 0x89, 0x73, 0x84, 0xeb, 0x3e, 0x0d, 0x89, 0x4f, 0x71, 0xdc, 0x9c, 0xdd,
1014 0x55, 0x77, 0x9e, 0x79, 0x7b, 0xeb, 0xfa, 0x86,
1017 static const unsigned char rx_script_7_1rtt_secret[32] = {
1018 0x4a, 0x77, 0xb6, 0x0e, 0xfd, 0x90, 0xca, 0xbf, 0xc0, 0x1a, 0x64, 0x9f,
1019 0xc0, 0x03, 0xd3, 0x8d, 0xc5, 0x41, 0x04, 0x50, 0xb1, 0x5b, 0x74, 0xe7,
1020 0xe3, 0x99, 0x0c, 0xdf, 0x74, 0x61, 0x35, 0xe6,
1023 static const unsigned char rx_script_7_in[] = {
1024 /* First Packet: Initial */
1025 0xc2, /* Long, Initial, PN Length=2 bytes */
1026 0x00, 0x00, 0x00, 0x01, /* Version */
1028 0x04, 0x03, 0x45, 0x0c, 0x7a, /* SCID */
1029 0x00, /* Token Length */
1030 0x41, 0xcb, /* Length (459) */
1031 0x3c, 0xe0, /* PN (0) */
1032 0x85, 0x05, 0xc2, 0x4d, 0x0f, 0xf3, 0x62, 0x51, 0x04, 0x33, 0xfa, 0xb5,
1033 0xa3, 0x02, 0xbd, 0x5c, 0x22, 0x0c, 0x1d, 0xda, 0x06, 0xf1, 0xd7, 0xe0,
1034 0xc8, 0x56, 0xb0, 0x3d, 0xc1, 0x49, 0x8c, 0xc2, 0x88, 0x5a, 0x0e, 0xd5,
1035 0x67, 0x72, 0xec, 0xcc, 0x7a, 0x2b, 0x46, 0x17, 0x49, 0x4b, 0x28, 0x6a,
1036 0x89, 0x71, 0xfd, 0x31, 0x9a, 0xa1, 0x97, 0x64, 0xe2, 0xbf, 0xa0, 0x6d,
1037 0xf6, 0x76, 0x83, 0x28, 0xc4, 0xd5, 0x39, 0x87, 0x22, 0x7c, 0x11, 0x9a,
1038 0x53, 0x66, 0xb4, 0x27, 0xf1, 0xab, 0x6f, 0x49, 0x43, 0x3f, 0x9a, 0x23,
1039 0xd3, 0x53, 0x06, 0xe8, 0x14, 0xfd, 0xc0, 0x67, 0x1f, 0x88, 0x2a, 0xa8,
1040 0xae, 0x5f, 0x05, 0x0a, 0xeb, 0x66, 0x72, 0x8c, 0x46, 0xcc, 0x54, 0x21,
1041 0x5e, 0x14, 0xfe, 0x68, 0xc7, 0xf7, 0x60, 0x67, 0xb5, 0xa7, 0x0d, 0xf4,
1042 0xe1, 0xff, 0x60, 0xe3, 0x11, 0x38, 0x92, 0x90, 0xc2, 0x48, 0x28, 0xbf,
1043 0xf3, 0x85, 0x27, 0xfe, 0xbf, 0x42, 0x26, 0x1a, 0x4e, 0x78, 0xf1, 0xf0,
1044 0x88, 0x16, 0x1b, 0x64, 0x5f, 0x66, 0x02, 0x0b, 0x45, 0x3d, 0x38, 0xd9,
1045 0x09, 0xd5, 0xff, 0xc2, 0x68, 0x02, 0x2c, 0xc4, 0x3f, 0x60, 0x6e, 0x2f,
1046 0x7f, 0x43, 0xf7, 0x1a, 0x37, 0xcc, 0xe0, 0xe0, 0x4b, 0x96, 0xc1, 0xb1,
1047 0x8b, 0x1c, 0x7c, 0x6e, 0x80, 0xe3, 0x92, 0x9b, 0x86, 0x87, 0x1f, 0x9a,
1048 0x6a, 0x62, 0x18, 0xf4, 0x86, 0xc2, 0x3e, 0x33, 0xa3, 0xbf, 0x43, 0x96,
1049 0x6e, 0xff, 0x94, 0xaf, 0x6d, 0x23, 0x5c, 0x42, 0xed, 0xe7, 0xb9, 0x2c,
1050 0x33, 0xb0, 0xc6, 0x3d, 0x44, 0x00, 0x0b, 0xa3, 0x39, 0xa8, 0xeb, 0x8c,
1051 0x81, 0x1a, 0x99, 0x20, 0xbd, 0xfa, 0xf3, 0xf4, 0xf0, 0x11, 0xd8, 0x41,
1052 0x31, 0x8d, 0xdc, 0x0d, 0x00, 0xa6, 0x31, 0x40, 0xc6, 0xc6, 0xad, 0x74,
1053 0x93, 0x62, 0x1c, 0x55, 0xce, 0x5f, 0x8c, 0x5b, 0x3c, 0xcb, 0x25, 0x5e,
1054 0xbf, 0xed, 0xbb, 0x3c, 0x97, 0x4b, 0x62, 0xe0, 0xba, 0xf1, 0xb0, 0x30,
1055 0xbf, 0x35, 0x89, 0x7e, 0x25, 0x61, 0x54, 0x86, 0x52, 0x11, 0x86, 0x90,
1056 0xc3, 0xf5, 0xad, 0xa0, 0x96, 0x30, 0xb2, 0xf0, 0xa6, 0x79, 0x39, 0x1c,
1057 0x51, 0x42, 0xa1, 0x00, 0x6f, 0x55, 0x7d, 0xdc, 0xd0, 0x7c, 0xcf, 0x01,
1058 0x88, 0x03, 0xd7, 0x2d, 0x65, 0x2b, 0x40, 0xee, 0xba, 0x10, 0xd8, 0x0c,
1059 0x85, 0x14, 0xb7, 0x4d, 0x9e, 0x7d, 0x7c, 0xde, 0x7f, 0x0d, 0x0e, 0x3b,
1060 0x3d, 0xe3, 0xd3, 0x63, 0xc2, 0xed, 0xc7, 0x41, 0xaf, 0x05, 0x85, 0x87,
1061 0x46, 0x55, 0x7e, 0xbe, 0x14, 0x5b, 0x98, 0xae, 0x6e, 0x67, 0x1a, 0x65,
1062 0xc6, 0xcf, 0xe1, 0x28, 0x50, 0x6b, 0xb4, 0xf6, 0xba, 0x63, 0xbc, 0xf1,
1063 0xd7, 0xa4, 0x97, 0x2d, 0x4d, 0x04, 0x26, 0x96, 0xec, 0x0c, 0xd4, 0xae,
1064 0x6a, 0xca, 0x7e, 0x65, 0xc5, 0x43, 0x7e, 0xf8, 0x77, 0x61, 0xd0, 0x2c,
1065 0xe5, 0x37, 0x0a, 0xb3, 0x7a, 0x8c, 0x2a, 0xa1, 0xdc, 0x29, 0xdb, 0xec,
1066 0xca, 0xdc, 0xfe, 0xdd, 0x38, 0xd2, 0x13, 0x9f, 0x94, 0x6d, 0x5b, 0x87,
1067 0xf3, 0x15, 0xa8, 0xe5, 0xe9, 0x65, 0x1d, 0x4f, 0x92, 0x1b, 0xf4, 0xa6,
1068 0xa4, 0xd6, 0x22, 0xfc, 0x26, 0x1b, 0x35, 0xa4, 0x1c, 0x88, 0x9f, 0x7d,
1069 0xe0, 0x9a, 0x89, 0x0f, 0x6c, 0xc1, 0xda, 0x6e, 0x45, 0xce, 0x74, 0xb1,
1072 /* Second Packet: Handshake */
1073 0xeb, /* Long, Handshake, PN Length=2 bytes */
1074 0x00, 0x00, 0x00, 0x01, /* Version */
1076 0x04, 0x03, 0x45, 0x0c, 0x7a, /* SCID */
1077 0x42, 0xa3, /* Length (675) */
1078 0x43, 0x29, /* PN (0) */
1079 0xff, 0xdb, 0xcf, 0x3c, 0x17, 0xcf, 0xdc, 0x42, 0x3a, 0x59, 0x88, 0xdb,
1080 0x13, 0xef, 0x09, 0x3d, 0xf2, 0x24, 0xf3, 0xeb, 0xca, 0xb0, 0xe1, 0xa4,
1081 0x67, 0x64, 0x65, 0x80, 0x5f, 0x73, 0x29, 0x69, 0x29, 0xba, 0x03, 0x77,
1082 0x22, 0xc8, 0xa8, 0xd5, 0x21, 0xf2, 0xa2, 0x30, 0x7f, 0x86, 0x3a, 0x8a,
1083 0xdd, 0x92, 0x33, 0xa6, 0x57, 0x21, 0x39, 0xdd, 0x34, 0xb4, 0x39, 0xa7,
1084 0x6f, 0x0a, 0x14, 0xba, 0x9e, 0x3b, 0x3a, 0x6a, 0x4b, 0xc5, 0xda, 0x44,
1085 0x82, 0xca, 0x52, 0x86, 0x68, 0x8a, 0x0c, 0x5e, 0xeb, 0x1e, 0x81, 0x43,
1086 0x3a, 0x59, 0x2c, 0x26, 0x63, 0xa3, 0x89, 0x92, 0x80, 0xe9, 0x75, 0xc2,
1087 0xdb, 0xb9, 0x58, 0x6d, 0xab, 0xfd, 0x21, 0xe0, 0x35, 0x79, 0x2e, 0x56,
1088 0x7b, 0xfb, 0xb3, 0x7a, 0x05, 0x33, 0x0f, 0x13, 0xe5, 0xef, 0x04, 0x41,
1089 0x69, 0x85, 0x91, 0x24, 0xce, 0xb5, 0x21, 0x8d, 0x0a, 0x13, 0xda, 0xae,
1090 0x86, 0x2f, 0x25, 0x1f, 0x9c, 0x70, 0x8a, 0xaa, 0x05, 0xeb, 0x30, 0x93,
1091 0x50, 0xc1, 0x39, 0xab, 0x99, 0x8a, 0x31, 0xc1, 0xc1, 0x5e, 0x39, 0xcf,
1092 0x64, 0x3f, 0x9f, 0x5c, 0xa5, 0xa1, 0x88, 0xb2, 0x5f, 0x23, 0xcb, 0x76,
1093 0xe5, 0xf3, 0x2d, 0xa0, 0xed, 0xad, 0xcf, 0x30, 0x05, 0x44, 0xdc, 0xa5,
1094 0x81, 0xb1, 0x7f, 0x78, 0x0d, 0x4d, 0x96, 0xa3, 0xcb, 0xcb, 0x45, 0xcf,
1095 0x5f, 0x22, 0xb8, 0x93, 0x2b, 0x16, 0xe0, 0x1c, 0x53, 0x34, 0x76, 0x3b,
1096 0x7b, 0x78, 0xa1, 0x46, 0x40, 0x43, 0x4b, 0x0e, 0x1c, 0xfd, 0xcf, 0x01,
1097 0xf1, 0x2c, 0xee, 0xd0, 0xbd, 0x9f, 0x44, 0xd2, 0xd7, 0x13, 0xf9, 0x65,
1098 0x82, 0xf5, 0x42, 0xec, 0x9f, 0x5d, 0x51, 0x5a, 0x7b, 0xf2, 0x39, 0xbb,
1099 0xa6, 0x19, 0x5c, 0x73, 0x95, 0x65, 0x5b, 0x64, 0x2f, 0xda, 0x50, 0xd0,
1100 0x02, 0x34, 0x3f, 0x35, 0xc1, 0xd6, 0x31, 0x3b, 0xcf, 0x3f, 0x81, 0x8d,
1101 0xe0, 0x40, 0xfd, 0x6d, 0x32, 0x68, 0xa4, 0xf2, 0x4e, 0x3a, 0x4a, 0x42,
1102 0x2c, 0x07, 0x2d, 0x27, 0xa3, 0x34, 0xe7, 0x27, 0x87, 0x80, 0x76, 0xc0,
1103 0xa0, 0x72, 0x05, 0xf2, 0x88, 0x81, 0xe3, 0x32, 0x00, 0x76, 0x8d, 0x24,
1104 0x5c, 0x97, 0x2d, 0xd6, 0xb8, 0x34, 0xf8, 0x1c, 0x1a, 0x6d, 0xc7, 0x3f,
1105 0xcf, 0x56, 0xae, 0xec, 0x26, 0x74, 0x53, 0x69, 0xcd, 0x7a, 0x97, 0x29,
1106 0xab, 0x12, 0x7d, 0x75, 0xf8, 0x8d, 0x5b, 0xc0, 0x77, 0x20, 0xb6, 0x6a,
1107 0x0b, 0xce, 0x98, 0x50, 0xca, 0x47, 0x42, 0x1e, 0x5d, 0xc3, 0x24, 0x5a,
1108 0x47, 0x48, 0x3b, 0xa0, 0x9e, 0x43, 0xe9, 0x8d, 0x18, 0x23, 0xda, 0x6f,
1109 0x8c, 0xda, 0xd0, 0x3e, 0xdb, 0x37, 0xff, 0xfc, 0x7e, 0x17, 0xbe, 0x42,
1110 0xfd, 0xdb, 0x51, 0xb1, 0xa4, 0xfd, 0x9a, 0x20, 0x27, 0x24, 0x17, 0x04,
1111 0x70, 0xb6, 0x21, 0x87, 0x88, 0xe9, 0xda, 0x63, 0xcb, 0xcb, 0x1d, 0xaf,
1112 0x4a, 0x46, 0x76, 0x88, 0xa1, 0xf8, 0x48, 0x6c, 0x06, 0xb4, 0x62, 0x1a,
1113 0x67, 0x18, 0xb0, 0x1d, 0x58, 0x6a, 0xfe, 0x1f, 0xf1, 0x48, 0xff, 0xcb,
1114 0xa4, 0xd1, 0xa8, 0x12, 0x1f, 0x45, 0x94, 0x2f, 0x55, 0x80, 0x6a, 0x06,
1115 0xcc, 0x7b, 0xb0, 0xcc, 0xb8, 0x06, 0x52, 0x16, 0xe3, 0x6e, 0x7e, 0xb0,
1116 0x42, 0xfd, 0x3b, 0x7e, 0x0a, 0x42, 0x7b, 0x73, 0xaf, 0x2c, 0xf3, 0xbd,
1117 0xe5, 0x72, 0x8c, 0x16, 0xb2, 0xd7, 0x7a, 0x11, 0xb6, 0x9f, 0xd1, 0x69,
1118 0xc1, 0x1a, 0xe0, 0x26, 0x26, 0x13, 0xe2, 0x75, 0xf5, 0x74, 0xae, 0x3f,
1119 0xee, 0x1e, 0x09, 0x63, 0x5a, 0x30, 0x19, 0xa5, 0x59, 0x48, 0x90, 0x9b,
1120 0x46, 0x56, 0xd8, 0x6f, 0x6b, 0x76, 0x82, 0x32, 0xc7, 0x29, 0x76, 0x2e,
1121 0x32, 0xb6, 0x23, 0x99, 0xeb, 0x92, 0x5d, 0xc4, 0x4c, 0xa1, 0xe9, 0x26,
1122 0x37, 0x9a, 0x7d, 0x4c, 0x16, 0x9c, 0x18, 0xe9, 0xc0, 0xff, 0x48, 0x79,
1123 0xb1, 0x7b, 0x0b, 0x1e, 0x6f, 0xb1, 0x77, 0xa5, 0xd2, 0xc6, 0x9a, 0xa9,
1124 0xfc, 0xd1, 0x0f, 0x69, 0xf3, 0xe0, 0x49, 0x70, 0x57, 0x80, 0x86, 0xa7,
1125 0x3f, 0x54, 0xa8, 0x60, 0xfb, 0xe4, 0x06, 0xa3, 0x13, 0xb9, 0x2f, 0xa7,
1126 0x37, 0x80, 0x0c, 0x43, 0xac, 0x2f, 0xae, 0x6e, 0x62, 0x2b, 0x53, 0xe4,
1127 0xfe, 0x58, 0xd7, 0x8b, 0x96, 0xdc, 0xe6, 0xd3, 0x86, 0xb8, 0xd6, 0x42,
1128 0x5b, 0x68, 0x03, 0x48, 0x3f, 0xcd, 0xee, 0x39, 0x8b, 0xc4, 0x53, 0x30,
1129 0x87, 0x48, 0x2a, 0x01, 0x9d, 0x6f, 0x8e, 0x36, 0x75, 0x73, 0xef, 0x77,
1130 0x3a, 0x82, 0xd8, 0x4c, 0x0e, 0x7f, 0xb3, 0x8f, 0x16, 0xd1, 0x10, 0xcf,
1131 0x2f, 0xa3, 0xdf, 0x65, 0xba, 0x91, 0x79, 0xf6, 0x93, 0x60, 0x08, 0xe5,
1132 0xdb, 0x73, 0x02, 0x7a, 0x0b, 0x0e, 0xcc, 0x3b, 0x1f, 0x08, 0x2d, 0x51,
1133 0x3e, 0x87, 0x48, 0xd3, 0xd3, 0x75, 0xc2, 0x28, 0xa3, 0xf3, 0x02, 0xde,
1134 0x8f, 0xa6, 0xbd, 0xb3, 0x19, 0xa0, 0xdb, 0x48, 0x51, 0x03, 0x5f, 0x98,
1137 /* Third Packet: 1-RTT */
1138 0x5c, /* Short, 1-RTT, Spin=0, KP=0, PN Length=2 bytes */
1139 0x4f, 0x33, /* PN (0) */
1140 0x16, 0x75, 0x98, 0x67, 0x04, 0x16, 0x61, 0xe3, 0x00, 0xb7, 0x9d, 0x5c,
1141 0x53, 0x4c, 0x26, 0x90, 0x92, 0x8e, 0x0e, 0xc0, 0x9c, 0x6d, 0x8b, 0xac,
1142 0x15, 0x6d, 0x89, 0x74, 0x2f, 0xe7, 0x84, 0xe3, 0x46, 0x46, 0x8c, 0xc1,
1143 0x21, 0x7c, 0x44, 0xa5, 0x00, 0x29, 0xca, 0xf2, 0x11, 0x18, 0xe0, 0x04,
1144 0x40, 0x55, 0xd2, 0xa7, 0xe5, 0x9d, 0x22, 0xa2, 0x2a, 0x6c, 0x03, 0x87,
1145 0xa3, 0xa3, 0xfa, 0xf5, 0x6c, 0xd7, 0x7d, 0xae, 0x3f, 0x28, 0x01, 0xae,
1146 0x06, 0x11, 0x69, 0x67, 0x90, 0x57, 0x5a, 0xd0, 0xeb, 0xdd, 0xac, 0xbd,
1147 0x7f, 0x33, 0x86, 0xbb,
1150 static const QUIC_PKT_HDR rx_script_7a_expect_hdr = {
1151 QUIC_PKT_TYPE_INITIAL,
1159 {0, {0}}, /* DCID */
1160 {4, {0x03, 0x45, 0x0c, 0x7a}}, /* SCID */
1162 NULL, 0, /* Token/Token Len */
1166 static const unsigned char rx_script_7a_body[] = {
1167 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1172 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1173 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1175 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1176 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1178 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1179 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1180 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1181 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1183 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1184 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1185 0x00, 0x00, 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, 0x06,
1196 0x00, 0x40, 0x5a, 0x02, 0x00, 0x00, 0x56, 0x03, 0x03, 0xd5, 0xfb, 0x6a,
1197 0x81, 0x1c, 0xdb, 0xa2, 0x5c, 0x11, 0x31, 0xda, 0x15, 0x28, 0x97, 0x94,
1198 0x83, 0xfd, 0x9d, 0x91, 0x0e, 0x87, 0x71, 0x46, 0x64, 0xb4, 0xd9, 0x9e,
1199 0xbd, 0xa8, 0x48, 0x32, 0xbf, 0x00, 0x13, 0x03, 0x00, 0x00, 0x2e, 0x00,
1200 0x2b, 0x00, 0x02, 0x03, 0x04, 0x00, 0x33, 0x00, 0x24, 0x00, 0x1d, 0x00,
1201 0x20, 0xef, 0xbb, 0x46, 0xe9, 0xb4, 0xf6, 0x54, 0xc4, 0x07, 0x71, 0xdc,
1202 0x50, 0xd5, 0x69, 0x40, 0xbc, 0x85, 0x7f, 0xf9, 0x48, 0x14, 0xe3, 0xd6,
1203 0x08, 0xa9, 0x0b, 0xfd, 0xbe, 0xf1, 0x57, 0x21, 0x34,
1206 static const QUIC_PKT_HDR rx_script_7b_expect_hdr = {
1207 QUIC_PKT_TYPE_HANDSHAKE,
1215 {0, {0}}, /* DCID */
1216 {4, {0x03, 0x45, 0x0c, 0x7a}}, /* SCID */
1218 NULL, 0, /* Token/Token Len */
1222 static const unsigned char rx_script_7b_body[] = {
1223 0x06, 0x00, 0x42, 0x8d, 0x08, 0x00, 0x00, 0x82, 0x00, 0x80, 0x00, 0x10,
1224 0x00, 0x08, 0x00, 0x06, 0x05, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x00, 0x39,
1225 0x00, 0x70, 0x46, 0x0a, 0x0d, 0xdc, 0x59, 0xf0, 0x4e, 0xb2, 0x2c, 0xac,
1226 0x69, 0x6a, 0xc9, 0x77, 0xa9, 0x99, 0x05, 0x04, 0x80, 0x08, 0x00, 0x00,
1227 0x06, 0x04, 0x80, 0x08, 0x00, 0x00, 0x07, 0x04, 0x80, 0x08, 0x00, 0x00,
1228 0x04, 0x04, 0x80, 0x0c, 0x00, 0x00, 0x08, 0x02, 0x40, 0x64, 0x09, 0x02,
1229 0x40, 0x64, 0x01, 0x04, 0x80, 0x00, 0x75, 0x30, 0x03, 0x02, 0x45, 0xac,
1230 0x0b, 0x01, 0x1a, 0x0c, 0x00, 0x02, 0x10, 0x42, 0xf0, 0xed, 0x09, 0x07,
1231 0x5b, 0xd9, 0x5a, 0xb2, 0x39, 0x5d, 0x73, 0x2c, 0x57, 0x1f, 0x50, 0x00,
1232 0x0b, 0xe0, 0x3e, 0xf3, 0xd6, 0x91, 0x6f, 0x9c, 0xcc, 0x31, 0xf7, 0xa5,
1233 0x0e, 0x01, 0x04, 0x0f, 0x04, 0x03, 0x45, 0x0c, 0x7a, 0x10, 0x04, 0xfa,
1234 0x5d, 0xd6, 0x80, 0x20, 0x01, 0x00, 0x0b, 0x00, 0x01, 0x8f, 0x00, 0x00,
1235 0x01, 0x8b, 0x00, 0x01, 0x86, 0x30, 0x82, 0x01, 0x82, 0x30, 0x82, 0x01,
1236 0x29, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x14, 0x0a, 0x73, 0x0f, 0x86,
1237 0x18, 0xf2, 0xc3, 0x30, 0x01, 0xd2, 0xc0, 0xc1, 0x62, 0x52, 0x13, 0xf1,
1238 0x9c, 0x13, 0x39, 0xb5, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce,
1239 0x3d, 0x04, 0x03, 0x02, 0x30, 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03,
1240 0x55, 0x04, 0x03, 0x0c, 0x0c, 0x6d, 0x61, 0x70, 0x61, 0x6b, 0x74, 0x2e,
1241 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x32, 0x30,
1242 0x38, 0x30, 0x32, 0x31, 0x32, 0x30, 0x30, 0x31, 0x38, 0x5a, 0x17, 0x0d,
1243 0x32, 0x32, 0x30, 0x39, 0x30, 0x31, 0x31, 0x32, 0x30, 0x30, 0x31, 0x38,
1244 0x5a, 0x30, 0x17, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03,
1245 0x0c, 0x0c, 0x6d, 0x61, 0x70, 0x61, 0x6b, 0x74, 0x2e, 0x6c, 0x6f, 0x63,
1246 0x61, 0x6c, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce,
1247 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01,
1248 0x07, 0x03, 0x42, 0x00, 0x04, 0x67, 0xf4, 0xd3, 0x8f, 0x15, 0x6d, 0xee,
1249 0x85, 0xcc, 0x2a, 0x77, 0xfc, 0x0b, 0x8f, 0x9f, 0xcf, 0xa9, 0x95, 0x5d,
1250 0x5b, 0xcd, 0xb7, 0x8b, 0xba, 0x31, 0x0a, 0x73, 0x62, 0xc5, 0xd0, 0x0e,
1251 0x07, 0x90, 0xae, 0x38, 0x43, 0x79, 0xce, 0x5e, 0x33, 0xad, 0x31, 0xbf,
1252 0x9f, 0x2a, 0x56, 0x83, 0xa5, 0x24, 0x16, 0xab, 0x0c, 0xf1, 0x64, 0xbe,
1253 0xe4, 0x93, 0xb5, 0x89, 0xd6, 0x05, 0xe4, 0xf7, 0x7b, 0xa3, 0x53, 0x30,
1254 0x51, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14,
1255 0x02, 0x64, 0x0f, 0x55, 0x69, 0x14, 0x91, 0x19, 0xed, 0xf9, 0x1a, 0xe9,
1256 0x1d, 0xa5, 0x5a, 0xd0, 0x48, 0x96, 0x9f, 0x60, 0x30, 0x1f, 0x06, 0x03,
1257 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x02, 0x64, 0x0f,
1258 0x55, 0x69, 0x14, 0x91, 0x19, 0xed, 0xf9, 0x1a, 0xe9, 0x1d, 0xa5, 0x5a,
1259 0xd0, 0x48, 0x96, 0x9f, 0x60, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13,
1260 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0a,
1261 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x47,
1262 0x00, 0x30, 0x44, 0x02, 0x20, 0x0a, 0x82, 0x92, 0x6e, 0xd3, 0xc6, 0x66,
1263 0xd9, 0xd3, 0x75, 0xff, 0x71, 0x3b, 0x61, 0x46, 0x21, 0x00, 0xe6, 0x21,
1264 0x5d, 0x9c, 0x86, 0xe9, 0x65, 0x40, 0x4f, 0xeb, 0x70, 0x4f, 0x2c, 0xad,
1265 0x00, 0x02, 0x20, 0x08, 0xc2, 0x07, 0x5d, 0x16, 0xfc, 0x54, 0x34, 0x2b,
1266 0xb4, 0x18, 0x67, 0x44, 0x81, 0xc9, 0xa9, 0x67, 0x2e, 0xce, 0xa1, 0x02,
1267 0x9f, 0x3b, 0xe5, 0x61, 0x16, 0x0b, 0x50, 0xf6, 0xa1, 0x50, 0x94, 0x00,
1268 0x00, 0x0f, 0x00, 0x00, 0x4c, 0x04, 0x03, 0x00, 0x48, 0x30, 0x46, 0x02,
1269 0x21, 0x00, 0xaa, 0x18, 0x61, 0x93, 0xdf, 0xbb, 0x79, 0xe7, 0x34, 0x7e,
1270 0x2e, 0x61, 0x13, 0x8c, 0xa0, 0x33, 0xfb, 0x33, 0xca, 0xfc, 0xd2, 0x45,
1271 0xb0, 0xc7, 0x89, 0x3d, 0xf1, 0xd6, 0x54, 0x94, 0x05, 0xb6, 0x02, 0x21,
1272 0x00, 0xef, 0x6c, 0xb6, 0xf2, 0x00, 0xb2, 0x32, 0xb1, 0xf3, 0x3f, 0x59,
1273 0xf5, 0xc8, 0x18, 0xbe, 0x39, 0xbb, 0x27, 0xf8, 0x67, 0xac, 0xcb, 0x63,
1274 0xa4, 0x29, 0xfb, 0x8e, 0x88, 0x0f, 0xe5, 0xe9, 0x7e, 0x14, 0x00, 0x00,
1275 0x20, 0xfc, 0x2c, 0x4c, 0xa7, 0x77, 0x24, 0x79, 0x29, 0xa8, 0x82, 0x1a,
1276 0x4d, 0x58, 0x9d, 0x82, 0xe2, 0x09, 0x36, 0x63, 0x0e, 0x0b, 0x55, 0x51,
1277 0x80, 0x93, 0x40, 0xda, 0x41, 0x33, 0x08, 0x10, 0x2c,
1280 static const QUIC_PKT_HDR rx_script_7c_expect_hdr = {
1289 {0, {0}}, /* DCID */
1290 {0, {0}}, /* SCID */
1292 NULL, 0, /* Token/Token Len */
1296 static const unsigned char rx_script_7c_body[] = {
1297 0x18, 0x03, 0x00, 0x04, 0xf7, 0x75, 0x72, 0xa2, 0xfd, 0x17, 0xd4, 0x82,
1298 0x8e, 0xe9, 0x5b, 0xce, 0xed, 0xec, 0x88, 0xb9, 0x73, 0xbf, 0x36, 0x9f,
1299 0x18, 0x02, 0x00, 0x04, 0x5f, 0x43, 0x96, 0xe4, 0x15, 0xdc, 0x56, 0x6b,
1300 0x67, 0x4c, 0x36, 0xb2, 0xe2, 0x77, 0xdc, 0x6e, 0xb9, 0x2c, 0x0d, 0x79,
1301 0x18, 0x01, 0x00, 0x04, 0xcb, 0x83, 0x4a, 0xf4, 0x8d, 0x7b, 0x69, 0x90,
1302 0xaf, 0x0d, 0xd2, 0x38, 0xa4, 0xf1, 0x94, 0xff, 0x63, 0x24, 0xd3, 0x7a,
1305 static const struct rx_test_op rx_script_7[] = {
1306 RX_OP_ADD_RX_DCID(empty_conn_id)
1307 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_7_c2s_init_dcid)
1309 RX_OP_CHECK_PKT_N(7a)
1310 RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
1311 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
1312 QRL_SUITE_CHACHA20POLY1305, rx_script_7_handshake_secret)
1313 RX_OP_CHECK_PKT_N(7b)
1314 RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
1315 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
1316 QRL_SUITE_CHACHA20POLY1305, rx_script_7_1rtt_secret)
1317 RX_OP_CHECK_PKT_N(7c)
1318 RX_OP_CHECK_NO_PKT()
1320 /* Discard Initial EL and try injecting the packet again */
1321 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_INITIAL)
1323 /* Initial packet is not output because we have discarded Initial keys */
1324 RX_OP_CHECK_PKT_N(7b)
1325 RX_OP_CHECK_PKT_N(7c)
1326 RX_OP_CHECK_NO_PKT()
1327 /* Try again with discarded keys */
1328 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_HANDSHAKE)
1330 RX_OP_CHECK_PKT_N(7c)
1331 RX_OP_CHECK_NO_PKT()
1334 RX_OP_CHECK_PKT_N(7c)
1335 RX_OP_CHECK_NO_PKT()
1336 /* Try again with discarded 1-RTT keys */
1337 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_1RTT)
1339 RX_OP_CHECK_NO_PKT()
1341 /* Recreate QRL, test reading packets received before key */
1342 RX_OP_SET_SCID_LEN(0)
1343 RX_OP_ADD_RX_DCID(empty_conn_id)
1345 RX_OP_CHECK_NO_PKT()
1346 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_7_c2s_init_dcid)
1347 RX_OP_CHECK_PKT_N(7a)
1348 RX_OP_CHECK_NO_PKT()
1349 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
1350 QRL_SUITE_CHACHA20POLY1305, rx_script_7_handshake_secret)
1351 RX_OP_CHECK_PKT_N(7b)
1352 RX_OP_CHECK_NO_PKT()
1353 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
1354 QRL_SUITE_CHACHA20POLY1305, rx_script_7_1rtt_secret)
1355 RX_OP_CHECK_PKT_N(7c)
1356 RX_OP_CHECK_NO_PKT()
1360 #endif /* !defined(OPENSSL_NO_CHACHA) */
1363 * 8. Real World - S2C Multiple Packets with Peer Initiated Key Phase Update
1365 static const unsigned char rx_script_8_1rtt_secret[32] = {
1366 0x5f, 0x1f, 0x47, 0xea, 0xc3, 0xb2, 0xce, 0x73, 0xfb, 0xa2, 0x9f, 0xac,
1367 0xc3, 0xa0, 0xfe, 0x9b, 0xf3, 0xc0, 0xde, 0x5d, 0x33, 0x11, 0x1c, 0x70,
1368 0xdd, 0xb4, 0x06, 0xcc, 0xdf, 0x7d, 0xe9, 0x9a
1371 static const unsigned char rx_script_8a_in[] = {
1372 0x51, /* Short, 1-RTT, PN Length=2 bytes, KP=0 */
1373 0xcb, 0xf4, /* PN (4) */
1374 0x3f, 0x68, 0x7b, 0xa8, 0x2b, 0xb9, 0xfa, 0x7d, 0xe4, 0x6b, 0x20, 0x48,
1375 0xd1, 0x3c, 0xcb, 0x4b, 0xef, 0xb1, 0xfd, 0x5e, 0x1b, 0x19, 0x83, 0xa9,
1376 0x47, 0x62, 0xc1, 0x6e, 0xef, 0x27, 0xc3, 0x9b, 0x8f, 0x3f, 0xce, 0x11,
1377 0x68, 0xf5, 0x73, 0x0d, 0xf2, 0xdc, 0xe0, 0x28, 0x28, 0x79, 0xa6, 0x39,
1381 static const QUIC_PKT_HDR rx_script_8a_expect_hdr = {
1390 {0, {0}}, /* DCID */
1391 {0, {0}}, /* SCID */
1393 NULL, 0, /* Token/Token Len */
1397 static const unsigned char rx_script_8a_body[] = {
1398 0x02, 0x03, 0x06, 0x00, 0x03, 0x0c, 0x00, 0x1b, 0x49, 0x27, 0x6d, 0x20,
1399 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x6e,
1400 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65
1403 static const unsigned char rx_script_8b_in[] = {
1404 0x52, /* Short, 1-RTT, PN Length=2 bytes, KP=1 */
1405 0x21, 0x8e, /* PN (5) */
1406 0xa2, 0x6a, 0x9c, 0x83, 0x24, 0x48, 0xae, 0x60, 0x1e, 0xc2, 0xa5, 0x91,
1407 0xfa, 0xe5, 0xf2, 0x05, 0x14, 0x37, 0x04, 0x6a, 0xa8, 0xae, 0x06, 0x58,
1408 0xd7, 0x85, 0x48, 0xd7, 0x3b, 0x85, 0x9e, 0x5a, 0xb3, 0x46, 0x89, 0x1b,
1409 0x4b, 0x6e, 0x1d, 0xd1, 0xfc, 0xb7, 0x47, 0xda, 0x6a, 0x64, 0x4b, 0x8e,
1413 static const QUIC_PKT_HDR rx_script_8b_expect_hdr = {
1422 {0, {0}}, /* DCID */
1423 {0, {0}}, /* SCID */
1425 NULL, 0, /* Token/Token Len */
1429 static const unsigned char rx_script_8b_body[] = {
1430 0x02, 0x04, 0x03, 0x00, 0x00, 0x0c, 0x00, 0x36, 0x49, 0x27, 0x6d, 0x20,
1431 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x6e,
1432 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65,
1435 static const unsigned char rx_script_8c_in[] = {
1436 0x5b, /* Short, 1-RTT, PN Length=2 bytes, KP=0 */
1437 0x98, 0xd6, /* PN (3) */
1438 0x3c, 0x6f, 0x94, 0x20, 0x5e, 0xfc, 0x5b, 0x3a, 0x4a, 0x65, 0x1a, 0x9a,
1439 0x6c, 0x00, 0x52, 0xb6, 0x0c, 0x9b, 0x07, 0xf9, 0x6f, 0xbc, 0x3d, 0xb4,
1440 0x57, 0xe0, 0x15, 0x74, 0xfe, 0x76, 0xea, 0x1f, 0x23, 0xae, 0x22, 0x62,
1441 0xb7, 0x90, 0x94, 0x89, 0x38, 0x9b, 0x5b, 0x47, 0xed,
1444 static const QUIC_PKT_HDR rx_script_8c_expect_hdr = {
1453 {0, {0}}, /* DCID */
1454 {0, {0}}, /* SCID */
1456 NULL, 0, /* Token/Token Len */
1460 static const unsigned char rx_script_8c_body[] = {
1461 0x08, 0x00, 0x49, 0x27, 0x6d, 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67,
1462 0x20, 0x61, 0x20, 0x77, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c,
1463 0x20, 0x74, 0x69, 0x6d, 0x65,
1466 static const unsigned char rx_script_8d_in[] = {
1467 0x55, /* Short, 1-RTT, PN Length=2 bytes, KP=1 */
1468 0x98, 0x20, /* PN (6) */
1469 0x45, 0x53, 0x05, 0x29, 0x30, 0x42, 0x29, 0x02, 0xf2, 0xa7, 0x27, 0xd6,
1470 0xb0, 0xb7, 0x30, 0xad, 0x45, 0xd8, 0x73, 0xd7, 0xe3, 0x65, 0xee, 0xd9,
1471 0x35, 0x33, 0x03, 0x3a, 0x35, 0x0b, 0x59, 0xa7, 0xbc, 0x23, 0x37, 0xc2,
1472 0x5e, 0x13, 0x88, 0x18, 0x79, 0x94, 0x6c, 0x15, 0xe3, 0x1f, 0x0d, 0xd1,
1473 0xc3, 0xfa, 0x40, 0xff,
1476 static const QUIC_PKT_HDR rx_script_8d_expect_hdr = {
1485 {0, {0}}, /* DCID */
1486 {0, {0}}, /* SCID */
1488 NULL, 0, /* Token/Token Len */
1492 static const unsigned char rx_script_8d_body[] = {
1493 0x02, 0x05, 0x03, 0x00, 0x00, 0x0c, 0x00, 0x40, 0x51, 0x49, 0x27, 0x6d,
1494 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f,
1495 0x6e, 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65,
1498 static const unsigned char rx_script_8e_in[] = {
1499 0x55, /* Short, 1-RTTT, PN Length=2 bytes, KP=0 */
1500 0x76, 0x25, /* PN (10) */
1501 0x1c, 0x0d, 0x70, 0x4c, 0x2b, 0xc5, 0x7d, 0x7b, 0x77, 0x64, 0x03, 0x27,
1502 0xb3, 0x5d, 0x83, 0x9e, 0x35, 0x05, 0x10, 0xd2, 0xa4, 0x5c, 0x83, 0xd6,
1503 0x94, 0x12, 0x18, 0xc5, 0xb3, 0x0f, 0x0a, 0xb1, 0x8a, 0x82, 0x9f, 0xd6,
1504 0xa9, 0xab, 0x40, 0xc1, 0x05, 0xe8, 0x1b, 0x74, 0xaa, 0x8e, 0xd6, 0x8b,
1505 0xa5, 0xa3, 0x77, 0x79,
1508 static const QUIC_PKT_HDR rx_script_8e_expect_hdr = {
1517 {0, {0}}, /* DCID */
1518 {0, {0}}, /* SCID */
1520 NULL, 0, /* Token/Token Len */
1524 static const unsigned char rx_script_8e_body[] = {
1525 0x02, 0x09, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x40, 0xbd, 0x49, 0x27, 0x6d,
1526 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f,
1527 0x6e, 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65,
1530 static const unsigned char rx_script_8f_in[] = {
1531 0x48, /* Short, 1-RTT, PN Length=2 Bytes, KP=1 */
1532 0x4d, 0xf6, /* PN (15) */
1533 0x42, 0x86, 0xa1, 0xfa, 0x69, 0x6b, 0x1a, 0x45, 0xf2, 0xcd, 0xf6, 0x92,
1534 0xe1, 0xe6, 0x1a, 0x49, 0x37, 0xd7, 0x10, 0xae, 0x09, 0xbd
1537 static const QUIC_PKT_HDR rx_script_8f_expect_hdr = {
1546 {0, {0}}, /* DCID */
1547 {0, {0}}, /* SCID */
1549 NULL, 0, /* Token/Token Len */
1553 static const unsigned char rx_script_8f_body[] = {
1554 0x02, 0x0e, 0x4c, 0x54, 0x00, 0x02
1557 static const struct rx_test_op rx_script_8[] = {
1558 RX_OP_ADD_RX_DCID(empty_conn_id)
1559 /* Inject before we get the keys */
1562 RX_OP_CHECK_NO_PKT()
1564 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
1565 QRL_SUITE_AES128GCM, rx_script_8_1rtt_secret)
1566 /* Now the injected packet is successfully returned */
1567 RX_OP_CHECK_PKT_N(8a)
1568 RX_OP_CHECK_NO_PKT()
1569 RX_OP_CHECK_KEY_EPOCH(0)
1571 /* Packet with new key phase */
1573 /* Packet is successfully decrypted and returned */
1574 RX_OP_CHECK_PKT_N(8b)
1575 RX_OP_CHECK_NO_PKT()
1576 /* Key epoch has increased */
1577 RX_OP_CHECK_KEY_EPOCH(1)
1580 * Now inject an old packet with the old keys (perhaps reordered in
1584 /* Should still be decrypted OK */
1585 RX_OP_CHECK_PKT_N(8c)
1586 RX_OP_CHECK_NO_PKT()
1587 /* Epoch has not changed */
1588 RX_OP_CHECK_KEY_EPOCH(1)
1590 /* Another packet with the new keys. */
1592 RX_OP_CHECK_PKT_N(8d)
1593 RX_OP_CHECK_NO_PKT()
1594 RX_OP_CHECK_KEY_EPOCH(1)
1596 /* We can inject the old packet multiple times and it still works */
1598 RX_OP_CHECK_PKT_N(8c)
1599 RX_OP_CHECK_NO_PKT()
1600 RX_OP_CHECK_KEY_EPOCH(1)
1602 /* Until we move from UPDATING to COOLDOWN */
1603 RX_OP_KEY_UPDATE_TIMEOUT(0)
1605 RX_OP_CHECK_NO_PKT()
1606 RX_OP_CHECK_KEY_EPOCH(1)
1609 * Injecting a packet from the next epoch (epoch 2) while in COOLDOWN
1613 RX_OP_CHECK_NO_PKT()
1614 RX_OP_CHECK_KEY_EPOCH(1)
1616 /* Move from COOLDOWN to NORMAL and try again */
1617 RX_OP_KEY_UPDATE_TIMEOUT(1)
1619 RX_OP_CHECK_PKT_N(8e)
1620 RX_OP_CHECK_NO_PKT()
1621 RX_OP_CHECK_KEY_EPOCH(2)
1623 /* Can still receive old packet */
1625 RX_OP_CHECK_PKT_N(8d)
1626 RX_OP_CHECK_NO_PKT()
1627 RX_OP_CHECK_KEY_EPOCH(2)
1629 /* Move straight from UPDATING to NORMAL */
1630 RX_OP_KEY_UPDATE_TIMEOUT(1)
1632 /* Try a packet from epoch 3 */
1634 RX_OP_CHECK_PKT_N(8f)
1635 RX_OP_CHECK_NO_PKT()
1636 RX_OP_CHECK_KEY_EPOCH(3)
1641 static const struct rx_test_op *rx_scripts[] = {
1643 #ifndef OPENSSL_NO_CHACHA
1650 #ifndef OPENSSL_NO_CHACHA
1659 /* OSSL_QRX with necessary data */
1663 /* Used for the RX depacketizer */
1664 SSL_CTX *quic_ssl_ctx;
1665 QUIC_CONNECTION *quic_conn;
1668 static void rx_state_teardown(struct rx_state *s)
1670 if (s->quic_conn != NULL) {
1671 SSL_free((SSL *)s->quic_conn);
1672 s->quic_conn = NULL;
1674 if (s->quic_ssl_ctx != NULL) {
1675 SSL_CTX_free(s->quic_ssl_ctx);
1676 s->quic_ssl_ctx = NULL;
1679 if (s->qrx != NULL) {
1680 ossl_qrx_free(s->qrx);
1684 if (s->demux != NULL) {
1685 ossl_quic_demux_free(s->demux);
1690 static uint64_t time_counter = 0;
1692 static OSSL_TIME expected_time(uint64_t counter)
1694 return ossl_time_multiply(ossl_ticks2time(OSSL_TIME_MS), counter);
1697 static OSSL_TIME fake_time(void *arg)
1699 return expected_time(++time_counter);
1702 static int rx_state_ensure(struct rx_state *s)
1704 if (s->demux == NULL
1705 && !TEST_ptr(s->demux = ossl_quic_demux_new(NULL,
1706 s->args.short_conn_id_len,
1711 s->args.demux = s->demux;
1712 s->args.max_deferred = 32;
1714 /* Initialise OSSL_QRX */
1716 && !TEST_ptr(s->qrx = ossl_qrx_new(&s->args)))
1722 static int rx_run_script(const struct rx_test_op *script)
1725 struct rx_state s = {0};
1727 OSSL_QRX_PKT *pkt = NULL;
1728 const struct rx_test_op *op = script;
1730 for (; op->op != RX_TEST_OP_END; ++op)
1732 case RX_TEST_OP_SET_SCID_LEN:
1733 rx_state_teardown(&s);
1734 s.args.short_conn_id_len = op->enc_level;
1736 case RX_TEST_OP_SET_INIT_LARGEST_PN:
1737 rx_state_teardown(&s);
1738 for (i = 0; i < QUIC_PN_SPACE_NUM; ++i)
1739 s.args.init_largest_pn[i] = op->largest_pn;
1741 case RX_TEST_OP_ADD_RX_DCID:
1742 if (!TEST_true(rx_state_ensure(&s)))
1744 if (!TEST_true(ossl_qrx_add_dst_conn_id(s.qrx, op->dcid)))
1747 case RX_TEST_OP_PROVIDE_SECRET:
1748 if (!TEST_true(rx_state_ensure(&s)))
1750 if (!TEST_true(ossl_qrx_provide_secret(s.qrx, op->enc_level,
1756 case RX_TEST_OP_PROVIDE_SECRET_INITIAL:
1757 if (!TEST_true(rx_state_ensure(&s)))
1759 if (!TEST_true(ossl_quic_provide_initial_secret(NULL, NULL,
1764 case RX_TEST_OP_DISCARD_EL:
1765 if (!TEST_true(rx_state_ensure(&s)))
1767 if (!TEST_true(ossl_qrx_discard_enc_level(s.qrx, op->enc_level)))
1770 case RX_TEST_OP_INJECT:
1771 if (!TEST_true(rx_state_ensure(&s)))
1773 if (!TEST_true(ossl_quic_demux_inject(s.demux,
1774 op->buf, op->buf_len,
1778 case RX_TEST_OP_CHECK_PKT:
1779 if (!TEST_true(rx_state_ensure(&s)))
1782 if (!TEST_true(ossl_qrx_read_pkt(s.qrx, &pkt)))
1785 if (!TEST_ptr(pkt) || !TEST_ptr(pkt->hdr))
1788 if (!TEST_mem_eq(pkt->hdr->data, pkt->hdr->len,
1789 op->buf, op->buf_len))
1792 if (!TEST_true(cmp_pkt_hdr(pkt->hdr, op->hdr,
1793 op->buf, op->buf_len, 1)))
1796 ossl_qrx_pkt_release(pkt);
1799 case RX_TEST_OP_CHECK_NO_PKT:
1800 if (!TEST_true(rx_state_ensure(&s)))
1803 if (!TEST_false(ossl_qrx_read_pkt(s.qrx, &pkt)))
1807 case RX_TEST_OP_CHECK_KEY_EPOCH:
1808 if (!TEST_true(rx_state_ensure(&s)))
1811 if (!TEST_uint64_t_eq(ossl_qrx_get_key_epoch(s.qrx),
1816 case RX_TEST_OP_KEY_UPDATE_TIMEOUT:
1817 if (!TEST_true(rx_state_ensure(&s)))
1820 if (!TEST_true(ossl_qrx_key_update_timeout(s.qrx,
1825 case RX_TEST_OP_SET_INIT_KEY_PHASE:
1826 rx_state_teardown(&s);
1827 s.args.init_key_phase_bit = (unsigned char)op->enc_level;
1836 ossl_qrx_pkt_release(pkt);
1837 rx_state_teardown(&s);
1841 static int test_rx_script(int idx)
1843 return rx_run_script(rx_scripts[idx]);
1846 /* Packet Header Tests */
1847 struct pkt_hdr_test {
1849 const unsigned char *expected;
1850 size_t expected_len;
1851 const unsigned char *payload;
1853 size_t short_conn_id_len;
1855 * Minimum number of bytes which should be required for a successful decode.
1856 * SIZE_MAX if should never decode successfully.
1858 size_t min_success_len;
1859 size_t pn_offset, sample_offset;
1862 /* Packet Header Test 1: INITIAL With SCID */
1863 static const unsigned char pkt_hdr_test_1_expected[] = {
1864 0xc1, /* Long|Fixed, Type=Initial, PN Len=2 */
1865 0x00, 0x00, 0x00, 0x01, /* Version */
1866 0x00, /* DCID Length */
1867 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
1868 0x00, /* Token Length */
1869 0x15, /* Length=21 */
1870 0x33, 0x44, /* Encoded PN */
1871 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
1872 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
1876 static const unsigned char pkt_hdr_test_1_payload[] = {
1877 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1878 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
1882 static const struct pkt_hdr_test pkt_hdr_test_1 = {
1884 QUIC_PKT_TYPE_INITIAL, /* type */
1892 { 0, {0} }, /* DCID */
1893 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
1894 { 0x33, 0x44 }, /* PN */
1895 NULL, 0, /* Token/Token Len */
1896 19, NULL /* Len/Data */
1898 pkt_hdr_test_1_expected, OSSL_NELEM(pkt_hdr_test_1_expected),
1899 pkt_hdr_test_1_payload, OSSL_NELEM(pkt_hdr_test_1_payload),
1900 0, sizeof(pkt_hdr_test_1_expected),
1904 /* Packet Header Test 2: INITIAL With SCID and Token */
1905 static const unsigned char pkt_hdr_test_2_expected[] = {
1906 0xc1, /* Long|Fixed, Type=Initial, PN Len=2 */
1907 0x00, 0x00, 0x00, 0x01, /* Version */
1908 0x00, /* DCID Length */
1909 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
1910 0x07, /* Token Length */
1911 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
1912 0x15, /* Length=21 */
1913 0x33, 0x44, /* Encoded PN */
1914 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
1915 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
1919 static const unsigned char pkt_hdr_test_2_payload[] = {
1920 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1921 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
1925 static const unsigned char pkt_hdr_test_2_token[] = {
1926 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96
1929 static const struct pkt_hdr_test pkt_hdr_test_2 = {
1931 QUIC_PKT_TYPE_INITIAL, /* type */
1939 { 0, {0} }, /* DCID */
1940 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
1941 { 0x33, 0x44 }, /* PN */
1942 pkt_hdr_test_2_token, sizeof(pkt_hdr_test_2_token), /* Token */
1943 19, NULL /* Len/Data */
1945 pkt_hdr_test_2_expected, OSSL_NELEM(pkt_hdr_test_2_expected),
1946 pkt_hdr_test_2_payload, OSSL_NELEM(pkt_hdr_test_2_payload),
1947 0, sizeof(pkt_hdr_test_2_expected),
1951 /* Packet Header Test 3: INITIAL With DCID and SCID and Token */
1952 static const unsigned char pkt_hdr_test_3_expected[] = {
1953 0xc1, /* Long|Fixed, Type=Initial, PN Len=2 */
1954 0x00, 0x00, 0x00, 0x01, /* Version */
1955 0x03, /* DCID Length */
1956 0x70, 0x71, 0x72, /* DCID */
1957 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
1958 0x06, /* Token Length */
1959 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
1960 0x15, /* Length=21 */
1961 0x33, 0x44, /* Encoded PN */
1962 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
1963 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
1967 static const unsigned char pkt_hdr_test_3_payload[] = {
1968 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1969 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
1973 static const unsigned char pkt_hdr_test_3_token[] = {
1974 0x91, 0x92, 0x93, 0x94, 0x95, 0x96
1977 static const struct pkt_hdr_test pkt_hdr_test_3 = {
1979 QUIC_PKT_TYPE_INITIAL, /* type */
1987 { 3, {0x70, 0x71, 0x72} }, /* DCID */
1988 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
1989 { 0x33, 0x44 }, /* PN */
1990 pkt_hdr_test_3_token, sizeof(pkt_hdr_test_3_token), /* Token */
1991 19, NULL /* Len/Data */
1993 pkt_hdr_test_3_expected, OSSL_NELEM(pkt_hdr_test_3_expected),
1994 pkt_hdr_test_3_payload, OSSL_NELEM(pkt_hdr_test_3_payload),
1995 0, sizeof(pkt_hdr_test_3_expected),
1999 /* Packet Header Test 4: 0-RTT */
2000 static const unsigned char pkt_hdr_test_4_expected[] = {
2001 0xd0, /* Long|Fixed, Type=0-RTT, PN Len=1 */
2002 0x00, 0x00, 0x00, 0x01, /* Version */
2003 0x03, /* DCID Length */
2004 0x70, 0x71, 0x72, /* DCID */
2005 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2006 0x14, /* Length=20 */
2007 0x33, /* Encoded PN */
2008 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2009 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2013 static const unsigned char pkt_hdr_test_4_payload[] = {
2014 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2015 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2019 static const struct pkt_hdr_test pkt_hdr_test_4 = {
2021 QUIC_PKT_TYPE_0RTT, /* type */
2029 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2030 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
2032 NULL, 0, /* Token */
2033 19, NULL /* Len/Data */
2035 pkt_hdr_test_4_expected, OSSL_NELEM(pkt_hdr_test_4_expected),
2036 pkt_hdr_test_4_payload, OSSL_NELEM(pkt_hdr_test_4_payload),
2037 0, sizeof(pkt_hdr_test_4_expected),
2041 /* Packet Header Test 5: Handshake */
2042 static const unsigned char pkt_hdr_test_5_expected[] = {
2043 0xe0, /* Long|Fixed, Type=Handshake, PN Len=1 */
2044 0x00, 0x00, 0x00, 0x01, /* Version */
2045 0x03, /* DCID Length */
2046 0x70, 0x71, 0x72, /* DCID */
2047 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2048 0x14, /* Length=20 */
2049 0x33, /* Encoded PN */
2050 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2051 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2055 static const unsigned char pkt_hdr_test_5_payload[] = {
2056 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2057 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2061 static const struct pkt_hdr_test pkt_hdr_test_5 = {
2063 QUIC_PKT_TYPE_HANDSHAKE, /* type */
2071 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2072 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
2074 NULL, 0, /* Token */
2075 19, NULL /* Len/Data */
2077 pkt_hdr_test_5_expected, OSSL_NELEM(pkt_hdr_test_5_expected),
2078 pkt_hdr_test_5_payload, OSSL_NELEM(pkt_hdr_test_5_payload),
2079 0, sizeof(pkt_hdr_test_5_expected),
2083 /* Packet Header Test 6: Retry */
2084 static const unsigned char pkt_hdr_test_6_expected[] = {
2085 0xf0, /* Long|Fixed, Type=Retry */
2086 0x00, 0x00, 0x00, 0x01, /* Version */
2087 0x03, /* DCID Length */
2088 0x70, 0x71, 0x72, /* DCID */
2089 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2090 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* Retry Token */
2091 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
2092 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f /* Retry Integrity Tag */
2095 static const unsigned char pkt_hdr_test_6_payload[] = {
2096 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* Retry Token */
2097 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
2098 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f /* Retry Integrity Tag */
2101 static const struct pkt_hdr_test pkt_hdr_test_6 = {
2103 QUIC_PKT_TYPE_RETRY, /* type */
2111 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2112 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
2114 NULL, 0, /* Token */
2115 24, NULL /* Len/Data */
2117 pkt_hdr_test_6_expected, OSSL_NELEM(pkt_hdr_test_6_expected),
2118 pkt_hdr_test_6_payload, OSSL_NELEM(pkt_hdr_test_6_payload),
2123 /* Packet Header Test 7: 1-RTT */
2124 static const unsigned char pkt_hdr_test_7_expected[] = {
2125 0x42, /* Short|Fixed, Type=1-RTT, PN Len=3 */
2126 0x70, 0x71, 0x72, /* DCID */
2127 0x50, 0x51, 0x52, /* PN */
2128 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2129 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2132 static const unsigned char pkt_hdr_test_7_payload[] = {
2133 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2134 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2137 static const struct pkt_hdr_test pkt_hdr_test_7 = {
2139 QUIC_PKT_TYPE_1RTT, /* type */
2147 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2148 { 0, {0} }, /* SCID */
2149 { 0x50, 0x51, 0x52 }, /* PN */
2150 NULL, 0, /* Token */
2151 18, NULL /* Len/Data */
2153 pkt_hdr_test_7_expected, OSSL_NELEM(pkt_hdr_test_7_expected),
2154 pkt_hdr_test_7_payload, OSSL_NELEM(pkt_hdr_test_7_payload),
2159 /* Packet Header Test 8: 1-RTT with Spin Bit */
2160 static const unsigned char pkt_hdr_test_8_expected[] = {
2161 0x62, /* Short|Fixed, Type=1-RTT, PN Len=3, Spin=1 */
2162 0x70, 0x71, 0x72, /* DCID */
2163 0x50, 0x51, 0x52, /* PN */
2164 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2165 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2168 static const unsigned char pkt_hdr_test_8_payload[] = {
2169 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2170 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2173 static const struct pkt_hdr_test pkt_hdr_test_8 = {
2175 QUIC_PKT_TYPE_1RTT, /* type */
2183 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2184 { 0, {0} }, /* SCID */
2185 { 0x50, 0x51, 0x52 }, /* PN */
2186 NULL, 0, /* Token */
2187 18, NULL /* Len/Data */
2189 pkt_hdr_test_8_expected, OSSL_NELEM(pkt_hdr_test_8_expected),
2190 pkt_hdr_test_8_payload, OSSL_NELEM(pkt_hdr_test_8_payload),
2195 /* Packet Header Test 9: 1-RTT with Key Phase Bit */
2196 static const unsigned char pkt_hdr_test_9_expected[] = {
2197 0x46, /* Short|Fixed, Type=1-RTT, PN Len=3, Key Phase=1 */
2198 0x70, 0x71, 0x72, /* DCID */
2199 0x50, 0x51, 0x52, /* PN */
2200 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2201 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2204 static const unsigned char pkt_hdr_test_9_payload[] = {
2205 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2206 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2209 static const struct pkt_hdr_test pkt_hdr_test_9 = {
2211 QUIC_PKT_TYPE_1RTT, /* type */
2219 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2220 { 0, {0} }, /* SCID */
2221 { 0x50, 0x51, 0x52 }, /* PN */
2222 NULL, 0, /* Token */
2223 18, NULL /* Len/Data */
2225 pkt_hdr_test_9_expected, OSSL_NELEM(pkt_hdr_test_9_expected),
2226 pkt_hdr_test_9_payload, OSSL_NELEM(pkt_hdr_test_9_payload),
2231 /* Packet Header Test 10: Handshake with 4-Byte PN */
2232 static const unsigned char pkt_hdr_test_10_expected[] = {
2233 0xe3, /* Long|Fixed, Type=Handshake, PN Len=4 */
2234 0x00, 0x00, 0x00, 0x01, /* Version */
2235 0x03, /* DCID Length */
2236 0x70, 0x71, 0x72, /* DCID */
2237 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2238 0x17, /* Length=20 */
2239 0x33, 0x44, 0x55, 0x66, /* Encoded PN */
2240 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2241 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2245 static const unsigned char pkt_hdr_test_10_payload[] = {
2246 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2247 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2251 static const struct pkt_hdr_test pkt_hdr_test_10 = {
2253 QUIC_PKT_TYPE_HANDSHAKE, /* type */
2261 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2262 { 8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
2263 { 0x33, 0x44, 0x55, 0x66 }, /* PN */
2264 NULL, 0, /* Token */
2265 19, NULL /* Len/Data */
2267 pkt_hdr_test_10_expected, OSSL_NELEM(pkt_hdr_test_10_expected),
2268 pkt_hdr_test_10_payload, OSSL_NELEM(pkt_hdr_test_10_payload),
2269 0, sizeof(pkt_hdr_test_10_expected),
2273 /* Packet Header Test 11: 1-RTT with 4-Byte PN */
2274 static const unsigned char pkt_hdr_test_11_expected[] = {
2275 0x43, /* Short|Fixed, Type=1-RTT, PN Len=4 */
2276 0x70, 0x71, 0x72, /* DCID */
2277 0x50, 0x51, 0x52, 0x53, /* PN */
2278 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2279 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2282 static const unsigned char pkt_hdr_test_11_payload[] = {
2283 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2284 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2287 static const struct pkt_hdr_test pkt_hdr_test_11 = {
2289 QUIC_PKT_TYPE_1RTT, /* type */
2297 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2298 { 0, {0} }, /* SCID */
2299 { 0x50, 0x51, 0x52, 0x53 }, /* PN */
2300 NULL, 0, /* Token */
2301 18, NULL /* Len/Data */
2303 pkt_hdr_test_11_expected, OSSL_NELEM(pkt_hdr_test_11_expected),
2304 pkt_hdr_test_11_payload, OSSL_NELEM(pkt_hdr_test_11_payload),
2309 /* Packet Header Test 12: Version Negotiation */
2310 static const unsigned char pkt_hdr_test_12_expected[] = {
2311 0xc0, /* Long|Fixed, Type=Version Neg */
2312 0x00, 0x00, 0x00, 0x00, /* Version (0) */
2313 0x03, 0x70, 0x71, 0x72, /* DCID */
2314 0x02, 0x81, 0x82, /* SCID */
2315 0x11, 0x22, 0x33, 0x44 /* One Version */
2318 static const unsigned char pkt_hdr_test_12_payload[] = {
2319 0x11, 0x22, 0x33, 0x44
2322 static const struct pkt_hdr_test pkt_hdr_test_12 = {
2324 QUIC_PKT_TYPE_VERSION_NEG, /* type */
2332 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2333 { 2, {0x81, 0x82} }, /* SCID */
2335 NULL, 0, /* Token */
2336 4, NULL /* Len/Data */
2338 pkt_hdr_test_12_expected, OSSL_NELEM(pkt_hdr_test_12_expected),
2339 pkt_hdr_test_12_payload, OSSL_NELEM(pkt_hdr_test_12_payload),
2344 /* Packet Header Test 13: Version Negotiation without Fixed Bit */
2345 static const unsigned char pkt_hdr_test_13_expected[] = {
2346 0x80, /* Long|Fixed, Type=Version Neg */
2347 0x00, 0x00, 0x00, 0x00, /* Version (0) */
2348 0x03, 0x70, 0x71, 0x72, /* DCID */
2349 0x02, 0x81, 0x82, /* SCID */
2350 0x11, 0x22, 0x33, 0x44 /* One Version */
2353 static const unsigned char pkt_hdr_test_13_payload[] = {
2354 0x11, 0x22, 0x33, 0x44
2357 static const struct pkt_hdr_test pkt_hdr_test_13 = {
2359 QUIC_PKT_TYPE_VERSION_NEG, /* type */
2367 { 3, {0x70, 0x71, 0x72} }, /* DCID */
2368 { 2, {0x81, 0x82} }, /* SCID */
2370 NULL, 0, /* Token */
2371 4, NULL /* Len/Data */
2373 pkt_hdr_test_13_expected, OSSL_NELEM(pkt_hdr_test_13_expected),
2374 pkt_hdr_test_13_payload, OSSL_NELEM(pkt_hdr_test_13_payload),
2379 /* Packet Header Test 14: 1-RTT - Malformed - No Fixed Bit */
2380 static const unsigned char pkt_hdr_test_14_expected[] = {
2381 0x02, /* Fixed, Type=1-RTT, PN Len=3 */
2382 0x70, 0x71, 0x72, /* DCID */
2383 0x50, 0x51, 0x52, /* PN */
2384 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
2385 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
2388 static const struct pkt_hdr_test pkt_hdr_test_14 = {
2390 pkt_hdr_test_14_expected, OSSL_NELEM(pkt_hdr_test_14_expected),
2396 /* Packet Header Test 15: Handshake - Malformed - No Fixed Bit */
2397 static const unsigned char pkt_hdr_test_15_expected[] = {
2398 0xa0, /* Long, Type=Handshake, PN Len=1 */
2399 0x00, 0x00, 0x00, 0x01, /* Version */
2400 0x03, /* DCID Length */
2401 0x70, 0x71, 0x72, /* DCID */
2402 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2403 0x14, /* Length=20 */
2404 0x33, /* Encoded PN */
2405 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2406 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2410 static const struct pkt_hdr_test pkt_hdr_test_15 = {
2412 pkt_hdr_test_15_expected, OSSL_NELEM(pkt_hdr_test_15_expected),
2418 /* Packet Header Test 16: Handshake - Malformed - Wrong Version */
2419 static const unsigned char pkt_hdr_test_16_expected[] = {
2420 0xe0, /* Long|Fixed, Type=Handshake, PN Len=1 */
2421 0x00, 0x00, 0x00, 0x02, /* Version */
2422 0x03, /* DCID Length */
2423 0x70, 0x71, 0x72, /* DCID */
2424 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
2425 0x14, /* Length=20 */
2426 0x33, /* Encoded PN */
2427 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
2428 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
2432 static const struct pkt_hdr_test pkt_hdr_test_16 = {
2434 pkt_hdr_test_16_expected, OSSL_NELEM(pkt_hdr_test_16_expected),
2440 static const struct pkt_hdr_test *const pkt_hdr_tests[] = {
2459 #define HPR_REPEAT_COUNT 4
2460 #define HPR_CIPHER_COUNT 3
2463 * Count of number of times we observed an unchanged (u) or changed (c) bit in
2464 * each header-protectable bit over all test suites.
2466 static unsigned int counts_u[HPR_CIPHER_COUNT][37] = {0};
2467 static unsigned int counts_c[HPR_CIPHER_COUNT][37] = {0};
2469 static int test_wire_pkt_hdr_actual(int tidx, int repeat, int cipher,
2473 const struct pkt_hdr_test *t = pkt_hdr_tests[tidx];
2474 QUIC_PKT_HDR hdr = {0};
2475 QUIC_PKT_HDR_PTRS ptrs = {0}, wptrs = {0};
2478 BUF_MEM *buf = NULL;
2480 QUIC_HDR_PROTECTOR hpr = {0};
2481 unsigned char hpr_key[32] = {0,1,2,3,4,5,6,7};
2482 int have_hpr = 0, hpr_cipher_id, hpr_key_len;
2483 unsigned char *hbuf = NULL;
2484 int is_trunc = trunc_len < t->expected_len;
2485 int expect_fail = trunc_len < t->min_success_len;
2486 hpr_key[8] = (unsigned char)tidx;
2487 hpr_key[9] = (unsigned char)repeat;
2491 hpr_cipher_id = QUIC_HDR_PROT_CIPHER_AES_128;
2495 hpr_cipher_id = QUIC_HDR_PROT_CIPHER_AES_256;
2500 * In a build without CHACHA, we rerun the AES 256 tests.
2501 * Removing all dependence on CHACHA is more difficult and these
2502 * tests are fast enough.
2504 #ifndef OPENSSL_NO_CHACHA
2505 hpr_cipher_id = QUIC_HDR_PROT_CIPHER_CHACHA;
2507 hpr_cipher_id = QUIC_HDR_PROT_CIPHER_AES_256;
2515 if (!TEST_ptr(buf = BUF_MEM_new()))
2518 if (!TEST_true(WPACKET_init(&wpkt, buf)))
2521 if (!TEST_true(PACKET_buf_init(&pkt, t->expected, trunc_len)))
2524 if (!TEST_int_eq(ossl_quic_wire_decode_pkt_hdr(&pkt, t->short_conn_id_len,
2529 if (!expect_fail && !is_trunc) {
2530 if (!TEST_true(cmp_pkt_hdr(&hdr, &t->hdr, t->payload, t->payload_len, 1)))
2533 if (!TEST_ptr_eq(ptrs.raw_start, t->expected))
2536 if (t->pn_offset == SIZE_MAX) {
2537 if (!TEST_ptr_null(ptrs.raw_pn))
2540 if (!TEST_ptr_eq(ptrs.raw_pn, t->expected + t->pn_offset))
2544 if (t->sample_offset != SIZE_MAX) {
2545 if (!TEST_ptr_eq(ptrs.raw_sample, t->expected + t->sample_offset))
2547 if (!TEST_size_t_eq(ptrs.raw_sample_len,
2548 t->expected_len - t->sample_offset))
2552 if (!TEST_true(ossl_quic_wire_encode_pkt_hdr(&wpkt, t->short_conn_id_len, &hdr, &wptrs)))
2555 if (!TEST_true(WPACKET_memcpy(&wpkt, t->payload, t->payload_len)))
2558 if (!TEST_true(WPACKET_get_total_written(&wpkt, &l)))
2561 if (!TEST_mem_eq(buf->data, l, t->expected, t->expected_len))
2564 /* Test header protection. */
2565 if (t->sample_offset != SIZE_MAX) { /* if packet type has protection */
2566 if (!TEST_true(ossl_quic_hdr_protector_init(&hpr, NULL, NULL,
2575 * Copy into a duplicate buffer to test header protection by
2576 * comparing it against the original.
2578 hbuf = OPENSSL_malloc(t->expected_len);
2579 if (!TEST_ptr(hbuf))
2582 memcpy(hbuf, t->expected, t->expected_len);
2584 /* Fixup pointers to new buffer and encrypt. */
2585 ptrs.raw_pn = hbuf + (ptrs.raw_pn - ptrs.raw_start);
2586 ptrs.raw_sample = hbuf + (ptrs.raw_sample - ptrs.raw_start);
2587 ptrs.raw_start = hbuf;
2588 if (!TEST_true(ossl_quic_hdr_protector_encrypt(&hpr, &ptrs)))
2591 /* Ensure that bytes which should not have changed did not change */
2592 for (i = 0; i < t->expected_len; ++i) {
2593 unsigned char d = t->expected[i] ^ hbuf[i], rej_mask = 0xff;
2596 /* Bits in first byte which must not change */
2597 rej_mask = (t->hdr.type == QUIC_PKT_TYPE_1RTT) ? ~0x1f : ~0xf;
2598 } else if (i >= t->pn_offset && i < t->pn_offset + t->hdr.pn_len) {
2599 /* PN bytes change */
2601 jrel = 5 + (i - t->pn_offset) * 8;
2604 if (rej_mask != 0xff)
2605 for (j = 0; j < 8; ++j) {
2606 if (((1U << j) & rej_mask) != 0)
2608 * Bit unrelated to header protection, do not record
2613 OPENSSL_assert(jrel + j < OSSL_NELEM(counts_u[cipher]));
2614 if ((d & (1U << j)) != 0)
2615 ++counts_c[cipher][jrel + j]; /* bit did change */
2617 ++counts_u[cipher][jrel + j]; /* bit did not change */
2620 /* Bits in rej_mask must not change */
2621 if (!TEST_int_eq(d & rej_mask, 0))
2625 /* Decrypt and check matches original. */
2626 if (!TEST_true(ossl_quic_hdr_protector_decrypt(&hpr, &ptrs)))
2629 if (!TEST_mem_eq(hbuf, t->expected_len, t->expected, t->expected_len))
2637 ossl_quic_hdr_protector_cleanup(&hpr);
2638 WPACKET_finish(&wpkt);
2644 static int test_wire_pkt_hdr_inner(int tidx, int repeat, int cipher)
2647 const struct pkt_hdr_test *t = pkt_hdr_tests[tidx];
2650 /* Test with entire packet */
2651 if (!TEST_true(test_wire_pkt_hdr_actual(tidx, repeat, cipher,
2655 /* Now repeat for every possible truncation of the packet */
2656 for (i = 0; i < t->expected_len; ++i)
2657 if (!TEST_true(test_wire_pkt_hdr_actual(tidx, repeat, cipher, i)))
2665 static int test_hdr_prot_stats(void)
2671 * Test that, across all previously executed tests for each header
2672 * protection cipher, every bit which can have header protection applied a)
2673 * was changed in at least one test of applying header protection, and b)
2674 * was unchanged in at least one test of applying header protection.
2676 for (cipher = 0; cipher < HPR_CIPHER_COUNT; ++cipher)
2677 for (i = 0; i < OSSL_NELEM(counts_u[0]); ++i) {
2678 if (!TEST_uint_gt(counts_u[cipher][i], 0))
2680 if (!TEST_uint_gt(counts_c[cipher][i], 0))
2689 #define NUM_WIRE_PKT_HDR_TESTS \
2690 (OSSL_NELEM(pkt_hdr_tests) * HPR_REPEAT_COUNT * HPR_CIPHER_COUNT)
2692 static int test_wire_pkt_hdr(int idx)
2694 int tidx, repeat, cipher;
2696 if (idx == NUM_WIRE_PKT_HDR_TESTS)
2697 return test_hdr_prot_stats();
2699 cipher = idx % HPR_CIPHER_COUNT;
2700 idx /= HPR_CIPHER_COUNT;
2702 repeat = idx % HPR_REPEAT_COUNT;
2703 idx /= HPR_REPEAT_COUNT;
2707 return test_wire_pkt_hdr_inner(tidx, repeat, cipher);
2711 #define TX_TEST_OP_END 0 /* end of script */
2712 #define TX_TEST_OP_WRITE 1 /* write packet */
2713 #define TX_TEST_OP_PROVIDE_SECRET 2 /* provide TX secret */
2714 #define TX_TEST_OP_PROVIDE_SECRET_INITIAL 3 /* provide TX secret for initial */
2715 #define TX_TEST_OP_DISCARD_EL 4 /* discard an encryption level */
2716 #define TX_TEST_OP_CHECK_DGRAM 5 /* read datagram, compare to expected */
2717 #define TX_TEST_OP_CHECK_NO_DGRAM 6 /* check no datagram is in queue */
2718 #define TX_TEST_OP_KEY_UPDATE 7 /* perform key update for 1-RTT */
2722 const unsigned char *buf;
2724 const OSSL_QTX_PKT *pkt;
2725 uint32_t enc_level, suite_id;
2726 const QUIC_CONN_ID *dcid;
2731 #define TX_OP_WRITE(pkt) \
2732 { TX_TEST_OP_WRITE, NULL, 0, &(pkt), 0, 0, NULL },
2733 #define TX_OP_PROVIDE_SECRET(el, suite, key) \
2735 TX_TEST_OP_PROVIDE_SECRET, (key), sizeof(key), \
2736 NULL, (el), (suite), NULL \
2738 #define TX_OP_PROVIDE_SECRET_INITIAL(dcid, is_server) \
2739 { TX_TEST_OP_PROVIDE_SECRET_INITIAL, \
2740 NULL, 0, NULL, 0, (is_server), &(dcid) },
2741 #define TX_OP_DISCARD_EL(el) \
2742 { TX_TEST_OP_DISCARD_EL, NULL, 0, NULL, (el), 0, NULL },
2743 #define TX_OP_CHECK_DGRAM(expect_dgram) \
2745 TX_TEST_OP_CHECK_DGRAM, (expect_dgram), sizeof(expect_dgram), \
2748 #define TX_OP_CHECK_NO_DGRAM() \
2749 { TX_TEST_OP_CHECK_NO_PKT, NULL, 0, NULL, 0, 0, NULL },
2751 #define TX_OP_WRITE_N(n) \
2752 TX_OP_WRITE(tx_script_##n##_pkt)
2753 #define TX_OP_CHECK_DGRAM_N(n) \
2754 TX_OP_CHECK_DGRAM(tx_script_##n##_dgram)
2756 #define TX_OP_WRITE_CHECK(n) \
2758 TX_OP_CHECK_DGRAM_N(n)
2760 #define TX_OP_KEY_UPDATE() \
2761 { TX_TEST_OP_KEY_UPDATE, NULL, 0, NULL, 0, 0, NULL },
2763 /* 1. RFC 9001 - A.2 Client Initial */
2764 static const unsigned char tx_script_1_body[1162] = {
2765 0x06, 0x00, 0x40, 0xf1, 0x01, 0x00, 0x00, 0xed, 0x03, 0x03, 0xeb, 0xf8,
2766 0xfa, 0x56, 0xf1, 0x29, 0x39, 0xb9, 0x58, 0x4a, 0x38, 0x96, 0x47, 0x2e,
2767 0xc4, 0x0b, 0xb8, 0x63, 0xcf, 0xd3, 0xe8, 0x68, 0x04, 0xfe, 0x3a, 0x47,
2768 0xf0, 0x6a, 0x2b, 0x69, 0x48, 0x4c, 0x00, 0x00, 0x04, 0x13, 0x01, 0x13,
2769 0x02, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0e, 0x00,
2770 0x00, 0x0b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f,
2771 0x6d, 0xff, 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x08, 0x00, 0x06,
2772 0x00, 0x1d, 0x00, 0x17, 0x00, 0x18, 0x00, 0x10, 0x00, 0x07, 0x00, 0x05,
2773 0x04, 0x61, 0x6c, 0x70, 0x6e, 0x00, 0x05, 0x00, 0x05, 0x01, 0x00, 0x00,
2774 0x00, 0x00, 0x00, 0x33, 0x00, 0x26, 0x00, 0x24, 0x00, 0x1d, 0x00, 0x20,
2775 0x93, 0x70, 0xb2, 0xc9, 0xca, 0xa4, 0x7f, 0xba, 0xba, 0xf4, 0x55, 0x9f,
2776 0xed, 0xba, 0x75, 0x3d, 0xe1, 0x71, 0xfa, 0x71, 0xf5, 0x0f, 0x1c, 0xe1,
2777 0x5d, 0x43, 0xe9, 0x94, 0xec, 0x74, 0xd7, 0x48, 0x00, 0x2b, 0x00, 0x03,
2778 0x02, 0x03, 0x04, 0x00, 0x0d, 0x00, 0x10, 0x00, 0x0e, 0x04, 0x03, 0x05,
2779 0x03, 0x06, 0x03, 0x02, 0x03, 0x08, 0x04, 0x08, 0x05, 0x08, 0x06, 0x00,
2780 0x2d, 0x00, 0x02, 0x01, 0x01, 0x00, 0x1c, 0x00, 0x02, 0x40, 0x01, 0x00,
2781 0x39, 0x00, 0x32, 0x04, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2782 0xff, 0x05, 0x04, 0x80, 0x00, 0xff, 0xff, 0x07, 0x04, 0x80, 0x00, 0xff,
2783 0xff, 0x08, 0x01, 0x10, 0x01, 0x04, 0x80, 0x00, 0x75, 0x30, 0x09, 0x01,
2784 0x10, 0x0f, 0x08, 0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51, 0x57, 0x08, 0x06,
2785 0x04, 0x80, 0x00, 0xff, 0xff /* followed by zero padding */
2788 static const unsigned char tx_script_1_dgram[] = {
2789 0xc0, 0x00, 0x00, 0x00, 0x01, 0x08, 0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51,
2790 0x57, 0x08, 0x00, 0x00, 0x44, 0x9e, 0x7b, 0x9a, 0xec, 0x34, 0xd1, 0xb1,
2791 0xc9, 0x8d, 0xd7, 0x68, 0x9f, 0xb8, 0xec, 0x11, 0xd2, 0x42, 0xb1, 0x23,
2792 0xdc, 0x9b, 0xd8, 0xba, 0xb9, 0x36, 0xb4, 0x7d, 0x92, 0xec, 0x35, 0x6c,
2793 0x0b, 0xab, 0x7d, 0xf5, 0x97, 0x6d, 0x27, 0xcd, 0x44, 0x9f, 0x63, 0x30,
2794 0x00, 0x99, 0xf3, 0x99, 0x1c, 0x26, 0x0e, 0xc4, 0xc6, 0x0d, 0x17, 0xb3,
2795 0x1f, 0x84, 0x29, 0x15, 0x7b, 0xb3, 0x5a, 0x12, 0x82, 0xa6, 0x43, 0xa8,
2796 0xd2, 0x26, 0x2c, 0xad, 0x67, 0x50, 0x0c, 0xad, 0xb8, 0xe7, 0x37, 0x8c,
2797 0x8e, 0xb7, 0x53, 0x9e, 0xc4, 0xd4, 0x90, 0x5f, 0xed, 0x1b, 0xee, 0x1f,
2798 0xc8, 0xaa, 0xfb, 0xa1, 0x7c, 0x75, 0x0e, 0x2c, 0x7a, 0xce, 0x01, 0xe6,
2799 0x00, 0x5f, 0x80, 0xfc, 0xb7, 0xdf, 0x62, 0x12, 0x30, 0xc8, 0x37, 0x11,
2800 0xb3, 0x93, 0x43, 0xfa, 0x02, 0x8c, 0xea, 0x7f, 0x7f, 0xb5, 0xff, 0x89,
2801 0xea, 0xc2, 0x30, 0x82, 0x49, 0xa0, 0x22, 0x52, 0x15, 0x5e, 0x23, 0x47,
2802 0xb6, 0x3d, 0x58, 0xc5, 0x45, 0x7a, 0xfd, 0x84, 0xd0, 0x5d, 0xff, 0xfd,
2803 0xb2, 0x03, 0x92, 0x84, 0x4a, 0xe8, 0x12, 0x15, 0x46, 0x82, 0xe9, 0xcf,
2804 0x01, 0x2f, 0x90, 0x21, 0xa6, 0xf0, 0xbe, 0x17, 0xdd, 0xd0, 0xc2, 0x08,
2805 0x4d, 0xce, 0x25, 0xff, 0x9b, 0x06, 0xcd, 0xe5, 0x35, 0xd0, 0xf9, 0x20,
2806 0xa2, 0xdb, 0x1b, 0xf3, 0x62, 0xc2, 0x3e, 0x59, 0x6d, 0x11, 0xa4, 0xf5,
2807 0xa6, 0xcf, 0x39, 0x48, 0x83, 0x8a, 0x3a, 0xec, 0x4e, 0x15, 0xda, 0xf8,
2808 0x50, 0x0a, 0x6e, 0xf6, 0x9e, 0xc4, 0xe3, 0xfe, 0xb6, 0xb1, 0xd9, 0x8e,
2809 0x61, 0x0a, 0xc8, 0xb7, 0xec, 0x3f, 0xaf, 0x6a, 0xd7, 0x60, 0xb7, 0xba,
2810 0xd1, 0xdb, 0x4b, 0xa3, 0x48, 0x5e, 0x8a, 0x94, 0xdc, 0x25, 0x0a, 0xe3,
2811 0xfd, 0xb4, 0x1e, 0xd1, 0x5f, 0xb6, 0xa8, 0xe5, 0xeb, 0xa0, 0xfc, 0x3d,
2812 0xd6, 0x0b, 0xc8, 0xe3, 0x0c, 0x5c, 0x42, 0x87, 0xe5, 0x38, 0x05, 0xdb,
2813 0x05, 0x9a, 0xe0, 0x64, 0x8d, 0xb2, 0xf6, 0x42, 0x64, 0xed, 0x5e, 0x39,
2814 0xbe, 0x2e, 0x20, 0xd8, 0x2d, 0xf5, 0x66, 0xda, 0x8d, 0xd5, 0x99, 0x8c,
2815 0xca, 0xbd, 0xae, 0x05, 0x30, 0x60, 0xae, 0x6c, 0x7b, 0x43, 0x78, 0xe8,
2816 0x46, 0xd2, 0x9f, 0x37, 0xed, 0x7b, 0x4e, 0xa9, 0xec, 0x5d, 0x82, 0xe7,
2817 0x96, 0x1b, 0x7f, 0x25, 0xa9, 0x32, 0x38, 0x51, 0xf6, 0x81, 0xd5, 0x82,
2818 0x36, 0x3a, 0xa5, 0xf8, 0x99, 0x37, 0xf5, 0xa6, 0x72, 0x58, 0xbf, 0x63,
2819 0xad, 0x6f, 0x1a, 0x0b, 0x1d, 0x96, 0xdb, 0xd4, 0xfa, 0xdd, 0xfc, 0xef,
2820 0xc5, 0x26, 0x6b, 0xa6, 0x61, 0x17, 0x22, 0x39, 0x5c, 0x90, 0x65, 0x56,
2821 0xbe, 0x52, 0xaf, 0xe3, 0xf5, 0x65, 0x63, 0x6a, 0xd1, 0xb1, 0x7d, 0x50,
2822 0x8b, 0x73, 0xd8, 0x74, 0x3e, 0xeb, 0x52, 0x4b, 0xe2, 0x2b, 0x3d, 0xcb,
2823 0xc2, 0xc7, 0x46, 0x8d, 0x54, 0x11, 0x9c, 0x74, 0x68, 0x44, 0x9a, 0x13,
2824 0xd8, 0xe3, 0xb9, 0x58, 0x11, 0xa1, 0x98, 0xf3, 0x49, 0x1d, 0xe3, 0xe7,
2825 0xfe, 0x94, 0x2b, 0x33, 0x04, 0x07, 0xab, 0xf8, 0x2a, 0x4e, 0xd7, 0xc1,
2826 0xb3, 0x11, 0x66, 0x3a, 0xc6, 0x98, 0x90, 0xf4, 0x15, 0x70, 0x15, 0x85,
2827 0x3d, 0x91, 0xe9, 0x23, 0x03, 0x7c, 0x22, 0x7a, 0x33, 0xcd, 0xd5, 0xec,
2828 0x28, 0x1c, 0xa3, 0xf7, 0x9c, 0x44, 0x54, 0x6b, 0x9d, 0x90, 0xca, 0x00,
2829 0xf0, 0x64, 0xc9, 0x9e, 0x3d, 0xd9, 0x79, 0x11, 0xd3, 0x9f, 0xe9, 0xc5,
2830 0xd0, 0xb2, 0x3a, 0x22, 0x9a, 0x23, 0x4c, 0xb3, 0x61, 0x86, 0xc4, 0x81,
2831 0x9e, 0x8b, 0x9c, 0x59, 0x27, 0x72, 0x66, 0x32, 0x29, 0x1d, 0x6a, 0x41,
2832 0x82, 0x11, 0xcc, 0x29, 0x62, 0xe2, 0x0f, 0xe4, 0x7f, 0xeb, 0x3e, 0xdf,
2833 0x33, 0x0f, 0x2c, 0x60, 0x3a, 0x9d, 0x48, 0xc0, 0xfc, 0xb5, 0x69, 0x9d,
2834 0xbf, 0xe5, 0x89, 0x64, 0x25, 0xc5, 0xba, 0xc4, 0xae, 0xe8, 0x2e, 0x57,
2835 0xa8, 0x5a, 0xaf, 0x4e, 0x25, 0x13, 0xe4, 0xf0, 0x57, 0x96, 0xb0, 0x7b,
2836 0xa2, 0xee, 0x47, 0xd8, 0x05, 0x06, 0xf8, 0xd2, 0xc2, 0x5e, 0x50, 0xfd,
2837 0x14, 0xde, 0x71, 0xe6, 0xc4, 0x18, 0x55, 0x93, 0x02, 0xf9, 0x39, 0xb0,
2838 0xe1, 0xab, 0xd5, 0x76, 0xf2, 0x79, 0xc4, 0xb2, 0xe0, 0xfe, 0xb8, 0x5c,
2839 0x1f, 0x28, 0xff, 0x18, 0xf5, 0x88, 0x91, 0xff, 0xef, 0x13, 0x2e, 0xef,
2840 0x2f, 0xa0, 0x93, 0x46, 0xae, 0xe3, 0x3c, 0x28, 0xeb, 0x13, 0x0f, 0xf2,
2841 0x8f, 0x5b, 0x76, 0x69, 0x53, 0x33, 0x41, 0x13, 0x21, 0x19, 0x96, 0xd2,
2842 0x00, 0x11, 0xa1, 0x98, 0xe3, 0xfc, 0x43, 0x3f, 0x9f, 0x25, 0x41, 0x01,
2843 0x0a, 0xe1, 0x7c, 0x1b, 0xf2, 0x02, 0x58, 0x0f, 0x60, 0x47, 0x47, 0x2f,
2844 0xb3, 0x68, 0x57, 0xfe, 0x84, 0x3b, 0x19, 0xf5, 0x98, 0x40, 0x09, 0xdd,
2845 0xc3, 0x24, 0x04, 0x4e, 0x84, 0x7a, 0x4f, 0x4a, 0x0a, 0xb3, 0x4f, 0x71,
2846 0x95, 0x95, 0xde, 0x37, 0x25, 0x2d, 0x62, 0x35, 0x36, 0x5e, 0x9b, 0x84,
2847 0x39, 0x2b, 0x06, 0x10, 0x85, 0x34, 0x9d, 0x73, 0x20, 0x3a, 0x4a, 0x13,
2848 0xe9, 0x6f, 0x54, 0x32, 0xec, 0x0f, 0xd4, 0xa1, 0xee, 0x65, 0xac, 0xcd,
2849 0xd5, 0xe3, 0x90, 0x4d, 0xf5, 0x4c, 0x1d, 0xa5, 0x10, 0xb0, 0xff, 0x20,
2850 0xdc, 0xc0, 0xc7, 0x7f, 0xcb, 0x2c, 0x0e, 0x0e, 0xb6, 0x05, 0xcb, 0x05,
2851 0x04, 0xdb, 0x87, 0x63, 0x2c, 0xf3, 0xd8, 0xb4, 0xda, 0xe6, 0xe7, 0x05,
2852 0x76, 0x9d, 0x1d, 0xe3, 0x54, 0x27, 0x01, 0x23, 0xcb, 0x11, 0x45, 0x0e,
2853 0xfc, 0x60, 0xac, 0x47, 0x68, 0x3d, 0x7b, 0x8d, 0x0f, 0x81, 0x13, 0x65,
2854 0x56, 0x5f, 0xd9, 0x8c, 0x4c, 0x8e, 0xb9, 0x36, 0xbc, 0xab, 0x8d, 0x06,
2855 0x9f, 0xc3, 0x3b, 0xd8, 0x01, 0xb0, 0x3a, 0xde, 0xa2, 0xe1, 0xfb, 0xc5,
2856 0xaa, 0x46, 0x3d, 0x08, 0xca, 0x19, 0x89, 0x6d, 0x2b, 0xf5, 0x9a, 0x07,
2857 0x1b, 0x85, 0x1e, 0x6c, 0x23, 0x90, 0x52, 0x17, 0x2f, 0x29, 0x6b, 0xfb,
2858 0x5e, 0x72, 0x40, 0x47, 0x90, 0xa2, 0x18, 0x10, 0x14, 0xf3, 0xb9, 0x4a,
2859 0x4e, 0x97, 0xd1, 0x17, 0xb4, 0x38, 0x13, 0x03, 0x68, 0xcc, 0x39, 0xdb,
2860 0xb2, 0xd1, 0x98, 0x06, 0x5a, 0xe3, 0x98, 0x65, 0x47, 0x92, 0x6c, 0xd2,
2861 0x16, 0x2f, 0x40, 0xa2, 0x9f, 0x0c, 0x3c, 0x87, 0x45, 0xc0, 0xf5, 0x0f,
2862 0xba, 0x38, 0x52, 0xe5, 0x66, 0xd4, 0x45, 0x75, 0xc2, 0x9d, 0x39, 0xa0,
2863 0x3f, 0x0c, 0xda, 0x72, 0x19, 0x84, 0xb6, 0xf4, 0x40, 0x59, 0x1f, 0x35,
2864 0x5e, 0x12, 0xd4, 0x39, 0xff, 0x15, 0x0a, 0xab, 0x76, 0x13, 0x49, 0x9d,
2865 0xbd, 0x49, 0xad, 0xab, 0xc8, 0x67, 0x6e, 0xef, 0x02, 0x3b, 0x15, 0xb6,
2866 0x5b, 0xfc, 0x5c, 0xa0, 0x69, 0x48, 0x10, 0x9f, 0x23, 0xf3, 0x50, 0xdb,
2867 0x82, 0x12, 0x35, 0x35, 0xeb, 0x8a, 0x74, 0x33, 0xbd, 0xab, 0xcb, 0x90,
2868 0x92, 0x71, 0xa6, 0xec, 0xbc, 0xb5, 0x8b, 0x93, 0x6a, 0x88, 0xcd, 0x4e,
2869 0x8f, 0x2e, 0x6f, 0xf5, 0x80, 0x01, 0x75, 0xf1, 0x13, 0x25, 0x3d, 0x8f,
2870 0xa9, 0xca, 0x88, 0x85, 0xc2, 0xf5, 0x52, 0xe6, 0x57, 0xdc, 0x60, 0x3f,
2871 0x25, 0x2e, 0x1a, 0x8e, 0x30, 0x8f, 0x76, 0xf0, 0xbe, 0x79, 0xe2, 0xfb,
2872 0x8f, 0x5d, 0x5f, 0xbb, 0xe2, 0xe3, 0x0e, 0xca, 0xdd, 0x22, 0x07, 0x23,
2873 0xc8, 0xc0, 0xae, 0xa8, 0x07, 0x8c, 0xdf, 0xcb, 0x38, 0x68, 0x26, 0x3f,
2874 0xf8, 0xf0, 0x94, 0x00, 0x54, 0xda, 0x48, 0x78, 0x18, 0x93, 0xa7, 0xe4,
2875 0x9a, 0xd5, 0xaf, 0xf4, 0xaf, 0x30, 0x0c, 0xd8, 0x04, 0xa6, 0xb6, 0x27,
2876 0x9a, 0xb3, 0xff, 0x3a, 0xfb, 0x64, 0x49, 0x1c, 0x85, 0x19, 0x4a, 0xab,
2877 0x76, 0x0d, 0x58, 0xa6, 0x06, 0x65, 0x4f, 0x9f, 0x44, 0x00, 0xe8, 0xb3,
2878 0x85, 0x91, 0x35, 0x6f, 0xbf, 0x64, 0x25, 0xac, 0xa2, 0x6d, 0xc8, 0x52,
2879 0x44, 0x25, 0x9f, 0xf2, 0xb1, 0x9c, 0x41, 0xb9, 0xf9, 0x6f, 0x3c, 0xa9,
2880 0xec, 0x1d, 0xde, 0x43, 0x4d, 0xa7, 0xd2, 0xd3, 0x92, 0xb9, 0x05, 0xdd,
2881 0xf3, 0xd1, 0xf9, 0xaf, 0x93, 0xd1, 0xaf, 0x59, 0x50, 0xbd, 0x49, 0x3f,
2882 0x5a, 0xa7, 0x31, 0xb4, 0x05, 0x6d, 0xf3, 0x1b, 0xd2, 0x67, 0xb6, 0xb9,
2883 0x0a, 0x07, 0x98, 0x31, 0xaa, 0xf5, 0x79, 0xbe, 0x0a, 0x39, 0x01, 0x31,
2884 0x37, 0xaa, 0xc6, 0xd4, 0x04, 0xf5, 0x18, 0xcf, 0xd4, 0x68, 0x40, 0x64,
2885 0x7e, 0x78, 0xbf, 0xe7, 0x06, 0xca, 0x4c, 0xf5, 0xe9, 0xc5, 0x45, 0x3e,
2886 0x9f, 0x7c, 0xfd, 0x2b, 0x8b, 0x4c, 0x8d, 0x16, 0x9a, 0x44, 0xe5, 0x5c,
2887 0x88, 0xd4, 0xa9, 0xa7, 0xf9, 0x47, 0x42, 0x41, 0xe2, 0x21, 0xaf, 0x44,
2888 0x86, 0x00, 0x18, 0xab, 0x08, 0x56, 0x97, 0x2e, 0x19, 0x4c, 0xd9, 0x34
2891 static QUIC_PKT_HDR tx_script_1_hdr = {
2892 QUIC_PKT_TYPE_INITIAL, /* type */
2900 {8, {0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51, 0x57, 0x08}}, /* DCID */
2901 { 0, {0} }, /* SCID */
2903 NULL, 0, /* Token */
2904 5555, NULL /* Len/Data */
2907 static const OSSL_QTX_IOVEC tx_script_1_iovec[] = {
2908 { tx_script_1_body, sizeof(tx_script_1_body) }
2911 static const OSSL_QTX_PKT tx_script_1_pkt = {
2914 OSSL_NELEM(tx_script_1_iovec),
2920 static const struct tx_test_op tx_script_1[] = {
2921 TX_OP_PROVIDE_SECRET_INITIAL(tx_script_1_hdr.dst_conn_id, 0)
2922 TX_OP_WRITE_CHECK(1)
2926 /* 2. RFC 9001 - A.3 Server Initial */
2927 static const unsigned char tx_script_2_body[] = {
2928 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x40, 0x5a, 0x02, 0x00, 0x00,
2929 0x56, 0x03, 0x03, 0xee, 0xfc, 0xe7, 0xf7, 0xb3, 0x7b, 0xa1, 0xd1, 0x63,
2930 0x2e, 0x96, 0x67, 0x78, 0x25, 0xdd, 0xf7, 0x39, 0x88, 0xcf, 0xc7, 0x98,
2931 0x25, 0xdf, 0x56, 0x6d, 0xc5, 0x43, 0x0b, 0x9a, 0x04, 0x5a, 0x12, 0x00,
2932 0x13, 0x01, 0x00, 0x00, 0x2e, 0x00, 0x33, 0x00, 0x24, 0x00, 0x1d, 0x00,
2933 0x20, 0x9d, 0x3c, 0x94, 0x0d, 0x89, 0x69, 0x0b, 0x84, 0xd0, 0x8a, 0x60,
2934 0x99, 0x3c, 0x14, 0x4e, 0xca, 0x68, 0x4d, 0x10, 0x81, 0x28, 0x7c, 0x83,
2935 0x4d, 0x53, 0x11, 0xbc, 0xf3, 0x2b, 0xb9, 0xda, 0x1a, 0x00, 0x2b, 0x00,
2939 static const unsigned char tx_script_2_dgram[] = {
2941 0xcf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a,
2942 0x42, 0x62, 0xb5, 0x00, 0x40, 0x75, 0xc0, 0xd9, 0x5a, 0x48, 0x2c, 0xd0,
2943 0x99, 0x1c, 0xd2, 0x5b, 0x0a, 0xac, 0x40, 0x6a, 0x58, 0x16, 0xb6, 0x39,
2944 0x41, 0x00, 0xf3, 0x7a, 0x1c, 0x69, 0x79, 0x75, 0x54, 0x78, 0x0b, 0xb3,
2945 0x8c, 0xc5, 0xa9, 0x9f, 0x5e, 0xde, 0x4c, 0xf7, 0x3c, 0x3e, 0xc2, 0x49,
2946 0x3a, 0x18, 0x39, 0xb3, 0xdb, 0xcb, 0xa3, 0xf6, 0xea, 0x46, 0xc5, 0xb7,
2947 0x68, 0x4d, 0xf3, 0x54, 0x8e, 0x7d, 0xde, 0xb9, 0xc3, 0xbf, 0x9c, 0x73,
2948 0xcc, 0x3f, 0x3b, 0xde, 0xd7, 0x4b, 0x56, 0x2b, 0xfb, 0x19, 0xfb, 0x84,
2949 0x02, 0x2f, 0x8e, 0xf4, 0xcd, 0xd9, 0x37, 0x95, 0xd7, 0x7d, 0x06, 0xed,
2950 0xbb, 0x7a, 0xaf, 0x2f, 0x58, 0x89, 0x18, 0x50, 0xab, 0xbd, 0xca, 0x3d,
2951 0x20, 0x39, 0x8c, 0x27, 0x64, 0x56, 0xcb, 0xc4, 0x21, 0x58, 0x40, 0x7d,
2955 static QUIC_PKT_HDR tx_script_2_hdr = {
2956 QUIC_PKT_TYPE_INITIAL, /* type */
2964 { 0, {0} }, /* DCID */
2965 {8, {0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5}}, /* SCID */
2967 NULL, 0, /* Token */
2968 5555, NULL /* Len/Data */
2971 static const OSSL_QTX_IOVEC tx_script_2_iovec[] = {
2972 { tx_script_2_body, sizeof(tx_script_2_body) }
2975 static const OSSL_QTX_PKT tx_script_2_pkt = {
2978 OSSL_NELEM(tx_script_2_iovec),
2984 static const struct tx_test_op tx_script_2[] = {
2985 TX_OP_PROVIDE_SECRET_INITIAL(tx_script_1_hdr.dst_conn_id, 1)
2986 TX_OP_WRITE_CHECK(2)
2990 #ifndef OPENSSL_NO_CHACHA
2991 /* 3. RFC 9001 - A.5 ChaCha20-Poly1305 Short Header Packet */
2992 static const unsigned char tx_script_3_body[] = {
2996 static const unsigned char tx_script_3_dgram[] = {
2997 0x4c, 0xfe, 0x41, 0x89, 0x65, 0x5e, 0x5c, 0xd5, 0x5c, 0x41, 0xf6, 0x90,
2998 0x80, 0x57, 0x5d, 0x79, 0x99, 0xc2, 0x5a, 0x5b, 0xfb
3000 static const unsigned char tx_script_3_secret[] = {
3001 0x9a, 0xc3, 0x12, 0xa7, 0xf8, 0x77, 0x46, 0x8e, 0xbe, 0x69, 0x42, 0x27,
3002 0x48, 0xad, 0x00, 0xa1, 0x54, 0x43, 0xf1, 0x82, 0x03, 0xa0, 0x7d, 0x60,
3003 0x60, 0xf6, 0x88, 0xf3, 0x0f, 0x21, 0x63, 0x2b
3006 static QUIC_PKT_HDR tx_script_3_hdr = {
3007 QUIC_PKT_TYPE_1RTT, /* type */
3015 { 0, {0} }, /* DCID */
3016 { 0, {0} }, /* SCID */
3018 NULL, 0, /* Token */
3019 5555, NULL /* Len/Data */
3022 static const OSSL_QTX_IOVEC tx_script_3_iovec[] = {
3023 { tx_script_3_body, sizeof(tx_script_3_body) }
3026 static const OSSL_QTX_PKT tx_script_3_pkt = {
3029 OSSL_NELEM(tx_script_3_iovec),
3035 static const struct tx_test_op tx_script_3[] = {
3036 TX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT, QRL_SUITE_CHACHA20POLY1305, tx_script_3_secret)
3037 TX_OP_WRITE_CHECK(3)
3040 #endif /* !defined(OPENSSL_NO_CHACHA) */
3042 /* 4. Real World - AES-128-GCM Key Update */
3043 static const unsigned char tx_script_4_secret[] = {
3044 0x70, 0x82, 0xc0, 0x45, 0x61, 0x4d, 0xfe, 0x04, 0x76, 0xa6, 0x4e, 0xf0,
3045 0x38, 0xe6, 0x63, 0xd9, 0xdd, 0x4a, 0x75, 0x16, 0xa8, 0xa0, 0x06, 0x5a,
3046 0xf2, 0x56, 0xfd, 0x84, 0x78, 0xfd, 0xf6, 0x5e
3049 static const unsigned char tx_script_4a_body[] = {
3050 0x02, 0x03, 0x09, 0x00, 0x03, 0x0c, 0x00, 0x36, 0x49, 0x27, 0x6d, 0x20,
3051 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x6e,
3052 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65,
3055 static const unsigned char tx_script_4a_dgram[] = {
3056 0x47, 0x6e, 0x4e, 0xbd, 0x49, 0x7e, 0xbd, 0x15, 0x1c, 0xd1, 0x3e, 0xc8,
3057 0xcd, 0x43, 0x87, 0x6b, 0x84, 0xdb, 0xeb, 0x06, 0x8b, 0x8a, 0xae, 0x37,
3058 0xed, 0x9c, 0xeb, 0xbc, 0xcf, 0x0d, 0x3c, 0xf0, 0xa1, 0x6f, 0xee, 0xd2,
3059 0x7c, 0x07, 0x6e, 0xd1, 0xbe, 0x40, 0x6a, 0xd4, 0x53, 0x38, 0x9e, 0x63,
3060 0xb5, 0xde, 0x35, 0x09, 0xb2, 0x78, 0x94, 0xe4, 0x2b, 0x37
3063 static QUIC_PKT_HDR tx_script_4a_hdr = {
3064 QUIC_PKT_TYPE_1RTT, /* type */
3072 { 4, {0x6e, 0x4e, 0xbd, 0x49} }, /* DCID */
3073 { 0, {0} }, /* SCID */
3075 NULL, 0, /* Token */
3076 5555, NULL /* Len/Data */
3079 static const OSSL_QTX_IOVEC tx_script_4a_iovec[] = {
3080 { tx_script_4a_body, sizeof(tx_script_4a_body) }
3083 static const OSSL_QTX_PKT tx_script_4a_pkt = {
3086 OSSL_NELEM(tx_script_4a_iovec),
3092 static const unsigned char tx_script_4b_body[] = {
3093 0x02, 0x04, 0x07, 0x00, 0x00, 0x0c, 0x00, 0x40, 0x51, 0x49, 0x27, 0x6d,
3094 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f,
3095 0x6e, 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65,
3098 static const unsigned char tx_script_4b_dgram[] = {
3099 0x58, 0x6e, 0x4e, 0xbd, 0x49, 0xa4, 0x43, 0x33, 0xea, 0x11, 0x3a, 0x6c,
3100 0xf5, 0x20, 0xef, 0x55, 0x8d, 0x25, 0xe2, 0x3b, 0x0e, 0x8c, 0xea, 0x17,
3101 0xfc, 0x2b, 0x7a, 0xab, 0xfa, 0x3d, 0x07, 0xda, 0xa7, 0x7c, 0xc7, 0x47,
3102 0x82, 0x02, 0x46, 0x40, 0x4f, 0x01, 0xad, 0xb2, 0x9d, 0x97, 0xdb, 0xfc,
3103 0x9c, 0x4b, 0x46, 0xb1, 0x5a, 0x7f, 0x0b, 0x12, 0xaf, 0x49, 0xdf,
3106 static QUIC_PKT_HDR tx_script_4b_hdr = {
3107 QUIC_PKT_TYPE_1RTT, /* type */
3115 { 4, {0x6e, 0x4e, 0xbd, 0x49} }, /* DCID */
3116 { 0, {0} }, /* SCID */
3118 NULL, 0, /* Token */
3119 5555, NULL /* Len/Data */
3122 static const OSSL_QTX_IOVEC tx_script_4b_iovec[] = {
3123 { tx_script_4b_body, sizeof(tx_script_4b_body) }
3126 static const OSSL_QTX_PKT tx_script_4b_pkt = {
3129 OSSL_NELEM(tx_script_4b_iovec),
3135 static const unsigned char tx_script_4c_body[] = {
3136 0x02, 0x09, 0x0e, 0x00, 0x00, 0x0c, 0x00, 0x40, 0xd8, 0x49, 0x27, 0x6d,
3137 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f,
3138 0x6e, 0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65,
3141 static const unsigned char tx_script_4c_dgram[] = {
3142 0x49, 0x6e, 0x4e, 0xbd, 0x49, 0x4d, 0xd9, 0x85, 0xba, 0x26, 0xfb, 0x68,
3143 0x83, 0x9b, 0x94, 0x34, 0x7d, 0xc1, 0x7a, 0x05, 0xb7, 0x38, 0x43, 0x21,
3144 0xe2, 0xec, 0x2b, 0xc1, 0x81, 0x74, 0x2d, 0xda, 0x24, 0xba, 0xbd, 0x99,
3145 0x69, 0xd2, 0x56, 0xfa, 0xae, 0x29, 0x24, 0xb2, 0xaa, 0xda, 0xbd, 0x82,
3146 0x80, 0xf1, 0xbb, 0x6a, 0xfd, 0xae, 0xda, 0x0e, 0x09, 0xcf, 0x09,
3149 static QUIC_PKT_HDR tx_script_4c_hdr = {
3150 QUIC_PKT_TYPE_1RTT, /* type */
3158 { 4, {0x6e, 0x4e, 0xbd, 0x49} }, /* DCID */
3159 { 0, {0} }, /* SCID */
3161 NULL, 0, /* Token */
3162 5555, NULL /* Len/Data */
3165 static const OSSL_QTX_IOVEC tx_script_4c_iovec[] = {
3166 { tx_script_4c_body, sizeof(tx_script_4c_body) }
3169 static const OSSL_QTX_PKT tx_script_4c_pkt = {
3172 OSSL_NELEM(tx_script_4c_iovec),
3178 static const struct tx_test_op tx_script_4[] = {
3179 TX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT, QRL_SUITE_AES128GCM, tx_script_4_secret)
3180 TX_OP_WRITE_CHECK(4a)
3182 TX_OP_WRITE_CHECK(4b)
3184 TX_OP_WRITE_CHECK(4c)
3188 /* 5. Real World - Retry Packet */
3189 static const unsigned char tx_script_5_body[] = {
3191 0x92, 0xe7, 0xc6, 0xd8, 0x09, 0x65, 0x72, 0x55, 0xe5, 0xe2, 0x73, 0x04,
3192 0xf3, 0x07, 0x5b, 0x21, 0x9f, 0x50, 0xcb, 0xbc, 0x79, 0xc5, 0x77, 0x5a,
3193 0x29, 0x43, 0x65, 0x49, 0xf0, 0x6e, 0xc1, 0xc0, 0x3a, 0xe8, 0xca, 0xd2,
3194 0x44, 0x69, 0xdd, 0x23, 0x31, 0x93, 0x52, 0x02, 0xf7, 0x42, 0x07, 0x78,
3195 0xa1, 0x81, 0x61, 0x9c, 0x39, 0x07, 0x18, 0x69, 0x6e, 0x4f, 0xdc, 0xa0,
3196 0xbe, 0x4b, 0xe5, 0xf2, 0xe9, 0xd2, 0xa4, 0xa7, 0x34, 0x55, 0x5e, 0xf3,
3197 0xf8, 0x9c, 0x49, 0x8f, 0x0c, 0xc8, 0xb2, 0x75, 0x4b, 0x4d, 0x2f, 0xfe,
3198 0x05, 0x5a, 0xdd, 0x4b, 0xe6, 0x14, 0xb4, 0xd2, 0xc0, 0x93, 0x6e, 0x0e,
3199 0x84, 0x41, 0x4d, 0x31,
3200 /* Retry Integrity Tag */
3201 0x43, 0x8e, 0xab, 0xcd, 0xce, 0x24, 0x44, 0xc2, 0x20, 0xe1, 0xe2, 0xc8,
3202 0xae, 0xa3, 0x8d, 0x4e,
3205 static const unsigned char tx_script_5_dgram[] = {
3206 0xf0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0xa9, 0x20, 0xcc, 0xc2, 0x92,
3207 0xe7, 0xc6, 0xd8, 0x09, 0x65, 0x72, 0x55, 0xe5, 0xe2, 0x73, 0x04, 0xf3,
3208 0x07, 0x5b, 0x21, 0x9f, 0x50, 0xcb, 0xbc, 0x79, 0xc5, 0x77, 0x5a, 0x29,
3209 0x43, 0x65, 0x49, 0xf0, 0x6e, 0xc1, 0xc0, 0x3a, 0xe8, 0xca, 0xd2, 0x44,
3210 0x69, 0xdd, 0x23, 0x31, 0x93, 0x52, 0x02, 0xf7, 0x42, 0x07, 0x78, 0xa1,
3211 0x81, 0x61, 0x9c, 0x39, 0x07, 0x18, 0x69, 0x6e, 0x4f, 0xdc, 0xa0, 0xbe,
3212 0x4b, 0xe5, 0xf2, 0xe9, 0xd2, 0xa4, 0xa7, 0x34, 0x55, 0x5e, 0xf3, 0xf8,
3213 0x9c, 0x49, 0x8f, 0x0c, 0xc8, 0xb2, 0x75, 0x4b, 0x4d, 0x2f, 0xfe, 0x05,
3214 0x5a, 0xdd, 0x4b, 0xe6, 0x14, 0xb4, 0xd2, 0xc0, 0x93, 0x6e, 0x0e, 0x84,
3215 0x41, 0x4d, 0x31, 0x43, 0x8e, 0xab, 0xcd, 0xce, 0x24, 0x44, 0xc2, 0x20,
3216 0xe1, 0xe2, 0xc8, 0xae, 0xa3, 0x8d, 0x4e,
3219 static QUIC_PKT_HDR tx_script_5_hdr = {
3220 QUIC_PKT_TYPE_RETRY, /* type */
3228 { 0, {0} }, /* DCID */
3229 { 4, {0xa9, 0x20, 0xcc, 0xc2} }, /* SCID */
3231 NULL, 0, /* Token */
3232 5555, NULL /* Len/Data */
3235 static const OSSL_QTX_IOVEC tx_script_5_iovec[] = {
3236 { tx_script_5_body, sizeof(tx_script_5_body) }
3239 static const OSSL_QTX_PKT tx_script_5_pkt = {
3242 OSSL_NELEM(tx_script_5_iovec),
3248 static const struct tx_test_op tx_script_5[] = {
3249 TX_OP_WRITE_CHECK(5)
3253 /* 6. Real World - Version Negotiation Packet */
3254 static const unsigned char tx_script_6_body[] = {
3255 0x00, 0x00, 0x00, 0x01, /* Supported Version: 1 */
3256 0xaa, 0x9a, 0x3a, 0x9a /* Supported Version: Random (GREASE) */
3259 static const unsigned char tx_script_6_dgram[] = {
3261 0x00, 0x00, 0x00, 0x00, /* Version 0 (Version Negotiation) */
3263 0x0c, 0x35, 0x3c, 0x1b, 0x97, 0xca, /* SCID */
3264 0xf8, 0x99, 0x11, 0x39, 0xad, 0x79,
3266 0x00, 0x00, 0x00, 0x01, /* Supported Version: 1 */
3267 0xaa, 0x9a, 0x3a, 0x9a /* Supported Version: Random (GREASE) */
3270 static QUIC_PKT_HDR tx_script_6_hdr = {
3271 QUIC_PKT_TYPE_VERSION_NEG, /* type */
3279 { 0, {0} }, /* DCID */
3280 { 12, {0x35, 0x3c, 0x1b, 0x97, 0xca, 0xf8, 0x99,
3281 0x11, 0x39, 0xad, 0x79, 0x1f} }, /* SCID */
3283 NULL, 0, /* Token */
3284 5555, NULL /* Len/Data */
3287 static const OSSL_QTX_IOVEC tx_script_6_iovec[] = {
3288 { tx_script_6_body, sizeof(tx_script_6_body) }
3291 static const OSSL_QTX_PKT tx_script_6_pkt = {
3294 OSSL_NELEM(tx_script_6_iovec),
3300 static const struct tx_test_op tx_script_6[] = {
3301 TX_OP_WRITE_CHECK(6)
3305 static const struct tx_test_op *const tx_scripts[] = {
3308 #ifndef OPENSSL_NO_CHACHA
3316 static int tx_run_script(const struct tx_test_op *script)
3319 const struct tx_test_op *op = script;
3320 OSSL_QTX *qtx = NULL;
3322 OSSL_QTX_ARGS args = {0};
3326 if (!TEST_ptr(qtx = ossl_qtx_new(&args)))
3329 for (; op->op != TX_TEST_OP_END; ++op)
3331 case TX_TEST_OP_PROVIDE_SECRET:
3332 if (!TEST_true(ossl_qtx_provide_secret(qtx, op->enc_level,
3334 op->buf, op->buf_len)))
3337 case TX_TEST_OP_PROVIDE_SECRET_INITIAL:
3338 if (!TEST_true(ossl_quic_provide_initial_secret(NULL, NULL,
3344 case TX_TEST_OP_DISCARD_EL:
3345 if (!TEST_true(ossl_qtx_discard_enc_level(qtx, op->enc_level)))
3348 case TX_TEST_OP_WRITE:
3351 = ossl_quic_pkt_type_to_enc_level(op->pkt->hdr->type);
3352 uint64_t old_value = 0, new_value, max_value;
3354 if (enc_level < QUIC_ENC_LEVEL_NUM) { /* encrypted packet */
3355 max_value = ossl_qtx_get_max_epoch_pkt_count(qtx, enc_level);
3357 if (!TEST_uint64_t_lt(max_value, UINT64_MAX))
3360 old_value = ossl_qtx_get_cur_epoch_pkt_count(qtx, enc_level);
3361 if (!TEST_uint64_t_lt(old_value, UINT64_MAX))
3365 if (!TEST_true(ossl_qtx_write_pkt(qtx, op->pkt)))
3368 if (enc_level < QUIC_ENC_LEVEL_NUM) {
3369 new_value = ossl_qtx_get_cur_epoch_pkt_count(qtx, enc_level);
3370 if (!TEST_uint64_t_eq(old_value + 1, new_value))
3375 case TX_TEST_OP_CHECK_DGRAM:
3376 if (!TEST_true(ossl_qtx_pop_net(qtx, &msg)))
3379 if (!TEST_mem_eq(msg.data, msg.data_len, op->buf, op->buf_len))
3383 case TX_TEST_OP_CHECK_NO_DGRAM:
3384 if (!TEST_false(ossl_qtx_pop_net(qtx, &msg)))
3387 case TX_TEST_OP_KEY_UPDATE:
3388 if (!TEST_true(ossl_qtx_trigger_key_update(qtx)))
3404 static int test_tx_script(int idx)
3406 return tx_run_script(tx_scripts[idx]);
3409 int setup_tests(void)
3411 ADD_ALL_TESTS(test_rx_script, OSSL_NELEM(rx_scripts));
3413 * Each instance of this test is executed multiple times to get enough
3414 * statistical coverage for our statistical test, as well as for each
3415 * supported key type.
3417 * We call the statistical test as the last index in the wire_pkt_hdr
3418 * test rather than as a separate case, as it needs to execute last
3419 * and otherwise random test ordering will cause itt to randomly fail.
3421 ADD_ALL_TESTS(test_wire_pkt_hdr, NUM_WIRE_PKT_HDR_TESTS + 1);
3422 ADD_ALL_TESTS(test_tx_script, OSSL_NELEM(tx_scripts));