xref: /freebsd/crypto/openssl/test/quic_record_test.c (revision f25b8c9fb4f58cf61adb47d7570abe7caa6d385d)
1 /*
2  * Copyright 2022-2025 The OpenSSL Project Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License 2.0 (the "License").  You may not use
5  * this file except in compliance with the License.  You can obtain a copy
6  * in the file LICENSE in the source distribution or at
7  * https://www.openssl.org/source/license.html
8  */
9 
10 #include "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"
16 #include "testutil.h"
17 #include "quic_record_test_util.h"
18 
19 static const QUIC_CONN_ID empty_conn_id = { 0, { 0 } };
20 
21 #define RX_TEST_OP_END 0 /* end of script */
22 #define RX_TEST_OP_SET_SCID_LEN 1 /* change SCID length */
23 #define RX_TEST_OP_SET_INIT_LARGEST_PN 2 /* set initial largest PN */
24 #define RX_TEST_OP_SET_RX_DCID 3 /* register an RX DCID */
25 #define RX_TEST_OP_INJECT 4 /* inject a datagram into demux */
26 #define RX_TEST_OP_PROVIDE_SECRET 5 /* provide RX secret */
27 #define RX_TEST_OP_PROVIDE_SECRET_INITIAL 6 /* provide RX secret for initial */
28 #define RX_TEST_OP_DISCARD_EL 7 /* discard an encryption level */
29 #define RX_TEST_OP_CHECK_PKT 8 /* read packet, compare to expected */
30 #define RX_TEST_OP_CHECK_NO_PKT 9 /* check no packet is available to read */
31 #define RX_TEST_OP_CHECK_KEY_EPOCH 10 /* check key epoch value matches */
32 #define RX_TEST_OP_KEY_UPDATE_TIMEOUT 11 /* complete key update process */
33 #define RX_TEST_OP_SET_INIT_KEY_PHASE 12 /* initial Key Phase bit value */
34 #define RX_TEST_OP_CHECK_PKT_EPOCH 13 /* check read key epoch matches */
35 #define RX_TEST_OP_ALLOW_1RTT 14 /* allow 1RTT packet processing */
36 
37 struct rx_test_op {
38     unsigned char op;
39     unsigned char subop;
40     const unsigned char *buf;
41     size_t buf_len;
42     const QUIC_PKT_HDR *hdr;
43     uint32_t enc_level, suite_id;
44     QUIC_PN largest_pn;
45     const QUIC_CONN_ID *dcid;
46     int (*new_qrx)(QUIC_DEMUX **demux, OSSL_QRX **qrx);
47 
48     /* For frame checking */
49 };
50 
51 #define RX_OP_END \
52     { RX_TEST_OP_END }
53 #define RX_OP_SET_SCID_LEN(scid_len) \
54     { RX_TEST_OP_SET_SCID_LEN, 0, NULL, 0, NULL, (scid_len), 0, 0, NULL, NULL },
55 #define RX_OP_SET_INIT_LARGEST_PN(largest_pn) \
56     { RX_TEST_OP_SET_INIT_LARGEST_PN, 0, NULL, 0, NULL, 0, 0, (largest_pn), NULL, NULL },
57 #define RX_OP_SET_RX_DCID(dcid) \
58     { RX_TEST_OP_SET_RX_DCID, 0, NULL, 0, NULL, 0, 0, 0, &(dcid), NULL },
59 #define RX_OP_INJECT(dgram) \
60     { RX_TEST_OP_INJECT, 0, (dgram), sizeof(dgram), NULL, 0, 0, 0, NULL },
61 #define RX_OP_PROVIDE_SECRET(el, suite, key)              \
62     {                                                     \
63         RX_TEST_OP_PROVIDE_SECRET, 0, (key), sizeof(key), \
64         NULL, (el), (suite), 0, NULL, NULL                \
65     },
66 #define RX_OP_PROVIDE_SECRET_INITIAL(dcid) \
67     { RX_TEST_OP_PROVIDE_SECRET_INITIAL, 0, NULL, 0, NULL, 0, 0, 0, &(dcid), NULL },
68 #define RX_OP_DISCARD_EL(el) \
69     { RX_TEST_OP_DISCARD_EL, 0, NULL, 0, NULL, (el), 0, 0, NULL, NULL },
70 #define RX_OP_CHECK_PKT(expect_hdr, expect_body)                     \
71     {                                                                \
72         RX_TEST_OP_CHECK_PKT, 0, (expect_body), sizeof(expect_body), \
73         &(expect_hdr), 0, 0, 0, NULL, NULL                           \
74     },
75 #define RX_OP_CHECK_NO_PKT() \
76     { RX_TEST_OP_CHECK_NO_PKT, 0, NULL, 0, NULL, 0, 0, 0, NULL, NULL },
77 #define RX_OP_CHECK_KEY_EPOCH(expected) \
78     { RX_TEST_OP_CHECK_KEY_EPOCH, 0, NULL, 0, NULL, 0, 0, (expected), NULL },
79 #define RX_OP_KEY_UPDATE_TIMEOUT(normal) \
80     { RX_TEST_OP_KEY_UPDATE_TIMEOUT, 0, NULL, 0, NULL, (normal), 0, 0, NULL },
81 #define RX_OP_SET_INIT_KEY_PHASE(kp_bit) \
82     { RX_TEST_OP_SET_INIT_KEY_PHASE, 0, NULL, 0, NULL, (kp_bit), 0, 0, NULL },
83 #define RX_OP_CHECK_PKT_EPOCH(expected) \
84     { RX_TEST_OP_CHECK_PKT_EPOCH, 0, NULL, 0, NULL, 0, 0, (expected), NULL },
85 #define RX_OP_ALLOW_1RTT() \
86     { RX_TEST_OP_ALLOW_1RTT, 0, NULL, 0, NULL, 0, 0, 0, NULL },
87 
88 #define RX_OP_INJECT_N(n) \
89     RX_OP_INJECT(rx_script_##n##_in)
90 #define RX_OP_CHECK_PKT_N(n) \
91     RX_OP_CHECK_PKT(rx_script_##n##_expect_hdr, rx_script_##n##_body)
92 
93 #define RX_OP_INJECT_CHECK(n) \
94     RX_OP_INJECT_N(n)         \
95     RX_OP_CHECK_PKT_N(n)
96 
97 /* 1. RFC 9001 - A.3 Server Initial */
98 static const unsigned char rx_script_1_in[] = {
99     0xcf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a,
100     0x42, 0x62, 0xb5, 0x00, 0x40, 0x75, 0xc0, 0xd9, 0x5a, 0x48, 0x2c, 0xd0,
101     0x99, 0x1c, 0xd2, 0x5b, 0x0a, 0xac, 0x40, 0x6a, 0x58, 0x16, 0xb6, 0x39,
102     0x41, 0x00, 0xf3, 0x7a, 0x1c, 0x69, 0x79, 0x75, 0x54, 0x78, 0x0b, 0xb3,
103     0x8c, 0xc5, 0xa9, 0x9f, 0x5e, 0xde, 0x4c, 0xf7, 0x3c, 0x3e, 0xc2, 0x49,
104     0x3a, 0x18, 0x39, 0xb3, 0xdb, 0xcb, 0xa3, 0xf6, 0xea, 0x46, 0xc5, 0xb7,
105     0x68, 0x4d, 0xf3, 0x54, 0x8e, 0x7d, 0xde, 0xb9, 0xc3, 0xbf, 0x9c, 0x73,
106     0xcc, 0x3f, 0x3b, 0xde, 0xd7, 0x4b, 0x56, 0x2b, 0xfb, 0x19, 0xfb, 0x84,
107     0x02, 0x2f, 0x8e, 0xf4, 0xcd, 0xd9, 0x37, 0x95, 0xd7, 0x7d, 0x06, 0xed,
108     0xbb, 0x7a, 0xaf, 0x2f, 0x58, 0x89, 0x18, 0x50, 0xab, 0xbd, 0xca, 0x3d,
109     0x20, 0x39, 0x8c, 0x27, 0x64, 0x56, 0xcb, 0xc4, 0x21, 0x58, 0x40, 0x7d,
110     0xd0, 0x74, 0xee
111 };
112 
113 static const unsigned char rx_script_1_body[] = {
114     0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x40, 0x5a, 0x02, 0x00, 0x00,
115     0x56, 0x03, 0x03, 0xee, 0xfc, 0xe7, 0xf7, 0xb3, 0x7b, 0xa1, 0xd1, 0x63,
116     0x2e, 0x96, 0x67, 0x78, 0x25, 0xdd, 0xf7, 0x39, 0x88, 0xcf, 0xc7, 0x98,
117     0x25, 0xdf, 0x56, 0x6d, 0xc5, 0x43, 0x0b, 0x9a, 0x04, 0x5a, 0x12, 0x00,
118     0x13, 0x01, 0x00, 0x00, 0x2e, 0x00, 0x33, 0x00, 0x24, 0x00, 0x1d, 0x00,
119     0x20, 0x9d, 0x3c, 0x94, 0x0d, 0x89, 0x69, 0x0b, 0x84, 0xd0, 0x8a, 0x60,
120     0x99, 0x3c, 0x14, 0x4e, 0xca, 0x68, 0x4d, 0x10, 0x81, 0x28, 0x7c, 0x83,
121     0x4d, 0x53, 0x11, 0xbc, 0xf3, 0x2b, 0xb9, 0xda, 0x1a, 0x00, 0x2b, 0x00,
122     0x02, 0x03, 0x04
123 };
124 
125 static const QUIC_CONN_ID rx_script_1_dcid = {
126     8, { 0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51, 0x57, 0x08 }
127 };
128 
129 static const QUIC_PKT_HDR rx_script_1_expect_hdr = {
130     QUIC_PKT_TYPE_INITIAL,
131     0, 0, 2, 0, 1, 0, 0, 1, { 0, { 0 } },
132     { 8, { 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } },
133     { 0, 1, 0, 0 },
134     NULL, 0,
135     99, NULL
136 };
137 
138 static const struct rx_test_op rx_script_1[] = {
139     RX_OP_SET_SCID_LEN(2)
140         RX_OP_SET_INIT_LARGEST_PN(0)
141             RX_OP_SET_RX_DCID(empty_conn_id)
142                 RX_OP_PROVIDE_SECRET_INITIAL(rx_script_1_dcid)
143                     RX_OP_INJECT_CHECK(1)
144                         RX_OP_CHECK_NO_PKT()
145                             RX_OP_END
146 };
147 
148 /* 2. RFC 9001 - A.5 ChaCha20-Poly1305 Short Header Packet */
149 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
150 static const unsigned char rx_script_2_in[] = {
151     0x4c, 0xfe, 0x41, 0x89, 0x65, 0x5e, 0x5c, 0xd5, 0x5c, 0x41, 0xf6, 0x90,
152     0x80, 0x57, 0x5d, 0x79, 0x99, 0xc2, 0x5a, 0x5b, 0xfb
153 };
154 
155 static const unsigned char rx_script_2_secret[] = {
156     0x9a, 0xc3, 0x12, 0xa7, 0xf8, 0x77, 0x46, 0x8e, 0xbe, 0x69, 0x42, 0x27,
157     0x48, 0xad, 0x00, 0xa1, 0x54, 0x43, 0xf1, 0x82, 0x03, 0xa0, 0x7d, 0x60,
158     0x60, 0xf6, 0x88, 0xf3, 0x0f, 0x21, 0x63, 0x2b
159 };
160 
161 static const unsigned char rx_script_2_body[] = {
162     0x01
163 };
164 
165 static const QUIC_PKT_HDR rx_script_2_expect_hdr = {
166     QUIC_PKT_TYPE_1RTT,
167     0, 0, 3, 0, 1, 0, 0, 0, { 0, { 0 } }, { 0, { 0 } },
168     { 0x00, 0xbf, 0xf4, 0x00 },
169     NULL, 0,
170     1, NULL
171 };
172 
173 static const struct rx_test_op rx_script_2[] = {
174     RX_OP_ALLOW_1RTT()
175         RX_OP_SET_INIT_LARGEST_PN(654360560)
176             RX_OP_SET_RX_DCID(empty_conn_id)
177                 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT, QRL_SUITE_CHACHA20POLY1305,
178                     rx_script_2_secret)
179                     RX_OP_INJECT_CHECK(2)
180                         RX_OP_CHECK_NO_PKT()
181                             RX_OP_END
182 };
183 #endif /* !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) */
184 
185 /* 3. Real World - Version Negotiation Response */
186 static const unsigned char rx_script_3_in[] = {
187     0xc7, /* Long; Random Bits */
188     0x00, 0x00, 0x00, 0x00, /* Version 0 (Version Negotiation) */
189     0x00, /* DCID */
190     0x0c, 0x35, 0x3c, 0x1b, 0x97, 0xca, /* SCID */
191     0xf8, 0x99, 0x11, 0x39, 0xad, 0x79,
192     0x1f,
193     0x00, 0x00, 0x00, 0x01, /* Supported Version: 1 */
194     0xaa, 0x9a, 0x3a, 0x9a /* Supported Version: Random (GREASE) */
195 };
196 
197 static const QUIC_PKT_HDR rx_script_3_expect_hdr = {
198     QUIC_PKT_TYPE_VERSION_NEG,
199     0, /* Spin Bit */
200     0, /* Key Phase */
201     0, /* PN Length */
202     0, /* Partial */
203     1, /* Fixed */
204     0, /* Unused */
205     0, /* Reserved */
206     0, /* Version */
207     { 0, { 0 } }, /* DCID */
208     { 12, { 0x35, 0x3c, 0x1b, 0x97, 0xca, 0xf8, /* SCID */
209               0x99, 0x11, 0x39, 0xad, 0x79, 0x1f } },
210     { 0 }, /* PN */
211     NULL, 0, /* Token/Token Len */
212     8, NULL
213 };
214 
215 static const unsigned char rx_script_3_body[] = {
216     0x00, 0x00, 0x00, 0x01,
217     0xaa, 0x9a, 0x3a, 0x9a
218 };
219 
220 static const struct rx_test_op rx_script_3[] = {
221     RX_OP_SET_RX_DCID(empty_conn_id)
222     /*
223      * This is a version negotiation packet, so doesn't have any frames.
224      * However, the depacketizer still handles this sort of packet, so
225      * we still pass the packet to it, to exercise what it does.
226      */
227     RX_OP_INJECT_CHECK(3)
228         RX_OP_CHECK_NO_PKT()
229             RX_OP_END
230 };
231 
232 /* 4. Real World - Retry (S2C) */
233 static const unsigned char rx_script_4_in[] = {
234     0xf0, /* Long; Retry */
235     0x00,
236     0x00,
237     0x00,
238     0x01, /* Version 1 */
239     0x00, /* DCID */
240     0x04,
241     0xad,
242     0x15,
243     0x3f,
244     0xae, /* SCID */
245     /* Retry Token, including 16-byte Retry Integrity Tag */
246     0xf6,
247     0x8b,
248     0x6e,
249     0xa3,
250     0xdc,
251     0x40,
252     0x38,
253     0xc6,
254     0xa5,
255     0x99,
256     0x1c,
257     0xa9,
258     0x77,
259     0xe6,
260     0x1d,
261     0x4f,
262     0x09,
263     0x36,
264     0x12,
265     0x26,
266     0x00,
267     0x56,
268     0x0b,
269     0x29,
270     0x7d,
271     0x5e,
272     0xda,
273     0x39,
274     0xc6,
275     0x61,
276     0x57,
277     0x69,
278     0x15,
279     0xff,
280     0x93,
281     0x39,
282     0x95,
283     0xf0,
284     0x57,
285     0xf1,
286     0xe5,
287     0x36,
288     0x08,
289     0xad,
290     0xd2,
291     0x75,
292     0xa9,
293     0x68,
294     0x29,
295     0xed,
296     0xaa,
297     0x03,
298     0x0e,
299     0x5f,
300     0xac,
301     0xbd,
302     0x26,
303     0x07,
304     0x95,
305     0x4e,
306     0x48,
307     0x61,
308     0x26,
309     0xc5,
310     0xe2,
311     0x6c,
312     0x60,
313     0xbf,
314     0xa8,
315     0x6f,
316     0x51,
317     0xbb,
318     0x1d,
319     0xf7,
320     0x98,
321     0x95,
322     0x3b,
323     0x2c,
324     0x50,
325     0x79,
326     0xcc,
327     0xde,
328     0x27,
329     0x84,
330     0x44,
331     0x9b,
332     0xb2,
333     0x4a,
334     0x94,
335     0x4d,
336     0x4d,
337     0x3d,
338     0xbc,
339     0x00,
340     0x9d,
341     0x69,
342     0xad,
343     0x45,
344     0x89,
345     0x04,
346     0x48,
347     0xca,
348     0x04,
349     0xf6,
350     0x3a,
351     0x62,
352     0xc1,
353     0x38,
354     0x9d,
355     0x82,
356     0xb3,
357     0x45,
358     0x62,
359     0x4c,
360 };
361 
362 static const QUIC_PKT_HDR rx_script_4_expect_hdr = {
363     QUIC_PKT_TYPE_RETRY,
364     0, /* Spin Bit */
365     0, /* Key Phase */
366     0, /* PN Length */
367     0, /* Partial */
368     1, /* Fixed */
369     0, /* Unused */
370     0, /* Reserved */
371     1, /* Version */
372     { 0, { 0 } }, /* DCID */
373     { 4, { 0xad, 0x15, 0x3f, 0xae } }, /* SCID */
374     { 0 }, /* PN */
375     NULL, 0, /* Token/Token Len */
376     114, NULL
377 };
378 
379 static const unsigned char rx_script_4_body[] = {
380     0xf6, 0x8b, 0x6e, 0xa3, 0xdc, 0x40, 0x38, 0xc6, 0xa5, 0x99, 0x1c, 0xa9,
381     0x77, 0xe6, 0x1d, 0x4f, 0x09, 0x36, 0x12, 0x26, 0x00, 0x56, 0x0b, 0x29,
382     0x7d, 0x5e, 0xda, 0x39, 0xc6, 0x61, 0x57, 0x69, 0x15, 0xff, 0x93, 0x39,
383     0x95, 0xf0, 0x57, 0xf1, 0xe5, 0x36, 0x08, 0xad, 0xd2, 0x75, 0xa9, 0x68,
384     0x29, 0xed, 0xaa, 0x03, 0x0e, 0x5f, 0xac, 0xbd, 0x26, 0x07, 0x95, 0x4e,
385     0x48, 0x61, 0x26, 0xc5, 0xe2, 0x6c, 0x60, 0xbf, 0xa8, 0x6f, 0x51, 0xbb,
386     0x1d, 0xf7, 0x98, 0x95, 0x3b, 0x2c, 0x50, 0x79, 0xcc, 0xde, 0x27, 0x84,
387     0x44, 0x9b, 0xb2, 0x4a, 0x94, 0x4d, 0x4d, 0x3d, 0xbc, 0x00, 0x9d, 0x69,
388     0xad, 0x45, 0x89, 0x04, 0x48, 0xca, 0x04, 0xf6, 0x3a, 0x62, 0xc1, 0x38,
389     0x9d, 0x82, 0xb3, 0x45, 0x62, 0x4c
390 };
391 
392 static const struct rx_test_op rx_script_4[] = {
393     RX_OP_SET_RX_DCID(empty_conn_id)
394         RX_OP_INJECT_CHECK(4)
395             RX_OP_CHECK_NO_PKT()
396                 RX_OP_END
397 };
398 
399 /*
400  * 5. Real World - S2C Multiple Packets
401  *      - Initial, Handshake, 1-RTT (AES-128-GCM/SHA256)
402  */
403 static const QUIC_CONN_ID rx_script_5_c2s_init_dcid = {
404     4, { 0xad, 0x15, 0x3f, 0xae }
405 };
406 
407 static const unsigned char rx_script_5_handshake_secret[32] = {
408     0x5e, 0xc6, 0x4a, 0x4d, 0x0d, 0x40, 0x43, 0x3b, 0xd5, 0xbd, 0xe0, 0x19,
409     0x71, 0x47, 0x56, 0xf3, 0x59, 0x3a, 0xa6, 0xc9, 0x3e, 0xdc, 0x81, 0x1e,
410     0xc7, 0x72, 0x9d, 0x83, 0xd8, 0x8f, 0x88, 0x77
411 };
412 
413 static const unsigned char rx_script_5_1rtt_secret[32] = {
414     0x53,
415     0xf2,
416     0x1b,
417     0x94,
418     0xa7,
419     0x65,
420     0xf7,
421     0x76,
422     0xfb,
423     0x06,
424     0x27,
425     0xaa,
426     0xd2,
427     0x3f,
428     0xe0,
429     0x9a,
430     0xbb,
431     0xcf,
432     0x99,
433     0x6f,
434     0x13,
435     0x2c,
436     0x6a,
437     0x37,
438     0x95,
439     0xf3,
440     0xda,
441     0x21,
442     0xcb,
443     0xcb,
444     0xa5,
445     0x26,
446 };
447 
448 static const unsigned char rx_script_5_in[] = {
449     /* First Packet: Initial */
450     0xc4, /* Long, Initial, PN Length=2 bytes */
451     0x00,
452     0x00,
453     0x00,
454     0x01, /* Version */
455     0x00, /* DCID */
456     0x04,
457     0x83,
458     0xd0,
459     0x0a,
460     0x27, /* SCID */
461     0x00, /* Token Length */
462     0x41,
463     0xd2, /* Length (466) */
464     0xe3,
465     0xab, /* PN (0) */
466     0x22,
467     0x35,
468     0x34,
469     0x12,
470     0xcf,
471     0x20,
472     0x2b,
473     0x16,
474     0xaf,
475     0x08,
476     0xd4,
477     0xe0,
478     0x94,
479     0x8b,
480     0x1e,
481     0x62,
482     0xdf,
483     0x31,
484     0x61,
485     0xcc,
486     0xf9,
487     0xfa,
488     0x66,
489     0x4f,
490     0x18,
491     0x61,
492     0x07,
493     0xcb,
494     0x13,
495     0xd3,
496     0xf9,
497     0xbf,
498     0xe2,
499     0x8e,
500     0x25,
501     0x8d,
502     0xd1,
503     0xdf,
504     0x58,
505     0x9c,
506     0x05,
507     0x20,
508     0xf9,
509     0xf2,
510     0x01,
511     0x20,
512     0xe9,
513     0x39,
514     0xc3,
515     0x80,
516     0x77,
517     0xec,
518     0xa4,
519     0x57,
520     0xcf,
521     0x57,
522     0x8c,
523     0xdd,
524     0x68,
525     0x82,
526     0x91,
527     0xfe,
528     0x71,
529     0xa0,
530     0xfa,
531     0x56,
532     0x4c,
533     0xf2,
534     0xe7,
535     0x2b,
536     0xd0,
537     0xc0,
538     0xda,
539     0x81,
540     0xe2,
541     0x39,
542     0xb5,
543     0xf0,
544     0x0f,
545     0xd9,
546     0x07,
547     0xd5,
548     0x67,
549     0x09,
550     0x02,
551     0xf0,
552     0xff,
553     0x74,
554     0xb0,
555     0xa0,
556     0xd9,
557     0x3a,
558     0x7e,
559     0xb6,
560     0x57,
561     0x82,
562     0x47,
563     0x18,
564     0x66,
565     0xed,
566     0xe2,
567     0x18,
568     0x4d,
569     0xc2,
570     0x5c,
571     0x9f,
572     0x05,
573     0x09,
574     0x18,
575     0x24,
576     0x0e,
577     0x3f,
578     0x3d,
579     0xf9,
580     0x15,
581     0x8b,
582     0x08,
583     0xfd,
584     0x25,
585     0xe9,
586     0xc9,
587     0xb7,
588     0x8c,
589     0x18,
590     0x7b,
591     0xf3,
592     0x37,
593     0x58,
594     0xf0,
595     0xf0,
596     0xac,
597     0x33,
598     0x55,
599     0x3f,
600     0x39,
601     0xbc,
602     0x62,
603     0x03,
604     0x8a,
605     0xc0,
606     0xd6,
607     0xcc,
608     0x49,
609     0x47,
610     0xeb,
611     0x85,
612     0xb6,
613     0x72,
614     0xd7,
615     0xf8,
616     0xdc,
617     0x01,
618     0x32,
619     0xec,
620     0x1b,
621     0x4e,
622     0x38,
623     0x6e,
624     0x2c,
625     0xc5,
626     0x80,
627     0xf2,
628     0x43,
629     0x4a,
630     0xf5,
631     0xe5,
632     0xa2,
633     0xf8,
634     0x76,
635     0xa7,
636     0xa8,
637     0x57,
638     0x32,
639     0x67,
640     0x72,
641     0xeb,
642     0x82,
643     0xac,
644     0x3e,
645     0xc0,
646     0x15,
647     0x67,
648     0xac,
649     0x32,
650     0x19,
651     0x18,
652     0x0a,
653     0xef,
654     0x20,
655     0xa1,
656     0xe8,
657     0xaf,
658     0xac,
659     0x33,
660     0x87,
661     0x4c,
662     0x55,
663     0x05,
664     0x9b,
665     0x78,
666     0xf0,
667     0x3a,
668     0xce,
669     0x02,
670     0x28,
671     0x06,
672     0x84,
673     0x61,
674     0x97,
675     0xac,
676     0x87,
677     0x8f,
678     0x25,
679     0xe7,
680     0x1b,
681     0xa3,
682     0x02,
683     0x08,
684     0x4c,
685     0x2e,
686     0xef,
687     0xbd,
688     0x4f,
689     0x82,
690     0xe7,
691     0x37,
692     0x6c,
693     0x27,
694     0x6f,
695     0x85,
696     0xb4,
697     0xbc,
698     0x79,
699     0x38,
700     0x45,
701     0x80,
702     0x8a,
703     0xda,
704     0x2f,
705     0x11,
706     0x11,
707     0xac,
708     0x9c,
709     0xf3,
710     0x93,
711     0xc1,
712     0x49,
713     0x1b,
714     0x94,
715     0x12,
716     0x77,
717     0x07,
718     0xdc,
719     0xbf,
720     0xc2,
721     0xfd,
722     0x8b,
723     0xf6,
724     0xf1,
725     0x66,
726     0x1c,
727     0x7f,
728     0x07,
729     0xbf,
730     0x1f,
731     0xae,
732     0x27,
733     0x6c,
734     0x66,
735     0xe9,
736     0xa3,
737     0x64,
738     0x7a,
739     0x96,
740     0x78,
741     0x45,
742     0xfe,
743     0x4b,
744     0x8c,
745     0x6f,
746     0x7f,
747     0x03,
748     0x47,
749     0x3c,
750     0xd7,
751     0xf7,
752     0x63,
753     0x92,
754     0x58,
755     0x5b,
756     0x63,
757     0x83,
758     0x03,
759     0x05,
760     0xc3,
761     0x5d,
762     0x36,
763     0x62,
764     0x63,
765     0x5e,
766     0xcf,
767     0xfe,
768     0x0a,
769     0x29,
770     0xfa,
771     0xeb,
772     0xc8,
773     0xaf,
774     0xce,
775     0x31,
776     0x07,
777     0x6a,
778     0x09,
779     0x41,
780     0xc0,
781     0x2d,
782     0x98,
783     0x70,
784     0x05,
785     0x3b,
786     0x41,
787     0xfc,
788     0x7d,
789     0x61,
790     0xe0,
791     0x41,
792     0x7d,
793     0x13,
794     0x41,
795     0x51,
796     0x52,
797     0xb4,
798     0x78,
799     0xd5,
800     0x46,
801     0x51,
802     0x3b,
803     0xf1,
804     0xcd,
805     0xcc,
806     0x2e,
807     0x49,
808     0x30,
809     0x8b,
810     0x2a,
811     0xd2,
812     0xe6,
813     0x69,
814     0xb5,
815     0x6b,
816     0x7a,
817     0xf4,
818     0xbb,
819     0xd1,
820     0xf8,
821     0x4a,
822     0xe8,
823     0x53,
824     0x10,
825     0x46,
826     0x85,
827     0x8d,
828     0x66,
829     0x8e,
830     0x2b,
831     0xe8,
832     0x5d,
833     0xab,
834     0x7e,
835     0xfe,
836     0x5a,
837     0x79,
838     0xcf,
839     0xc5,
840     0x0c,
841     0x30,
842     0x9e,
843     0x98,
844     0x02,
845     0xb3,
846     0xa6,
847     0xd5,
848     0xfa,
849     0x25,
850     0xa8,
851     0xc8,
852     0xc1,
853     0xd9,
854     0x51,
855     0x60,
856     0x57,
857     0x5d,
858     0xfe,
859     0x75,
860     0x97,
861     0x05,
862     0xda,
863     0xbb,
864     0xc6,
865     0x6a,
866     0xbe,
867     0x5c,
868     0xa5,
869     0x65,
870     0x0a,
871     0x12,
872     0x33,
873     0x1c,
874     0xdf,
875     0xee,
876     0x08,
877     0xa9,
878     0x13,
879     0x13,
880     0x28,
881     0xce,
882     0x61,
883     0x59,
884     0xd1,
885     0x4e,
886     0xc7,
887     0x74,
888     0xfd,
889     0x64,
890     0xde,
891     0x08,
892     0xce,
893     0xda,
894     0x3f,
895     0xec,
896     0xad,
897     0xc9,
898     0xe1,
899     0xf9,
900     0x1f,
901     0x74,
902     0xf6,
903     0x86,
904     0x37,
905     0x6a,
906     0xa0,
907     0xc8,
908     0x0b,
909     0x1b,
910     0x94,
911     0x98,
912     0x86,
913     0x81,
914     0x3b,
915     0xfc,
916     0x47,
917     0x6c,
918     0xc9,
919     0x3e,
920     0x3c,
921     0x30,
922     0xc5,
923     0x9e,
924     0xb2,
925     0x32,
926     0x47,
927     0xf5,
928     0x0c,
929     0x6f,
930 
931     /* Second Packet: Handshake */
932     0xe6, /* Long, Handshake, PN Length=2 bytes */
933     0x00,
934     0x00,
935     0x00,
936     0x01, /* Version */
937     0x00, /* DCID */
938     0x04,
939     0x83,
940     0xd0,
941     0x0a,
942     0x27, /* SCID */
943     0x42,
944     0x9c, /* Length (668) */
945     0x9c,
946     0x55, /* PN (0) */
947     0x55,
948     0xd4,
949     0x50,
950     0x02,
951     0x1a,
952     0x57,
953     0x84,
954     0x22,
955     0xcd,
956     0x01,
957     0xe5,
958     0x42,
959     0x1b,
960     0x1e,
961     0x06,
962     0xf1,
963     0x86,
964     0xe2,
965     0x90,
966     0xf8,
967     0x9c,
968     0x3d,
969     0xa2,
970     0x7c,
971     0xde,
972     0x2b,
973     0xc9,
974     0x2e,
975     0xcd,
976     0xa8,
977     0x4f,
978     0x5a,
979     0x20,
980     0xca,
981     0x96,
982     0xb6,
983     0x11,
984     0x4b,
985     0xc8,
986     0x71,
987     0x32,
988     0xb5,
989     0xc7,
990     0x1a,
991     0x69,
992     0x7f,
993     0x1e,
994     0x37,
995     0x49,
996     0xfb,
997     0x08,
998     0xce,
999     0x83,
1000     0x5f,
1001     0x02,
1002     0x6d,
1003     0x8a,
1004     0x8f,
1005     0xe7,
1006     0x5d,
1007     0xe1,
1008     0x34,
1009     0x31,
1010     0x22,
1011     0x53,
1012     0x53,
1013     0x32,
1014     0xcb,
1015     0x04,
1016     0x21,
1017     0xce,
1018     0xbc,
1019     0xa5,
1020     0x1b,
1021     0xdd,
1022     0x4d,
1023     0xd5,
1024     0x1c,
1025     0xd6,
1026     0x5d,
1027     0x88,
1028     0x29,
1029     0x5a,
1030     0x19,
1031     0x71,
1032     0x6a,
1033     0xc2,
1034     0xfa,
1035     0xb7,
1036     0xb4,
1037     0x7d,
1038     0xd1,
1039     0x72,
1040     0x93,
1041     0x8f,
1042     0x7c,
1043     0xb5,
1044     0x36,
1045     0x1b,
1046     0xea,
1047     0xf3,
1048     0xf1,
1049     0xd7,
1050     0x6e,
1051     0xd3,
1052     0x91,
1053     0x96,
1054     0x62,
1055     0x4d,
1056     0xc6,
1057     0xec,
1058     0xb7,
1059     0xb0,
1060     0xb7,
1061     0x9b,
1062     0x95,
1063     0x8b,
1064     0x14,
1065     0x8d,
1066     0x1a,
1067     0x0d,
1068     0xb6,
1069     0x3e,
1070     0xec,
1071     0xfe,
1072     0x3b,
1073     0x51,
1074     0xea,
1075     0x1a,
1076     0x05,
1077     0x14,
1078     0x12,
1079     0x93,
1080     0x0e,
1081     0x7e,
1082     0xe6,
1083     0xa2,
1084     0xc5,
1085     0x22,
1086     0x87,
1087     0x65,
1088     0xf8,
1089     0x5d,
1090     0x3c,
1091     0x55,
1092     0x18,
1093     0xcb,
1094     0xe9,
1095     0xef,
1096     0x23,
1097     0x43,
1098     0xfe,
1099     0xe8,
1100     0x0d,
1101     0xb2,
1102     0x0f,
1103     0xc5,
1104     0xf4,
1105     0xb3,
1106     0xde,
1107     0x0c,
1108     0xea,
1109     0xa4,
1110     0x48,
1111     0x8e,
1112     0xbf,
1113     0x1f,
1114     0xc7,
1115     0x99,
1116     0x53,
1117     0x8c,
1118     0xc1,
1119     0x3d,
1120     0xba,
1121     0xf4,
1122     0x8e,
1123     0x8e,
1124     0x02,
1125     0x52,
1126     0xf6,
1127     0x1f,
1128     0xcf,
1129     0x1d,
1130     0xaa,
1131     0xb3,
1132     0xcb,
1133     0x08,
1134     0xc2,
1135     0xe1,
1136     0x70,
1137     0x68,
1138     0x74,
1139     0x78,
1140     0xa9,
1141     0x30,
1142     0x67,
1143     0xba,
1144     0x2b,
1145     0xea,
1146     0x35,
1147     0x63,
1148     0x47,
1149     0xff,
1150     0x29,
1151     0x73,
1152     0x29,
1153     0xc6,
1154     0xe8,
1155     0x08,
1156     0xa9,
1157     0x1e,
1158     0x8f,
1159     0x28,
1160     0x41,
1161     0xa4,
1162     0x24,
1163     0x54,
1164     0x26,
1165     0x5f,
1166     0x42,
1167     0x77,
1168     0xb1,
1169     0x2b,
1170     0x3d,
1171     0x65,
1172     0x67,
1173     0x60,
1174     0xa7,
1175     0x23,
1176     0x0d,
1177     0xa7,
1178     0xf4,
1179     0xd6,
1180     0xe9,
1181     0x4e,
1182     0x58,
1183     0x43,
1184     0x9f,
1185     0x3c,
1186     0x9e,
1187     0x77,
1188     0x61,
1189     0xe5,
1190     0x04,
1191     0x4f,
1192     0x73,
1193     0xc9,
1194     0x10,
1195     0x79,
1196     0xd0,
1197     0xda,
1198     0x3b,
1199     0xc6,
1200     0x19,
1201     0x93,
1202     0x9f,
1203     0x48,
1204     0x3b,
1205     0x76,
1206     0x38,
1207     0xa1,
1208     0x72,
1209     0x49,
1210     0x7d,
1211     0x86,
1212     0x7f,
1213     0xe8,
1214     0x1b,
1215     0xa9,
1216     0x5b,
1217     0xc0,
1218     0x47,
1219     0xa0,
1220     0x9c,
1221     0x3f,
1222     0x65,
1223     0x60,
1224     0x76,
1225     0x59,
1226     0xaf,
1227     0x20,
1228     0x2d,
1229     0x40,
1230     0xa6,
1231     0x80,
1232     0x49,
1233     0x5a,
1234     0x8f,
1235     0x09,
1236     0xf8,
1237     0xf6,
1238     0x97,
1239     0xc1,
1240     0xbd,
1241     0xe1,
1242     0x9f,
1243     0x9b,
1244     0xa2,
1245     0x4c,
1246     0x7b,
1247     0x88,
1248     0xac,
1249     0xbe,
1250     0x4b,
1251     0x11,
1252     0x28,
1253     0xd7,
1254     0x67,
1255     0xe6,
1256     0xad,
1257     0xaf,
1258     0xd0,
1259     0xad,
1260     0x01,
1261     0x29,
1262     0xa4,
1263     0x4a,
1264     0xc4,
1265     0xb8,
1266     0x2e,
1267     0x42,
1268     0x79,
1269     0x24,
1270     0x9e,
1271     0xd5,
1272     0x34,
1273     0xae,
1274     0x45,
1275     0xf1,
1276     0x0b,
1277     0x38,
1278     0x4a,
1279     0x76,
1280     0xfb,
1281     0x50,
1282     0xa2,
1283     0x99,
1284     0xc9,
1285     0x5b,
1286     0x6d,
1287     0xc0,
1288     0xb7,
1289     0x55,
1290     0xd8,
1291     0x8d,
1292     0x49,
1293     0xdd,
1294     0x1b,
1295     0xb8,
1296     0xec,
1297     0x10,
1298     0x57,
1299     0x9e,
1300     0x33,
1301     0xb4,
1302     0x10,
1303     0x16,
1304     0x19,
1305     0xac,
1306     0x69,
1307     0xa2,
1308     0x19,
1309     0x1b,
1310     0xd0,
1311     0x77,
1312     0x45,
1313     0xeb,
1314     0x49,
1315     0x5c,
1316     0xc5,
1317     0x7c,
1318     0xbe,
1319     0x4b,
1320     0x4a,
1321     0x22,
1322     0x5c,
1323     0x3d,
1324     0x0e,
1325     0x6e,
1326     0xe5,
1327     0x4b,
1328     0x36,
1329     0x06,
1330     0x63,
1331     0x03,
1332     0x97,
1333     0xab,
1334     0xed,
1335     0xdc,
1336     0xea,
1337     0x64,
1338     0xc2,
1339     0x70,
1340     0xb6,
1341     0x7e,
1342     0x35,
1343     0xfb,
1344     0x13,
1345     0x66,
1346     0x37,
1347     0xa3,
1348     0x3f,
1349     0x28,
1350     0x16,
1351     0x6c,
1352     0xe7,
1353     0xd4,
1354     0xe6,
1355     0xca,
1356     0x26,
1357     0x0f,
1358     0x19,
1359     0xdd,
1360     0x02,
1361     0xae,
1362     0xc1,
1363     0xcf,
1364     0x18,
1365     0x7d,
1366     0x56,
1367     0xe6,
1368     0x52,
1369     0xf3,
1370     0x37,
1371     0xb5,
1372     0x86,
1373     0x9d,
1374     0x1d,
1375     0x55,
1376     0xb3,
1377     0x95,
1378     0x19,
1379     0x19,
1380     0xa5,
1381     0x44,
1382     0x95,
1383     0x81,
1384     0xed,
1385     0x02,
1386     0x18,
1387     0xf1,
1388     0x85,
1389     0x57,
1390     0x78,
1391     0x28,
1392     0xc4,
1393     0x9a,
1394     0xba,
1395     0xe8,
1396     0x5e,
1397     0x22,
1398     0x8d,
1399     0xc1,
1400     0x7b,
1401     0x2a,
1402     0x8a,
1403     0xc8,
1404     0xb9,
1405     0xdd,
1406     0x82,
1407     0xb2,
1408     0x7b,
1409     0x9f,
1410     0x3d,
1411     0xf5,
1412     0x27,
1413     0x2a,
1414     0x48,
1415     0x53,
1416     0xc7,
1417     0xa0,
1418     0x70,
1419     0x0e,
1420     0x9d,
1421     0x61,
1422     0xaa,
1423     0xe2,
1424     0xad,
1425     0x28,
1426     0xf2,
1427     0xb4,
1428     0xfc,
1429     0x56,
1430     0x6b,
1431     0x89,
1432     0xe7,
1433     0xf9,
1434     0x51,
1435     0xc9,
1436     0xe9,
1437     0xd3,
1438     0x8a,
1439     0x8c,
1440     0x7e,
1441     0x86,
1442     0xdd,
1443     0xba,
1444     0x2f,
1445     0x39,
1446     0xbf,
1447     0x26,
1448     0x62,
1449     0x23,
1450     0xd6,
1451     0x98,
1452     0x6d,
1453     0x3e,
1454     0x72,
1455     0xd7,
1456     0x1b,
1457     0xe1,
1458     0x62,
1459     0x94,
1460     0x35,
1461     0xe2,
1462     0x18,
1463     0x19,
1464     0x46,
1465     0xb8,
1466     0x2c,
1467     0xb5,
1468     0x8f,
1469     0x8f,
1470     0xb0,
1471     0x5b,
1472     0x76,
1473     0x7b,
1474     0x7e,
1475     0xb8,
1476     0xc6,
1477     0xb7,
1478     0xe9,
1479     0x4e,
1480     0x9d,
1481     0x30,
1482     0x68,
1483     0x03,
1484     0x1e,
1485     0x19,
1486     0x73,
1487     0xc5,
1488     0x3e,
1489     0x24,
1490     0xe2,
1491     0x95,
1492     0x60,
1493     0x1b,
1494     0x27,
1495     0x93,
1496     0x7c,
1497     0x17,
1498     0xc2,
1499     0xc6,
1500     0xa3,
1501     0xbd,
1502     0xbd,
1503     0x70,
1504     0xc6,
1505     0x60,
1506     0x59,
1507     0xc8,
1508     0x5c,
1509     0xd7,
1510     0x9a,
1511     0xc4,
1512     0x29,
1513     0xac,
1514     0x0f,
1515     0xaa,
1516     0x0d,
1517     0xa9,
1518     0x92,
1519     0xa3,
1520     0x95,
1521     0xd7,
1522     0x0f,
1523     0x6f,
1524     0x74,
1525     0x99,
1526     0x9b,
1527     0xc1,
1528     0xd3,
1529     0x68,
1530     0x6d,
1531     0xac,
1532     0x82,
1533     0x2d,
1534     0x32,
1535     0x41,
1536     0x9e,
1537     0x0c,
1538     0xf7,
1539     0x31,
1540     0x59,
1541     0x4c,
1542     0x93,
1543     0x1c,
1544     0x3b,
1545     0x71,
1546     0x69,
1547     0xcf,
1548     0xc5,
1549     0xca,
1550     0x2b,
1551     0xdf,
1552     0xe7,
1553     0xaa,
1554     0xfd,
1555     0x1d,
1556     0x71,
1557     0x01,
1558     0x7e,
1559     0x1c,
1560     0x70,
1561     0x62,
1562     0x20,
1563     0x61,
1564     0xf8,
1565     0x35,
1566     0xc1,
1567     0x71,
1568     0xe7,
1569     0x02,
1570     0x0d,
1571     0x88,
1572     0x44,
1573     0xd9,
1574     0x00,
1575     0xc5,
1576     0xcc,
1577     0x63,
1578     0xe4,
1579     0xf0,
1580     0x86,
1581     0xa7,
1582     0xd0,
1583     0xfe,
1584     0xcc,
1585     0xb7,
1586     0x1d,
1587     0xfc,
1588     0x21,
1589     0x61,
1590     0x54,
1591     0x15,
1592     0xea,
1593     0x81,
1594     0x5e,
1595     0xc0,
1596     0x31,
1597     0xfa,
1598     0xbf,
1599     0x7d,
1600     0xb9,
1601     0x3b,
1602     0xa2,
1603     0x1e,
1604     0x42,
1605     0x73,
1606     0x05,
1607     0x3c,
1608     0xdb,
1609     0x21,
1610     0x59,
1611     0x4f,
1612     0x63,
1613 
1614     /* Third Packet: 1-RTT */
1615     0x5f, /* Short, 1-RTT, Spin=0, KP=0, PN Length=2 bytes */
1616     0x68,
1617     0x47, /* PN (0) */
1618     0xa3,
1619     0x3c,
1620     0xa5,
1621     0x27,
1622     0x5e,
1623     0xf9,
1624     0x8d,
1625     0xec,
1626     0xea,
1627     0x6c,
1628     0x09,
1629     0x18,
1630     0x40,
1631     0x80,
1632     0xee,
1633     0x9f,
1634     0x6f,
1635     0x73,
1636     0x5c,
1637     0x49,
1638     0xe3,
1639     0xec,
1640     0xb7,
1641     0x58,
1642     0x05,
1643     0x66,
1644     0x8f,
1645     0xa3,
1646     0x52,
1647     0x37,
1648     0xa1,
1649     0x22,
1650     0x1f,
1651     0xc6,
1652     0x92,
1653     0xd6,
1654     0x59,
1655     0x04,
1656     0x99,
1657     0xcb,
1658     0x44,
1659     0xef,
1660     0x66,
1661     0x05,
1662     0x2d,
1663     0xd0,
1664     0x85,
1665     0x24,
1666     0xbb,
1667     0xe3,
1668     0xa1,
1669     0xd1,
1670     0xbe,
1671     0xf7,
1672     0x54,
1673     0xad,
1674     0x65,
1675     0xf4,
1676     0xd4,
1677     0x59,
1678     0x54,
1679     0x87,
1680     0x4e,
1681     0x22,
1682     0x4f,
1683     0x06,
1684     0x07,
1685     0xa7,
1686     0x8a,
1687     0x14,
1688     0x89,
1689     0xd1,
1690     0x3f,
1691     0xd3,
1692     0xe4,
1693     0x6f,
1694     0x71,
1695     0x8f,
1696     0x9a,
1697     0xd2,
1698     0x3b,
1699     0x61,
1700     0x0a,
1701     0xba,
1702     0x9a,
1703     0x31,
1704     0x56,
1705     0xc7,
1706 };
1707 
1708 static const QUIC_PKT_HDR rx_script_5a_expect_hdr = {
1709     QUIC_PKT_TYPE_INITIAL,
1710     0, /* Spin Bit */
1711     0, /* Key Phase */
1712     2, /* PN Length */
1713     0, /* Partial */
1714     1, /* Fixed */
1715     0, /* Unused */
1716     0, /* Reserved */
1717     1, /* Version */
1718     { 0, { 0 } }, /* DCID */
1719     { 4, { 0x83, 0xd0, 0x0a, 0x27 } }, /* SCID */
1720     { 0 }, /* PN */
1721     NULL, 0, /* Token/Token Len */
1722     448, NULL
1723 };
1724 
1725 static const unsigned char rx_script_5a_body[] = {
1726     0x02,
1727     0x03,
1728     0x00,
1729     0x00,
1730     0x00,
1731     0x00,
1732     0x00,
1733     0x00,
1734     0x00,
1735     0x00,
1736     0x00,
1737     0x00,
1738     0x00,
1739     0x00,
1740     0x00,
1741     0x00,
1742     0x00,
1743     0x00,
1744     0x00,
1745     0x00,
1746     0x00,
1747     0x00,
1748     0x00,
1749     0x00,
1750     0x00,
1751     0x00,
1752     0x00,
1753     0x00,
1754     0x00,
1755     0x00,
1756     0x00,
1757     0x00,
1758     0x00,
1759     0x00,
1760     0x00,
1761     0x00,
1762     0x00,
1763     0x00,
1764     0x00,
1765     0x00,
1766     0x00,
1767     0x00,
1768     0x00,
1769     0x00,
1770     0x00,
1771     0x00,
1772     0x00,
1773     0x00,
1774     0x00,
1775     0x00,
1776     0x00,
1777     0x00,
1778     0x00,
1779     0x00,
1780     0x00,
1781     0x00,
1782     0x00,
1783     0x00,
1784     0x00,
1785     0x00,
1786     0x00,
1787     0x00,
1788     0x00,
1789     0x00,
1790     0x00,
1791     0x00,
1792     0x00,
1793     0x00,
1794     0x00,
1795     0x00,
1796     0x00,
1797     0x00,
1798     0x00,
1799     0x00,
1800     0x00,
1801     0x00,
1802     0x00,
1803     0x00,
1804     0x00,
1805     0x00,
1806     0x00,
1807     0x00,
1808     0x00,
1809     0x00,
1810     0x00,
1811     0x00,
1812     0x00,
1813     0x00,
1814     0x00,
1815     0x00,
1816     0x00,
1817     0x00,
1818     0x00,
1819     0x00,
1820     0x00,
1821     0x00,
1822     0x00,
1823     0x00,
1824     0x00,
1825     0x00,
1826     0x00,
1827     0x00,
1828     0x00,
1829     0x00,
1830     0x00,
1831     0x00,
1832     0x00,
1833     0x00,
1834     0x00,
1835     0x00,
1836     0x00,
1837     0x00,
1838     0x00,
1839     0x00,
1840     0x00,
1841     0x00,
1842     0x00,
1843     0x00,
1844     0x00,
1845     0x00,
1846     0x00,
1847     0x00,
1848     0x00,
1849     0x00,
1850     0x00,
1851     0x00,
1852     0x00,
1853     0x00,
1854     0x00,
1855     0x00,
1856     0x00,
1857     0x00,
1858     0x00,
1859     0x00,
1860     0x00,
1861     0x00,
1862     0x00,
1863     0x00,
1864     0x00,
1865     0x00,
1866     0x00,
1867     0x00,
1868     0x00,
1869     0x00,
1870     0x00,
1871     0x00,
1872     0x00,
1873     0x00,
1874     0x00,
1875     0x00,
1876     0x00,
1877     0x00,
1878     0x00,
1879     0x00,
1880     0x00,
1881     0x00,
1882     0x00,
1883     0x00,
1884     0x00,
1885     0x00,
1886     0x00,
1887     0x00,
1888     0x00,
1889     0x00,
1890     0x00,
1891     0x00,
1892     0x00,
1893     0x00,
1894     0x00,
1895     0x00,
1896     0x00,
1897     0x00,
1898     0x00,
1899     0x00,
1900     0x00,
1901     0x00,
1902     0x00,
1903     0x00,
1904     0x00,
1905     0x00,
1906     0x00,
1907     0x00,
1908     0x00,
1909     0x00,
1910     0x00,
1911     0x00,
1912     0x00,
1913     0x00,
1914     0x00,
1915     0x00,
1916     0x00,
1917     0x00,
1918     0x00,
1919     0x00,
1920     0x00,
1921     0x00,
1922     0x00,
1923     0x00,
1924     0x00,
1925     0x00,
1926     0x00,
1927     0x00,
1928     0x00,
1929     0x00,
1930     0x00,
1931     0x00,
1932     0x00,
1933     0x00,
1934     0x00,
1935     0x00,
1936     0x00,
1937     0x00,
1938     0x00,
1939     0x00,
1940     0x00,
1941     0x00,
1942     0x00,
1943     0x00,
1944     0x00,
1945     0x00,
1946     0x00,
1947     0x00,
1948     0x00,
1949     0x00,
1950     0x00,
1951     0x00,
1952     0x00,
1953     0x00,
1954     0x00,
1955     0x00,
1956     0x00,
1957     0x00,
1958     0x00,
1959     0x00,
1960     0x00,
1961     0x00,
1962     0x00,
1963     0x00,
1964     0x00,
1965     0x00,
1966     0x00,
1967     0x00,
1968     0x00,
1969     0x00,
1970     0x00,
1971     0x00,
1972     0x00,
1973     0x00,
1974     0x00,
1975     0x00,
1976     0x00,
1977     0x00,
1978     0x00,
1979     0x00,
1980     0x00,
1981     0x00,
1982     0x00,
1983     0x00,
1984     0x00,
1985     0x00,
1986     0x00,
1987     0x00,
1988     0x00,
1989     0x00,
1990     0x00,
1991     0x00,
1992     0x00,
1993     0x00,
1994     0x00,
1995     0x00,
1996     0x00,
1997     0x00,
1998     0x00,
1999     0x00,
2000     0x00,
2001     0x00,
2002     0x00,
2003     0x00,
2004     0x00,
2005     0x00,
2006     0x00,
2007     0x00,
2008     0x00,
2009     0x00,
2010     0x00,
2011     0x00,
2012     0x00,
2013     0x00,
2014     0x00,
2015     0x00,
2016     0x00,
2017     0x00,
2018     0x00,
2019     0x00,
2020     0x00,
2021     0x00,
2022     0x00,
2023     0x00,
2024     0x00,
2025     0x00,
2026     0x00,
2027     0x00,
2028     0x00,
2029     0x00,
2030     0x00,
2031     0x00,
2032     0x00,
2033     0x00,
2034     0x00,
2035     0x00,
2036     0x00,
2037     0x00,
2038     0x00,
2039     0x00,
2040     0x00,
2041     0x00,
2042     0x00,
2043     0x00,
2044     0x00,
2045     0x00,
2046     0x00,
2047     0x00,
2048     0x00,
2049     0x00,
2050     0x00,
2051     0x00,
2052     0x00,
2053     0x00,
2054     0x00,
2055     0x00,
2056     0x00,
2057     0x00,
2058     0x00,
2059     0x00,
2060     0x00,
2061     0x00,
2062     0x00,
2063     0x00,
2064     0x00,
2065     0x00,
2066     0x00,
2067     0x00,
2068     0x00,
2069     0x00,
2070     0x00,
2071     0x00,
2072     0x00,
2073     0x00,
2074     0x00,
2075     0x00,
2076     0x00,
2077     0x00,
2078     0x00,
2079     0x00,
2080     0x06,
2081     0x00,
2082     0x40,
2083     0x5a,
2084     0x02,
2085     0x00,
2086     0x00,
2087     0x56,
2088     0x03,
2089     0x03,
2090     0xe2,
2091     0xd2,
2092     0x0a,
2093     0x3b,
2094     0xa2,
2095     0xc4,
2096     0xd2,
2097     0x29,
2098     0xc8,
2099     0xe8,
2100     0xba,
2101     0x23,
2102     0x31,
2103     0x88,
2104     0x2c,
2105     0x71,
2106     0xeb,
2107     0xba,
2108     0x42,
2109     0x5f,
2110     0x94,
2111     0xe9,
2112     0x0a,
2113     0x90,
2114     0x35,
2115     0x31,
2116     0x1e,
2117     0xca,
2118     0xed,
2119     0xf8,
2120     0x8a,
2121     0x8d,
2122     0x00,
2123     0x13,
2124     0x01,
2125     0x00,
2126     0x00,
2127     0x2e,
2128     0x00,
2129     0x2b,
2130     0x00,
2131     0x02,
2132     0x03,
2133     0x04,
2134     0x00,
2135     0x33,
2136     0x00,
2137     0x24,
2138     0x00,
2139     0x1d,
2140     0x00,
2141     0x20,
2142     0x96,
2143     0x0b,
2144     0x4b,
2145     0x30,
2146     0x66,
2147     0x3a,
2148     0x75,
2149     0x01,
2150     0x4a,
2151     0xdc,
2152     0x2a,
2153     0x75,
2154     0x1f,
2155     0xce,
2156     0x7a,
2157     0x30,
2158     0x9d,
2159     0x00,
2160     0xca,
2161     0x20,
2162     0xb4,
2163     0xe0,
2164     0x6b,
2165     0x81,
2166     0x23,
2167     0x18,
2168     0x0b,
2169     0x20,
2170     0x1f,
2171     0x54,
2172     0x86,
2173     0x1d,
2174 };
2175 
2176 static const QUIC_PKT_HDR rx_script_5b_expect_hdr = {
2177     QUIC_PKT_TYPE_HANDSHAKE,
2178     0, /* Spin Bit */
2179     0, /* Key Phase */
2180     2, /* PN Length */
2181     0, /* Partial */
2182     1, /* Fixed */
2183     0, /* Unused */
2184     0, /* Reserved */
2185     1, /* Version */
2186     { 0, { 0 } }, /* DCID */
2187     { 4, { 0x83, 0xd0, 0x0a, 0x27 } }, /* SCID */
2188     { 0 }, /* PN */
2189     NULL, 0, /* Token/Token Len */
2190     650, NULL
2191 };
2192 
2193 static const unsigned char rx_script_5b_body[] = {
2194     0x06,
2195     0x00,
2196     0x42,
2197     0x86,
2198     0x08,
2199     0x00,
2200     0x00,
2201     0x7d,
2202     0x00,
2203     0x7b,
2204     0x00,
2205     0x10,
2206     0x00,
2207     0x08,
2208     0x00,
2209     0x06,
2210     0x05,
2211     0x64,
2212     0x75,
2213     0x6d,
2214     0x6d,
2215     0x79,
2216     0x00,
2217     0x39,
2218     0x00,
2219     0x6b,
2220     0x4b,
2221     0x20,
2222     0x0b,
2223     0x1b,
2224     0xe1,
2225     0x1f,
2226     0xd0,
2227     0x78,
2228     0xc0,
2229     0x69,
2230     0x72,
2231     0x9c,
2232     0xe2,
2233     0xf7,
2234     0x05,
2235     0x04,
2236     0x80,
2237     0x08,
2238     0x00,
2239     0x00,
2240     0x06,
2241     0x04,
2242     0x80,
2243     0x08,
2244     0x00,
2245     0x00,
2246     0x07,
2247     0x04,
2248     0x80,
2249     0x08,
2250     0x00,
2251     0x00,
2252     0x04,
2253     0x04,
2254     0x80,
2255     0x0c,
2256     0x00,
2257     0x00,
2258     0x08,
2259     0x02,
2260     0x40,
2261     0x64,
2262     0x09,
2263     0x02,
2264     0x40,
2265     0x64,
2266     0x01,
2267     0x04,
2268     0x80,
2269     0x00,
2270     0x75,
2271     0x30,
2272     0x03,
2273     0x02,
2274     0x45,
2275     0xac,
2276     0x0b,
2277     0x01,
2278     0x1a,
2279     0x0c,
2280     0x00,
2281     0x02,
2282     0x10,
2283     0x41,
2284     0x94,
2285     0x41,
2286     0x8d,
2287     0x0d,
2288     0xfb,
2289     0x60,
2290     0x7b,
2291     0xdc,
2292     0xcc,
2293     0xa2,
2294     0x9c,
2295     0x3e,
2296     0xa5,
2297     0xdf,
2298     0x8d,
2299     0x00,
2300     0x08,
2301     0x2d,
2302     0x71,
2303     0x8a,
2304     0x38,
2305     0xdf,
2306     0xdd,
2307     0xe0,
2308     0x03,
2309     0x0e,
2310     0x01,
2311     0x04,
2312     0x0f,
2313     0x04,
2314     0x83,
2315     0xd0,
2316     0x0a,
2317     0x27,
2318     0x10,
2319     0x04,
2320     0xad,
2321     0x15,
2322     0x3f,
2323     0xae,
2324     0x20,
2325     0x01,
2326     0x00,
2327     0x0b,
2328     0x00,
2329     0x01,
2330     0x8f,
2331     0x00,
2332     0x00,
2333     0x01,
2334     0x8b,
2335     0x00,
2336     0x01,
2337     0x86,
2338     0x30,
2339     0x82,
2340     0x01,
2341     0x82,
2342     0x30,
2343     0x82,
2344     0x01,
2345     0x29,
2346     0xa0,
2347     0x03,
2348     0x02,
2349     0x01,
2350     0x02,
2351     0x02,
2352     0x14,
2353     0x0a,
2354     0x73,
2355     0x0f,
2356     0x86,
2357     0x18,
2358     0xf2,
2359     0xc3,
2360     0x30,
2361     0x01,
2362     0xd2,
2363     0xc0,
2364     0xc1,
2365     0x62,
2366     0x52,
2367     0x13,
2368     0xf1,
2369     0x9c,
2370     0x13,
2371     0x39,
2372     0xb5,
2373     0x30,
2374     0x0a,
2375     0x06,
2376     0x08,
2377     0x2a,
2378     0x86,
2379     0x48,
2380     0xce,
2381     0x3d,
2382     0x04,
2383     0x03,
2384     0x02,
2385     0x30,
2386     0x17,
2387     0x31,
2388     0x15,
2389     0x30,
2390     0x13,
2391     0x06,
2392     0x03,
2393     0x55,
2394     0x04,
2395     0x03,
2396     0x0c,
2397     0x0c,
2398     0x6d,
2399     0x61,
2400     0x70,
2401     0x61,
2402     0x6b,
2403     0x74,
2404     0x2e,
2405     0x6c,
2406     0x6f,
2407     0x63,
2408     0x61,
2409     0x6c,
2410     0x30,
2411     0x1e,
2412     0x17,
2413     0x0d,
2414     0x32,
2415     0x32,
2416     0x30,
2417     0x38,
2418     0x30,
2419     0x32,
2420     0x31,
2421     0x32,
2422     0x30,
2423     0x30,
2424     0x31,
2425     0x38,
2426     0x5a,
2427     0x17,
2428     0x0d,
2429     0x32,
2430     0x32,
2431     0x30,
2432     0x39,
2433     0x30,
2434     0x31,
2435     0x31,
2436     0x32,
2437     0x30,
2438     0x30,
2439     0x31,
2440     0x38,
2441     0x5a,
2442     0x30,
2443     0x17,
2444     0x31,
2445     0x15,
2446     0x30,
2447     0x13,
2448     0x06,
2449     0x03,
2450     0x55,
2451     0x04,
2452     0x03,
2453     0x0c,
2454     0x0c,
2455     0x6d,
2456     0x61,
2457     0x70,
2458     0x61,
2459     0x6b,
2460     0x74,
2461     0x2e,
2462     0x6c,
2463     0x6f,
2464     0x63,
2465     0x61,
2466     0x6c,
2467     0x30,
2468     0x59,
2469     0x30,
2470     0x13,
2471     0x06,
2472     0x07,
2473     0x2a,
2474     0x86,
2475     0x48,
2476     0xce,
2477     0x3d,
2478     0x02,
2479     0x01,
2480     0x06,
2481     0x08,
2482     0x2a,
2483     0x86,
2484     0x48,
2485     0xce,
2486     0x3d,
2487     0x03,
2488     0x01,
2489     0x07,
2490     0x03,
2491     0x42,
2492     0x00,
2493     0x04,
2494     0x67,
2495     0xf4,
2496     0xd3,
2497     0x8f,
2498     0x15,
2499     0x6d,
2500     0xee,
2501     0x85,
2502     0xcc,
2503     0x2a,
2504     0x77,
2505     0xfc,
2506     0x0b,
2507     0x8f,
2508     0x9f,
2509     0xcf,
2510     0xa9,
2511     0x95,
2512     0x5d,
2513     0x5b,
2514     0xcd,
2515     0xb7,
2516     0x8b,
2517     0xba,
2518     0x31,
2519     0x0a,
2520     0x73,
2521     0x62,
2522     0xc5,
2523     0xd0,
2524     0x0e,
2525     0x07,
2526     0x90,
2527     0xae,
2528     0x38,
2529     0x43,
2530     0x79,
2531     0xce,
2532     0x5e,
2533     0x33,
2534     0xad,
2535     0x31,
2536     0xbf,
2537     0x9f,
2538     0x2a,
2539     0x56,
2540     0x83,
2541     0xa5,
2542     0x24,
2543     0x16,
2544     0xab,
2545     0x0c,
2546     0xf1,
2547     0x64,
2548     0xbe,
2549     0xe4,
2550     0x93,
2551     0xb5,
2552     0x89,
2553     0xd6,
2554     0x05,
2555     0xe4,
2556     0xf7,
2557     0x7b,
2558     0xa3,
2559     0x53,
2560     0x30,
2561     0x51,
2562     0x30,
2563     0x1d,
2564     0x06,
2565     0x03,
2566     0x55,
2567     0x1d,
2568     0x0e,
2569     0x04,
2570     0x16,
2571     0x04,
2572     0x14,
2573     0x02,
2574     0x64,
2575     0x0f,
2576     0x55,
2577     0x69,
2578     0x14,
2579     0x91,
2580     0x19,
2581     0xed,
2582     0xf9,
2583     0x1a,
2584     0xe9,
2585     0x1d,
2586     0xa5,
2587     0x5a,
2588     0xd0,
2589     0x48,
2590     0x96,
2591     0x9f,
2592     0x60,
2593     0x30,
2594     0x1f,
2595     0x06,
2596     0x03,
2597     0x55,
2598     0x1d,
2599     0x23,
2600     0x04,
2601     0x18,
2602     0x30,
2603     0x16,
2604     0x80,
2605     0x14,
2606     0x02,
2607     0x64,
2608     0x0f,
2609     0x55,
2610     0x69,
2611     0x14,
2612     0x91,
2613     0x19,
2614     0xed,
2615     0xf9,
2616     0x1a,
2617     0xe9,
2618     0x1d,
2619     0xa5,
2620     0x5a,
2621     0xd0,
2622     0x48,
2623     0x96,
2624     0x9f,
2625     0x60,
2626     0x30,
2627     0x0f,
2628     0x06,
2629     0x03,
2630     0x55,
2631     0x1d,
2632     0x13,
2633     0x01,
2634     0x01,
2635     0xff,
2636     0x04,
2637     0x05,
2638     0x30,
2639     0x03,
2640     0x01,
2641     0x01,
2642     0xff,
2643     0x30,
2644     0x0a,
2645     0x06,
2646     0x08,
2647     0x2a,
2648     0x86,
2649     0x48,
2650     0xce,
2651     0x3d,
2652     0x04,
2653     0x03,
2654     0x02,
2655     0x03,
2656     0x47,
2657     0x00,
2658     0x30,
2659     0x44,
2660     0x02,
2661     0x20,
2662     0x0a,
2663     0x82,
2664     0x92,
2665     0x6e,
2666     0xd3,
2667     0xc6,
2668     0x66,
2669     0xd9,
2670     0xd3,
2671     0x75,
2672     0xff,
2673     0x71,
2674     0x3b,
2675     0x61,
2676     0x46,
2677     0x21,
2678     0x00,
2679     0xe6,
2680     0x21,
2681     0x5d,
2682     0x9c,
2683     0x86,
2684     0xe9,
2685     0x65,
2686     0x40,
2687     0x4f,
2688     0xeb,
2689     0x70,
2690     0x4f,
2691     0x2c,
2692     0xad,
2693     0x00,
2694     0x02,
2695     0x20,
2696     0x08,
2697     0xc2,
2698     0x07,
2699     0x5d,
2700     0x16,
2701     0xfc,
2702     0x54,
2703     0x34,
2704     0x2b,
2705     0xb4,
2706     0x18,
2707     0x67,
2708     0x44,
2709     0x81,
2710     0xc9,
2711     0xa9,
2712     0x67,
2713     0x2e,
2714     0xce,
2715     0xa1,
2716     0x02,
2717     0x9f,
2718     0x3b,
2719     0xe5,
2720     0x61,
2721     0x16,
2722     0x0b,
2723     0x50,
2724     0xf6,
2725     0xa1,
2726     0x50,
2727     0x94,
2728     0x00,
2729     0x00,
2730     0x0f,
2731     0x00,
2732     0x00,
2733     0x4a,
2734     0x04,
2735     0x03,
2736     0x00,
2737     0x46,
2738     0x30,
2739     0x44,
2740     0x02,
2741     0x20,
2742     0x7d,
2743     0x57,
2744     0x17,
2745     0x14,
2746     0x46,
2747     0x09,
2748     0x95,
2749     0x70,
2750     0x09,
2751     0x45,
2752     0xe8,
2753     0x9e,
2754     0x5c,
2755     0x87,
2756     0x55,
2757     0xd9,
2758     0x08,
2759     0xc6,
2760     0x5e,
2761     0x47,
2762     0x73,
2763     0x5e,
2764     0xb1,
2765     0xc9,
2766     0xef,
2767     0xcb,
2768     0xe5,
2769     0x7f,
2770     0xcc,
2771     0xb0,
2772     0x28,
2773     0xbc,
2774     0x02,
2775     0x20,
2776     0x5d,
2777     0xe4,
2778     0x2b,
2779     0x83,
2780     0xd9,
2781     0x78,
2782     0x75,
2783     0x45,
2784     0xf3,
2785     0x22,
2786     0x2b,
2787     0x38,
2788     0xeb,
2789     0x68,
2790     0xe5,
2791     0x71,
2792     0x5d,
2793     0xcb,
2794     0xc3,
2795     0x68,
2796     0xb3,
2797     0x0e,
2798     0x7d,
2799     0x5e,
2800     0x1d,
2801     0xc2,
2802     0x1b,
2803     0x8a,
2804     0x62,
2805     0x80,
2806     0x48,
2807     0x3e,
2808     0x14,
2809     0x00,
2810     0x00,
2811     0x20,
2812     0x37,
2813     0xcd,
2814     0x55,
2815     0xca,
2816     0x3f,
2817     0x4b,
2818     0xf0,
2819     0x95,
2820     0xf8,
2821     0xe4,
2822     0xfe,
2823     0x59,
2824     0xab,
2825     0xbc,
2826     0xc1,
2827     0x8f,
2828     0x0c,
2829     0x3f,
2830     0x41,
2831     0x59,
2832     0xf6,
2833     0x96,
2834     0xdb,
2835     0x75,
2836     0xae,
2837     0xe7,
2838     0x86,
2839     0x1a,
2840     0x92,
2841     0xa7,
2842     0x53,
2843     0x0a,
2844 };
2845 
2846 static const QUIC_PKT_HDR rx_script_5c_expect_hdr = {
2847     QUIC_PKT_TYPE_1RTT,
2848     0, /* Spin Bit */
2849     0, /* Key Phase */
2850     2, /* PN Length */
2851     0, /* Partial */
2852     1, /* Fixed */
2853     0, /* Unused */
2854     0, /* Reserved */
2855     0, /* Version */
2856     { 0, { 0 } }, /* DCID */
2857     { 0, { 0 } }, /* SCID */
2858     { 0 }, /* PN */
2859     NULL, 0, /* Token/Token Len */
2860     72, NULL
2861 };
2862 
2863 static const unsigned char rx_script_5c_body[] = {
2864     0x18,
2865     0x03,
2866     0x00,
2867     0x04,
2868     0x92,
2869     0xec,
2870     0xaa,
2871     0xd6,
2872     0x47,
2873     0xd8,
2874     0x8b,
2875     0x56,
2876     0x3b,
2877     0x5f,
2878     0x67,
2879     0xe6,
2880     0xb9,
2881     0xb9,
2882     0xca,
2883     0x72,
2884     0xca,
2885     0xf2,
2886     0x49,
2887     0x7d,
2888     0x18,
2889     0x02,
2890     0x00,
2891     0x04,
2892     0xa9,
2893     0x6e,
2894     0x9b,
2895     0x84,
2896     0x26,
2897     0x43,
2898     0x00,
2899     0xc7,
2900     0x55,
2901     0x71,
2902     0x67,
2903     0x2e,
2904     0x52,
2905     0xdd,
2906     0x47,
2907     0xfd,
2908     0x06,
2909     0x51,
2910     0x33,
2911     0x08,
2912     0x18,
2913     0x01,
2914     0x00,
2915     0x04,
2916     0x36,
2917     0xd5,
2918     0x1f,
2919     0x06,
2920     0x4e,
2921     0xbf,
2922     0xb4,
2923     0xc9,
2924     0xef,
2925     0x97,
2926     0x1e,
2927     0x9a,
2928     0x3c,
2929     0xab,
2930     0x1e,
2931     0xfc,
2932     0xb7,
2933     0x90,
2934     0xc3,
2935     0x1a,
2936 };
2937 
2938 static const struct rx_test_op rx_script_5[] = {
2939     RX_OP_ALLOW_1RTT()
2940         RX_OP_SET_RX_DCID(empty_conn_id)
2941             RX_OP_PROVIDE_SECRET_INITIAL(rx_script_5_c2s_init_dcid)
2942                 RX_OP_INJECT_N(5)
2943                     RX_OP_CHECK_PKT_N(5a)
2944                         RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
2945     RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
2946         QRL_SUITE_AES128GCM, rx_script_5_handshake_secret)
2947         RX_OP_CHECK_PKT_N(5b)
2948             RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
2949     RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
2950         QRL_SUITE_AES128GCM, rx_script_5_1rtt_secret)
2951         RX_OP_CHECK_PKT_N(5c)
2952             RX_OP_CHECK_NO_PKT()
2953 
2954     /* Discard Initial EL and try injecting the packet again */
2955     RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_INITIAL)
2956         RX_OP_INJECT_N(5)
2957     /* Initial packet is not output because we have discarded Initial keys */
2958     RX_OP_CHECK_PKT_N(5b)
2959         RX_OP_CHECK_PKT_N(5c)
2960             RX_OP_CHECK_NO_PKT()
2961     /* Try again with discarded keys */
2962     RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_HANDSHAKE)
2963         RX_OP_INJECT_N(5)
2964             RX_OP_CHECK_PKT_N(5c)
2965                 RX_OP_CHECK_NO_PKT()
2966     /* Try again */
2967     RX_OP_INJECT_N(5)
2968         RX_OP_CHECK_PKT_N(5c)
2969             RX_OP_CHECK_NO_PKT()
2970     /* Try again with discarded 1-RTT keys */
2971     RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_1RTT)
2972         RX_OP_INJECT_N(5)
2973             RX_OP_CHECK_NO_PKT()
2974 
2975     /* Recreate QRL, test reading packets received before key */
2976     RX_OP_SET_SCID_LEN(0)
2977         RX_OP_SET_RX_DCID(empty_conn_id)
2978             RX_OP_INJECT_N(5)
2979                 RX_OP_CHECK_NO_PKT()
2980                     RX_OP_PROVIDE_SECRET_INITIAL(rx_script_5_c2s_init_dcid)
2981                         RX_OP_CHECK_PKT_N(5a)
2982                             RX_OP_CHECK_NO_PKT()
2983                                 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
2984                                     QRL_SUITE_AES128GCM, rx_script_5_handshake_secret)
2985                                     RX_OP_CHECK_PKT_N(5b)
2986                                         RX_OP_CHECK_NO_PKT()
2987                                             RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
2988                                                 QRL_SUITE_AES128GCM, rx_script_5_1rtt_secret)
2989                                                 RX_OP_CHECK_PKT_N(5c)
2990                                                     RX_OP_CHECK_NO_PKT()
2991 
2992                                                         RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_INITIAL)
2993                                                             RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_HANDSHAKE)
2994                                                                 RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_1RTT)
2995                                                                     RX_OP_INJECT_N(5)
2996                                                                         RX_OP_CHECK_NO_PKT()
2997 
2998                                                                             RX_OP_END
2999 };
3000 
3001 /*
3002  * 6. Real World - S2C Multiple Packets
3003  *      - Initial, Handshake, 1-RTT (AES-256-GCM/SHA384)
3004  */
3005 static const QUIC_CONN_ID rx_script_6_c2s_init_dcid = {
3006     4, { 0xac, 0x88, 0x95, 0xbd }
3007 };
3008 
3009 static const unsigned char rx_script_6_handshake_secret[48] = {
3010     0xd1,
3011     0x41,
3012     0xb0,
3013     0xf6,
3014     0x0d,
3015     0x8b,
3016     0xbd,
3017     0xe8,
3018     0x5b,
3019     0xa8,
3020     0xff,
3021     0xd7,
3022     0x18,
3023     0x9a,
3024     0x23,
3025     0x7b,
3026     0x13,
3027     0x5c,
3028     0x1e,
3029     0x90,
3030     0x1d,
3031     0x08,
3032     0x95,
3033     0xcc,
3034     0xc5,
3035     0x8e,
3036     0x73,
3037     0x4e,
3038     0x02,
3039     0x6f,
3040     0x3c,
3041     0xb6,
3042     0x26,
3043     0x77,
3044     0x8d,
3045     0x53,
3046     0xc5,
3047     0x62,
3048     0x9f,
3049     0xb5,
3050     0xf0,
3051     0x88,
3052     0xfb,
3053     0xe5,
3054     0x14,
3055     0x71,
3056     0xab,
3057     0xe6,
3058 };
3059 
3060 static const unsigned char rx_script_6_1rtt_secret[48] = {
3061     0x2d,
3062     0x6b,
3063     0x9d,
3064     0xd4,
3065     0x39,
3066     0xa0,
3067     0xe7,
3068     0xff,
3069     0x17,
3070     0xe2,
3071     0xcb,
3072     0x5c,
3073     0x0d,
3074     0x4a,
3075     0xf6,
3076     0x3f,
3077     0xf4,
3078     0xfe,
3079     0xfc,
3080     0xe5,
3081     0x22,
3082     0xfa,
3083     0xf5,
3084     0x5b,
3085     0xc0,
3086     0xb2,
3087     0x18,
3088     0xbb,
3089     0x92,
3090     0x4d,
3091     0x35,
3092     0xea,
3093     0x67,
3094     0xa6,
3095     0xe7,
3096     0xc1,
3097     0x90,
3098     0x10,
3099     0xc9,
3100     0x14,
3101     0x46,
3102     0xf5,
3103     0x95,
3104     0x57,
3105     0x8b,
3106     0x90,
3107     0x88,
3108     0x5d,
3109 };
3110 
3111 static const unsigned char rx_script_6_in[] = {
3112     /* First Packet: Initial */
3113     0xc5, /* Long, Initial, PN Length=2 bytes */
3114     0x00,
3115     0x00,
3116     0x00,
3117     0x01, /* Version */
3118     0x00, /* DCID */
3119     0x04,
3120     0x36,
3121     0xf4,
3122     0x75,
3123     0x2d, /* SCID */
3124     0x00, /* Token Length */
3125     0x41,
3126     0xbe, /* Length (446) */
3127     0xa9,
3128     0xe2, /* PN (0) */
3129     0x83,
3130     0x39,
3131     0x95,
3132     0x8f,
3133     0x8f,
3134     0x8c,
3135     0xa9,
3136     0xaf,
3137     0x10,
3138     0x29,
3139     0x3d,
3140     0xfc,
3141     0x56,
3142     0x4a,
3143     0x1c,
3144     0x4b,
3145     0xc9,
3146     0x48,
3147     0xb1,
3148     0xaf,
3149     0x36,
3150     0xd5,
3151     0xac,
3152     0x95,
3153     0xbf,
3154     0xfd,
3155     0x2c,
3156     0x4d,
3157     0x70,
3158     0x2e,
3159     0x5b,
3160     0x7c,
3161     0x22,
3162     0x5f,
3163     0x5f,
3164     0xee,
3165     0x10,
3166     0x8f,
3167     0xfb,
3168     0x0b,
3169     0x5f,
3170     0x9d,
3171     0x7e,
3172     0x68,
3173     0x2f,
3174     0x94,
3175     0x0b,
3176     0xdb,
3177     0xed,
3178     0xef,
3179     0xfa,
3180     0x4e,
3181     0xc6,
3182     0xd5,
3183     0xe7,
3184     0xef,
3185     0xe0,
3186     0x78,
3187     0x3c,
3188     0xdc,
3189     0xe9,
3190     0xd8,
3191     0xe8,
3192     0x56,
3193     0x71,
3194     0xd7,
3195     0xe7,
3196     0x6c,
3197     0x7f,
3198     0x5d,
3199     0xaa,
3200     0x7a,
3201     0x52,
3202     0x1d,
3203     0x95,
3204     0x7a,
3205     0x80,
3206     0x70,
3207     0x38,
3208     0xc0,
3209     0x8b,
3210     0xa1,
3211     0x2f,
3212     0x09,
3213     0x16,
3214     0xd2,
3215     0xec,
3216     0xa3,
3217     0x23,
3218     0x72,
3219     0x45,
3220     0x3c,
3221     0xbd,
3222     0x8c,
3223     0xda,
3224     0xbb,
3225     0x37,
3226     0x5a,
3227     0x8d,
3228     0xb2,
3229     0x00,
3230     0x7e,
3231     0x67,
3232     0x0c,
3233     0xa0,
3234     0x32,
3235     0xdd,
3236     0x80,
3237     0x07,
3238     0x71,
3239     0xb0,
3240     0x95,
3241     0x21,
3242     0xbc,
3243     0x1e,
3244     0xbd,
3245     0x63,
3246     0x0a,
3247     0x10,
3248     0xe7,
3249     0x4b,
3250     0x6e,
3251     0x2e,
3252     0x85,
3253     0x3a,
3254     0x65,
3255     0xf7,
3256     0x06,
3257     0x6e,
3258     0x7e,
3259     0x8f,
3260     0x65,
3261     0x8c,
3262     0xb1,
3263     0x93,
3264     0xe9,
3265     0x0d,
3266     0xe8,
3267     0x46,
3268     0xe7,
3269     0xcf,
3270     0xa7,
3271     0xd2,
3272     0x8b,
3273     0x15,
3274     0x23,
3275     0xec,
3276     0xc3,
3277     0xec,
3278     0x44,
3279     0xda,
3280     0x62,
3281     0x15,
3282     0x35,
3283     0x34,
3284     0x2f,
3285     0x62,
3286     0x77,
3287     0xc8,
3288     0x1f,
3289     0x83,
3290     0x22,
3291     0x00,
3292     0xe5,
3293     0xc0,
3294     0x89,
3295     0xb8,
3296     0x97,
3297     0xd2,
3298     0x37,
3299     0x02,
3300     0xea,
3301     0xa2,
3302     0x35,
3303     0xbf,
3304     0x19,
3305     0xf0,
3306     0xba,
3307     0x1d,
3308     0xb7,
3309     0xaa,
3310     0x36,
3311     0xbb,
3312     0x11,
3313     0x60,
3314     0xc3,
3315     0x45,
3316     0x1f,
3317     0xe5,
3318     0x18,
3319     0xde,
3320     0x4c,
3321     0x01,
3322     0x23,
3323     0x2d,
3324     0x17,
3325     0x78,
3326     0xdd,
3327     0x4c,
3328     0x8a,
3329     0x1e,
3330     0x1b,
3331     0xd4,
3332     0xda,
3333     0x56,
3334     0x43,
3335     0x13,
3336     0xa4,
3337     0x4f,
3338     0xfd,
3339     0xd5,
3340     0x92,
3341     0x6a,
3342     0x05,
3343     0x5f,
3344     0x14,
3345     0x63,
3346     0x85,
3347     0x7d,
3348     0xf1,
3349     0x31,
3350     0xb8,
3351     0x27,
3352     0x0b,
3353     0xa6,
3354     0xb5,
3355     0x50,
3356     0xca,
3357     0x8b,
3358     0x0e,
3359     0xa1,
3360     0x0d,
3361     0xf9,
3362     0xc4,
3363     0xea,
3364     0x6a,
3365     0x6e,
3366     0x4b,
3367     0x6d,
3368     0xdf,
3369     0x49,
3370     0xe8,
3371     0x32,
3372     0xf6,
3373     0x85,
3374     0xc4,
3375     0x29,
3376     0x26,
3377     0x32,
3378     0xfb,
3379     0x5e,
3380     0xa8,
3381     0x55,
3382     0x6b,
3383     0x67,
3384     0xe9,
3385     0xaa,
3386     0x35,
3387     0x33,
3388     0x90,
3389     0xd8,
3390     0x2a,
3391     0x71,
3392     0x0b,
3393     0x6a,
3394     0x48,
3395     0xc4,
3396     0xa3,
3397     0x8b,
3398     0xe0,
3399     0xe7,
3400     0x00,
3401     0x3d,
3402     0xee,
3403     0x30,
3404     0x70,
3405     0x84,
3406     0xbd,
3407     0xa3,
3408     0x3c,
3409     0x9e,
3410     0xa3,
3411     0x5c,
3412     0x69,
3413     0xab,
3414     0x55,
3415     0x7b,
3416     0xe2,
3417     0xe5,
3418     0x86,
3419     0x13,
3420     0xcb,
3421     0x93,
3422     0x3f,
3423     0xcb,
3424     0x3e,
3425     0x6d,
3426     0xc9,
3427     0xc2,
3428     0x10,
3429     0x2b,
3430     0x00,
3431     0x9b,
3432     0x3f,
3433     0x14,
3434     0x4e,
3435     0x04,
3436     0x27,
3437     0xc0,
3438     0xae,
3439     0x1d,
3440     0x48,
3441     0x89,
3442     0x3a,
3443     0xf4,
3444     0xac,
3445     0xe0,
3446     0x05,
3447     0x07,
3448     0xc9,
3449     0x74,
3450     0x6e,
3451     0x21,
3452     0x01,
3453     0xe9,
3454     0x26,
3455     0xfd,
3456     0xb4,
3457     0xb2,
3458     0x2a,
3459     0xda,
3460     0x72,
3461     0xda,
3462     0xbf,
3463     0x63,
3464     0x9d,
3465     0x37,
3466     0xaf,
3467     0x90,
3468     0x05,
3469     0xd6,
3470     0x89,
3471     0xc7,
3472     0xa6,
3473     0x81,
3474     0x4e,
3475     0x2a,
3476     0x30,
3477     0xe3,
3478     0x05,
3479     0x88,
3480     0x9f,
3481     0xd0,
3482     0xba,
3483     0x8d,
3484     0xc4,
3485     0x21,
3486     0x52,
3487     0x5a,
3488     0x7a,
3489     0xe1,
3490     0xad,
3491     0xd3,
3492     0x88,
3493     0xc2,
3494     0x18,
3495     0xad,
3496     0x4c,
3497     0xb1,
3498     0x66,
3499     0x73,
3500     0x1b,
3501     0xf2,
3502     0xd1,
3503     0xb9,
3504     0x43,
3505     0xaa,
3506     0xc4,
3507     0x66,
3508     0xcd,
3509     0x42,
3510     0xfa,
3511     0x80,
3512     0xec,
3513     0xa1,
3514     0x7c,
3515     0x45,
3516     0x02,
3517     0x53,
3518     0x45,
3519     0xd5,
3520     0x07,
3521     0xd4,
3522     0x70,
3523     0x12,
3524     0x1b,
3525     0x08,
3526     0x05,
3527     0x6e,
3528     0x99,
3529     0x0a,
3530     0xd3,
3531     0x5b,
3532     0x99,
3533     0x6b,
3534     0x65,
3535     0xc4,
3536     0xc0,
3537     0x04,
3538     0x1b,
3539     0x75,
3540     0xf2,
3541     0x86,
3542     0x99,
3543     0x09,
3544     0x4a,
3545     0x50,
3546     0x70,
3547     0x00,
3548     0x7a,
3549     0x93,
3550     0xaa,
3551     0xe6,
3552     0xf4,
3553     0x03,
3554     0x29,
3555     0x06,
3556     0xa4,
3557     0x30,
3558     0x6d,
3559     0x52,
3560     0xbd,
3561     0x60,
3562     0xd1,
3563     0x7e,
3564     0xd6,
3565     0x07,
3566     0xc0,
3567     0x41,
3568     0x01,
3569     0x12,
3570     0x3e,
3571     0x16,
3572     0x94,
3573 
3574     /* Second Packet: Handshake */
3575     0xea, /* Long, Handshake, PN Length=2 bytes */
3576     0x00,
3577     0x00,
3578     0x00,
3579     0x01, /* Version */
3580     0x00, /* DCID */
3581     0x04,
3582     0x36,
3583     0xf4,
3584     0x75,
3585     0x2d, /* SCID */
3586     0x42,
3587     0xb0, /* Length (688) */
3588     0x3a,
3589     0xc5, /* PN (0) */
3590     0x3b,
3591     0x8e,
3592     0x4c,
3593     0x01,
3594     0x72,
3595     0x6b,
3596     0xfa,
3597     0xbb,
3598     0xad,
3599     0xf9,
3600     0x9e,
3601     0x21,
3602     0xb1,
3603     0xd0,
3604     0x01,
3605     0xf1,
3606     0xd4,
3607     0x67,
3608     0x8d,
3609     0x2c,
3610     0xee,
3611     0x04,
3612     0x60,
3613     0x4a,
3614     0xe2,
3615     0xe4,
3616     0xc6,
3617     0x89,
3618     0x01,
3619     0xae,
3620     0x3c,
3621     0x1f,
3622     0xf7,
3623     0xe6,
3624     0xf7,
3625     0xac,
3626     0x26,
3627     0xcf,
3628     0x3c,
3629     0x6d,
3630     0x1d,
3631     0xfd,
3632     0x11,
3633     0x02,
3634     0x51,
3635     0x73,
3636     0xb5,
3637     0xe1,
3638     0xb2,
3639     0x44,
3640     0x42,
3641     0x32,
3642     0x0f,
3643     0xf5,
3644     0x3d,
3645     0x55,
3646     0x2d,
3647     0x1f,
3648     0x02,
3649     0x29,
3650     0x51,
3651     0x35,
3652     0xdb,
3653     0xc7,
3654     0x7a,
3655     0x34,
3656     0x4b,
3657     0xec,
3658     0x60,
3659     0x49,
3660     0xa2,
3661     0x90,
3662     0x11,
3663     0xef,
3664     0x5a,
3665     0xa9,
3666     0x1c,
3667     0xf7,
3668     0xd9,
3669     0x21,
3670     0x68,
3671     0x1c,
3672     0x2b,
3673     0xc6,
3674     0x57,
3675     0xde,
3676     0xb1,
3677     0x0b,
3678     0x31,
3679     0xed,
3680     0xef,
3681     0x16,
3682     0xba,
3683     0x08,
3684     0xb9,
3685     0xe2,
3686     0xd9,
3687     0xd0,
3688     0xd8,
3689     0x1f,
3690     0xc4,
3691     0x32,
3692     0xe8,
3693     0x45,
3694     0x2a,
3695     0x86,
3696     0xe4,
3697     0xd3,
3698     0xaf,
3699     0x72,
3700     0x4f,
3701     0x30,
3702     0x01,
3703     0x71,
3704     0x15,
3705     0x9b,
3706     0xa9,
3707     0x55,
3708     0x35,
3709     0xf7,
3710     0x39,
3711     0x7e,
3712     0x6a,
3713     0x59,
3714     0x18,
3715     0x4f,
3716     0xe6,
3717     0xdf,
3718     0xb5,
3719     0x0d,
3720     0xc2,
3721     0xe7,
3722     0xb2,
3723     0xa1,
3724     0xa6,
3725     0xa3,
3726     0x9c,
3727     0xf0,
3728     0x0d,
3729     0x59,
3730     0x05,
3731     0x49,
3732     0x95,
3733     0xfa,
3734     0xcc,
3735     0x72,
3736     0xd7,
3737     0xc0,
3738     0x84,
3739     0x2e,
3740     0xc4,
3741     0x1c,
3742     0xd4,
3743     0xa0,
3744     0xe3,
3745     0x6c,
3746     0x5a,
3747     0x8c,
3748     0x94,
3749     0x4d,
3750     0x37,
3751     0x1a,
3752     0x1c,
3753     0x68,
3754     0x93,
3755     0x5f,
3756     0xe5,
3757     0x99,
3758     0x27,
3759     0xc6,
3760     0x06,
3761     0xaa,
3762     0x1f,
3763     0x29,
3764     0x17,
3765     0xc5,
3766     0x8c,
3767     0x3d,
3768     0x53,
3769     0xa7,
3770     0x05,
3771     0x3a,
3772     0x44,
3773     0x53,
3774     0x86,
3775     0xed,
3776     0x56,
3777     0x99,
3778     0x4c,
3779     0xe2,
3780     0x7b,
3781     0x3a,
3782     0x1e,
3783     0x5d,
3784     0x6d,
3785     0xac,
3786     0x78,
3787     0x1e,
3788     0xfa,
3789     0x55,
3790     0x58,
3791     0x6e,
3792     0x72,
3793     0xee,
3794     0xf9,
3795     0x33,
3796     0x64,
3797     0x7f,
3798     0x93,
3799     0x3c,
3800     0xfe,
3801     0x18,
3802     0x97,
3803     0x6b,
3804     0x02,
3805     0x74,
3806     0x90,
3807     0x0d,
3808     0xba,
3809     0x89,
3810     0xc0,
3811     0x22,
3812     0x0a,
3813     0x0a,
3814     0x37,
3815     0x4c,
3816     0x28,
3817     0x74,
3818     0xa7,
3819     0x3a,
3820     0x44,
3821     0x74,
3822     0x42,
3823     0xff,
3824     0xf1,
3825     0xd2,
3826     0x8d,
3827     0x0c,
3828     0xc1,
3829     0xed,
3830     0x98,
3831     0x98,
3832     0x8e,
3833     0xa8,
3834     0x6b,
3835     0x95,
3836     0x6a,
3837     0x86,
3838     0x0b,
3839     0xb4,
3840     0x95,
3841     0x58,
3842     0x34,
3843     0x12,
3844     0xb0,
3845     0xc0,
3846     0xf8,
3847     0x2d,
3848     0x5b,
3849     0x40,
3850     0x51,
3851     0x80,
3852     0x07,
3853     0x91,
3854     0x31,
3855     0x77,
3856     0xd3,
3857     0x06,
3858     0xa5,
3859     0xe5,
3860     0x1f,
3861     0xe2,
3862     0xf8,
3863     0x92,
3864     0xe4,
3865     0x23,
3866     0x2b,
3867     0xf0,
3868     0x4c,
3869     0xa9,
3870     0xa5,
3871     0x6c,
3872     0x6f,
3873     0xaf,
3874     0xaf,
3875     0xbf,
3876     0x97,
3877     0xcf,
3878     0x46,
3879     0xf2,
3880     0x8d,
3881     0x61,
3882     0x0e,
3883     0x73,
3884     0xcd,
3885     0xc5,
3886     0xde,
3887     0xda,
3888     0x50,
3889     0x82,
3890     0x61,
3891     0x6d,
3892     0xb1,
3893     0xa2,
3894     0xbe,
3895     0x6b,
3896     0x99,
3897     0xcd,
3898     0x5b,
3899     0x99,
3900     0x8f,
3901     0x66,
3902     0xab,
3903     0x11,
3904     0x78,
3905     0xcc,
3906     0xdb,
3907     0x66,
3908     0x98,
3909     0xca,
3910     0x19,
3911     0x92,
3912     0xf4,
3913     0x05,
3914     0xae,
3915     0xe6,
3916     0xf3,
3917     0xe7,
3918     0xf0,
3919     0x30,
3920     0x28,
3921     0x31,
3922     0x74,
3923     0xff,
3924     0xe2,
3925     0xb3,
3926     0x3a,
3927     0x4f,
3928     0x79,
3929     0xe7,
3930     0x2a,
3931     0x9f,
3932     0xe3,
3933     0x41,
3934     0xb2,
3935     0x88,
3936     0xc8,
3937     0x8f,
3938     0x77,
3939     0x57,
3940     0x42,
3941     0x65,
3942     0xdb,
3943     0x07,
3944     0xf6,
3945     0x5f,
3946     0xb8,
3947     0x34,
3948     0x17,
3949     0xe3,
3950     0x8d,
3951     0x22,
3952     0x5b,
3953     0x88,
3954     0x94,
3955     0x60,
3956     0x97,
3957     0x32,
3958     0x3d,
3959     0x8a,
3960     0x51,
3961     0x9d,
3962     0xb5,
3963     0xac,
3964     0xd7,
3965     0x99,
3966     0x96,
3967     0x23,
3968     0x6d,
3969     0xc9,
3970     0xab,
3971     0x61,
3972     0x41,
3973     0x8f,
3974     0x72,
3975     0x1b,
3976     0xf8,
3977     0x84,
3978     0xd9,
3979     0x57,
3980     0x88,
3981     0x68,
3982     0x3d,
3983     0x73,
3984     0x5f,
3985     0xb1,
3986     0x18,
3987     0x5c,
3988     0x3a,
3989     0x35,
3990     0xd2,
3991     0xc5,
3992     0xb7,
3993     0x29,
3994     0xc7,
3995     0x95,
3996     0xdd,
3997     0x21,
3998     0xc0,
3999     0x78,
4000     0x49,
4001     0xf3,
4002     0x24,
4003     0xe0,
4004     0x4c,
4005     0x5c,
4006     0x32,
4007     0x08,
4008     0xb7,
4009     0x00,
4010     0x43,
4011     0x70,
4012     0x5a,
4013     0x95,
4014     0x23,
4015     0x91,
4016     0xf5,
4017     0xb7,
4018     0x61,
4019     0x85,
4020     0x6f,
4021     0xb3,
4022     0xa4,
4023     0x6b,
4024     0x05,
4025     0x9d,
4026     0x39,
4027     0xa3,
4028     0xb1,
4029     0x1c,
4030     0x61,
4031     0xc5,
4032     0xa5,
4033     0xe7,
4034     0x9a,
4035     0xe9,
4036     0x5d,
4037     0xaa,
4038     0xca,
4039     0x11,
4040     0xd8,
4041     0x4b,
4042     0xa4,
4043     0x9c,
4044     0x18,
4045     0x4e,
4046     0x2b,
4047     0x2d,
4048     0x75,
4049     0xc1,
4050     0x12,
4051     0x20,
4052     0xe4,
4053     0x66,
4054     0xa5,
4055     0x59,
4056     0x67,
4057     0x4b,
4058     0xcc,
4059     0x52,
4060     0x2d,
4061     0xfa,
4062     0xaa,
4063     0xa4,
4064     0xe9,
4065     0xfc,
4066     0x79,
4067     0xd7,
4068     0xff,
4069     0x03,
4070     0x3e,
4071     0xec,
4072     0xba,
4073     0x97,
4074     0x37,
4075     0x52,
4076     0xc1,
4077     0x57,
4078     0x31,
4079     0x8e,
4080     0x57,
4081     0x0c,
4082     0x54,
4083     0x92,
4084     0x9c,
4085     0x25,
4086     0x5c,
4087     0xfa,
4088     0x9f,
4089     0xa5,
4090     0x36,
4091     0x18,
4092     0xd0,
4093     0xaa,
4094     0xf3,
4095     0x3b,
4096     0x5b,
4097     0x59,
4098     0xbd,
4099     0x33,
4100     0x5e,
4101     0x7d,
4102     0x74,
4103     0x7c,
4104     0xaf,
4105     0xe9,
4106     0x54,
4107     0x80,
4108     0xc4,
4109     0xb4,
4110     0xa1,
4111     0x24,
4112     0x9e,
4113     0x23,
4114     0x0d,
4115     0xbf,
4116     0x4e,
4117     0x0f,
4118     0xaf,
4119     0xa5,
4120     0x16,
4121     0xcb,
4122     0x3b,
4123     0xfa,
4124     0x33,
4125     0xa5,
4126     0x68,
4127     0xa6,
4128     0x64,
4129     0x48,
4130     0x2f,
4131     0x5e,
4132     0xfa,
4133     0x64,
4134     0x4e,
4135     0xe3,
4136     0x27,
4137     0x4f,
4138     0x13,
4139     0xe6,
4140     0x37,
4141     0xf6,
4142     0xb9,
4143     0x63,
4144     0x4b,
4145     0xdc,
4146     0x49,
4147     0x3c,
4148     0x5e,
4149     0x9e,
4150     0x06,
4151     0xea,
4152     0xac,
4153     0xa3,
4154     0xdf,
4155     0x6c,
4156     0x49,
4157     0xfb,
4158     0xa1,
4159     0x01,
4160     0x4f,
4161     0x6f,
4162     0x74,
4163     0x1f,
4164     0xd3,
4165     0x26,
4166     0xa1,
4167     0x92,
4168     0x3e,
4169     0xe0,
4170     0x73,
4171     0xd6,
4172     0x3b,
4173     0x67,
4174     0x13,
4175     0x53,
4176     0x2e,
4177     0xcb,
4178     0xbc,
4179     0x83,
4180     0xd0,
4181     0x6e,
4182     0x28,
4183     0xb1,
4184     0xcb,
4185     0xd9,
4186     0x66,
4187     0xe0,
4188     0x33,
4189     0x59,
4190     0x45,
4191     0xd3,
4192     0x13,
4193     0xc2,
4194     0x48,
4195     0xd5,
4196     0x9e,
4197     0x88,
4198     0xba,
4199     0x75,
4200     0x7b,
4201     0xb1,
4202     0xfe,
4203     0x6f,
4204     0xec,
4205     0xde,
4206     0xff,
4207     0x14,
4208     0x59,
4209     0x75,
4210     0xbf,
4211     0x1a,
4212     0x74,
4213     0x47,
4214     0xc5,
4215     0xd8,
4216     0xe8,
4217     0x1b,
4218     0x3c,
4219     0x86,
4220     0xd7,
4221     0x1f,
4222     0x99,
4223     0x11,
4224     0xd3,
4225     0x29,
4226     0xfd,
4227     0x5d,
4228     0x22,
4229     0x7e,
4230     0x03,
4231     0x78,
4232     0xed,
4233     0x62,
4234     0x0e,
4235     0xbe,
4236     0x6d,
4237     0x75,
4238     0xf4,
4239     0xa8,
4240     0x6e,
4241     0xc7,
4242     0x21,
4243     0x76,
4244     0xc5,
4245     0xa0,
4246     0x0c,
4247     0xaa,
4248     0x58,
4249     0x78,
4250     0x7e,
4251     0x6e,
4252     0xfc,
4253     0x1e,
4254     0x2a,
4255     0x1c,
4256     0xdd,
4257     0xe5,
4258     0x78,
4259     0x08,
4260     0xbd,
4261     0xdb,
4262     0xea,
4263     0x8f,
4264     0x8a,
4265     0xa5,
4266     0xbf,
4267     0x93,
4268     0xfe,
4269     0x0f,
4270     0x03,
4271     0xa1,
4272     0xc8,
4273     0x64,
4274     0x9f,
4275     0x4a,
4276 
4277     /* Third Packet: 1-RTT */
4278     0x48, /* Short, 1-RTT, Spin=0, KP=0, PN Length=2 bytes */
4279     0x3e,
4280     0x28, /* PN (0) */
4281     0xb9,
4282     0xdb,
4283     0x61,
4284     0xf8,
4285     0x8b,
4286     0x3a,
4287     0xef,
4288     0x26,
4289     0x69,
4290     0xf2,
4291     0x57,
4292     0xc6,
4293     0x84,
4294     0x25,
4295     0x6b,
4296     0x77,
4297     0xbe,
4298     0x8c,
4299     0x43,
4300     0x32,
4301     0xf3,
4302     0x9a,
4303     0xd1,
4304     0x85,
4305     0x14,
4306     0xbc,
4307     0x89,
4308     0x3b,
4309     0x9c,
4310     0xf3,
4311     0xfc,
4312     0x00,
4313     0xa1,
4314     0x3a,
4315     0xc3,
4316     0xc4,
4317     0x1e,
4318     0xdf,
4319     0xd0,
4320     0x11,
4321     0x70,
4322     0xd9,
4323     0x02,
4324     0x7a,
4325     0xd4,
4326     0xef,
4327     0x86,
4328     0x67,
4329     0xb1,
4330     0x1e,
4331     0x5d,
4332     0xe3,
4333     0x7f,
4334     0x82,
4335     0x14,
4336     0x52,
4337     0xa5,
4338     0x8a,
4339     0x89,
4340     0xa7,
4341     0x98,
4342     0x75,
4343     0x2f,
4344     0x8a,
4345     0x00,
4346     0xf3,
4347     0xbd,
4348     0x49,
4349     0x26,
4350     0x4d,
4351     0x0c,
4352     0xc7,
4353     0x38,
4354     0xe7,
4355     0x91,
4356     0x85,
4357     0xc9,
4358     0x21,
4359     0x6a,
4360     0x1c,
4361     0xc4,
4362     0xa3,
4363     0x0e,
4364     0xd8,
4365     0xfe,
4366     0xb1,
4367     0x25,
4368     0x1a,
4369 };
4370 
4371 static const QUIC_PKT_HDR rx_script_6a_expect_hdr = {
4372     QUIC_PKT_TYPE_INITIAL,
4373     0, /* Spin Bit */
4374     0, /* Key Phase */
4375     2, /* PN Length */
4376     0, /* Partial */
4377     1, /* Fixed */
4378     0, /* Unused */
4379     0, /* Reserved */
4380     1, /* Version */
4381     { 0, { 0 } }, /* DCID */
4382     { 4, { 0x36, 0xf4, 0x75, 0x2d } }, /* SCID */
4383     { 0 }, /* PN */
4384     NULL, 0, /* Token/Token Len */
4385     428, NULL
4386 };
4387 
4388 static const unsigned char rx_script_6a_body[] = {
4389     0x02,
4390     0x03,
4391     0x00,
4392     0x00,
4393     0x00,
4394     0x00,
4395     0x00,
4396     0x00,
4397     0x00,
4398     0x00,
4399     0x00,
4400     0x00,
4401     0x00,
4402     0x00,
4403     0x00,
4404     0x00,
4405     0x00,
4406     0x00,
4407     0x00,
4408     0x00,
4409     0x00,
4410     0x00,
4411     0x00,
4412     0x00,
4413     0x00,
4414     0x00,
4415     0x00,
4416     0x00,
4417     0x00,
4418     0x00,
4419     0x00,
4420     0x00,
4421     0x00,
4422     0x00,
4423     0x00,
4424     0x00,
4425     0x00,
4426     0x00,
4427     0x00,
4428     0x00,
4429     0x00,
4430     0x00,
4431     0x00,
4432     0x00,
4433     0x00,
4434     0x00,
4435     0x00,
4436     0x00,
4437     0x00,
4438     0x00,
4439     0x00,
4440     0x00,
4441     0x00,
4442     0x00,
4443     0x00,
4444     0x00,
4445     0x00,
4446     0x00,
4447     0x00,
4448     0x00,
4449     0x00,
4450     0x00,
4451     0x00,
4452     0x00,
4453     0x00,
4454     0x00,
4455     0x00,
4456     0x00,
4457     0x00,
4458     0x00,
4459     0x00,
4460     0x00,
4461     0x00,
4462     0x00,
4463     0x00,
4464     0x00,
4465     0x00,
4466     0x00,
4467     0x00,
4468     0x00,
4469     0x00,
4470     0x00,
4471     0x00,
4472     0x00,
4473     0x00,
4474     0x00,
4475     0x00,
4476     0x00,
4477     0x00,
4478     0x00,
4479     0x00,
4480     0x00,
4481     0x00,
4482     0x00,
4483     0x00,
4484     0x00,
4485     0x00,
4486     0x00,
4487     0x00,
4488     0x00,
4489     0x00,
4490     0x00,
4491     0x00,
4492     0x00,
4493     0x00,
4494     0x00,
4495     0x00,
4496     0x00,
4497     0x00,
4498     0x00,
4499     0x00,
4500     0x00,
4501     0x00,
4502     0x00,
4503     0x00,
4504     0x00,
4505     0x00,
4506     0x00,
4507     0x00,
4508     0x00,
4509     0x00,
4510     0x00,
4511     0x00,
4512     0x00,
4513     0x00,
4514     0x00,
4515     0x00,
4516     0x00,
4517     0x00,
4518     0x00,
4519     0x00,
4520     0x00,
4521     0x00,
4522     0x00,
4523     0x00,
4524     0x00,
4525     0x00,
4526     0x00,
4527     0x00,
4528     0x00,
4529     0x00,
4530     0x00,
4531     0x00,
4532     0x00,
4533     0x00,
4534     0x00,
4535     0x00,
4536     0x00,
4537     0x00,
4538     0x00,
4539     0x00,
4540     0x00,
4541     0x00,
4542     0x00,
4543     0x00,
4544     0x00,
4545     0x00,
4546     0x00,
4547     0x00,
4548     0x00,
4549     0x00,
4550     0x00,
4551     0x00,
4552     0x00,
4553     0x00,
4554     0x00,
4555     0x00,
4556     0x00,
4557     0x00,
4558     0x00,
4559     0x00,
4560     0x00,
4561     0x00,
4562     0x00,
4563     0x00,
4564     0x00,
4565     0x00,
4566     0x00,
4567     0x00,
4568     0x00,
4569     0x00,
4570     0x00,
4571     0x00,
4572     0x00,
4573     0x00,
4574     0x00,
4575     0x00,
4576     0x00,
4577     0x00,
4578     0x00,
4579     0x00,
4580     0x00,
4581     0x00,
4582     0x00,
4583     0x00,
4584     0x00,
4585     0x00,
4586     0x00,
4587     0x00,
4588     0x00,
4589     0x00,
4590     0x00,
4591     0x00,
4592     0x00,
4593     0x00,
4594     0x00,
4595     0x00,
4596     0x00,
4597     0x00,
4598     0x00,
4599     0x00,
4600     0x00,
4601     0x00,
4602     0x00,
4603     0x00,
4604     0x00,
4605     0x00,
4606     0x00,
4607     0x00,
4608     0x00,
4609     0x00,
4610     0x00,
4611     0x00,
4612     0x00,
4613     0x00,
4614     0x00,
4615     0x00,
4616     0x00,
4617     0x00,
4618     0x00,
4619     0x00,
4620     0x00,
4621     0x00,
4622     0x00,
4623     0x00,
4624     0x00,
4625     0x00,
4626     0x00,
4627     0x00,
4628     0x00,
4629     0x00,
4630     0x00,
4631     0x00,
4632     0x00,
4633     0x00,
4634     0x00,
4635     0x00,
4636     0x00,
4637     0x00,
4638     0x00,
4639     0x00,
4640     0x00,
4641     0x00,
4642     0x00,
4643     0x00,
4644     0x00,
4645     0x00,
4646     0x00,
4647     0x00,
4648     0x00,
4649     0x00,
4650     0x00,
4651     0x00,
4652     0x00,
4653     0x00,
4654     0x00,
4655     0x00,
4656     0x00,
4657     0x00,
4658     0x00,
4659     0x00,
4660     0x00,
4661     0x00,
4662     0x00,
4663     0x00,
4664     0x00,
4665     0x00,
4666     0x00,
4667     0x00,
4668     0x00,
4669     0x00,
4670     0x00,
4671     0x00,
4672     0x00,
4673     0x00,
4674     0x00,
4675     0x00,
4676     0x00,
4677     0x00,
4678     0x00,
4679     0x00,
4680     0x00,
4681     0x00,
4682     0x00,
4683     0x00,
4684     0x00,
4685     0x00,
4686     0x00,
4687     0x00,
4688     0x00,
4689     0x00,
4690     0x00,
4691     0x00,
4692     0x00,
4693     0x00,
4694     0x00,
4695     0x00,
4696     0x00,
4697     0x00,
4698     0x00,
4699     0x00,
4700     0x00,
4701     0x00,
4702     0x00,
4703     0x00,
4704     0x00,
4705     0x00,
4706     0x00,
4707     0x00,
4708     0x00,
4709     0x00,
4710     0x00,
4711     0x00,
4712     0x00,
4713     0x00,
4714     0x00,
4715     0x00,
4716     0x00,
4717     0x00,
4718     0x00,
4719     0x00,
4720     0x00,
4721     0x00,
4722     0x00,
4723     0x06,
4724     0x00,
4725     0x40,
4726     0x5a,
4727     0x02,
4728     0x00,
4729     0x00,
4730     0x56,
4731     0x03,
4732     0x03,
4733     0xc3,
4734     0x45,
4735     0xe8,
4736     0xb8,
4737     0xf9,
4738     0x7c,
4739     0x9f,
4740     0x5d,
4741     0xcf,
4742     0x66,
4743     0x25,
4744     0xe4,
4745     0x91,
4746     0x0e,
4747     0xb0,
4748     0x5a,
4749     0x14,
4750     0xce,
4751     0xaf,
4752     0xea,
4753     0x83,
4754     0x12,
4755     0xde,
4756     0x68,
4757     0xd9,
4758     0x31,
4759     0xf2,
4760     0x23,
4761     0x11,
4762     0x3a,
4763     0x15,
4764     0xcb,
4765     0x00,
4766     0x13,
4767     0x02,
4768     0x00,
4769     0x00,
4770     0x2e,
4771     0x00,
4772     0x2b,
4773     0x00,
4774     0x02,
4775     0x03,
4776     0x04,
4777     0x00,
4778     0x33,
4779     0x00,
4780     0x24,
4781     0x00,
4782     0x1d,
4783     0x00,
4784     0x20,
4785     0xab,
4786     0xd3,
4787     0xc6,
4788     0x9f,
4789     0x36,
4790     0xd3,
4791     0x52,
4792     0x93,
4793     0x87,
4794     0xee,
4795     0x92,
4796     0x01,
4797     0xa2,
4798     0xd6,
4799     0x9a,
4800     0x5e,
4801     0x61,
4802     0x43,
4803     0xcc,
4804     0x4a,
4805     0xcc,
4806     0x7a,
4807     0xcd,
4808     0x83,
4809     0xb2,
4810     0xd9,
4811     0xad,
4812     0xd1,
4813     0x14,
4814     0xdc,
4815     0x84,
4816     0x61,
4817 };
4818 
4819 static const QUIC_PKT_HDR rx_script_6b_expect_hdr = {
4820     QUIC_PKT_TYPE_HANDSHAKE,
4821     0, /* Spin Bit */
4822     0, /* Key Phase */
4823     2, /* PN Length */
4824     0, /* Partial */
4825     1, /* Fixed */
4826     0, /* Unused */
4827     0, /* Reserved */
4828     1, /* Version */
4829     { 0, { 0 } }, /* DCID */
4830     { 4, { 0x36, 0xf4, 0x75, 0x2d } }, /* SCID */
4831     { 0 }, /* PN */
4832     NULL, 0, /* Token/Token Len */
4833     670, NULL
4834 };
4835 
4836 static const unsigned char rx_script_6b_body[] = {
4837     0x06,
4838     0x00,
4839     0x42,
4840     0x9a,
4841     0x08,
4842     0x00,
4843     0x00,
4844     0x80,
4845     0x00,
4846     0x7e,
4847     0x00,
4848     0x10,
4849     0x00,
4850     0x08,
4851     0x00,
4852     0x06,
4853     0x05,
4854     0x64,
4855     0x75,
4856     0x6d,
4857     0x6d,
4858     0x79,
4859     0x00,
4860     0x39,
4861     0x00,
4862     0x6e,
4863     0x47,
4864     0xfa,
4865     0x05,
4866     0x5a,
4867     0xe0,
4868     0xec,
4869     0x4a,
4870     0xf3,
4871     0x05,
4872     0x04,
4873     0x80,
4874     0x08,
4875     0x00,
4876     0x00,
4877     0x06,
4878     0x04,
4879     0x80,
4880     0x08,
4881     0x00,
4882     0x00,
4883     0x07,
4884     0x04,
4885     0x80,
4886     0x08,
4887     0x00,
4888     0x00,
4889     0x04,
4890     0x04,
4891     0x80,
4892     0x0c,
4893     0x00,
4894     0x00,
4895     0x08,
4896     0x02,
4897     0x40,
4898     0x64,
4899     0x09,
4900     0x02,
4901     0x40,
4902     0x64,
4903     0x01,
4904     0x04,
4905     0x80,
4906     0x00,
4907     0x75,
4908     0x30,
4909     0x03,
4910     0x02,
4911     0x45,
4912     0xac,
4913     0x0b,
4914     0x01,
4915     0x1a,
4916     0x0c,
4917     0x00,
4918     0x02,
4919     0x10,
4920     0x35,
4921     0xd7,
4922     0x7d,
4923     0x8b,
4924     0xc5,
4925     0xb1,
4926     0x89,
4927     0xb1,
4928     0x5c,
4929     0x23,
4930     0x74,
4931     0x50,
4932     0xfd,
4933     0x47,
4934     0xfe,
4935     0xd2,
4936     0x00,
4937     0x11,
4938     0x96,
4939     0x38,
4940     0x27,
4941     0xde,
4942     0x7d,
4943     0xfb,
4944     0x2b,
4945     0x38,
4946     0x56,
4947     0xe5,
4948     0x2a,
4949     0xb8,
4950     0x6b,
4951     0xfa,
4952     0xaa,
4953     0xde,
4954     0x81,
4955     0x0e,
4956     0x01,
4957     0x04,
4958     0x0f,
4959     0x04,
4960     0x36,
4961     0xf4,
4962     0x75,
4963     0x2d,
4964     0x10,
4965     0x04,
4966     0xac,
4967     0x88,
4968     0x95,
4969     0xbd,
4970     0x20,
4971     0x01,
4972     0x00,
4973     0x0b,
4974     0x00,
4975     0x01,
4976     0x8f,
4977     0x00,
4978     0x00,
4979     0x01,
4980     0x8b,
4981     0x00,
4982     0x01,
4983     0x86,
4984     0x30,
4985     0x82,
4986     0x01,
4987     0x82,
4988     0x30,
4989     0x82,
4990     0x01,
4991     0x29,
4992     0xa0,
4993     0x03,
4994     0x02,
4995     0x01,
4996     0x02,
4997     0x02,
4998     0x14,
4999     0x0a,
5000     0x73,
5001     0x0f,
5002     0x86,
5003     0x18,
5004     0xf2,
5005     0xc3,
5006     0x30,
5007     0x01,
5008     0xd2,
5009     0xc0,
5010     0xc1,
5011     0x62,
5012     0x52,
5013     0x13,
5014     0xf1,
5015     0x9c,
5016     0x13,
5017     0x39,
5018     0xb5,
5019     0x30,
5020     0x0a,
5021     0x06,
5022     0x08,
5023     0x2a,
5024     0x86,
5025     0x48,
5026     0xce,
5027     0x3d,
5028     0x04,
5029     0x03,
5030     0x02,
5031     0x30,
5032     0x17,
5033     0x31,
5034     0x15,
5035     0x30,
5036     0x13,
5037     0x06,
5038     0x03,
5039     0x55,
5040     0x04,
5041     0x03,
5042     0x0c,
5043     0x0c,
5044     0x6d,
5045     0x61,
5046     0x70,
5047     0x61,
5048     0x6b,
5049     0x74,
5050     0x2e,
5051     0x6c,
5052     0x6f,
5053     0x63,
5054     0x61,
5055     0x6c,
5056     0x30,
5057     0x1e,
5058     0x17,
5059     0x0d,
5060     0x32,
5061     0x32,
5062     0x30,
5063     0x38,
5064     0x30,
5065     0x32,
5066     0x31,
5067     0x32,
5068     0x30,
5069     0x30,
5070     0x31,
5071     0x38,
5072     0x5a,
5073     0x17,
5074     0x0d,
5075     0x32,
5076     0x32,
5077     0x30,
5078     0x39,
5079     0x30,
5080     0x31,
5081     0x31,
5082     0x32,
5083     0x30,
5084     0x30,
5085     0x31,
5086     0x38,
5087     0x5a,
5088     0x30,
5089     0x17,
5090     0x31,
5091     0x15,
5092     0x30,
5093     0x13,
5094     0x06,
5095     0x03,
5096     0x55,
5097     0x04,
5098     0x03,
5099     0x0c,
5100     0x0c,
5101     0x6d,
5102     0x61,
5103     0x70,
5104     0x61,
5105     0x6b,
5106     0x74,
5107     0x2e,
5108     0x6c,
5109     0x6f,
5110     0x63,
5111     0x61,
5112     0x6c,
5113     0x30,
5114     0x59,
5115     0x30,
5116     0x13,
5117     0x06,
5118     0x07,
5119     0x2a,
5120     0x86,
5121     0x48,
5122     0xce,
5123     0x3d,
5124     0x02,
5125     0x01,
5126     0x06,
5127     0x08,
5128     0x2a,
5129     0x86,
5130     0x48,
5131     0xce,
5132     0x3d,
5133     0x03,
5134     0x01,
5135     0x07,
5136     0x03,
5137     0x42,
5138     0x00,
5139     0x04,
5140     0x67,
5141     0xf4,
5142     0xd3,
5143     0x8f,
5144     0x15,
5145     0x6d,
5146     0xee,
5147     0x85,
5148     0xcc,
5149     0x2a,
5150     0x77,
5151     0xfc,
5152     0x0b,
5153     0x8f,
5154     0x9f,
5155     0xcf,
5156     0xa9,
5157     0x95,
5158     0x5d,
5159     0x5b,
5160     0xcd,
5161     0xb7,
5162     0x8b,
5163     0xba,
5164     0x31,
5165     0x0a,
5166     0x73,
5167     0x62,
5168     0xc5,
5169     0xd0,
5170     0x0e,
5171     0x07,
5172     0x90,
5173     0xae,
5174     0x38,
5175     0x43,
5176     0x79,
5177     0xce,
5178     0x5e,
5179     0x33,
5180     0xad,
5181     0x31,
5182     0xbf,
5183     0x9f,
5184     0x2a,
5185     0x56,
5186     0x83,
5187     0xa5,
5188     0x24,
5189     0x16,
5190     0xab,
5191     0x0c,
5192     0xf1,
5193     0x64,
5194     0xbe,
5195     0xe4,
5196     0x93,
5197     0xb5,
5198     0x89,
5199     0xd6,
5200     0x05,
5201     0xe4,
5202     0xf7,
5203     0x7b,
5204     0xa3,
5205     0x53,
5206     0x30,
5207     0x51,
5208     0x30,
5209     0x1d,
5210     0x06,
5211     0x03,
5212     0x55,
5213     0x1d,
5214     0x0e,
5215     0x04,
5216     0x16,
5217     0x04,
5218     0x14,
5219     0x02,
5220     0x64,
5221     0x0f,
5222     0x55,
5223     0x69,
5224     0x14,
5225     0x91,
5226     0x19,
5227     0xed,
5228     0xf9,
5229     0x1a,
5230     0xe9,
5231     0x1d,
5232     0xa5,
5233     0x5a,
5234     0xd0,
5235     0x48,
5236     0x96,
5237     0x9f,
5238     0x60,
5239     0x30,
5240     0x1f,
5241     0x06,
5242     0x03,
5243     0x55,
5244     0x1d,
5245     0x23,
5246     0x04,
5247     0x18,
5248     0x30,
5249     0x16,
5250     0x80,
5251     0x14,
5252     0x02,
5253     0x64,
5254     0x0f,
5255     0x55,
5256     0x69,
5257     0x14,
5258     0x91,
5259     0x19,
5260     0xed,
5261     0xf9,
5262     0x1a,
5263     0xe9,
5264     0x1d,
5265     0xa5,
5266     0x5a,
5267     0xd0,
5268     0x48,
5269     0x96,
5270     0x9f,
5271     0x60,
5272     0x30,
5273     0x0f,
5274     0x06,
5275     0x03,
5276     0x55,
5277     0x1d,
5278     0x13,
5279     0x01,
5280     0x01,
5281     0xff,
5282     0x04,
5283     0x05,
5284     0x30,
5285     0x03,
5286     0x01,
5287     0x01,
5288     0xff,
5289     0x30,
5290     0x0a,
5291     0x06,
5292     0x08,
5293     0x2a,
5294     0x86,
5295     0x48,
5296     0xce,
5297     0x3d,
5298     0x04,
5299     0x03,
5300     0x02,
5301     0x03,
5302     0x47,
5303     0x00,
5304     0x30,
5305     0x44,
5306     0x02,
5307     0x20,
5308     0x0a,
5309     0x82,
5310     0x92,
5311     0x6e,
5312     0xd3,
5313     0xc6,
5314     0x66,
5315     0xd9,
5316     0xd3,
5317     0x75,
5318     0xff,
5319     0x71,
5320     0x3b,
5321     0x61,
5322     0x46,
5323     0x21,
5324     0x00,
5325     0xe6,
5326     0x21,
5327     0x5d,
5328     0x9c,
5329     0x86,
5330     0xe9,
5331     0x65,
5332     0x40,
5333     0x4f,
5334     0xeb,
5335     0x70,
5336     0x4f,
5337     0x2c,
5338     0xad,
5339     0x00,
5340     0x02,
5341     0x20,
5342     0x08,
5343     0xc2,
5344     0x07,
5345     0x5d,
5346     0x16,
5347     0xfc,
5348     0x54,
5349     0x34,
5350     0x2b,
5351     0xb4,
5352     0x18,
5353     0x67,
5354     0x44,
5355     0x81,
5356     0xc9,
5357     0xa9,
5358     0x67,
5359     0x2e,
5360     0xce,
5361     0xa1,
5362     0x02,
5363     0x9f,
5364     0x3b,
5365     0xe5,
5366     0x61,
5367     0x16,
5368     0x0b,
5369     0x50,
5370     0xf6,
5371     0xa1,
5372     0x50,
5373     0x94,
5374     0x00,
5375     0x00,
5376     0x0f,
5377     0x00,
5378     0x00,
5379     0x4b,
5380     0x04,
5381     0x03,
5382     0x00,
5383     0x47,
5384     0x30,
5385     0x45,
5386     0x02,
5387     0x20,
5388     0x78,
5389     0x9e,
5390     0xe0,
5391     0x6a,
5392     0x7a,
5393     0xbd,
5394     0xc3,
5395     0x84,
5396     0x3d,
5397     0x25,
5398     0x6a,
5399     0x59,
5400     0x23,
5401     0x97,
5402     0x52,
5403     0x64,
5404     0x4e,
5405     0xb6,
5406     0x9f,
5407     0xcc,
5408     0xd3,
5409     0xd7,
5410     0xa9,
5411     0x29,
5412     0x44,
5413     0x75,
5414     0x6d,
5415     0x50,
5416     0xfc,
5417     0x22,
5418     0xde,
5419     0xd3,
5420     0x02,
5421     0x21,
5422     0x00,
5423     0xe5,
5424     0x28,
5425     0xd6,
5426     0x5a,
5427     0xd1,
5428     0xec,
5429     0x4a,
5430     0xcc,
5431     0x20,
5432     0xb4,
5433     0xea,
5434     0x15,
5435     0xfb,
5436     0x8e,
5437     0x73,
5438     0xa8,
5439     0x6b,
5440     0xbb,
5441     0x42,
5442     0x70,
5443     0x90,
5444     0x08,
5445     0x6e,
5446     0x74,
5447     0x6f,
5448     0x5a,
5449     0x05,
5450     0xb5,
5451     0x39,
5452     0xee,
5453     0x01,
5454     0x04,
5455     0x14,
5456     0x00,
5457     0x00,
5458     0x30,
5459     0xff,
5460     0x9f,
5461     0xb2,
5462     0x1d,
5463     0xcb,
5464     0x4f,
5465     0xfc,
5466     0x7a,
5467     0xac,
5468     0xf4,
5469     0x75,
5470     0x24,
5471     0x83,
5472     0x5f,
5473     0x8d,
5474     0xa3,
5475     0x3e,
5476     0x9d,
5477     0xef,
5478     0x43,
5479     0x67,
5480     0x89,
5481     0x5d,
5482     0x55,
5483     0xc7,
5484     0xce,
5485     0x80,
5486     0xab,
5487     0xc3,
5488     0xc7,
5489     0x74,
5490     0xc7,
5491     0xb2,
5492     0x91,
5493     0x27,
5494     0xce,
5495     0xd8,
5496     0x5e,
5497     0xc4,
5498     0x4e,
5499     0x96,
5500     0x19,
5501     0x68,
5502     0x2d,
5503     0xbe,
5504     0x6f,
5505     0x49,
5506     0xfa,
5507 };
5508 
5509 static const QUIC_PKT_HDR rx_script_6c_expect_hdr = {
5510     QUIC_PKT_TYPE_1RTT,
5511     0, /* Spin Bit */
5512     0, /* Key Phase */
5513     2, /* PN Length */
5514     0, /* Partial */
5515     1, /* Fixed */
5516     0, /* Unused */
5517     0, /* Reserved */
5518     0, /* Version */
5519     { 0, { 0 } }, /* DCID */
5520     { 0, { 0 } }, /* SCID */
5521     { 0 }, /* PN */
5522     NULL, 0, /* Token/Token Len */
5523     72, NULL
5524 };
5525 
5526 static const unsigned char rx_script_6c_body[] = {
5527     0x18,
5528     0x03,
5529     0x00,
5530     0x04,
5531     0xf2,
5532     0x94,
5533     0x49,
5534     0xc3,
5535     0x34,
5536     0xa1,
5537     0xf4,
5538     0x0f,
5539     0xcb,
5540     0xb8,
5541     0x03,
5542     0x04,
5543     0x1f,
5544     0xc8,
5545     0x69,
5546     0xb9,
5547     0x3b,
5548     0xd5,
5549     0xc6,
5550     0x93,
5551     0x18,
5552     0x02,
5553     0x00,
5554     0x04,
5555     0x9a,
5556     0x4f,
5557     0xec,
5558     0x52,
5559     0xde,
5560     0xd2,
5561     0xc8,
5562     0xb7,
5563     0x1c,
5564     0x0c,
5565     0xf3,
5566     0x4e,
5567     0x46,
5568     0xf0,
5569     0x6c,
5570     0x54,
5571     0x34,
5572     0x1b,
5573     0x0d,
5574     0x98,
5575     0x18,
5576     0x01,
5577     0x00,
5578     0x04,
5579     0xe3,
5580     0x33,
5581     0x9e,
5582     0x59,
5583     0x00,
5584     0x69,
5585     0xc3,
5586     0xac,
5587     0xfc,
5588     0x58,
5589     0x0e,
5590     0xa4,
5591     0xf4,
5592     0xf3,
5593     0x23,
5594     0x1b,
5595     0xd6,
5596     0x8e,
5597     0x5b,
5598     0x08,
5599 };
5600 
5601 static const struct rx_test_op rx_script_6[] = {
5602     RX_OP_ALLOW_1RTT()
5603         RX_OP_SET_RX_DCID(empty_conn_id)
5604             RX_OP_PROVIDE_SECRET_INITIAL(rx_script_6_c2s_init_dcid)
5605                 RX_OP_INJECT_N(6)
5606                     RX_OP_CHECK_PKT_N(6a)
5607                         RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
5608     RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
5609         QRL_SUITE_AES256GCM, rx_script_6_handshake_secret)
5610         RX_OP_CHECK_PKT_N(6b)
5611             RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
5612     RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
5613         QRL_SUITE_AES256GCM, rx_script_6_1rtt_secret)
5614         RX_OP_CHECK_PKT_N(6c)
5615             RX_OP_CHECK_NO_PKT()
5616 
5617     /* Discard Initial EL and try injecting the packet again */
5618     RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_INITIAL)
5619         RX_OP_INJECT_N(6)
5620     /* Initial packet is not output because we have discarded Initial keys */
5621     RX_OP_CHECK_PKT_N(6b)
5622         RX_OP_CHECK_PKT_N(6c)
5623             RX_OP_CHECK_NO_PKT()
5624     /* Try again with discarded keys */
5625     RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_HANDSHAKE)
5626         RX_OP_INJECT_N(6)
5627             RX_OP_CHECK_PKT_N(6c)
5628                 RX_OP_CHECK_NO_PKT()
5629     /* Try again */
5630     RX_OP_INJECT_N(6)
5631         RX_OP_CHECK_PKT_N(6c)
5632             RX_OP_CHECK_NO_PKT()
5633     /* Try again with discarded 1-RTT keys */
5634     RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_1RTT)
5635         RX_OP_INJECT_N(6)
5636             RX_OP_CHECK_NO_PKT()
5637 
5638     /* Recreate QRL, test reading packets received before key */
5639     RX_OP_SET_SCID_LEN(0)
5640         RX_OP_SET_RX_DCID(empty_conn_id)
5641             RX_OP_INJECT_N(6)
5642                 RX_OP_CHECK_NO_PKT()
5643                     RX_OP_PROVIDE_SECRET_INITIAL(rx_script_6_c2s_init_dcid)
5644                         RX_OP_CHECK_PKT_N(6a)
5645                             RX_OP_CHECK_NO_PKT()
5646                                 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
5647                                     QRL_SUITE_AES256GCM, rx_script_6_handshake_secret)
5648                                     RX_OP_CHECK_PKT_N(6b)
5649                                         RX_OP_CHECK_NO_PKT()
5650                                             RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
5651                                                 QRL_SUITE_AES256GCM, rx_script_6_1rtt_secret)
5652                                                 RX_OP_CHECK_PKT_N(6c)
5653                                                     RX_OP_CHECK_NO_PKT()
5654 
5655                                                         RX_OP_END
5656 };
5657 
5658 /*
5659  * 7. Real World - S2C Multiple Packets
5660  *      - Initial, Handshake, 1-RTT (ChaCha20-Poly1305)
5661  */
5662 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
5663 static const QUIC_CONN_ID rx_script_7_c2s_init_dcid = {
5664     4, { 0xfa, 0x5d, 0xd6, 0x80 }
5665 };
5666 
5667 static const unsigned char rx_script_7_handshake_secret[32] = {
5668     0x85,
5669     0x44,
5670     0xa4,
5671     0x02,
5672     0x46,
5673     0x5b,
5674     0x2a,
5675     0x92,
5676     0x80,
5677     0x71,
5678     0xfd,
5679     0x11,
5680     0x89,
5681     0x73,
5682     0x84,
5683     0xeb,
5684     0x3e,
5685     0x0d,
5686     0x89,
5687     0x4f,
5688     0x71,
5689     0xdc,
5690     0x9c,
5691     0xdd,
5692     0x55,
5693     0x77,
5694     0x9e,
5695     0x79,
5696     0x7b,
5697     0xeb,
5698     0xfa,
5699     0x86,
5700 };
5701 
5702 static const unsigned char rx_script_7_1rtt_secret[32] = {
5703     0x4a,
5704     0x77,
5705     0xb6,
5706     0x0e,
5707     0xfd,
5708     0x90,
5709     0xca,
5710     0xbf,
5711     0xc0,
5712     0x1a,
5713     0x64,
5714     0x9f,
5715     0xc0,
5716     0x03,
5717     0xd3,
5718     0x8d,
5719     0xc5,
5720     0x41,
5721     0x04,
5722     0x50,
5723     0xb1,
5724     0x5b,
5725     0x74,
5726     0xe7,
5727     0xe3,
5728     0x99,
5729     0x0c,
5730     0xdf,
5731     0x74,
5732     0x61,
5733     0x35,
5734     0xe6,
5735 };
5736 
5737 static const unsigned char rx_script_7_in[] = {
5738     /* First Packet: Initial */
5739     0xc2, /* Long, Initial, PN Length=2 bytes */
5740     0x00,
5741     0x00,
5742     0x00,
5743     0x01, /* Version */
5744     0x00, /* DCID */
5745     0x04,
5746     0x03,
5747     0x45,
5748     0x0c,
5749     0x7a, /* SCID */
5750     0x00, /* Token Length */
5751     0x41,
5752     0xcb, /* Length (459) */
5753     0x3c,
5754     0xe0, /* PN (0) */
5755     0x85,
5756     0x05,
5757     0xc2,
5758     0x4d,
5759     0x0f,
5760     0xf3,
5761     0x62,
5762     0x51,
5763     0x04,
5764     0x33,
5765     0xfa,
5766     0xb5,
5767     0xa3,
5768     0x02,
5769     0xbd,
5770     0x5c,
5771     0x22,
5772     0x0c,
5773     0x1d,
5774     0xda,
5775     0x06,
5776     0xf1,
5777     0xd7,
5778     0xe0,
5779     0xc8,
5780     0x56,
5781     0xb0,
5782     0x3d,
5783     0xc1,
5784     0x49,
5785     0x8c,
5786     0xc2,
5787     0x88,
5788     0x5a,
5789     0x0e,
5790     0xd5,
5791     0x67,
5792     0x72,
5793     0xec,
5794     0xcc,
5795     0x7a,
5796     0x2b,
5797     0x46,
5798     0x17,
5799     0x49,
5800     0x4b,
5801     0x28,
5802     0x6a,
5803     0x89,
5804     0x71,
5805     0xfd,
5806     0x31,
5807     0x9a,
5808     0xa1,
5809     0x97,
5810     0x64,
5811     0xe2,
5812     0xbf,
5813     0xa0,
5814     0x6d,
5815     0xf6,
5816     0x76,
5817     0x83,
5818     0x28,
5819     0xc4,
5820     0xd5,
5821     0x39,
5822     0x87,
5823     0x22,
5824     0x7c,
5825     0x11,
5826     0x9a,
5827     0x53,
5828     0x66,
5829     0xb4,
5830     0x27,
5831     0xf1,
5832     0xab,
5833     0x6f,
5834     0x49,
5835     0x43,
5836     0x3f,
5837     0x9a,
5838     0x23,
5839     0xd3,
5840     0x53,
5841     0x06,
5842     0xe8,
5843     0x14,
5844     0xfd,
5845     0xc0,
5846     0x67,
5847     0x1f,
5848     0x88,
5849     0x2a,
5850     0xa8,
5851     0xae,
5852     0x5f,
5853     0x05,
5854     0x0a,
5855     0xeb,
5856     0x66,
5857     0x72,
5858     0x8c,
5859     0x46,
5860     0xcc,
5861     0x54,
5862     0x21,
5863     0x5e,
5864     0x14,
5865     0xfe,
5866     0x68,
5867     0xc7,
5868     0xf7,
5869     0x60,
5870     0x67,
5871     0xb5,
5872     0xa7,
5873     0x0d,
5874     0xf4,
5875     0xe1,
5876     0xff,
5877     0x60,
5878     0xe3,
5879     0x11,
5880     0x38,
5881     0x92,
5882     0x90,
5883     0xc2,
5884     0x48,
5885     0x28,
5886     0xbf,
5887     0xf3,
5888     0x85,
5889     0x27,
5890     0xfe,
5891     0xbf,
5892     0x42,
5893     0x26,
5894     0x1a,
5895     0x4e,
5896     0x78,
5897     0xf1,
5898     0xf0,
5899     0x88,
5900     0x16,
5901     0x1b,
5902     0x64,
5903     0x5f,
5904     0x66,
5905     0x02,
5906     0x0b,
5907     0x45,
5908     0x3d,
5909     0x38,
5910     0xd9,
5911     0x09,
5912     0xd5,
5913     0xff,
5914     0xc2,
5915     0x68,
5916     0x02,
5917     0x2c,
5918     0xc4,
5919     0x3f,
5920     0x60,
5921     0x6e,
5922     0x2f,
5923     0x7f,
5924     0x43,
5925     0xf7,
5926     0x1a,
5927     0x37,
5928     0xcc,
5929     0xe0,
5930     0xe0,
5931     0x4b,
5932     0x96,
5933     0xc1,
5934     0xb1,
5935     0x8b,
5936     0x1c,
5937     0x7c,
5938     0x6e,
5939     0x80,
5940     0xe3,
5941     0x92,
5942     0x9b,
5943     0x86,
5944     0x87,
5945     0x1f,
5946     0x9a,
5947     0x6a,
5948     0x62,
5949     0x18,
5950     0xf4,
5951     0x86,
5952     0xc2,
5953     0x3e,
5954     0x33,
5955     0xa3,
5956     0xbf,
5957     0x43,
5958     0x96,
5959     0x6e,
5960     0xff,
5961     0x94,
5962     0xaf,
5963     0x6d,
5964     0x23,
5965     0x5c,
5966     0x42,
5967     0xed,
5968     0xe7,
5969     0xb9,
5970     0x2c,
5971     0x33,
5972     0xb0,
5973     0xc6,
5974     0x3d,
5975     0x44,
5976     0x00,
5977     0x0b,
5978     0xa3,
5979     0x39,
5980     0xa8,
5981     0xeb,
5982     0x8c,
5983     0x81,
5984     0x1a,
5985     0x99,
5986     0x20,
5987     0xbd,
5988     0xfa,
5989     0xf3,
5990     0xf4,
5991     0xf0,
5992     0x11,
5993     0xd8,
5994     0x41,
5995     0x31,
5996     0x8d,
5997     0xdc,
5998     0x0d,
5999     0x00,
6000     0xa6,
6001     0x31,
6002     0x40,
6003     0xc6,
6004     0xc6,
6005     0xad,
6006     0x74,
6007     0x93,
6008     0x62,
6009     0x1c,
6010     0x55,
6011     0xce,
6012     0x5f,
6013     0x8c,
6014     0x5b,
6015     0x3c,
6016     0xcb,
6017     0x25,
6018     0x5e,
6019     0xbf,
6020     0xed,
6021     0xbb,
6022     0x3c,
6023     0x97,
6024     0x4b,
6025     0x62,
6026     0xe0,
6027     0xba,
6028     0xf1,
6029     0xb0,
6030     0x30,
6031     0xbf,
6032     0x35,
6033     0x89,
6034     0x7e,
6035     0x25,
6036     0x61,
6037     0x54,
6038     0x86,
6039     0x52,
6040     0x11,
6041     0x86,
6042     0x90,
6043     0xc3,
6044     0xf5,
6045     0xad,
6046     0xa0,
6047     0x96,
6048     0x30,
6049     0xb2,
6050     0xf0,
6051     0xa6,
6052     0x79,
6053     0x39,
6054     0x1c,
6055     0x51,
6056     0x42,
6057     0xa1,
6058     0x00,
6059     0x6f,
6060     0x55,
6061     0x7d,
6062     0xdc,
6063     0xd0,
6064     0x7c,
6065     0xcf,
6066     0x01,
6067     0x88,
6068     0x03,
6069     0xd7,
6070     0x2d,
6071     0x65,
6072     0x2b,
6073     0x40,
6074     0xee,
6075     0xba,
6076     0x10,
6077     0xd8,
6078     0x0c,
6079     0x85,
6080     0x14,
6081     0xb7,
6082     0x4d,
6083     0x9e,
6084     0x7d,
6085     0x7c,
6086     0xde,
6087     0x7f,
6088     0x0d,
6089     0x0e,
6090     0x3b,
6091     0x3d,
6092     0xe3,
6093     0xd3,
6094     0x63,
6095     0xc2,
6096     0xed,
6097     0xc7,
6098     0x41,
6099     0xaf,
6100     0x05,
6101     0x85,
6102     0x87,
6103     0x46,
6104     0x55,
6105     0x7e,
6106     0xbe,
6107     0x14,
6108     0x5b,
6109     0x98,
6110     0xae,
6111     0x6e,
6112     0x67,
6113     0x1a,
6114     0x65,
6115     0xc6,
6116     0xcf,
6117     0xe1,
6118     0x28,
6119     0x50,
6120     0x6b,
6121     0xb4,
6122     0xf6,
6123     0xba,
6124     0x63,
6125     0xbc,
6126     0xf1,
6127     0xd7,
6128     0xa4,
6129     0x97,
6130     0x2d,
6131     0x4d,
6132     0x04,
6133     0x26,
6134     0x96,
6135     0xec,
6136     0x0c,
6137     0xd4,
6138     0xae,
6139     0x6a,
6140     0xca,
6141     0x7e,
6142     0x65,
6143     0xc5,
6144     0x43,
6145     0x7e,
6146     0xf8,
6147     0x77,
6148     0x61,
6149     0xd0,
6150     0x2c,
6151     0xe5,
6152     0x37,
6153     0x0a,
6154     0xb3,
6155     0x7a,
6156     0x8c,
6157     0x2a,
6158     0xa1,
6159     0xdc,
6160     0x29,
6161     0xdb,
6162     0xec,
6163     0xca,
6164     0xdc,
6165     0xfe,
6166     0xdd,
6167     0x38,
6168     0xd2,
6169     0x13,
6170     0x9f,
6171     0x94,
6172     0x6d,
6173     0x5b,
6174     0x87,
6175     0xf3,
6176     0x15,
6177     0xa8,
6178     0xe5,
6179     0xe9,
6180     0x65,
6181     0x1d,
6182     0x4f,
6183     0x92,
6184     0x1b,
6185     0xf4,
6186     0xa6,
6187     0xa4,
6188     0xd6,
6189     0x22,
6190     0xfc,
6191     0x26,
6192     0x1b,
6193     0x35,
6194     0xa4,
6195     0x1c,
6196     0x88,
6197     0x9f,
6198     0x7d,
6199     0xe0,
6200     0x9a,
6201     0x89,
6202     0x0f,
6203     0x6c,
6204     0xc1,
6205     0xda,
6206     0x6e,
6207     0x45,
6208     0xce,
6209     0x74,
6210     0xb1,
6211     0xff,
6212 
6213     /* Second Packet: Handshake */
6214     0xeb, /* Long, Handshake, PN Length=2 bytes */
6215     0x00,
6216     0x00,
6217     0x00,
6218     0x01, /* Version */
6219     0x00, /* DCID */
6220     0x04,
6221     0x03,
6222     0x45,
6223     0x0c,
6224     0x7a, /* SCID */
6225     0x42,
6226     0xa3, /* Length (675) */
6227     0x43,
6228     0x29, /* PN (0) */
6229     0xff,
6230     0xdb,
6231     0xcf,
6232     0x3c,
6233     0x17,
6234     0xcf,
6235     0xdc,
6236     0x42,
6237     0x3a,
6238     0x59,
6239     0x88,
6240     0xdb,
6241     0x13,
6242     0xef,
6243     0x09,
6244     0x3d,
6245     0xf2,
6246     0x24,
6247     0xf3,
6248     0xeb,
6249     0xca,
6250     0xb0,
6251     0xe1,
6252     0xa4,
6253     0x67,
6254     0x64,
6255     0x65,
6256     0x80,
6257     0x5f,
6258     0x73,
6259     0x29,
6260     0x69,
6261     0x29,
6262     0xba,
6263     0x03,
6264     0x77,
6265     0x22,
6266     0xc8,
6267     0xa8,
6268     0xd5,
6269     0x21,
6270     0xf2,
6271     0xa2,
6272     0x30,
6273     0x7f,
6274     0x86,
6275     0x3a,
6276     0x8a,
6277     0xdd,
6278     0x92,
6279     0x33,
6280     0xa6,
6281     0x57,
6282     0x21,
6283     0x39,
6284     0xdd,
6285     0x34,
6286     0xb4,
6287     0x39,
6288     0xa7,
6289     0x6f,
6290     0x0a,
6291     0x14,
6292     0xba,
6293     0x9e,
6294     0x3b,
6295     0x3a,
6296     0x6a,
6297     0x4b,
6298     0xc5,
6299     0xda,
6300     0x44,
6301     0x82,
6302     0xca,
6303     0x52,
6304     0x86,
6305     0x68,
6306     0x8a,
6307     0x0c,
6308     0x5e,
6309     0xeb,
6310     0x1e,
6311     0x81,
6312     0x43,
6313     0x3a,
6314     0x59,
6315     0x2c,
6316     0x26,
6317     0x63,
6318     0xa3,
6319     0x89,
6320     0x92,
6321     0x80,
6322     0xe9,
6323     0x75,
6324     0xc2,
6325     0xdb,
6326     0xb9,
6327     0x58,
6328     0x6d,
6329     0xab,
6330     0xfd,
6331     0x21,
6332     0xe0,
6333     0x35,
6334     0x79,
6335     0x2e,
6336     0x56,
6337     0x7b,
6338     0xfb,
6339     0xb3,
6340     0x7a,
6341     0x05,
6342     0x33,
6343     0x0f,
6344     0x13,
6345     0xe5,
6346     0xef,
6347     0x04,
6348     0x41,
6349     0x69,
6350     0x85,
6351     0x91,
6352     0x24,
6353     0xce,
6354     0xb5,
6355     0x21,
6356     0x8d,
6357     0x0a,
6358     0x13,
6359     0xda,
6360     0xae,
6361     0x86,
6362     0x2f,
6363     0x25,
6364     0x1f,
6365     0x9c,
6366     0x70,
6367     0x8a,
6368     0xaa,
6369     0x05,
6370     0xeb,
6371     0x30,
6372     0x93,
6373     0x50,
6374     0xc1,
6375     0x39,
6376     0xab,
6377     0x99,
6378     0x8a,
6379     0x31,
6380     0xc1,
6381     0xc1,
6382     0x5e,
6383     0x39,
6384     0xcf,
6385     0x64,
6386     0x3f,
6387     0x9f,
6388     0x5c,
6389     0xa5,
6390     0xa1,
6391     0x88,
6392     0xb2,
6393     0x5f,
6394     0x23,
6395     0xcb,
6396     0x76,
6397     0xe5,
6398     0xf3,
6399     0x2d,
6400     0xa0,
6401     0xed,
6402     0xad,
6403     0xcf,
6404     0x30,
6405     0x05,
6406     0x44,
6407     0xdc,
6408     0xa5,
6409     0x81,
6410     0xb1,
6411     0x7f,
6412     0x78,
6413     0x0d,
6414     0x4d,
6415     0x96,
6416     0xa3,
6417     0xcb,
6418     0xcb,
6419     0x45,
6420     0xcf,
6421     0x5f,
6422     0x22,
6423     0xb8,
6424     0x93,
6425     0x2b,
6426     0x16,
6427     0xe0,
6428     0x1c,
6429     0x53,
6430     0x34,
6431     0x76,
6432     0x3b,
6433     0x7b,
6434     0x78,
6435     0xa1,
6436     0x46,
6437     0x40,
6438     0x43,
6439     0x4b,
6440     0x0e,
6441     0x1c,
6442     0xfd,
6443     0xcf,
6444     0x01,
6445     0xf1,
6446     0x2c,
6447     0xee,
6448     0xd0,
6449     0xbd,
6450     0x9f,
6451     0x44,
6452     0xd2,
6453     0xd7,
6454     0x13,
6455     0xf9,
6456     0x65,
6457     0x82,
6458     0xf5,
6459     0x42,
6460     0xec,
6461     0x9f,
6462     0x5d,
6463     0x51,
6464     0x5a,
6465     0x7b,
6466     0xf2,
6467     0x39,
6468     0xbb,
6469     0xa6,
6470     0x19,
6471     0x5c,
6472     0x73,
6473     0x95,
6474     0x65,
6475     0x5b,
6476     0x64,
6477     0x2f,
6478     0xda,
6479     0x50,
6480     0xd0,
6481     0x02,
6482     0x34,
6483     0x3f,
6484     0x35,
6485     0xc1,
6486     0xd6,
6487     0x31,
6488     0x3b,
6489     0xcf,
6490     0x3f,
6491     0x81,
6492     0x8d,
6493     0xe0,
6494     0x40,
6495     0xfd,
6496     0x6d,
6497     0x32,
6498     0x68,
6499     0xa4,
6500     0xf2,
6501     0x4e,
6502     0x3a,
6503     0x4a,
6504     0x42,
6505     0x2c,
6506     0x07,
6507     0x2d,
6508     0x27,
6509     0xa3,
6510     0x34,
6511     0xe7,
6512     0x27,
6513     0x87,
6514     0x80,
6515     0x76,
6516     0xc0,
6517     0xa0,
6518     0x72,
6519     0x05,
6520     0xf2,
6521     0x88,
6522     0x81,
6523     0xe3,
6524     0x32,
6525     0x00,
6526     0x76,
6527     0x8d,
6528     0x24,
6529     0x5c,
6530     0x97,
6531     0x2d,
6532     0xd6,
6533     0xb8,
6534     0x34,
6535     0xf8,
6536     0x1c,
6537     0x1a,
6538     0x6d,
6539     0xc7,
6540     0x3f,
6541     0xcf,
6542     0x56,
6543     0xae,
6544     0xec,
6545     0x26,
6546     0x74,
6547     0x53,
6548     0x69,
6549     0xcd,
6550     0x7a,
6551     0x97,
6552     0x29,
6553     0xab,
6554     0x12,
6555     0x7d,
6556     0x75,
6557     0xf8,
6558     0x8d,
6559     0x5b,
6560     0xc0,
6561     0x77,
6562     0x20,
6563     0xb6,
6564     0x6a,
6565     0x0b,
6566     0xce,
6567     0x98,
6568     0x50,
6569     0xca,
6570     0x47,
6571     0x42,
6572     0x1e,
6573     0x5d,
6574     0xc3,
6575     0x24,
6576     0x5a,
6577     0x47,
6578     0x48,
6579     0x3b,
6580     0xa0,
6581     0x9e,
6582     0x43,
6583     0xe9,
6584     0x8d,
6585     0x18,
6586     0x23,
6587     0xda,
6588     0x6f,
6589     0x8c,
6590     0xda,
6591     0xd0,
6592     0x3e,
6593     0xdb,
6594     0x37,
6595     0xff,
6596     0xfc,
6597     0x7e,
6598     0x17,
6599     0xbe,
6600     0x42,
6601     0xfd,
6602     0xdb,
6603     0x51,
6604     0xb1,
6605     0xa4,
6606     0xfd,
6607     0x9a,
6608     0x20,
6609     0x27,
6610     0x24,
6611     0x17,
6612     0x04,
6613     0x70,
6614     0xb6,
6615     0x21,
6616     0x87,
6617     0x88,
6618     0xe9,
6619     0xda,
6620     0x63,
6621     0xcb,
6622     0xcb,
6623     0x1d,
6624     0xaf,
6625     0x4a,
6626     0x46,
6627     0x76,
6628     0x88,
6629     0xa1,
6630     0xf8,
6631     0x48,
6632     0x6c,
6633     0x06,
6634     0xb4,
6635     0x62,
6636     0x1a,
6637     0x67,
6638     0x18,
6639     0xb0,
6640     0x1d,
6641     0x58,
6642     0x6a,
6643     0xfe,
6644     0x1f,
6645     0xf1,
6646     0x48,
6647     0xff,
6648     0xcb,
6649     0xa4,
6650     0xd1,
6651     0xa8,
6652     0x12,
6653     0x1f,
6654     0x45,
6655     0x94,
6656     0x2f,
6657     0x55,
6658     0x80,
6659     0x6a,
6660     0x06,
6661     0xcc,
6662     0x7b,
6663     0xb0,
6664     0xcc,
6665     0xb8,
6666     0x06,
6667     0x52,
6668     0x16,
6669     0xe3,
6670     0x6e,
6671     0x7e,
6672     0xb0,
6673     0x42,
6674     0xfd,
6675     0x3b,
6676     0x7e,
6677     0x0a,
6678     0x42,
6679     0x7b,
6680     0x73,
6681     0xaf,
6682     0x2c,
6683     0xf3,
6684     0xbd,
6685     0xe5,
6686     0x72,
6687     0x8c,
6688     0x16,
6689     0xb2,
6690     0xd7,
6691     0x7a,
6692     0x11,
6693     0xb6,
6694     0x9f,
6695     0xd1,
6696     0x69,
6697     0xc1,
6698     0x1a,
6699     0xe0,
6700     0x26,
6701     0x26,
6702     0x13,
6703     0xe2,
6704     0x75,
6705     0xf5,
6706     0x74,
6707     0xae,
6708     0x3f,
6709     0xee,
6710     0x1e,
6711     0x09,
6712     0x63,
6713     0x5a,
6714     0x30,
6715     0x19,
6716     0xa5,
6717     0x59,
6718     0x48,
6719     0x90,
6720     0x9b,
6721     0x46,
6722     0x56,
6723     0xd8,
6724     0x6f,
6725     0x6b,
6726     0x76,
6727     0x82,
6728     0x32,
6729     0xc7,
6730     0x29,
6731     0x76,
6732     0x2e,
6733     0x32,
6734     0xb6,
6735     0x23,
6736     0x99,
6737     0xeb,
6738     0x92,
6739     0x5d,
6740     0xc4,
6741     0x4c,
6742     0xa1,
6743     0xe9,
6744     0x26,
6745     0x37,
6746     0x9a,
6747     0x7d,
6748     0x4c,
6749     0x16,
6750     0x9c,
6751     0x18,
6752     0xe9,
6753     0xc0,
6754     0xff,
6755     0x48,
6756     0x79,
6757     0xb1,
6758     0x7b,
6759     0x0b,
6760     0x1e,
6761     0x6f,
6762     0xb1,
6763     0x77,
6764     0xa5,
6765     0xd2,
6766     0xc6,
6767     0x9a,
6768     0xa9,
6769     0xfc,
6770     0xd1,
6771     0x0f,
6772     0x69,
6773     0xf3,
6774     0xe0,
6775     0x49,
6776     0x70,
6777     0x57,
6778     0x80,
6779     0x86,
6780     0xa7,
6781     0x3f,
6782     0x54,
6783     0xa8,
6784     0x60,
6785     0xfb,
6786     0xe4,
6787     0x06,
6788     0xa3,
6789     0x13,
6790     0xb9,
6791     0x2f,
6792     0xa7,
6793     0x37,
6794     0x80,
6795     0x0c,
6796     0x43,
6797     0xac,
6798     0x2f,
6799     0xae,
6800     0x6e,
6801     0x62,
6802     0x2b,
6803     0x53,
6804     0xe4,
6805     0xfe,
6806     0x58,
6807     0xd7,
6808     0x8b,
6809     0x96,
6810     0xdc,
6811     0xe6,
6812     0xd3,
6813     0x86,
6814     0xb8,
6815     0xd6,
6816     0x42,
6817     0x5b,
6818     0x68,
6819     0x03,
6820     0x48,
6821     0x3f,
6822     0xcd,
6823     0xee,
6824     0x39,
6825     0x8b,
6826     0xc4,
6827     0x53,
6828     0x30,
6829     0x87,
6830     0x48,
6831     0x2a,
6832     0x01,
6833     0x9d,
6834     0x6f,
6835     0x8e,
6836     0x36,
6837     0x75,
6838     0x73,
6839     0xef,
6840     0x77,
6841     0x3a,
6842     0x82,
6843     0xd8,
6844     0x4c,
6845     0x0e,
6846     0x7f,
6847     0xb3,
6848     0x8f,
6849     0x16,
6850     0xd1,
6851     0x10,
6852     0xcf,
6853     0x2f,
6854     0xa3,
6855     0xdf,
6856     0x65,
6857     0xba,
6858     0x91,
6859     0x79,
6860     0xf6,
6861     0x93,
6862     0x60,
6863     0x08,
6864     0xe5,
6865     0xdb,
6866     0x73,
6867     0x02,
6868     0x7a,
6869     0x0b,
6870     0x0e,
6871     0xcc,
6872     0x3b,
6873     0x1f,
6874     0x08,
6875     0x2d,
6876     0x51,
6877     0x3e,
6878     0x87,
6879     0x48,
6880     0xd3,
6881     0xd3,
6882     0x75,
6883     0xc2,
6884     0x28,
6885     0xa3,
6886     0xf3,
6887     0x02,
6888     0xde,
6889     0x8f,
6890     0xa6,
6891     0xbd,
6892     0xb3,
6893     0x19,
6894     0xa0,
6895     0xdb,
6896     0x48,
6897     0x51,
6898     0x03,
6899     0x5f,
6900     0x98,
6901     0xbe,
6902 
6903     /* Third Packet: 1-RTT */
6904     0x5c, /* Short, 1-RTT, Spin=0, KP=0, PN Length=2 bytes */
6905     0x4f,
6906     0x33, /* PN (0) */
6907     0x16,
6908     0x75,
6909     0x98,
6910     0x67,
6911     0x04,
6912     0x16,
6913     0x61,
6914     0xe3,
6915     0x00,
6916     0xb7,
6917     0x9d,
6918     0x5c,
6919     0x53,
6920     0x4c,
6921     0x26,
6922     0x90,
6923     0x92,
6924     0x8e,
6925     0x0e,
6926     0xc0,
6927     0x9c,
6928     0x6d,
6929     0x8b,
6930     0xac,
6931     0x15,
6932     0x6d,
6933     0x89,
6934     0x74,
6935     0x2f,
6936     0xe7,
6937     0x84,
6938     0xe3,
6939     0x46,
6940     0x46,
6941     0x8c,
6942     0xc1,
6943     0x21,
6944     0x7c,
6945     0x44,
6946     0xa5,
6947     0x00,
6948     0x29,
6949     0xca,
6950     0xf2,
6951     0x11,
6952     0x18,
6953     0xe0,
6954     0x04,
6955     0x40,
6956     0x55,
6957     0xd2,
6958     0xa7,
6959     0xe5,
6960     0x9d,
6961     0x22,
6962     0xa2,
6963     0x2a,
6964     0x6c,
6965     0x03,
6966     0x87,
6967     0xa3,
6968     0xa3,
6969     0xfa,
6970     0xf5,
6971     0x6c,
6972     0xd7,
6973     0x7d,
6974     0xae,
6975     0x3f,
6976     0x28,
6977     0x01,
6978     0xae,
6979     0x06,
6980     0x11,
6981     0x69,
6982     0x67,
6983     0x90,
6984     0x57,
6985     0x5a,
6986     0xd0,
6987     0xeb,
6988     0xdd,
6989     0xac,
6990     0xbd,
6991     0x7f,
6992     0x33,
6993     0x86,
6994     0xbb,
6995 };
6996 
6997 static const QUIC_PKT_HDR rx_script_7a_expect_hdr = {
6998     QUIC_PKT_TYPE_INITIAL,
6999     0, /* Spin Bit */
7000     0, /* Key Phase */
7001     2, /* PN Length */
7002     0, /* Partial */
7003     1, /* Fixed */
7004     0, /* Unused */
7005     0, /* Reserved */
7006     1, /* Version */
7007     { 0, { 0 } }, /* DCID */
7008     { 4, { 0x03, 0x45, 0x0c, 0x7a } }, /* SCID */
7009     { 0 }, /* PN */
7010     NULL, 0, /* Token/Token Len */
7011     441, NULL
7012 };
7013 
7014 static const unsigned char rx_script_7a_body[] = {
7015     0x02,
7016     0x03,
7017     0x00,
7018     0x00,
7019     0x00,
7020     0x00,
7021     0x00,
7022     0x00,
7023     0x00,
7024     0x00,
7025     0x00,
7026     0x00,
7027     0x00,
7028     0x00,
7029     0x00,
7030     0x00,
7031     0x00,
7032     0x00,
7033     0x00,
7034     0x00,
7035     0x00,
7036     0x00,
7037     0x00,
7038     0x00,
7039     0x00,
7040     0x00,
7041     0x00,
7042     0x00,
7043     0x00,
7044     0x00,
7045     0x00,
7046     0x00,
7047     0x00,
7048     0x00,
7049     0x00,
7050     0x00,
7051     0x00,
7052     0x00,
7053     0x00,
7054     0x00,
7055     0x00,
7056     0x00,
7057     0x00,
7058     0x00,
7059     0x00,
7060     0x00,
7061     0x00,
7062     0x00,
7063     0x00,
7064     0x00,
7065     0x00,
7066     0x00,
7067     0x00,
7068     0x00,
7069     0x00,
7070     0x00,
7071     0x00,
7072     0x00,
7073     0x00,
7074     0x00,
7075     0x00,
7076     0x00,
7077     0x00,
7078     0x00,
7079     0x00,
7080     0x00,
7081     0x00,
7082     0x00,
7083     0x00,
7084     0x00,
7085     0x00,
7086     0x00,
7087     0x00,
7088     0x00,
7089     0x00,
7090     0x00,
7091     0x00,
7092     0x00,
7093     0x00,
7094     0x00,
7095     0x00,
7096     0x00,
7097     0x00,
7098     0x00,
7099     0x00,
7100     0x00,
7101     0x00,
7102     0x00,
7103     0x00,
7104     0x00,
7105     0x00,
7106     0x00,
7107     0x00,
7108     0x00,
7109     0x00,
7110     0x00,
7111     0x00,
7112     0x00,
7113     0x00,
7114     0x00,
7115     0x00,
7116     0x00,
7117     0x00,
7118     0x00,
7119     0x00,
7120     0x00,
7121     0x00,
7122     0x00,
7123     0x00,
7124     0x00,
7125     0x00,
7126     0x00,
7127     0x00,
7128     0x00,
7129     0x00,
7130     0x00,
7131     0x00,
7132     0x00,
7133     0x00,
7134     0x00,
7135     0x00,
7136     0x00,
7137     0x00,
7138     0x00,
7139     0x00,
7140     0x00,
7141     0x00,
7142     0x00,
7143     0x00,
7144     0x00,
7145     0x00,
7146     0x00,
7147     0x00,
7148     0x00,
7149     0x00,
7150     0x00,
7151     0x00,
7152     0x00,
7153     0x00,
7154     0x00,
7155     0x00,
7156     0x00,
7157     0x00,
7158     0x00,
7159     0x00,
7160     0x00,
7161     0x00,
7162     0x00,
7163     0x00,
7164     0x00,
7165     0x00,
7166     0x00,
7167     0x00,
7168     0x00,
7169     0x00,
7170     0x00,
7171     0x00,
7172     0x00,
7173     0x00,
7174     0x00,
7175     0x00,
7176     0x00,
7177     0x00,
7178     0x00,
7179     0x00,
7180     0x00,
7181     0x00,
7182     0x00,
7183     0x00,
7184     0x00,
7185     0x00,
7186     0x00,
7187     0x00,
7188     0x00,
7189     0x00,
7190     0x00,
7191     0x00,
7192     0x00,
7193     0x00,
7194     0x00,
7195     0x00,
7196     0x00,
7197     0x00,
7198     0x00,
7199     0x00,
7200     0x00,
7201     0x00,
7202     0x00,
7203     0x00,
7204     0x00,
7205     0x00,
7206     0x00,
7207     0x00,
7208     0x00,
7209     0x00,
7210     0x00,
7211     0x00,
7212     0x00,
7213     0x00,
7214     0x00,
7215     0x00,
7216     0x00,
7217     0x00,
7218     0x00,
7219     0x00,
7220     0x00,
7221     0x00,
7222     0x00,
7223     0x00,
7224     0x00,
7225     0x00,
7226     0x00,
7227     0x00,
7228     0x00,
7229     0x00,
7230     0x00,
7231     0x00,
7232     0x00,
7233     0x00,
7234     0x00,
7235     0x00,
7236     0x00,
7237     0x00,
7238     0x00,
7239     0x00,
7240     0x00,
7241     0x00,
7242     0x00,
7243     0x00,
7244     0x00,
7245     0x00,
7246     0x00,
7247     0x00,
7248     0x00,
7249     0x00,
7250     0x00,
7251     0x00,
7252     0x00,
7253     0x00,
7254     0x00,
7255     0x00,
7256     0x00,
7257     0x00,
7258     0x00,
7259     0x00,
7260     0x00,
7261     0x00,
7262     0x00,
7263     0x00,
7264     0x00,
7265     0x00,
7266     0x00,
7267     0x00,
7268     0x00,
7269     0x00,
7270     0x00,
7271     0x00,
7272     0x00,
7273     0x00,
7274     0x00,
7275     0x00,
7276     0x00,
7277     0x00,
7278     0x00,
7279     0x00,
7280     0x00,
7281     0x00,
7282     0x00,
7283     0x00,
7284     0x00,
7285     0x00,
7286     0x00,
7287     0x00,
7288     0x00,
7289     0x00,
7290     0x00,
7291     0x00,
7292     0x00,
7293     0x00,
7294     0x00,
7295     0x00,
7296     0x00,
7297     0x00,
7298     0x00,
7299     0x00,
7300     0x00,
7301     0x00,
7302     0x00,
7303     0x00,
7304     0x00,
7305     0x00,
7306     0x00,
7307     0x00,
7308     0x00,
7309     0x00,
7310     0x00,
7311     0x00,
7312     0x00,
7313     0x00,
7314     0x00,
7315     0x00,
7316     0x00,
7317     0x00,
7318     0x00,
7319     0x00,
7320     0x00,
7321     0x00,
7322     0x00,
7323     0x00,
7324     0x00,
7325     0x00,
7326     0x00,
7327     0x00,
7328     0x00,
7329     0x00,
7330     0x00,
7331     0x00,
7332     0x00,
7333     0x00,
7334     0x00,
7335     0x00,
7336     0x00,
7337     0x00,
7338     0x00,
7339     0x00,
7340     0x00,
7341     0x00,
7342     0x00,
7343     0x00,
7344     0x00,
7345     0x00,
7346     0x00,
7347     0x00,
7348     0x00,
7349     0x00,
7350     0x00,
7351     0x00,
7352     0x00,
7353     0x00,
7354     0x00,
7355     0x00,
7356     0x00,
7357     0x00,
7358     0x00,
7359     0x00,
7360     0x00,
7361     0x00,
7362     0x06,
7363     0x00,
7364     0x40,
7365     0x5a,
7366     0x02,
7367     0x00,
7368     0x00,
7369     0x56,
7370     0x03,
7371     0x03,
7372     0xd5,
7373     0xfb,
7374     0x6a,
7375     0x81,
7376     0x1c,
7377     0xdb,
7378     0xa2,
7379     0x5c,
7380     0x11,
7381     0x31,
7382     0xda,
7383     0x15,
7384     0x28,
7385     0x97,
7386     0x94,
7387     0x83,
7388     0xfd,
7389     0x9d,
7390     0x91,
7391     0x0e,
7392     0x87,
7393     0x71,
7394     0x46,
7395     0x64,
7396     0xb4,
7397     0xd9,
7398     0x9e,
7399     0xbd,
7400     0xa8,
7401     0x48,
7402     0x32,
7403     0xbf,
7404     0x00,
7405     0x13,
7406     0x03,
7407     0x00,
7408     0x00,
7409     0x2e,
7410     0x00,
7411     0x2b,
7412     0x00,
7413     0x02,
7414     0x03,
7415     0x04,
7416     0x00,
7417     0x33,
7418     0x00,
7419     0x24,
7420     0x00,
7421     0x1d,
7422     0x00,
7423     0x20,
7424     0xef,
7425     0xbb,
7426     0x46,
7427     0xe9,
7428     0xb4,
7429     0xf6,
7430     0x54,
7431     0xc4,
7432     0x07,
7433     0x71,
7434     0xdc,
7435     0x50,
7436     0xd5,
7437     0x69,
7438     0x40,
7439     0xbc,
7440     0x85,
7441     0x7f,
7442     0xf9,
7443     0x48,
7444     0x14,
7445     0xe3,
7446     0xd6,
7447     0x08,
7448     0xa9,
7449     0x0b,
7450     0xfd,
7451     0xbe,
7452     0xf1,
7453     0x57,
7454     0x21,
7455     0x34,
7456 };
7457 
7458 static const QUIC_PKT_HDR rx_script_7b_expect_hdr = {
7459     QUIC_PKT_TYPE_HANDSHAKE,
7460     0, /* Spin Bit */
7461     0, /* Key Phase */
7462     2, /* PN Length */
7463     0, /* Partial */
7464     1, /* Fixed */
7465     0, /* Unused */
7466     0, /* Reserved */
7467     1, /* Version */
7468     { 0, { 0 } }, /* DCID */
7469     { 4, { 0x03, 0x45, 0x0c, 0x7a } }, /* SCID */
7470     { 0 }, /* PN */
7471     NULL, 0, /* Token/Token Len */
7472     657, NULL
7473 };
7474 
7475 static const unsigned char rx_script_7b_body[] = {
7476     0x06,
7477     0x00,
7478     0x42,
7479     0x8d,
7480     0x08,
7481     0x00,
7482     0x00,
7483     0x82,
7484     0x00,
7485     0x80,
7486     0x00,
7487     0x10,
7488     0x00,
7489     0x08,
7490     0x00,
7491     0x06,
7492     0x05,
7493     0x64,
7494     0x75,
7495     0x6d,
7496     0x6d,
7497     0x79,
7498     0x00,
7499     0x39,
7500     0x00,
7501     0x70,
7502     0x46,
7503     0x0a,
7504     0x0d,
7505     0xdc,
7506     0x59,
7507     0xf0,
7508     0x4e,
7509     0xb2,
7510     0x2c,
7511     0xac,
7512     0x69,
7513     0x6a,
7514     0xc9,
7515     0x77,
7516     0xa9,
7517     0x99,
7518     0x05,
7519     0x04,
7520     0x80,
7521     0x08,
7522     0x00,
7523     0x00,
7524     0x06,
7525     0x04,
7526     0x80,
7527     0x08,
7528     0x00,
7529     0x00,
7530     0x07,
7531     0x04,
7532     0x80,
7533     0x08,
7534     0x00,
7535     0x00,
7536     0x04,
7537     0x04,
7538     0x80,
7539     0x0c,
7540     0x00,
7541     0x00,
7542     0x08,
7543     0x02,
7544     0x40,
7545     0x64,
7546     0x09,
7547     0x02,
7548     0x40,
7549     0x64,
7550     0x01,
7551     0x04,
7552     0x80,
7553     0x00,
7554     0x75,
7555     0x30,
7556     0x03,
7557     0x02,
7558     0x45,
7559     0xac,
7560     0x0b,
7561     0x01,
7562     0x1a,
7563     0x0c,
7564     0x00,
7565     0x02,
7566     0x10,
7567     0x42,
7568     0xf0,
7569     0xed,
7570     0x09,
7571     0x07,
7572     0x5b,
7573     0xd9,
7574     0x5a,
7575     0xb2,
7576     0x39,
7577     0x5d,
7578     0x73,
7579     0x2c,
7580     0x57,
7581     0x1f,
7582     0x50,
7583     0x00,
7584     0x0b,
7585     0xe0,
7586     0x3e,
7587     0xf3,
7588     0xd6,
7589     0x91,
7590     0x6f,
7591     0x9c,
7592     0xcc,
7593     0x31,
7594     0xf7,
7595     0xa5,
7596     0x0e,
7597     0x01,
7598     0x04,
7599     0x0f,
7600     0x04,
7601     0x03,
7602     0x45,
7603     0x0c,
7604     0x7a,
7605     0x10,
7606     0x04,
7607     0xfa,
7608     0x5d,
7609     0xd6,
7610     0x80,
7611     0x20,
7612     0x01,
7613     0x00,
7614     0x0b,
7615     0x00,
7616     0x01,
7617     0x8f,
7618     0x00,
7619     0x00,
7620     0x01,
7621     0x8b,
7622     0x00,
7623     0x01,
7624     0x86,
7625     0x30,
7626     0x82,
7627     0x01,
7628     0x82,
7629     0x30,
7630     0x82,
7631     0x01,
7632     0x29,
7633     0xa0,
7634     0x03,
7635     0x02,
7636     0x01,
7637     0x02,
7638     0x02,
7639     0x14,
7640     0x0a,
7641     0x73,
7642     0x0f,
7643     0x86,
7644     0x18,
7645     0xf2,
7646     0xc3,
7647     0x30,
7648     0x01,
7649     0xd2,
7650     0xc0,
7651     0xc1,
7652     0x62,
7653     0x52,
7654     0x13,
7655     0xf1,
7656     0x9c,
7657     0x13,
7658     0x39,
7659     0xb5,
7660     0x30,
7661     0x0a,
7662     0x06,
7663     0x08,
7664     0x2a,
7665     0x86,
7666     0x48,
7667     0xce,
7668     0x3d,
7669     0x04,
7670     0x03,
7671     0x02,
7672     0x30,
7673     0x17,
7674     0x31,
7675     0x15,
7676     0x30,
7677     0x13,
7678     0x06,
7679     0x03,
7680     0x55,
7681     0x04,
7682     0x03,
7683     0x0c,
7684     0x0c,
7685     0x6d,
7686     0x61,
7687     0x70,
7688     0x61,
7689     0x6b,
7690     0x74,
7691     0x2e,
7692     0x6c,
7693     0x6f,
7694     0x63,
7695     0x61,
7696     0x6c,
7697     0x30,
7698     0x1e,
7699     0x17,
7700     0x0d,
7701     0x32,
7702     0x32,
7703     0x30,
7704     0x38,
7705     0x30,
7706     0x32,
7707     0x31,
7708     0x32,
7709     0x30,
7710     0x30,
7711     0x31,
7712     0x38,
7713     0x5a,
7714     0x17,
7715     0x0d,
7716     0x32,
7717     0x32,
7718     0x30,
7719     0x39,
7720     0x30,
7721     0x31,
7722     0x31,
7723     0x32,
7724     0x30,
7725     0x30,
7726     0x31,
7727     0x38,
7728     0x5a,
7729     0x30,
7730     0x17,
7731     0x31,
7732     0x15,
7733     0x30,
7734     0x13,
7735     0x06,
7736     0x03,
7737     0x55,
7738     0x04,
7739     0x03,
7740     0x0c,
7741     0x0c,
7742     0x6d,
7743     0x61,
7744     0x70,
7745     0x61,
7746     0x6b,
7747     0x74,
7748     0x2e,
7749     0x6c,
7750     0x6f,
7751     0x63,
7752     0x61,
7753     0x6c,
7754     0x30,
7755     0x59,
7756     0x30,
7757     0x13,
7758     0x06,
7759     0x07,
7760     0x2a,
7761     0x86,
7762     0x48,
7763     0xce,
7764     0x3d,
7765     0x02,
7766     0x01,
7767     0x06,
7768     0x08,
7769     0x2a,
7770     0x86,
7771     0x48,
7772     0xce,
7773     0x3d,
7774     0x03,
7775     0x01,
7776     0x07,
7777     0x03,
7778     0x42,
7779     0x00,
7780     0x04,
7781     0x67,
7782     0xf4,
7783     0xd3,
7784     0x8f,
7785     0x15,
7786     0x6d,
7787     0xee,
7788     0x85,
7789     0xcc,
7790     0x2a,
7791     0x77,
7792     0xfc,
7793     0x0b,
7794     0x8f,
7795     0x9f,
7796     0xcf,
7797     0xa9,
7798     0x95,
7799     0x5d,
7800     0x5b,
7801     0xcd,
7802     0xb7,
7803     0x8b,
7804     0xba,
7805     0x31,
7806     0x0a,
7807     0x73,
7808     0x62,
7809     0xc5,
7810     0xd0,
7811     0x0e,
7812     0x07,
7813     0x90,
7814     0xae,
7815     0x38,
7816     0x43,
7817     0x79,
7818     0xce,
7819     0x5e,
7820     0x33,
7821     0xad,
7822     0x31,
7823     0xbf,
7824     0x9f,
7825     0x2a,
7826     0x56,
7827     0x83,
7828     0xa5,
7829     0x24,
7830     0x16,
7831     0xab,
7832     0x0c,
7833     0xf1,
7834     0x64,
7835     0xbe,
7836     0xe4,
7837     0x93,
7838     0xb5,
7839     0x89,
7840     0xd6,
7841     0x05,
7842     0xe4,
7843     0xf7,
7844     0x7b,
7845     0xa3,
7846     0x53,
7847     0x30,
7848     0x51,
7849     0x30,
7850     0x1d,
7851     0x06,
7852     0x03,
7853     0x55,
7854     0x1d,
7855     0x0e,
7856     0x04,
7857     0x16,
7858     0x04,
7859     0x14,
7860     0x02,
7861     0x64,
7862     0x0f,
7863     0x55,
7864     0x69,
7865     0x14,
7866     0x91,
7867     0x19,
7868     0xed,
7869     0xf9,
7870     0x1a,
7871     0xe9,
7872     0x1d,
7873     0xa5,
7874     0x5a,
7875     0xd0,
7876     0x48,
7877     0x96,
7878     0x9f,
7879     0x60,
7880     0x30,
7881     0x1f,
7882     0x06,
7883     0x03,
7884     0x55,
7885     0x1d,
7886     0x23,
7887     0x04,
7888     0x18,
7889     0x30,
7890     0x16,
7891     0x80,
7892     0x14,
7893     0x02,
7894     0x64,
7895     0x0f,
7896     0x55,
7897     0x69,
7898     0x14,
7899     0x91,
7900     0x19,
7901     0xed,
7902     0xf9,
7903     0x1a,
7904     0xe9,
7905     0x1d,
7906     0xa5,
7907     0x5a,
7908     0xd0,
7909     0x48,
7910     0x96,
7911     0x9f,
7912     0x60,
7913     0x30,
7914     0x0f,
7915     0x06,
7916     0x03,
7917     0x55,
7918     0x1d,
7919     0x13,
7920     0x01,
7921     0x01,
7922     0xff,
7923     0x04,
7924     0x05,
7925     0x30,
7926     0x03,
7927     0x01,
7928     0x01,
7929     0xff,
7930     0x30,
7931     0x0a,
7932     0x06,
7933     0x08,
7934     0x2a,
7935     0x86,
7936     0x48,
7937     0xce,
7938     0x3d,
7939     0x04,
7940     0x03,
7941     0x02,
7942     0x03,
7943     0x47,
7944     0x00,
7945     0x30,
7946     0x44,
7947     0x02,
7948     0x20,
7949     0x0a,
7950     0x82,
7951     0x92,
7952     0x6e,
7953     0xd3,
7954     0xc6,
7955     0x66,
7956     0xd9,
7957     0xd3,
7958     0x75,
7959     0xff,
7960     0x71,
7961     0x3b,
7962     0x61,
7963     0x46,
7964     0x21,
7965     0x00,
7966     0xe6,
7967     0x21,
7968     0x5d,
7969     0x9c,
7970     0x86,
7971     0xe9,
7972     0x65,
7973     0x40,
7974     0x4f,
7975     0xeb,
7976     0x70,
7977     0x4f,
7978     0x2c,
7979     0xad,
7980     0x00,
7981     0x02,
7982     0x20,
7983     0x08,
7984     0xc2,
7985     0x07,
7986     0x5d,
7987     0x16,
7988     0xfc,
7989     0x54,
7990     0x34,
7991     0x2b,
7992     0xb4,
7993     0x18,
7994     0x67,
7995     0x44,
7996     0x81,
7997     0xc9,
7998     0xa9,
7999     0x67,
8000     0x2e,
8001     0xce,
8002     0xa1,
8003     0x02,
8004     0x9f,
8005     0x3b,
8006     0xe5,
8007     0x61,
8008     0x16,
8009     0x0b,
8010     0x50,
8011     0xf6,
8012     0xa1,
8013     0x50,
8014     0x94,
8015     0x00,
8016     0x00,
8017     0x0f,
8018     0x00,
8019     0x00,
8020     0x4c,
8021     0x04,
8022     0x03,
8023     0x00,
8024     0x48,
8025     0x30,
8026     0x46,
8027     0x02,
8028     0x21,
8029     0x00,
8030     0xaa,
8031     0x18,
8032     0x61,
8033     0x93,
8034     0xdf,
8035     0xbb,
8036     0x79,
8037     0xe7,
8038     0x34,
8039     0x7e,
8040     0x2e,
8041     0x61,
8042     0x13,
8043     0x8c,
8044     0xa0,
8045     0x33,
8046     0xfb,
8047     0x33,
8048     0xca,
8049     0xfc,
8050     0xd2,
8051     0x45,
8052     0xb0,
8053     0xc7,
8054     0x89,
8055     0x3d,
8056     0xf1,
8057     0xd6,
8058     0x54,
8059     0x94,
8060     0x05,
8061     0xb6,
8062     0x02,
8063     0x21,
8064     0x00,
8065     0xef,
8066     0x6c,
8067     0xb6,
8068     0xf2,
8069     0x00,
8070     0xb2,
8071     0x32,
8072     0xb1,
8073     0xf3,
8074     0x3f,
8075     0x59,
8076     0xf5,
8077     0xc8,
8078     0x18,
8079     0xbe,
8080     0x39,
8081     0xbb,
8082     0x27,
8083     0xf8,
8084     0x67,
8085     0xac,
8086     0xcb,
8087     0x63,
8088     0xa4,
8089     0x29,
8090     0xfb,
8091     0x8e,
8092     0x88,
8093     0x0f,
8094     0xe5,
8095     0xe9,
8096     0x7e,
8097     0x14,
8098     0x00,
8099     0x00,
8100     0x20,
8101     0xfc,
8102     0x2c,
8103     0x4c,
8104     0xa7,
8105     0x77,
8106     0x24,
8107     0x79,
8108     0x29,
8109     0xa8,
8110     0x82,
8111     0x1a,
8112     0x4d,
8113     0x58,
8114     0x9d,
8115     0x82,
8116     0xe2,
8117     0x09,
8118     0x36,
8119     0x63,
8120     0x0e,
8121     0x0b,
8122     0x55,
8123     0x51,
8124     0x80,
8125     0x93,
8126     0x40,
8127     0xda,
8128     0x41,
8129     0x33,
8130     0x08,
8131     0x10,
8132     0x2c,
8133 };
8134 
8135 static const QUIC_PKT_HDR rx_script_7c_expect_hdr = {
8136     QUIC_PKT_TYPE_1RTT,
8137     0, /* Spin Bit */
8138     0, /* Key Phase */
8139     2, /* PN Length */
8140     0, /* Partial */
8141     1, /* Fixed */
8142     0, /* Unused */
8143     0, /* Reserved */
8144     0, /* Version */
8145     { 0, { 0 } }, /* DCID */
8146     { 0, { 0 } }, /* SCID */
8147     { 0 }, /* PN */
8148     NULL, 0, /* Token/Token Len */
8149     72, NULL
8150 };
8151 
8152 static const unsigned char rx_script_7c_body[] = {
8153     0x18,
8154     0x03,
8155     0x00,
8156     0x04,
8157     0xf7,
8158     0x75,
8159     0x72,
8160     0xa2,
8161     0xfd,
8162     0x17,
8163     0xd4,
8164     0x82,
8165     0x8e,
8166     0xe9,
8167     0x5b,
8168     0xce,
8169     0xed,
8170     0xec,
8171     0x88,
8172     0xb9,
8173     0x73,
8174     0xbf,
8175     0x36,
8176     0x9f,
8177     0x18,
8178     0x02,
8179     0x00,
8180     0x04,
8181     0x5f,
8182     0x43,
8183     0x96,
8184     0xe4,
8185     0x15,
8186     0xdc,
8187     0x56,
8188     0x6b,
8189     0x67,
8190     0x4c,
8191     0x36,
8192     0xb2,
8193     0xe2,
8194     0x77,
8195     0xdc,
8196     0x6e,
8197     0xb9,
8198     0x2c,
8199     0x0d,
8200     0x79,
8201     0x18,
8202     0x01,
8203     0x00,
8204     0x04,
8205     0xcb,
8206     0x83,
8207     0x4a,
8208     0xf4,
8209     0x8d,
8210     0x7b,
8211     0x69,
8212     0x90,
8213     0xaf,
8214     0x0d,
8215     0xd2,
8216     0x38,
8217     0xa4,
8218     0xf1,
8219     0x94,
8220     0xff,
8221     0x63,
8222     0x24,
8223     0xd3,
8224     0x7a,
8225 };
8226 
8227 static const struct rx_test_op rx_script_7[] = {
8228     RX_OP_ALLOW_1RTT()
8229         RX_OP_SET_RX_DCID(empty_conn_id)
8230             RX_OP_PROVIDE_SECRET_INITIAL(rx_script_7_c2s_init_dcid)
8231                 RX_OP_INJECT_N(7)
8232                     RX_OP_CHECK_PKT_N(7a)
8233                         RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
8234     RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
8235         QRL_SUITE_CHACHA20POLY1305, rx_script_7_handshake_secret)
8236         RX_OP_CHECK_PKT_N(7b)
8237             RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
8238     RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
8239         QRL_SUITE_CHACHA20POLY1305, rx_script_7_1rtt_secret)
8240         RX_OP_CHECK_PKT_N(7c)
8241             RX_OP_CHECK_NO_PKT()
8242 
8243     /* Discard Initial EL and try injecting the packet again */
8244     RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_INITIAL)
8245         RX_OP_INJECT_N(7)
8246     /* Initial packet is not output because we have discarded Initial keys */
8247     RX_OP_CHECK_PKT_N(7b)
8248         RX_OP_CHECK_PKT_N(7c)
8249             RX_OP_CHECK_NO_PKT()
8250     /* Try again with discarded keys */
8251     RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_HANDSHAKE)
8252         RX_OP_INJECT_N(7)
8253             RX_OP_CHECK_PKT_N(7c)
8254                 RX_OP_CHECK_NO_PKT()
8255     /* Try again */
8256     RX_OP_INJECT_N(7)
8257         RX_OP_CHECK_PKT_N(7c)
8258             RX_OP_CHECK_NO_PKT()
8259     /* Try again with discarded 1-RTT keys */
8260     RX_OP_DISCARD_EL(QUIC_ENC_LEVEL_1RTT)
8261         RX_OP_INJECT_N(7)
8262             RX_OP_CHECK_NO_PKT()
8263 
8264     /* Recreate QRL, test reading packets received before key */
8265     RX_OP_SET_SCID_LEN(0)
8266         RX_OP_SET_RX_DCID(empty_conn_id)
8267             RX_OP_INJECT_N(7)
8268                 RX_OP_CHECK_NO_PKT()
8269                     RX_OP_PROVIDE_SECRET_INITIAL(rx_script_7_c2s_init_dcid)
8270                         RX_OP_CHECK_PKT_N(7a)
8271                             RX_OP_CHECK_NO_PKT()
8272                                 RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
8273                                     QRL_SUITE_CHACHA20POLY1305, rx_script_7_handshake_secret)
8274                                     RX_OP_CHECK_PKT_N(7b)
8275                                         RX_OP_CHECK_NO_PKT()
8276                                             RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
8277                                                 QRL_SUITE_CHACHA20POLY1305, rx_script_7_1rtt_secret)
8278                                                 RX_OP_CHECK_PKT_N(7c)
8279                                                     RX_OP_CHECK_NO_PKT()
8280 
8281                                                         RX_OP_END
8282 };
8283 #endif /* !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) */
8284 
8285 /*
8286  * 8. Real World - S2C Multiple Packets with Peer Initiated Key Phase Update
8287  */
8288 static const unsigned char rx_script_8_1rtt_secret[32] = {
8289     0x5f, 0x1f, 0x47, 0xea, 0xc3, 0xb2, 0xce, 0x73, 0xfb, 0xa2, 0x9f, 0xac,
8290     0xc3, 0xa0, 0xfe, 0x9b, 0xf3, 0xc0, 0xde, 0x5d, 0x33, 0x11, 0x1c, 0x70,
8291     0xdd, 0xb4, 0x06, 0xcc, 0xdf, 0x7d, 0xe9, 0x9a
8292 };
8293 
8294 static const unsigned char rx_script_8a_in[] = {
8295     0x51, /* Short, 1-RTT, PN Length=2 bytes, KP=0 */
8296     0xcb,
8297     0xf4, /* PN (4) */
8298     0x3f,
8299     0x68,
8300     0x7b,
8301     0xa8,
8302     0x2b,
8303     0xb9,
8304     0xfa,
8305     0x7d,
8306     0xe4,
8307     0x6b,
8308     0x20,
8309     0x48,
8310     0xd1,
8311     0x3c,
8312     0xcb,
8313     0x4b,
8314     0xef,
8315     0xb1,
8316     0xfd,
8317     0x5e,
8318     0x1b,
8319     0x19,
8320     0x83,
8321     0xa9,
8322     0x47,
8323     0x62,
8324     0xc1,
8325     0x6e,
8326     0xef,
8327     0x27,
8328     0xc3,
8329     0x9b,
8330     0x8f,
8331     0x3f,
8332     0xce,
8333     0x11,
8334     0x68,
8335     0xf5,
8336     0x73,
8337     0x0d,
8338     0xf2,
8339     0xdc,
8340     0xe0,
8341     0x28,
8342     0x28,
8343     0x79,
8344     0xa6,
8345     0x39,
8346     0xc3,
8347     0xb9,
8348     0xd3,
8349 };
8350 
8351 static const QUIC_PKT_HDR rx_script_8a_expect_hdr = {
8352     QUIC_PKT_TYPE_1RTT,
8353     0, /* Spin Bit */
8354     0, /* Key Phase */
8355     2, /* PN Length */
8356     0, /* Partial */
8357     1, /* Fixed */
8358     0, /* Unused */
8359     0, /* Reserved */
8360     0, /* Version */
8361     { 0, { 0 } }, /* DCID */
8362     { 0, { 0 } }, /* SCID */
8363     { 0, 4 }, /* PN */
8364     NULL, 0, /* Token/Token Len */
8365     35, NULL
8366 };
8367 
8368 static const unsigned char rx_script_8a_body[] = {
8369     0x02, 0x03, 0x06, 0x00, 0x03, 0x0c, 0x00, 0x1b, 0x49, 0x27, 0x6d, 0x20,
8370     0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x77, 0x6f, 0x6e,
8371     0x64, 0x65, 0x72, 0x66, 0x75, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65
8372 };
8373 
8374 static const unsigned char rx_script_8b_in[] = {
8375     0x52, /* Short, 1-RTT, PN Length=2 bytes, KP=1 */
8376     0x21,
8377     0x8e, /* PN (5) */
8378     0xa2,
8379     0x6a,
8380     0x9c,
8381     0x83,
8382     0x24,
8383     0x48,
8384     0xae,
8385     0x60,
8386     0x1e,
8387     0xc2,
8388     0xa5,
8389     0x91,
8390     0xfa,
8391     0xe5,
8392     0xf2,
8393     0x05,
8394     0x14,
8395     0x37,
8396     0x04,
8397     0x6a,
8398     0xa8,
8399     0xae,
8400     0x06,
8401     0x58,
8402     0xd7,
8403     0x85,
8404     0x48,
8405     0xd7,
8406     0x3b,
8407     0x85,
8408     0x9e,
8409     0x5a,
8410     0xb3,
8411     0x46,
8412     0x89,
8413     0x1b,
8414     0x4b,
8415     0x6e,
8416     0x1d,
8417     0xd1,
8418     0xfc,
8419     0xb7,
8420     0x47,
8421     0xda,
8422     0x6a,
8423     0x64,
8424     0x4b,
8425     0x8e,
8426     0xf2,
8427     0x69,
8428     0x16,
8429 };
8430 
8431 static const QUIC_PKT_HDR rx_script_8b_expect_hdr = {
8432     QUIC_PKT_TYPE_1RTT,
8433     0, /* Spin Bit */
8434     1, /* Key Phase */
8435     2, /* PN Length */
8436     0, /* Partial */
8437     1, /* Fixed */
8438     0, /* Unused */
8439     0, /* Reserved */
8440     0, /* Version */
8441     { 0, { 0 } }, /* DCID */
8442     { 0, { 0 } }, /* SCID */
8443     { 0, 5 }, /* PN */
8444     NULL, 0, /* Token/Token Len */
8445     35, NULL
8446 };
8447 
8448 static const unsigned char rx_script_8b_body[] = {
8449     0x02,
8450     0x04,
8451     0x03,
8452     0x00,
8453     0x00,
8454     0x0c,
8455     0x00,
8456     0x36,
8457     0x49,
8458     0x27,
8459     0x6d,
8460     0x20,
8461     0x68,
8462     0x61,
8463     0x76,
8464     0x69,
8465     0x6e,
8466     0x67,
8467     0x20,
8468     0x61,
8469     0x20,
8470     0x77,
8471     0x6f,
8472     0x6e,
8473     0x64,
8474     0x65,
8475     0x72,
8476     0x66,
8477     0x75,
8478     0x6c,
8479     0x20,
8480     0x74,
8481     0x69,
8482     0x6d,
8483     0x65,
8484 };
8485 
8486 static const unsigned char rx_script_8c_in[] = {
8487     0x5b, /* Short, 1-RTT, PN Length=2 bytes, KP=0 */
8488     0x98,
8489     0xd6, /* PN (3) */
8490     0x3c,
8491     0x6f,
8492     0x94,
8493     0x20,
8494     0x5e,
8495     0xfc,
8496     0x5b,
8497     0x3a,
8498     0x4a,
8499     0x65,
8500     0x1a,
8501     0x9a,
8502     0x6c,
8503     0x00,
8504     0x52,
8505     0xb6,
8506     0x0c,
8507     0x9b,
8508     0x07,
8509     0xf9,
8510     0x6f,
8511     0xbc,
8512     0x3d,
8513     0xb4,
8514     0x57,
8515     0xe0,
8516     0x15,
8517     0x74,
8518     0xfe,
8519     0x76,
8520     0xea,
8521     0x1f,
8522     0x23,
8523     0xae,
8524     0x22,
8525     0x62,
8526     0xb7,
8527     0x90,
8528     0x94,
8529     0x89,
8530     0x38,
8531     0x9b,
8532     0x5b,
8533     0x47,
8534     0xed,
8535 };
8536 
8537 static const QUIC_PKT_HDR rx_script_8c_expect_hdr = {
8538     QUIC_PKT_TYPE_1RTT,
8539     0, /* Spin Bit */
8540     0, /* Key Phase */
8541     2, /* PN Length */
8542     0, /* Partial */
8543     1, /* Fixed */
8544     0, /* Unused */
8545     0, /* Reserved */
8546     0, /* Version */
8547     { 0, { 0 } }, /* DCID */
8548     { 0, { 0 } }, /* SCID */
8549     { 0, 3 }, /* PN */
8550     NULL, 0, /* Token/Token Len */
8551     29, NULL
8552 };
8553 
8554 static const unsigned char rx_script_8c_body[] = {
8555     0x08,
8556     0x00,
8557     0x49,
8558     0x27,
8559     0x6d,
8560     0x20,
8561     0x68,
8562     0x61,
8563     0x76,
8564     0x69,
8565     0x6e,
8566     0x67,
8567     0x20,
8568     0x61,
8569     0x20,
8570     0x77,
8571     0x6f,
8572     0x6e,
8573     0x64,
8574     0x65,
8575     0x72,
8576     0x66,
8577     0x75,
8578     0x6c,
8579     0x20,
8580     0x74,
8581     0x69,
8582     0x6d,
8583     0x65,
8584 };
8585 
8586 static const unsigned char rx_script_8d_in[] = {
8587     0x55, /* Short, 1-RTT, PN Length=2 bytes, KP=1 */
8588     0x98,
8589     0x20, /* PN (6) */
8590     0x45,
8591     0x53,
8592     0x05,
8593     0x29,
8594     0x30,
8595     0x42,
8596     0x29,
8597     0x02,
8598     0xf2,
8599     0xa7,
8600     0x27,
8601     0xd6,
8602     0xb0,
8603     0xb7,
8604     0x30,
8605     0xad,
8606     0x45,
8607     0xd8,
8608     0x73,
8609     0xd7,
8610     0xe3,
8611     0x65,
8612     0xee,
8613     0xd9,
8614     0x35,
8615     0x33,
8616     0x03,
8617     0x3a,
8618     0x35,
8619     0x0b,
8620     0x59,
8621     0xa7,
8622     0xbc,
8623     0x23,
8624     0x37,
8625     0xc2,
8626     0x5e,
8627     0x13,
8628     0x88,
8629     0x18,
8630     0x79,
8631     0x94,
8632     0x6c,
8633     0x15,
8634     0xe3,
8635     0x1f,
8636     0x0d,
8637     0xd1,
8638     0xc3,
8639     0xfa,
8640     0x40,
8641     0xff,
8642 };
8643 
8644 static const QUIC_PKT_HDR rx_script_8d_expect_hdr = {
8645     QUIC_PKT_TYPE_1RTT,
8646     0, /* Spin Bit */
8647     1, /* Key Phase */
8648     2, /* PN Length */
8649     0, /* Partial */
8650     1, /* Fixed */
8651     0, /* Unused */
8652     0, /* Reserved */
8653     0, /* Version */
8654     { 0, { 0 } }, /* DCID */
8655     { 0, { 0 } }, /* SCID */
8656     { 0, 6 }, /* PN */
8657     NULL, 0, /* Token/Token Len */
8658     36, NULL
8659 };
8660 
8661 static const unsigned char rx_script_8d_body[] = {
8662     0x02,
8663     0x05,
8664     0x03,
8665     0x00,
8666     0x00,
8667     0x0c,
8668     0x00,
8669     0x40,
8670     0x51,
8671     0x49,
8672     0x27,
8673     0x6d,
8674     0x20,
8675     0x68,
8676     0x61,
8677     0x76,
8678     0x69,
8679     0x6e,
8680     0x67,
8681     0x20,
8682     0x61,
8683     0x20,
8684     0x77,
8685     0x6f,
8686     0x6e,
8687     0x64,
8688     0x65,
8689     0x72,
8690     0x66,
8691     0x75,
8692     0x6c,
8693     0x20,
8694     0x74,
8695     0x69,
8696     0x6d,
8697     0x65,
8698 };
8699 
8700 static const unsigned char rx_script_8e_in[] = {
8701     0x55, /* Short, 1-RTTT, PN Length=2 bytes, KP=0 */
8702     0x76,
8703     0x25, /* PN (10) */
8704     0x1c,
8705     0x0d,
8706     0x70,
8707     0x4c,
8708     0x2b,
8709     0xc5,
8710     0x7d,
8711     0x7b,
8712     0x77,
8713     0x64,
8714     0x03,
8715     0x27,
8716     0xb3,
8717     0x5d,
8718     0x83,
8719     0x9e,
8720     0x35,
8721     0x05,
8722     0x10,
8723     0xd2,
8724     0xa4,
8725     0x5c,
8726     0x83,
8727     0xd6,
8728     0x94,
8729     0x12,
8730     0x18,
8731     0xc5,
8732     0xb3,
8733     0x0f,
8734     0x0a,
8735     0xb1,
8736     0x8a,
8737     0x82,
8738     0x9f,
8739     0xd6,
8740     0xa9,
8741     0xab,
8742     0x40,
8743     0xc1,
8744     0x05,
8745     0xe8,
8746     0x1b,
8747     0x74,
8748     0xaa,
8749     0x8e,
8750     0xd6,
8751     0x8b,
8752     0xa5,
8753     0xa3,
8754     0x77,
8755     0x79,
8756 };
8757 
8758 static const QUIC_PKT_HDR rx_script_8e_expect_hdr = {
8759     QUIC_PKT_TYPE_1RTT,
8760     0, /* Spin Bit */
8761     0, /* Key Phase */
8762     2, /* PN Length */
8763     0, /* Partial */
8764     1, /* Fixed */
8765     0, /* Unused */
8766     0, /* Reserved */
8767     0, /* Version */
8768     { 0, { 0 } }, /* DCID */
8769     { 0, { 0 } }, /* SCID */
8770     { 0, 10 }, /* PN */
8771     NULL, 0, /* Token/Token Len */
8772     36, NULL
8773 };
8774 
8775 static const unsigned char rx_script_8e_body[] = {
8776     0x02,
8777     0x09,
8778     0x04,
8779     0x00,
8780     0x00,
8781     0x0c,
8782     0x00,
8783     0x40,
8784     0xbd,
8785     0x49,
8786     0x27,
8787     0x6d,
8788     0x20,
8789     0x68,
8790     0x61,
8791     0x76,
8792     0x69,
8793     0x6e,
8794     0x67,
8795     0x20,
8796     0x61,
8797     0x20,
8798     0x77,
8799     0x6f,
8800     0x6e,
8801     0x64,
8802     0x65,
8803     0x72,
8804     0x66,
8805     0x75,
8806     0x6c,
8807     0x20,
8808     0x74,
8809     0x69,
8810     0x6d,
8811     0x65,
8812 };
8813 
8814 static const unsigned char rx_script_8f_in[] = {
8815     0x48, /* Short, 1-RTT, PN Length=2 Bytes, KP=1 */
8816     0x4d, 0xf6, /* PN (15) */
8817     0x42, 0x86, 0xa1, 0xfa, 0x69, 0x6b, 0x1a, 0x45, 0xf2, 0xcd, 0xf6, 0x92,
8818     0xe1, 0xe6, 0x1a, 0x49, 0x37, 0xd7, 0x10, 0xae, 0x09, 0xbd
8819 };
8820 
8821 static const QUIC_PKT_HDR rx_script_8f_expect_hdr = {
8822     QUIC_PKT_TYPE_1RTT,
8823     0, /* Spin Bit */
8824     1, /* Key Phase */
8825     2, /* PN Length */
8826     0, /* Partial */
8827     1, /* Fixed */
8828     0, /* Unused */
8829     0, /* Reserved */
8830     0, /* Version */
8831     { 0, { 0 } }, /* DCID */
8832     { 0, { 0 } }, /* SCID */
8833     { 0, 15 }, /* PN */
8834     NULL, 0, /* Token/Token Len */
8835     6, NULL
8836 };
8837 
8838 static const unsigned char rx_script_8f_body[] = {
8839     0x02, 0x0e, 0x4c, 0x54, 0x00, 0x02
8840 };
8841 
8842 static const struct rx_test_op rx_script_8[] = {
8843     RX_OP_ALLOW_1RTT()
8844         RX_OP_SET_RX_DCID(empty_conn_id)
8845     /* Inject before we get the keys */
8846     RX_OP_INJECT_N(8a)
8847     /* Nothing yet */
8848     RX_OP_CHECK_NO_PKT()
8849     /* Provide keys */
8850     RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
8851         QRL_SUITE_AES128GCM, rx_script_8_1rtt_secret)
8852     /* Now the injected packet is successfully returned */
8853     RX_OP_CHECK_PKT_N(8a)
8854         RX_OP_CHECK_NO_PKT()
8855             RX_OP_CHECK_KEY_EPOCH(0)
8856                 RX_OP_CHECK_PKT_EPOCH(0)
8857 
8858     /* Packet with new key phase */
8859     RX_OP_INJECT_N(8b)
8860     /* Packet is successfully decrypted and returned */
8861     RX_OP_CHECK_PKT_N(8b)
8862         RX_OP_CHECK_NO_PKT()
8863     /* Key epoch has increased */
8864     RX_OP_CHECK_KEY_EPOCH(1)
8865         RX_OP_CHECK_PKT_EPOCH(1)
8866 
8867     /*
8868      * Now inject an old packet with the old keys (perhaps reordered in
8869      * network).
8870      */
8871     RX_OP_INJECT_N(8c)
8872     /* Should still be decrypted OK */
8873     RX_OP_CHECK_PKT_N(8c)
8874         RX_OP_CHECK_NO_PKT()
8875     /* Epoch has not changed */
8876     RX_OP_CHECK_KEY_EPOCH(1)
8877         RX_OP_CHECK_PKT_EPOCH(0)
8878 
8879     /* Another packet with the new keys. */
8880     RX_OP_INJECT_N(8d)
8881         RX_OP_CHECK_PKT_N(8d)
8882             RX_OP_CHECK_NO_PKT()
8883                 RX_OP_CHECK_KEY_EPOCH(1)
8884                     RX_OP_CHECK_PKT_EPOCH(1)
8885 
8886     /* We can inject the old packet multiple times and it still works */
8887     RX_OP_INJECT_N(8c)
8888         RX_OP_CHECK_PKT_N(8c)
8889             RX_OP_CHECK_NO_PKT()
8890                 RX_OP_CHECK_KEY_EPOCH(1)
8891                     RX_OP_CHECK_PKT_EPOCH(0)
8892 
8893     /* Until we move from UPDATING to COOLDOWN */
8894     RX_OP_KEY_UPDATE_TIMEOUT(0)
8895         RX_OP_INJECT_N(8c)
8896             RX_OP_CHECK_NO_PKT()
8897                 RX_OP_CHECK_KEY_EPOCH(1)
8898 
8899     /*
8900      * Injecting a packet from the next epoch (epoch 2) while in COOLDOWN
8901      * doesn't work
8902      */
8903     RX_OP_INJECT_N(8e)
8904         RX_OP_CHECK_NO_PKT()
8905             RX_OP_CHECK_KEY_EPOCH(1)
8906 
8907     /* Move from COOLDOWN to NORMAL and try again */
8908     RX_OP_KEY_UPDATE_TIMEOUT(1)
8909         RX_OP_INJECT_N(8e)
8910             RX_OP_CHECK_PKT_N(8e)
8911                 RX_OP_CHECK_NO_PKT()
8912                     RX_OP_CHECK_KEY_EPOCH(2)
8913                         RX_OP_CHECK_PKT_EPOCH(2)
8914 
8915     /* Can still receive old packet */
8916     RX_OP_INJECT_N(8d)
8917         RX_OP_CHECK_PKT_N(8d)
8918             RX_OP_CHECK_NO_PKT()
8919                 RX_OP_CHECK_KEY_EPOCH(2)
8920                     RX_OP_CHECK_PKT_EPOCH(1)
8921 
8922     /* Move straight from UPDATING to NORMAL */
8923     RX_OP_KEY_UPDATE_TIMEOUT(1)
8924 
8925     /* Try a packet from epoch 3 */
8926     RX_OP_INJECT_N(8f)
8927         RX_OP_CHECK_PKT_N(8f)
8928             RX_OP_CHECK_NO_PKT()
8929                 RX_OP_CHECK_KEY_EPOCH(3)
8930                     RX_OP_CHECK_PKT_EPOCH(3)
8931 
8932                         RX_OP_END
8933 };
8934 
8935 /* 9. 1-RTT Deferral Test */
8936 static const struct rx_test_op rx_script_9[] = {
8937     RX_OP_SET_RX_DCID(empty_conn_id)
8938         RX_OP_PROVIDE_SECRET_INITIAL(rx_script_5_c2s_init_dcid)
8939             RX_OP_INJECT_N(5)
8940 
8941                 RX_OP_CHECK_PKT_N(5a)
8942                     RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
8943     RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_HANDSHAKE,
8944         QRL_SUITE_AES128GCM, rx_script_5_handshake_secret)
8945         RX_OP_CHECK_PKT_N(5b)
8946             RX_OP_CHECK_NO_PKT() /* not got secret for next packet yet */
8947     RX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT,
8948         QRL_SUITE_AES128GCM, rx_script_5_1rtt_secret)
8949         RX_OP_CHECK_NO_PKT() /* still nothing - 1-RTT not enabled */
8950     RX_OP_ALLOW_1RTT()
8951         RX_OP_CHECK_PKT_N(5c) /* now we get the 1-RTT packet */
8952     RX_OP_CHECK_NO_PKT()
8953 
8954         RX_OP_END
8955 };
8956 
8957 static const struct rx_test_op *rx_scripts[] = {
8958     rx_script_1,
8959 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
8960     rx_script_2,
8961 #endif
8962     rx_script_3,
8963     rx_script_4,
8964     rx_script_5,
8965     rx_script_6,
8966 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
8967     rx_script_7,
8968 #endif
8969     rx_script_8,
8970     rx_script_9
8971 };
8972 
8973 struct rx_state {
8974     QUIC_DEMUX *demux;
8975 
8976     /* OSSL_QRX with necessary data */
8977     OSSL_QRX *qrx;
8978     OSSL_QRX_ARGS args;
8979 
8980     /* Used for the RX depacketizer */
8981     SSL_CTX *quic_ssl_ctx;
8982     QUIC_CONNECTION *quic_conn;
8983 
8984     QUIC_CONN_ID rx_dcid;
8985 
8986     int allow_1rtt;
8987 };
8988 
rx_state_teardown(struct rx_state * s)8989 static void rx_state_teardown(struct rx_state *s)
8990 {
8991     if (s->quic_conn != NULL) {
8992         SSL_free((SSL *)s->quic_conn);
8993         s->quic_conn = NULL;
8994     }
8995     if (s->quic_ssl_ctx != NULL) {
8996         SSL_CTX_free(s->quic_ssl_ctx);
8997         s->quic_ssl_ctx = NULL;
8998     }
8999 
9000     if (s->qrx != NULL) {
9001         ossl_qrx_free(s->qrx);
9002         s->qrx = NULL;
9003     }
9004 
9005     if (s->demux != NULL) {
9006         ossl_quic_demux_free(s->demux);
9007         s->demux = NULL;
9008     }
9009 }
9010 
9011 static uint64_t time_counter = 0;
9012 
expected_time(uint64_t counter)9013 static OSSL_TIME expected_time(uint64_t counter)
9014 {
9015     return ossl_time_multiply(ossl_ticks2time(OSSL_TIME_MS), counter);
9016 }
9017 
fake_time(void * arg)9018 static OSSL_TIME fake_time(void *arg)
9019 {
9020     return expected_time(++time_counter);
9021 }
9022 
demux_default_handler(QUIC_URXE * e,void * arg,const QUIC_CONN_ID * dcid)9023 static void demux_default_handler(QUIC_URXE *e, void *arg,
9024     const QUIC_CONN_ID *dcid)
9025 {
9026     struct rx_state *s = arg;
9027 
9028     if (dcid == NULL || !ossl_quic_conn_id_eq(dcid, &s->rx_dcid))
9029         return;
9030 
9031     ossl_qrx_inject_urxe(s->qrx, e);
9032 }
9033 
rx_state_ensure(struct rx_state * s)9034 static int rx_state_ensure(struct rx_state *s)
9035 {
9036     if (s->demux == NULL
9037         && !TEST_ptr(s->demux = ossl_quic_demux_new(NULL,
9038                          s->args.short_conn_id_len,
9039                          fake_time,
9040                          NULL)))
9041         return 0;
9042 
9043     s->args.demux = s->demux;
9044     s->args.max_deferred = 32;
9045 
9046     /* Initialise OSSL_QRX */
9047     if (s->qrx == NULL
9048         && !TEST_ptr(s->qrx = ossl_qrx_new(&s->args)))
9049         return 0;
9050 
9051     ossl_quic_demux_set_default_handler(s->demux, demux_default_handler, s);
9052 
9053     if (s->allow_1rtt)
9054         ossl_qrx_allow_1rtt_processing(s->qrx);
9055 
9056     return 1;
9057 }
9058 
rx_run_script(const struct rx_test_op * script)9059 static int rx_run_script(const struct rx_test_op *script)
9060 {
9061     int testresult = 0;
9062     struct rx_state s = { 0 };
9063     size_t i;
9064     OSSL_QRX_PKT *pkt = NULL;
9065     const struct rx_test_op *op = script;
9066     uint64_t last_key_epoch = UINT64_MAX;
9067 
9068     for (; op->op != RX_TEST_OP_END; ++op)
9069         switch (op->op) {
9070         case RX_TEST_OP_SET_SCID_LEN:
9071             rx_state_teardown(&s);
9072             s.args.short_conn_id_len = op->enc_level;
9073             break;
9074         case RX_TEST_OP_SET_INIT_LARGEST_PN:
9075             rx_state_teardown(&s);
9076             for (i = 0; i < QUIC_PN_SPACE_NUM; ++i)
9077                 s.args.init_largest_pn[i] = op->largest_pn;
9078             break;
9079         case RX_TEST_OP_SET_RX_DCID:
9080             if (!TEST_true(rx_state_ensure(&s)))
9081                 goto err;
9082             s.rx_dcid = *op->dcid;
9083             break;
9084         case RX_TEST_OP_PROVIDE_SECRET:
9085             if (!TEST_true(rx_state_ensure(&s)))
9086                 goto err;
9087             if (!TEST_true(ossl_qrx_provide_secret(s.qrx, op->enc_level,
9088                     op->suite_id, NULL,
9089                     op->buf,
9090                     op->buf_len)))
9091                 goto err;
9092             break;
9093         case RX_TEST_OP_PROVIDE_SECRET_INITIAL:
9094             if (!TEST_true(rx_state_ensure(&s)))
9095                 goto err;
9096             if (!TEST_true(ossl_quic_provide_initial_secret(NULL, NULL,
9097                     op->dcid, 0,
9098                     s.qrx, NULL)))
9099                 goto err;
9100             break;
9101         case RX_TEST_OP_DISCARD_EL:
9102             if (!TEST_true(rx_state_ensure(&s)))
9103                 goto err;
9104             if (!TEST_true(ossl_qrx_discard_enc_level(s.qrx, op->enc_level)))
9105                 goto err;
9106             break;
9107         case RX_TEST_OP_INJECT:
9108             if (!TEST_true(rx_state_ensure(&s)))
9109                 goto err;
9110             if (!TEST_true(ossl_quic_demux_inject(s.demux,
9111                     op->buf, op->buf_len,
9112                     NULL, NULL)))
9113                 goto err;
9114             break;
9115         case RX_TEST_OP_CHECK_PKT:
9116             if (!TEST_true(rx_state_ensure(&s)))
9117                 goto err;
9118 
9119             if (!TEST_true(ossl_qrx_read_pkt(s.qrx, &pkt)))
9120                 goto err;
9121 
9122             if (!TEST_ptr(pkt) || !TEST_ptr(pkt->hdr))
9123                 goto err;
9124 
9125             if (!TEST_mem_eq(pkt->hdr->data, pkt->hdr->len,
9126                     op->buf, op->buf_len))
9127                 goto err;
9128 
9129             if (!TEST_true(cmp_pkt_hdr(pkt->hdr, op->hdr,
9130                     op->buf, op->buf_len, 1)))
9131                 goto err;
9132 
9133             last_key_epoch = pkt->key_epoch;
9134 
9135             ossl_qrx_pkt_release(pkt);
9136             pkt = NULL;
9137             break;
9138         case RX_TEST_OP_CHECK_NO_PKT:
9139             if (!TEST_true(rx_state_ensure(&s)))
9140                 goto err;
9141 
9142             if (!TEST_false(ossl_qrx_read_pkt(s.qrx, &pkt)))
9143                 goto err;
9144 
9145             break;
9146         case RX_TEST_OP_CHECK_KEY_EPOCH:
9147             if (!TEST_true(rx_state_ensure(&s)))
9148                 goto err;
9149 
9150             if (!TEST_uint64_t_eq(ossl_qrx_get_key_epoch(s.qrx),
9151                     op->largest_pn))
9152                 goto err;
9153 
9154             break;
9155         case RX_TEST_OP_CHECK_PKT_EPOCH:
9156             if (!TEST_true(rx_state_ensure(&s)))
9157                 goto err;
9158 
9159             if (!TEST_uint64_t_eq(last_key_epoch, op->largest_pn))
9160                 goto err;
9161 
9162             break;
9163         case RX_TEST_OP_KEY_UPDATE_TIMEOUT:
9164             if (!TEST_true(rx_state_ensure(&s)))
9165                 goto err;
9166 
9167             if (!TEST_true(ossl_qrx_key_update_timeout(s.qrx,
9168                     op->enc_level)))
9169                 goto err;
9170 
9171             break;
9172         case RX_TEST_OP_SET_INIT_KEY_PHASE:
9173             rx_state_teardown(&s);
9174             s.args.init_key_phase_bit = (unsigned char)op->enc_level;
9175             break;
9176         case RX_TEST_OP_ALLOW_1RTT:
9177             s.allow_1rtt = 1;
9178 
9179             if (!TEST_true(rx_state_ensure(&s)))
9180                 goto err;
9181 
9182             break;
9183         default:
9184             OPENSSL_assert(0);
9185             goto err;
9186         }
9187 
9188     testresult = 1;
9189 err:
9190     ossl_qrx_pkt_release(pkt);
9191     rx_state_teardown(&s);
9192     return testresult;
9193 }
9194 
test_rx_script(int idx)9195 static int test_rx_script(int idx)
9196 {
9197     return rx_run_script(rx_scripts[idx]);
9198 }
9199 
9200 /* Packet Header Tests */
9201 struct pkt_hdr_test {
9202     QUIC_PKT_HDR hdr;
9203     const unsigned char *expected;
9204     size_t expected_len;
9205     const unsigned char *payload;
9206     size_t payload_len;
9207     size_t short_conn_id_len;
9208     /*
9209      * Minimum number of bytes which should be required for a successful decode.
9210      * SIZE_MAX if should never decode successfully.
9211      */
9212     size_t min_success_len;
9213     size_t pn_offset, sample_offset;
9214 };
9215 
9216 /* Packet Header Test 1: INITIAL With SCID */
9217 static const unsigned char pkt_hdr_test_1_expected[] = {
9218     0xc1, /* Long|Fixed, Type=Initial, PN Len=2 */
9219     0x00, 0x00, 0x00, 0x01, /* Version */
9220     0x00, /* DCID Length */
9221     0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
9222     0x00, /* Token Length */
9223     0x15, /* Length=21 */
9224     0x33, 0x44, /* Encoded PN */
9225     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
9226     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9227     0x20, 0x21, 0x22
9228 };
9229 
9230 static const unsigned char pkt_hdr_test_1_payload[] = {
9231     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
9232     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9233     0x20, 0x21, 0x22
9234 };
9235 
9236 static const struct pkt_hdr_test pkt_hdr_test_1 = {
9237     {
9238         QUIC_PKT_TYPE_INITIAL, /* type */
9239         0, /* spin bit */
9240         0, /* key phase */
9241         2, /* PN length */
9242         0, /* partial */
9243         1, /* fixed */
9244         0, /* unused */
9245         0, /* reserved */
9246         1, /* version */
9247         { 0, { 0 } }, /* DCID */
9248         { 8, { 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
9249         { 0x33, 0x44 }, /* PN */
9250         NULL, 0, /* Token/Token Len */
9251         19, NULL /* Len/Data */
9252     },
9253     pkt_hdr_test_1_expected, OSSL_NELEM(pkt_hdr_test_1_expected),
9254     pkt_hdr_test_1_payload, OSSL_NELEM(pkt_hdr_test_1_payload),
9255     0, sizeof(pkt_hdr_test_1_expected),
9256     17, 21
9257 };
9258 
9259 /* Packet Header Test 2: INITIAL With SCID and Token */
9260 static const unsigned char pkt_hdr_test_2_expected[] = {
9261     0xc1, /* Long|Fixed, Type=Initial, PN Len=2 */
9262     0x00, 0x00, 0x00, 0x01, /* Version */
9263     0x00, /* DCID Length */
9264     0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
9265     0x07, /* Token Length */
9266     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
9267     0x15, /* Length=21 */
9268     0x33, 0x44, /* Encoded PN */
9269     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
9270     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9271     0x20, 0x21, 0x22
9272 };
9273 
9274 static const unsigned char pkt_hdr_test_2_payload[] = {
9275     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
9276     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9277     0x20, 0x21, 0x22
9278 };
9279 
9280 static const unsigned char pkt_hdr_test_2_token[] = {
9281     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96
9282 };
9283 
9284 static const struct pkt_hdr_test pkt_hdr_test_2 = {
9285     {
9286         QUIC_PKT_TYPE_INITIAL, /* type */
9287         0, /* spin bit */
9288         0, /* key phase */
9289         2, /* PN length */
9290         0, /* partial */
9291         1, /* fixed */
9292         0, /* unused */
9293         0, /* reserved */
9294         1, /* version */
9295         { 0, { 0 } }, /* DCID */
9296         { 8, { 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
9297         { 0x33, 0x44 }, /* PN */
9298         pkt_hdr_test_2_token, sizeof(pkt_hdr_test_2_token), /* Token */
9299         19, NULL /* Len/Data */
9300     },
9301     pkt_hdr_test_2_expected, OSSL_NELEM(pkt_hdr_test_2_expected),
9302     pkt_hdr_test_2_payload, OSSL_NELEM(pkt_hdr_test_2_payload),
9303     0, sizeof(pkt_hdr_test_2_expected),
9304     24, 28
9305 };
9306 
9307 /* Packet Header Test 3: INITIAL With DCID and SCID and Token */
9308 static const unsigned char pkt_hdr_test_3_expected[] = {
9309     0xc1, /* Long|Fixed, Type=Initial, PN Len=2 */
9310     0x00, 0x00, 0x00, 0x01, /* Version */
9311     0x03, /* DCID Length */
9312     0x70, 0x71, 0x72, /* DCID */
9313     0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
9314     0x06, /* Token Length */
9315     0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
9316     0x15, /* Length=21 */
9317     0x33, 0x44, /* Encoded PN */
9318     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
9319     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9320     0x20, 0x21, 0x22
9321 };
9322 
9323 static const unsigned char pkt_hdr_test_3_payload[] = {
9324     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
9325     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9326     0x20, 0x21, 0x22
9327 };
9328 
9329 static const unsigned char pkt_hdr_test_3_token[] = {
9330     0x91, 0x92, 0x93, 0x94, 0x95, 0x96
9331 };
9332 
9333 static const struct pkt_hdr_test pkt_hdr_test_3 = {
9334     {
9335         QUIC_PKT_TYPE_INITIAL, /* type */
9336         0, /* spin bit */
9337         0, /* key phase */
9338         2, /* PN length */
9339         0, /* partial */
9340         1, /* fixed */
9341         0, /* unused */
9342         0, /* reserved */
9343         1, /* version */
9344         { 3, { 0x70, 0x71, 0x72 } }, /* DCID */
9345         { 8, { 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
9346         { 0x33, 0x44 }, /* PN */
9347         pkt_hdr_test_3_token, sizeof(pkt_hdr_test_3_token), /* Token */
9348         19, NULL /* Len/Data */
9349     },
9350     pkt_hdr_test_3_expected, OSSL_NELEM(pkt_hdr_test_3_expected),
9351     pkt_hdr_test_3_payload, OSSL_NELEM(pkt_hdr_test_3_payload),
9352     0, sizeof(pkt_hdr_test_3_expected),
9353     26, 30
9354 };
9355 
9356 /* Packet Header Test 4: 0-RTT */
9357 static const unsigned char pkt_hdr_test_4_expected[] = {
9358     0xd0, /* Long|Fixed, Type=0-RTT, PN Len=1 */
9359     0x00, 0x00, 0x00, 0x01, /* Version */
9360     0x03, /* DCID Length */
9361     0x70, 0x71, 0x72, /* DCID */
9362     0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
9363     0x14, /* Length=20 */
9364     0x33, /* Encoded PN */
9365     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
9366     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9367     0x20, 0x21, 0x22
9368 };
9369 
9370 static const unsigned char pkt_hdr_test_4_payload[] = {
9371     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
9372     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9373     0x20, 0x21, 0x22
9374 };
9375 
9376 static const struct pkt_hdr_test pkt_hdr_test_4 = {
9377     {
9378         QUIC_PKT_TYPE_0RTT, /* type */
9379         0, /* spin bit */
9380         0, /* key phase */
9381         1, /* PN length */
9382         0, /* partial */
9383         1, /* fixed */
9384         0, /* unused */
9385         0, /* reserved */
9386         1, /* version */
9387         { 3, { 0x70, 0x71, 0x72 } }, /* DCID */
9388         { 8, { 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
9389         { 0x33 }, /* PN */
9390         NULL, 0, /* Token */
9391         19, NULL /* Len/Data */
9392     },
9393     pkt_hdr_test_4_expected, OSSL_NELEM(pkt_hdr_test_4_expected),
9394     pkt_hdr_test_4_payload, OSSL_NELEM(pkt_hdr_test_4_payload),
9395     0, sizeof(pkt_hdr_test_4_expected),
9396     19, 23
9397 };
9398 
9399 /* Packet Header Test 5: Handshake */
9400 static const unsigned char pkt_hdr_test_5_expected[] = {
9401     0xe0, /* Long|Fixed, Type=Handshake, PN Len=1 */
9402     0x00, 0x00, 0x00, 0x01, /* Version */
9403     0x03, /* DCID Length */
9404     0x70, 0x71, 0x72, /* DCID */
9405     0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
9406     0x14, /* Length=20 */
9407     0x33, /* Encoded PN */
9408     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
9409     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9410     0x20, 0x21, 0x22
9411 };
9412 
9413 static const unsigned char pkt_hdr_test_5_payload[] = {
9414     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
9415     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9416     0x20, 0x21, 0x22
9417 };
9418 
9419 static const struct pkt_hdr_test pkt_hdr_test_5 = {
9420     {
9421         QUIC_PKT_TYPE_HANDSHAKE, /* type */
9422         0, /* spin bit */
9423         0, /* key phase */
9424         1, /* PN length */
9425         0, /* partial */
9426         1, /* fixed */
9427         0, /* unused */
9428         0, /* reserved */
9429         1, /* version */
9430         { 3, { 0x70, 0x71, 0x72 } }, /* DCID */
9431         { 8, { 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
9432         { 0x33 }, /* PN */
9433         NULL, 0, /* Token */
9434         19, NULL /* Len/Data */
9435     },
9436     pkt_hdr_test_5_expected, OSSL_NELEM(pkt_hdr_test_5_expected),
9437     pkt_hdr_test_5_payload, OSSL_NELEM(pkt_hdr_test_5_payload),
9438     0, sizeof(pkt_hdr_test_5_expected),
9439     19, 23
9440 };
9441 
9442 /* Packet Header Test 6: Retry */
9443 static const unsigned char pkt_hdr_test_6_expected[] = {
9444     0xf0, /* Long|Fixed, Type=Retry */
9445     0x00, 0x00, 0x00, 0x01, /* Version */
9446     0x03, /* DCID Length */
9447     0x70, 0x71, 0x72, /* DCID */
9448     0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
9449     0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* Retry Token */
9450     0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
9451     0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f /* Retry Integrity Tag */
9452 };
9453 
9454 static const unsigned char pkt_hdr_test_6_payload[] = {
9455     0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* Retry Token */
9456     0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
9457     0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f /* Retry Integrity Tag */
9458 };
9459 
9460 static const struct pkt_hdr_test pkt_hdr_test_6 = {
9461     {
9462         QUIC_PKT_TYPE_RETRY, /* type */
9463         0, /* spin bit */
9464         0, /* key phase */
9465         0, /* PN length */
9466         0, /* partial */
9467         1, /* fixed */
9468         0, /* unused */
9469         0, /* reserved */
9470         1, /* version */
9471         { 3, { 0x70, 0x71, 0x72 } }, /* DCID */
9472         { 8, { 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
9473         { 0 }, /* PN */
9474         NULL, 0, /* Token */
9475         24, NULL /* Len/Data */
9476     },
9477     pkt_hdr_test_6_expected, OSSL_NELEM(pkt_hdr_test_6_expected),
9478     pkt_hdr_test_6_payload, OSSL_NELEM(pkt_hdr_test_6_payload),
9479     0, 21,
9480     SIZE_MAX, SIZE_MAX
9481 };
9482 
9483 /* Packet Header Test 7: 1-RTT */
9484 static const unsigned char pkt_hdr_test_7_expected[] = {
9485     0x42, /* Short|Fixed, Type=1-RTT, PN Len=3 */
9486     0x70, 0x71, 0x72, /* DCID */
9487     0x50, 0x51, 0x52, /* PN */
9488     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
9489     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
9490 };
9491 
9492 static const unsigned char pkt_hdr_test_7_payload[] = {
9493     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
9494     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
9495 };
9496 
9497 static const struct pkt_hdr_test pkt_hdr_test_7 = {
9498     {
9499         QUIC_PKT_TYPE_1RTT, /* type */
9500         0, /* spin bit */
9501         0, /* key phase */
9502         3, /* PN length */
9503         0, /* partial */
9504         1, /* fixed */
9505         0, /* unused */
9506         0, /* reserved */
9507         0, /* version */
9508         { 3, { 0x70, 0x71, 0x72 } }, /* DCID */
9509         { 0, { 0 } }, /* SCID */
9510         { 0x50, 0x51, 0x52 }, /* PN */
9511         NULL, 0, /* Token */
9512         18, NULL /* Len/Data */
9513     },
9514     pkt_hdr_test_7_expected, OSSL_NELEM(pkt_hdr_test_7_expected),
9515     pkt_hdr_test_7_payload, OSSL_NELEM(pkt_hdr_test_7_payload),
9516     3, 21,
9517     4, 8
9518 };
9519 
9520 /* Packet Header Test 8: 1-RTT with Spin Bit */
9521 static const unsigned char pkt_hdr_test_8_expected[] = {
9522     0x62, /* Short|Fixed, Type=1-RTT, PN Len=3, Spin=1 */
9523     0x70, 0x71, 0x72, /* DCID */
9524     0x50, 0x51, 0x52, /* PN */
9525     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
9526     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
9527 };
9528 
9529 static const unsigned char pkt_hdr_test_8_payload[] = {
9530     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
9531     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
9532 };
9533 
9534 static const struct pkt_hdr_test pkt_hdr_test_8 = {
9535     {
9536         QUIC_PKT_TYPE_1RTT, /* type */
9537         1, /* spin bit */
9538         0, /* key phase */
9539         3, /* PN length */
9540         0, /* partial */
9541         1, /* fixed */
9542         0, /* unused */
9543         0, /* reserved */
9544         0, /* version */
9545         { 3, { 0x70, 0x71, 0x72 } }, /* DCID */
9546         { 0, { 0 } }, /* SCID */
9547         { 0x50, 0x51, 0x52 }, /* PN */
9548         NULL, 0, /* Token */
9549         18, NULL /* Len/Data */
9550     },
9551     pkt_hdr_test_8_expected, OSSL_NELEM(pkt_hdr_test_8_expected),
9552     pkt_hdr_test_8_payload, OSSL_NELEM(pkt_hdr_test_8_payload),
9553     3, 21,
9554     4, 8
9555 };
9556 
9557 /* Packet Header Test 9: 1-RTT with Key Phase Bit */
9558 static const unsigned char pkt_hdr_test_9_expected[] = {
9559     0x46, /* Short|Fixed, Type=1-RTT, PN Len=3, Key Phase=1 */
9560     0x70, 0x71, 0x72, /* DCID */
9561     0x50, 0x51, 0x52, /* PN */
9562     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
9563     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
9564 };
9565 
9566 static const unsigned char pkt_hdr_test_9_payload[] = {
9567     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
9568     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
9569 };
9570 
9571 static const struct pkt_hdr_test pkt_hdr_test_9 = {
9572     {
9573         QUIC_PKT_TYPE_1RTT, /* type */
9574         0, /* spin bit */
9575         1, /* key phase */
9576         3, /* PN length */
9577         0, /* partial */
9578         1, /* fixed */
9579         0, /* unused */
9580         0, /* reserved */
9581         0, /* version */
9582         { 3, { 0x70, 0x71, 0x72 } }, /* DCID */
9583         { 0, { 0 } }, /* SCID */
9584         { 0x50, 0x51, 0x52 }, /* PN */
9585         NULL, 0, /* Token */
9586         18, NULL /* Len/Data */
9587     },
9588     pkt_hdr_test_9_expected, OSSL_NELEM(pkt_hdr_test_9_expected),
9589     pkt_hdr_test_9_payload, OSSL_NELEM(pkt_hdr_test_9_payload),
9590     3, 21,
9591     4, 8
9592 };
9593 
9594 /* Packet Header Test 10: Handshake with 4-Byte PN */
9595 static const unsigned char pkt_hdr_test_10_expected[] = {
9596     0xe3, /* Long|Fixed, Type=Handshake, PN Len=4 */
9597     0x00, 0x00, 0x00, 0x01, /* Version */
9598     0x03, /* DCID Length */
9599     0x70, 0x71, 0x72, /* DCID */
9600     0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
9601     0x17, /* Length=20 */
9602     0x33, 0x44, 0x55, 0x66, /* Encoded PN */
9603     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
9604     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9605     0x20, 0x21, 0x22
9606 };
9607 
9608 static const unsigned char pkt_hdr_test_10_payload[] = {
9609     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
9610     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9611     0x20, 0x21, 0x22
9612 };
9613 
9614 static const struct pkt_hdr_test pkt_hdr_test_10 = {
9615     {
9616         QUIC_PKT_TYPE_HANDSHAKE, /* type */
9617         0, /* spin bit */
9618         0, /* key phase */
9619         4, /* PN length */
9620         0, /* partial */
9621         1, /* fixed */
9622         0, /* unused */
9623         0, /* reserved */
9624         1, /* version */
9625         { 3, { 0x70, 0x71, 0x72 } }, /* DCID */
9626         { 8, { 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
9627         { 0x33, 0x44, 0x55, 0x66 }, /* PN */
9628         NULL, 0, /* Token */
9629         19, NULL /* Len/Data */
9630     },
9631     pkt_hdr_test_10_expected, OSSL_NELEM(pkt_hdr_test_10_expected),
9632     pkt_hdr_test_10_payload, OSSL_NELEM(pkt_hdr_test_10_payload),
9633     0, sizeof(pkt_hdr_test_10_expected),
9634     19, 23
9635 };
9636 
9637 /* Packet Header Test 11: 1-RTT with 4-Byte PN */
9638 static const unsigned char pkt_hdr_test_11_expected[] = {
9639     0x43, /* Short|Fixed, Type=1-RTT, PN Len=4 */
9640     0x70, 0x71, 0x72, /* DCID */
9641     0x50, 0x51, 0x52, 0x53, /* PN */
9642     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
9643     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
9644 };
9645 
9646 static const unsigned char pkt_hdr_test_11_payload[] = {
9647     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
9648     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
9649 };
9650 
9651 static const struct pkt_hdr_test pkt_hdr_test_11 = {
9652     {
9653         QUIC_PKT_TYPE_1RTT, /* type */
9654         0, /* spin bit */
9655         0, /* key phase */
9656         4, /* PN length */
9657         0, /* partial */
9658         1, /* fixed */
9659         0, /* unused */
9660         0, /* reserved */
9661         0, /* version */
9662         { 3, { 0x70, 0x71, 0x72 } }, /* DCID */
9663         { 0, { 0 } }, /* SCID */
9664         { 0x50, 0x51, 0x52, 0x53 }, /* PN */
9665         NULL, 0, /* Token */
9666         18, NULL /* Len/Data */
9667     },
9668     pkt_hdr_test_11_expected, OSSL_NELEM(pkt_hdr_test_11_expected),
9669     pkt_hdr_test_11_payload, OSSL_NELEM(pkt_hdr_test_11_payload),
9670     3, 21,
9671     4, 8
9672 };
9673 
9674 /* Packet Header Test 12: Version Negotiation */
9675 static const unsigned char pkt_hdr_test_12_expected[] = {
9676     0xc0, /* Long|Fixed, Type=Version Neg */
9677     0x00, 0x00, 0x00, 0x00, /* Version (0) */
9678     0x03, 0x70, 0x71, 0x72, /* DCID */
9679     0x02, 0x81, 0x82, /* SCID */
9680     0x11, 0x22, 0x33, 0x44 /* One Version */
9681 };
9682 
9683 static const unsigned char pkt_hdr_test_12_payload[] = {
9684     0x11, 0x22, 0x33, 0x44
9685 };
9686 
9687 static const struct pkt_hdr_test pkt_hdr_test_12 = {
9688     {
9689         QUIC_PKT_TYPE_VERSION_NEG, /* type */
9690         0, /* spin bit */
9691         0, /* key phase */
9692         0, /* PN length */
9693         0, /* partial */
9694         1, /* fixed */
9695         0, /* unused */
9696         0, /* reserved */
9697         0, /* version */
9698         { 3, { 0x70, 0x71, 0x72 } }, /* DCID */
9699         { 2, { 0x81, 0x82 } }, /* SCID */
9700         { 0 }, /* PN */
9701         NULL, 0, /* Token */
9702         4, NULL /* Len/Data */
9703     },
9704     pkt_hdr_test_12_expected, OSSL_NELEM(pkt_hdr_test_12_expected),
9705     pkt_hdr_test_12_payload, OSSL_NELEM(pkt_hdr_test_12_payload),
9706     0, 12,
9707     SIZE_MAX, SIZE_MAX
9708 };
9709 
9710 /* Packet Header Test 13: Version Negotiation without Fixed Bit */
9711 static const unsigned char pkt_hdr_test_13_expected[] = {
9712     0x80, /* Long|Fixed, Type=Version Neg */
9713     0x00, 0x00, 0x00, 0x00, /* Version (0) */
9714     0x03, 0x70, 0x71, 0x72, /* DCID */
9715     0x02, 0x81, 0x82, /* SCID */
9716     0x11, 0x22, 0x33, 0x44 /* One Version */
9717 };
9718 
9719 static const unsigned char pkt_hdr_test_13_payload[] = {
9720     0x11, 0x22, 0x33, 0x44
9721 };
9722 
9723 static const struct pkt_hdr_test pkt_hdr_test_13 = {
9724     {
9725         QUIC_PKT_TYPE_VERSION_NEG, /* type */
9726         0, /* spin bit */
9727         0, /* key phase */
9728         0, /* PN length */
9729         0, /* partial */
9730         0, /* fixed */
9731         0, /* unused */
9732         0, /* reserved */
9733         0, /* version */
9734         { 3, { 0x70, 0x71, 0x72 } }, /* DCID */
9735         { 2, { 0x81, 0x82 } }, /* SCID */
9736         { 0 }, /* PN */
9737         NULL, 0, /* Token */
9738         4, NULL /* Len/Data */
9739     },
9740     pkt_hdr_test_13_expected, OSSL_NELEM(pkt_hdr_test_13_expected),
9741     pkt_hdr_test_13_payload, OSSL_NELEM(pkt_hdr_test_13_payload),
9742     0, 12,
9743     SIZE_MAX, SIZE_MAX
9744 };
9745 
9746 /* Packet Header Test 14: 1-RTT - Malformed - No Fixed Bit */
9747 static const unsigned char pkt_hdr_test_14_expected[] = {
9748     0x02, /* Fixed, Type=1-RTT, PN Len=3 */
9749     0x70, 0x71, 0x72, /* DCID */
9750     0x50, 0x51, 0x52, /* PN */
9751     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
9752     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
9753 };
9754 
9755 static const struct pkt_hdr_test pkt_hdr_test_14 = {
9756     { 0 },
9757     pkt_hdr_test_14_expected, OSSL_NELEM(pkt_hdr_test_14_expected),
9758     NULL, 0,
9759     3, SIZE_MAX,
9760     4, 8
9761 };
9762 
9763 /* Packet Header Test 15: Handshake - Malformed - No Fixed Bit */
9764 static const unsigned char pkt_hdr_test_15_expected[] = {
9765     0xa0, /* Long, Type=Handshake, PN Len=1 */
9766     0x00, 0x00, 0x00, 0x01, /* Version */
9767     0x03, /* DCID Length */
9768     0x70, 0x71, 0x72, /* DCID */
9769     0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
9770     0x14, /* Length=20 */
9771     0x33, /* Encoded PN */
9772     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
9773     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9774     0x20, 0x21, 0x22
9775 };
9776 
9777 static const struct pkt_hdr_test pkt_hdr_test_15 = {
9778     { 0 },
9779     pkt_hdr_test_15_expected, OSSL_NELEM(pkt_hdr_test_15_expected),
9780     NULL, 0,
9781     0, SIZE_MAX,
9782     19, 23
9783 };
9784 
9785 /* Packet Header Test 16: Handshake - Malformed - Wrong Version */
9786 static const unsigned char pkt_hdr_test_16_expected[] = {
9787     0xe0, /* Long|Fixed, Type=Handshake, PN Len=1 */
9788     0x00, 0x00, 0x00, 0x02, /* Version */
9789     0x03, /* DCID Length */
9790     0x70, 0x71, 0x72, /* DCID */
9791     0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
9792     0x14, /* Length=20 */
9793     0x33, /* Encoded PN */
9794     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
9795     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9796     0x20, 0x21, 0x22
9797 };
9798 
9799 static const struct pkt_hdr_test pkt_hdr_test_16 = {
9800     { 0 },
9801     pkt_hdr_test_16_expected, OSSL_NELEM(pkt_hdr_test_16_expected),
9802     NULL, 0,
9803     0, SIZE_MAX,
9804     19, 23
9805 };
9806 
9807 /* Packet Header Test 17: Initial - Non-Zero Reserved Bits */
9808 static const unsigned char pkt_hdr_test_17_expected[] = {
9809     0xcd, /* Long|Fixed, Type=Initial, PN Len=2 */
9810     0x00, 0x00, 0x00, 0x01, /* Version */
9811     0x00, /* DCID Length */
9812     0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
9813     0x00, /* Token Length */
9814     0x15, /* Length=21 */
9815     0x33, 0x44, /* Encoded PN */
9816     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
9817     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9818     0x20, 0x21, 0x22
9819 };
9820 
9821 static const unsigned char pkt_hdr_test_17_payload[] = {
9822     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
9823     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9824     0x20, 0x21, 0x22
9825 };
9826 
9827 static const struct pkt_hdr_test pkt_hdr_test_17 = {
9828     {
9829         QUIC_PKT_TYPE_INITIAL, /* type */
9830         0, /* spin bit */
9831         0, /* key phase */
9832         2, /* PN length */
9833         0, /* partial */
9834         1, /* fixed */
9835         0, /* unused */
9836         3, /* reserved */
9837         1, /* version */
9838         { 0, { 0 } }, /* DCID */
9839         { 8, { 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
9840         { 0x33, 0x44 }, /* PN */
9841         NULL, 0, /* Token/Token Len */
9842         19, NULL /* Len/Data */
9843     },
9844     pkt_hdr_test_17_expected, OSSL_NELEM(pkt_hdr_test_17_expected),
9845     pkt_hdr_test_17_payload, OSSL_NELEM(pkt_hdr_test_17_payload),
9846     0, sizeof(pkt_hdr_test_17_expected),
9847     17, 21
9848 };
9849 
9850 /* Packet Header Test 18: 0-RTT - Non-Zero Reserved Bits */
9851 static const unsigned char pkt_hdr_test_18_expected[] = {
9852     0xd8, /* Long|Fixed, Type=0-RTT, PN Len=1 */
9853     0x00, 0x00, 0x00, 0x01, /* Version */
9854     0x03, /* DCID Length */
9855     0x70, 0x71, 0x72, /* DCID */
9856     0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
9857     0x14, /* Length=20 */
9858     0x33, /* Encoded PN */
9859     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
9860     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9861     0x20, 0x21, 0x22
9862 };
9863 
9864 static const unsigned char pkt_hdr_test_18_payload[] = {
9865     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
9866     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9867     0x20, 0x21, 0x22
9868 };
9869 
9870 static const struct pkt_hdr_test pkt_hdr_test_18 = {
9871     {
9872         QUIC_PKT_TYPE_0RTT, /* type */
9873         0, /* spin bit */
9874         0, /* key phase */
9875         1, /* PN length */
9876         0, /* partial */
9877         1, /* fixed */
9878         0, /* unused */
9879         2, /* reserved */
9880         1, /* version */
9881         { 3, { 0x70, 0x71, 0x72 } }, /* DCID */
9882         { 8, { 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
9883         { 0x33 }, /* PN */
9884         NULL, 0, /* Token */
9885         19, NULL /* Len/Data */
9886     },
9887     pkt_hdr_test_18_expected, OSSL_NELEM(pkt_hdr_test_18_expected),
9888     pkt_hdr_test_18_payload, OSSL_NELEM(pkt_hdr_test_18_payload),
9889     0, sizeof(pkt_hdr_test_18_expected),
9890     19, 23
9891 };
9892 
9893 /* Packet Header Test 19: Handshake - Non-Zero Reserved Bits */
9894 static const unsigned char pkt_hdr_test_19_expected[] = {
9895     0xe4, /* Long|Fixed, Type=Handshake, PN Len=1 */
9896     0x00, 0x00, 0x00, 0x01, /* Version */
9897     0x03, /* DCID Length */
9898     0x70, 0x71, 0x72, /* DCID */
9899     0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID Length, SCID */
9900     0x14, /* Length=20 */
9901     0x33, /* Encoded PN */
9902     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* Payload */
9903     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9904     0x20, 0x21, 0x22
9905 };
9906 
9907 static const unsigned char pkt_hdr_test_19_payload[] = {
9908     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
9909     0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
9910     0x20, 0x21, 0x22
9911 };
9912 
9913 static const struct pkt_hdr_test pkt_hdr_test_19 = {
9914     {
9915         QUIC_PKT_TYPE_HANDSHAKE, /* type */
9916         0, /* spin bit */
9917         0, /* key phase */
9918         1, /* PN length */
9919         0, /* partial */
9920         1, /* fixed */
9921         0, /* unused */
9922         1, /* reserved */
9923         1, /* version */
9924         { 3, { 0x70, 0x71, 0x72 } }, /* DCID */
9925         { 8, { 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
9926         { 0x33 }, /* PN */
9927         NULL, 0, /* Token */
9928         19, NULL /* Len/Data */
9929     },
9930     pkt_hdr_test_19_expected, OSSL_NELEM(pkt_hdr_test_19_expected),
9931     pkt_hdr_test_19_payload, OSSL_NELEM(pkt_hdr_test_19_payload),
9932     0, sizeof(pkt_hdr_test_19_expected),
9933     19, 23
9934 };
9935 
9936 /* Packet Header Test 20: 1-RTT with Non-Zero Reserved Bits */
9937 static const unsigned char pkt_hdr_test_20_expected[] = {
9938     0x5a, /* Short|Fixed, Type=1-RTT, PN Len=3 */
9939     0x70, 0x71, 0x72, /* DCID */
9940     0x50, 0x51, 0x52, /* PN */
9941     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
9942     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
9943 };
9944 
9945 static const unsigned char pkt_hdr_test_20_payload[] = {
9946     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
9947     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1
9948 };
9949 
9950 static const struct pkt_hdr_test pkt_hdr_test_20 = {
9951     {
9952         QUIC_PKT_TYPE_1RTT, /* type */
9953         0, /* spin bit */
9954         0, /* key phase */
9955         3, /* PN length */
9956         0, /* partial */
9957         1, /* fixed */
9958         0, /* unused */
9959         3, /* reserved */
9960         0, /* version */
9961         { 3, { 0x70, 0x71, 0x72 } }, /* DCID */
9962         { 0, { 0 } }, /* SCID */
9963         { 0x50, 0x51, 0x52 }, /* PN */
9964         NULL, 0, /* Token */
9965         18, NULL /* Len/Data */
9966     },
9967     pkt_hdr_test_20_expected, OSSL_NELEM(pkt_hdr_test_20_expected),
9968     pkt_hdr_test_20_payload, OSSL_NELEM(pkt_hdr_test_20_payload),
9969     3, 21,
9970     4, 8
9971 };
9972 
9973 static const struct pkt_hdr_test *const pkt_hdr_tests[] = {
9974     &pkt_hdr_test_1,
9975     &pkt_hdr_test_2,
9976     &pkt_hdr_test_3,
9977     &pkt_hdr_test_4,
9978     &pkt_hdr_test_5,
9979     &pkt_hdr_test_6,
9980     &pkt_hdr_test_7,
9981     &pkt_hdr_test_8,
9982     &pkt_hdr_test_9,
9983     &pkt_hdr_test_10,
9984     &pkt_hdr_test_11,
9985     &pkt_hdr_test_12,
9986     &pkt_hdr_test_13,
9987     &pkt_hdr_test_14,
9988     &pkt_hdr_test_15,
9989     &pkt_hdr_test_16,
9990     &pkt_hdr_test_17,
9991     &pkt_hdr_test_18,
9992     &pkt_hdr_test_19,
9993     &pkt_hdr_test_20
9994 };
9995 
9996 #define HPR_REPEAT_COUNT 4
9997 #define HPR_CIPHER_COUNT 3
9998 
9999 /*
10000  * Count of number of times we observed an unchanged (u) or changed (c) bit in
10001  * each header-protectable bit over all test suites.
10002  */
10003 static unsigned int counts_u[HPR_CIPHER_COUNT][37] = { 0 };
10004 static unsigned int counts_c[HPR_CIPHER_COUNT][37] = { 0 };
10005 
10006 #define TEST_PKT_BUF_LEN 20000
10007 
test_wire_pkt_hdr_actual(int tidx,int repeat,int cipher,size_t trunc_len)10008 static int test_wire_pkt_hdr_actual(int tidx, int repeat, int cipher,
10009     size_t trunc_len)
10010 {
10011     int testresult = 0;
10012     const struct pkt_hdr_test *t = pkt_hdr_tests[tidx];
10013     QUIC_PKT_HDR hdr = { 0 };
10014     QUIC_PKT_HDR_PTRS ptrs = { 0 }, wptrs = { 0 };
10015     PACKET pkt = { 0 };
10016     WPACKET wpkt = { 0 };
10017     unsigned char *buf = NULL;
10018     size_t l = 0, i, j;
10019     QUIC_HDR_PROTECTOR hpr = { 0 };
10020     unsigned char hpr_key[32] = { 0, 1, 2, 3, 4, 5, 6, 7 };
10021     int have_hpr = 0, hpr_cipher_id, hpr_key_len;
10022     unsigned char *hbuf = NULL;
10023     int is_trunc = trunc_len < t->expected_len;
10024     int expect_fail = trunc_len < t->min_success_len;
10025     hpr_key[8] = (unsigned char)tidx;
10026     hpr_key[9] = (unsigned char)repeat;
10027 
10028     if (is_trunc && trunc_len > t->min_success_len
10029         && t->hdr.type == QUIC_PKT_TYPE_VERSION_NEG
10030         && ((trunc_len - t->min_success_len) % 4) != 0)
10031         expect_fail = 1;
10032 
10033     switch (cipher) {
10034     case 0:
10035         hpr_cipher_id = QUIC_HDR_PROT_CIPHER_AES_128;
10036         hpr_key_len = 16;
10037         break;
10038     case 1:
10039         hpr_cipher_id = QUIC_HDR_PROT_CIPHER_AES_256;
10040         hpr_key_len = 32;
10041         break;
10042     case 2:
10043         /*
10044          * In a build without CHACHA, we rerun the AES 256 tests.
10045          * Removing all dependence on CHACHA is more difficult and these
10046          * tests are fast enough.
10047          */
10048 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
10049         hpr_cipher_id = QUIC_HDR_PROT_CIPHER_CHACHA;
10050 #else
10051         hpr_cipher_id = QUIC_HDR_PROT_CIPHER_AES_256;
10052 #endif
10053         hpr_key_len = 32;
10054         break;
10055     default:
10056         goto err;
10057     }
10058 
10059     if (!TEST_ptr(buf = OPENSSL_malloc(TEST_PKT_BUF_LEN)))
10060         goto err;
10061 
10062     if (!TEST_true(WPACKET_init_static_len(&wpkt, buf, TEST_PKT_BUF_LEN, 0)))
10063         goto err;
10064 
10065     if (!TEST_true(PACKET_buf_init(&pkt, t->expected, trunc_len)))
10066         goto err;
10067 
10068     if (!TEST_int_eq(ossl_quic_wire_decode_pkt_hdr(&pkt, t->short_conn_id_len,
10069                          0, 0, &hdr, &ptrs, NULL),
10070             !expect_fail))
10071         goto err;
10072 
10073     if (!expect_fail && !is_trunc) {
10074         if (!TEST_true(cmp_pkt_hdr(&hdr, &t->hdr, t->payload, t->payload_len, 1)))
10075             goto err;
10076 
10077         if (!TEST_ptr_eq(ptrs.raw_start, t->expected))
10078             goto err;
10079 
10080         if (t->pn_offset == SIZE_MAX) {
10081             if (!TEST_ptr_null(ptrs.raw_pn))
10082                 goto err;
10083         } else {
10084             if (!TEST_ptr_eq(ptrs.raw_pn, t->expected + t->pn_offset))
10085                 goto err;
10086         }
10087 
10088         if (t->sample_offset != SIZE_MAX) {
10089             if (!TEST_ptr_eq(ptrs.raw_sample, t->expected + t->sample_offset))
10090                 goto err;
10091             if (!TEST_size_t_eq(ptrs.raw_sample_len,
10092                     t->expected_len - t->sample_offset))
10093                 goto err;
10094         }
10095 
10096         if (!TEST_true(ossl_quic_wire_encode_pkt_hdr(&wpkt, t->short_conn_id_len, &hdr, &wptrs)))
10097             goto err;
10098 
10099         if (!TEST_true(WPACKET_memcpy(&wpkt, t->payload, t->payload_len)))
10100             goto err;
10101 
10102         if (!TEST_true(WPACKET_get_total_written(&wpkt, &l)))
10103             goto err;
10104 
10105         if (!TEST_mem_eq(buf, l, t->expected, t->expected_len))
10106             goto err;
10107 
10108         /* Test header protection. */
10109         if (t->sample_offset != SIZE_MAX) { /* if packet type has protection */
10110             if (!TEST_true(ossl_quic_hdr_protector_init(&hpr, NULL, NULL,
10111                     hpr_cipher_id,
10112                     hpr_key,
10113                     hpr_key_len)))
10114                 goto err;
10115 
10116             have_hpr = 1;
10117 
10118             /*
10119              * Copy into a duplicate buffer to test header protection by
10120              * comparing it against the original.
10121              */
10122             hbuf = OPENSSL_malloc(t->expected_len);
10123             if (!TEST_ptr(hbuf))
10124                 goto err;
10125 
10126             memcpy(hbuf, t->expected, t->expected_len);
10127 
10128             /* Fixup pointers to new buffer and encrypt. */
10129             ptrs.raw_pn = hbuf + (ptrs.raw_pn - ptrs.raw_start);
10130             ptrs.raw_sample = hbuf + (ptrs.raw_sample - ptrs.raw_start);
10131             ptrs.raw_start = hbuf;
10132             if (!TEST_true(ossl_quic_hdr_protector_encrypt(&hpr, &ptrs)))
10133                 goto err;
10134 
10135             /* Ensure that bytes which should not have changed did not change */
10136             for (i = 0; i < t->expected_len; ++i) {
10137                 unsigned char d = t->expected[i] ^ hbuf[i], rej_mask = 0xff;
10138                 size_t jrel = 0;
10139                 if (i == 0) {
10140                     /* Bits in first byte which must not change */
10141                     rej_mask = (t->hdr.type == QUIC_PKT_TYPE_1RTT) ? ~0x1f : ~0xf;
10142                 } else if (i >= t->pn_offset && i < t->pn_offset + t->hdr.pn_len) {
10143                     /* PN bytes change */
10144                     rej_mask = 0;
10145                     jrel = 5 + (i - t->pn_offset) * 8;
10146                 }
10147 
10148                 if (rej_mask != 0xff)
10149                     for (j = 0; j < 8; ++j) {
10150                         if (((1U << j) & rej_mask) != 0)
10151                             /*
10152                              * Bit unrelated to header protection, do not record
10153                              * stats about it.
10154                              */
10155                             continue;
10156 
10157                         OPENSSL_assert(jrel + j < OSSL_NELEM(counts_u[cipher]));
10158                         if ((d & (1U << j)) != 0)
10159                             ++counts_c[cipher][jrel + j]; /* bit did change */
10160                         else
10161                             ++counts_u[cipher][jrel + j]; /* bit did not change */
10162                     }
10163 
10164                 /* Bits in rej_mask must not change */
10165                 if (!TEST_int_eq(d & rej_mask, 0))
10166                     goto err;
10167             }
10168 
10169             /* Decrypt and check matches original. */
10170             if (!TEST_true(ossl_quic_hdr_protector_decrypt(&hpr, &ptrs)))
10171                 goto err;
10172 
10173             if (!TEST_mem_eq(hbuf, t->expected_len, t->expected, t->expected_len))
10174                 goto err;
10175         }
10176     }
10177 
10178     testresult = 1;
10179 err:
10180     if (have_hpr)
10181         ossl_quic_hdr_protector_cleanup(&hpr);
10182     WPACKET_finish(&wpkt);
10183     OPENSSL_free(buf);
10184     OPENSSL_free(hbuf);
10185     return testresult;
10186 }
10187 
test_wire_pkt_hdr_inner(int tidx,int repeat,int cipher)10188 static int test_wire_pkt_hdr_inner(int tidx, int repeat, int cipher)
10189 {
10190     int testresult = 0;
10191     const struct pkt_hdr_test *t = pkt_hdr_tests[tidx];
10192     size_t i;
10193 
10194     /* Test with entire packet */
10195     if (!TEST_true(test_wire_pkt_hdr_actual(tidx, repeat, cipher,
10196             t->expected_len)))
10197         goto err;
10198 
10199     /* Now repeat for every possible truncation of the packet */
10200     for (i = 0; i < t->expected_len; ++i)
10201         if (!TEST_true(test_wire_pkt_hdr_actual(tidx, repeat, cipher, i)))
10202             goto err;
10203 
10204     testresult = 1;
10205 err:
10206     return testresult;
10207 }
10208 
test_hdr_prot_stats(void)10209 static int test_hdr_prot_stats(void)
10210 {
10211     int testresult = 0;
10212     size_t i, cipher;
10213 
10214     /*
10215      * Test that, across all previously executed tests for each header
10216      * protection cipher, every bit which can have header protection applied a)
10217      * was changed in at least one test of applying header protection, and b)
10218      * was unchanged in at least one test of applying header protection.
10219      */
10220     for (cipher = 0; cipher < HPR_CIPHER_COUNT; ++cipher)
10221         for (i = 0; i < OSSL_NELEM(counts_u[0]); ++i) {
10222             if (!TEST_uint_gt(counts_u[cipher][i], 0))
10223                 goto err;
10224             if (!TEST_uint_gt(counts_c[cipher][i], 0))
10225                 goto err;
10226         }
10227 
10228     testresult = 1;
10229 err:
10230     return testresult;
10231 }
10232 
10233 #define NUM_WIRE_PKT_HDR_TESTS \
10234     (OSSL_NELEM(pkt_hdr_tests) * HPR_REPEAT_COUNT * HPR_CIPHER_COUNT)
10235 
test_wire_pkt_hdr(int idx)10236 static int test_wire_pkt_hdr(int idx)
10237 {
10238     int tidx, repeat, cipher;
10239 
10240     if (idx == NUM_WIRE_PKT_HDR_TESTS)
10241         return test_hdr_prot_stats();
10242 
10243     cipher = idx % HPR_CIPHER_COUNT;
10244     idx /= HPR_CIPHER_COUNT;
10245 
10246     repeat = idx % HPR_REPEAT_COUNT;
10247     idx /= HPR_REPEAT_COUNT;
10248 
10249     tidx = idx;
10250 
10251     return test_wire_pkt_hdr_inner(tidx, repeat, cipher);
10252 }
10253 
10254 /* TX Tests */
10255 #define TX_TEST_OP_END 0 /* end of script */
10256 #define TX_TEST_OP_WRITE 1 /* write packet */
10257 #define TX_TEST_OP_PROVIDE_SECRET 2 /* provide TX secret */
10258 #define TX_TEST_OP_PROVIDE_SECRET_INITIAL 3 /* provide TX secret for initial */
10259 #define TX_TEST_OP_DISCARD_EL 4 /* discard an encryption level */
10260 #define TX_TEST_OP_CHECK_DGRAM 5 /* read datagram, compare to expected */
10261 #define TX_TEST_OP_CHECK_NO_DGRAM 6 /* check no datagram is in queue */
10262 #define TX_TEST_OP_KEY_UPDATE 7 /* perform key update for 1-RTT */
10263 
10264 struct tx_test_op {
10265     unsigned char op;
10266     const unsigned char *buf;
10267     size_t buf_len;
10268     const OSSL_QTX_PKT *pkt;
10269     uint32_t enc_level, suite_id;
10270     const QUIC_CONN_ID *dcid;
10271 };
10272 
10273 #define TX_OP_END \
10274     { TX_TEST_OP_END }
10275 #define TX_OP_WRITE(pkt) \
10276     { TX_TEST_OP_WRITE, NULL, 0, &(pkt), 0, 0, NULL },
10277 #define TX_OP_PROVIDE_SECRET(el, suite, key)           \
10278     {                                                  \
10279         TX_TEST_OP_PROVIDE_SECRET, (key), sizeof(key), \
10280         NULL, (el), (suite), NULL                      \
10281     },
10282 #define TX_OP_PROVIDE_SECRET_INITIAL(dcid, is_server) \
10283     { TX_TEST_OP_PROVIDE_SECRET_INITIAL,              \
10284         NULL, 0, NULL, 0, (is_server), &(dcid) },
10285 #define TX_OP_DISCARD_EL(el) \
10286     { TX_TEST_OP_DISCARD_EL, NULL, 0, NULL, (el), 0, NULL },
10287 #define TX_OP_CHECK_DGRAM(expect_dgram)                               \
10288     {                                                                 \
10289         TX_TEST_OP_CHECK_DGRAM, (expect_dgram), sizeof(expect_dgram), \
10290         NULL, 0, 0, NULL                                              \
10291     },
10292 #define TX_OP_CHECK_NO_DGRAM() \
10293     { TX_TEST_OP_CHECK_NO_PKT, NULL, 0, NULL, 0, 0, NULL },
10294 
10295 #define TX_OP_WRITE_N(n) \
10296     TX_OP_WRITE(tx_script_##n##_pkt)
10297 #define TX_OP_CHECK_DGRAM_N(n) \
10298     TX_OP_CHECK_DGRAM(tx_script_##n##_dgram)
10299 
10300 #define TX_OP_WRITE_CHECK(n) \
10301     TX_OP_WRITE_N(n)         \
10302     TX_OP_CHECK_DGRAM_N(n)
10303 
10304 #define TX_OP_KEY_UPDATE() \
10305     { TX_TEST_OP_KEY_UPDATE, NULL, 0, NULL, 0, 0, NULL },
10306 
10307 /* 1. RFC 9001 - A.2 Client Initial */
10308 static const unsigned char tx_script_1_body[1162] = {
10309     0x06, 0x00, 0x40, 0xf1, 0x01, 0x00, 0x00, 0xed, 0x03, 0x03, 0xeb, 0xf8,
10310     0xfa, 0x56, 0xf1, 0x29, 0x39, 0xb9, 0x58, 0x4a, 0x38, 0x96, 0x47, 0x2e,
10311     0xc4, 0x0b, 0xb8, 0x63, 0xcf, 0xd3, 0xe8, 0x68, 0x04, 0xfe, 0x3a, 0x47,
10312     0xf0, 0x6a, 0x2b, 0x69, 0x48, 0x4c, 0x00, 0x00, 0x04, 0x13, 0x01, 0x13,
10313     0x02, 0x01, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0e, 0x00,
10314     0x00, 0x0b, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f,
10315     0x6d, 0xff, 0x01, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x08, 0x00, 0x06,
10316     0x00, 0x1d, 0x00, 0x17, 0x00, 0x18, 0x00, 0x10, 0x00, 0x07, 0x00, 0x05,
10317     0x04, 0x61, 0x6c, 0x70, 0x6e, 0x00, 0x05, 0x00, 0x05, 0x01, 0x00, 0x00,
10318     0x00, 0x00, 0x00, 0x33, 0x00, 0x26, 0x00, 0x24, 0x00, 0x1d, 0x00, 0x20,
10319     0x93, 0x70, 0xb2, 0xc9, 0xca, 0xa4, 0x7f, 0xba, 0xba, 0xf4, 0x55, 0x9f,
10320     0xed, 0xba, 0x75, 0x3d, 0xe1, 0x71, 0xfa, 0x71, 0xf5, 0x0f, 0x1c, 0xe1,
10321     0x5d, 0x43, 0xe9, 0x94, 0xec, 0x74, 0xd7, 0x48, 0x00, 0x2b, 0x00, 0x03,
10322     0x02, 0x03, 0x04, 0x00, 0x0d, 0x00, 0x10, 0x00, 0x0e, 0x04, 0x03, 0x05,
10323     0x03, 0x06, 0x03, 0x02, 0x03, 0x08, 0x04, 0x08, 0x05, 0x08, 0x06, 0x00,
10324     0x2d, 0x00, 0x02, 0x01, 0x01, 0x00, 0x1c, 0x00, 0x02, 0x40, 0x01, 0x00,
10325     0x39, 0x00, 0x32, 0x04, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
10326     0xff, 0x05, 0x04, 0x80, 0x00, 0xff, 0xff, 0x07, 0x04, 0x80, 0x00, 0xff,
10327     0xff, 0x08, 0x01, 0x10, 0x01, 0x04, 0x80, 0x00, 0x75, 0x30, 0x09, 0x01,
10328     0x10, 0x0f, 0x08, 0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51, 0x57, 0x08, 0x06,
10329     0x04, 0x80, 0x00, 0xff, 0xff /* followed by zero padding */
10330 };
10331 
10332 static const unsigned char tx_script_1_dgram[] = {
10333     0xc0, 0x00, 0x00, 0x00, 0x01, 0x08, 0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51,
10334     0x57, 0x08, 0x00, 0x00, 0x44, 0x9e, 0x7b, 0x9a, 0xec, 0x34, 0xd1, 0xb1,
10335     0xc9, 0x8d, 0xd7, 0x68, 0x9f, 0xb8, 0xec, 0x11, 0xd2, 0x42, 0xb1, 0x23,
10336     0xdc, 0x9b, 0xd8, 0xba, 0xb9, 0x36, 0xb4, 0x7d, 0x92, 0xec, 0x35, 0x6c,
10337     0x0b, 0xab, 0x7d, 0xf5, 0x97, 0x6d, 0x27, 0xcd, 0x44, 0x9f, 0x63, 0x30,
10338     0x00, 0x99, 0xf3, 0x99, 0x1c, 0x26, 0x0e, 0xc4, 0xc6, 0x0d, 0x17, 0xb3,
10339     0x1f, 0x84, 0x29, 0x15, 0x7b, 0xb3, 0x5a, 0x12, 0x82, 0xa6, 0x43, 0xa8,
10340     0xd2, 0x26, 0x2c, 0xad, 0x67, 0x50, 0x0c, 0xad, 0xb8, 0xe7, 0x37, 0x8c,
10341     0x8e, 0xb7, 0x53, 0x9e, 0xc4, 0xd4, 0x90, 0x5f, 0xed, 0x1b, 0xee, 0x1f,
10342     0xc8, 0xaa, 0xfb, 0xa1, 0x7c, 0x75, 0x0e, 0x2c, 0x7a, 0xce, 0x01, 0xe6,
10343     0x00, 0x5f, 0x80, 0xfc, 0xb7, 0xdf, 0x62, 0x12, 0x30, 0xc8, 0x37, 0x11,
10344     0xb3, 0x93, 0x43, 0xfa, 0x02, 0x8c, 0xea, 0x7f, 0x7f, 0xb5, 0xff, 0x89,
10345     0xea, 0xc2, 0x30, 0x82, 0x49, 0xa0, 0x22, 0x52, 0x15, 0x5e, 0x23, 0x47,
10346     0xb6, 0x3d, 0x58, 0xc5, 0x45, 0x7a, 0xfd, 0x84, 0xd0, 0x5d, 0xff, 0xfd,
10347     0xb2, 0x03, 0x92, 0x84, 0x4a, 0xe8, 0x12, 0x15, 0x46, 0x82, 0xe9, 0xcf,
10348     0x01, 0x2f, 0x90, 0x21, 0xa6, 0xf0, 0xbe, 0x17, 0xdd, 0xd0, 0xc2, 0x08,
10349     0x4d, 0xce, 0x25, 0xff, 0x9b, 0x06, 0xcd, 0xe5, 0x35, 0xd0, 0xf9, 0x20,
10350     0xa2, 0xdb, 0x1b, 0xf3, 0x62, 0xc2, 0x3e, 0x59, 0x6d, 0x11, 0xa4, 0xf5,
10351     0xa6, 0xcf, 0x39, 0x48, 0x83, 0x8a, 0x3a, 0xec, 0x4e, 0x15, 0xda, 0xf8,
10352     0x50, 0x0a, 0x6e, 0xf6, 0x9e, 0xc4, 0xe3, 0xfe, 0xb6, 0xb1, 0xd9, 0x8e,
10353     0x61, 0x0a, 0xc8, 0xb7, 0xec, 0x3f, 0xaf, 0x6a, 0xd7, 0x60, 0xb7, 0xba,
10354     0xd1, 0xdb, 0x4b, 0xa3, 0x48, 0x5e, 0x8a, 0x94, 0xdc, 0x25, 0x0a, 0xe3,
10355     0xfd, 0xb4, 0x1e, 0xd1, 0x5f, 0xb6, 0xa8, 0xe5, 0xeb, 0xa0, 0xfc, 0x3d,
10356     0xd6, 0x0b, 0xc8, 0xe3, 0x0c, 0x5c, 0x42, 0x87, 0xe5, 0x38, 0x05, 0xdb,
10357     0x05, 0x9a, 0xe0, 0x64, 0x8d, 0xb2, 0xf6, 0x42, 0x64, 0xed, 0x5e, 0x39,
10358     0xbe, 0x2e, 0x20, 0xd8, 0x2d, 0xf5, 0x66, 0xda, 0x8d, 0xd5, 0x99, 0x8c,
10359     0xca, 0xbd, 0xae, 0x05, 0x30, 0x60, 0xae, 0x6c, 0x7b, 0x43, 0x78, 0xe8,
10360     0x46, 0xd2, 0x9f, 0x37, 0xed, 0x7b, 0x4e, 0xa9, 0xec, 0x5d, 0x82, 0xe7,
10361     0x96, 0x1b, 0x7f, 0x25, 0xa9, 0x32, 0x38, 0x51, 0xf6, 0x81, 0xd5, 0x82,
10362     0x36, 0x3a, 0xa5, 0xf8, 0x99, 0x37, 0xf5, 0xa6, 0x72, 0x58, 0xbf, 0x63,
10363     0xad, 0x6f, 0x1a, 0x0b, 0x1d, 0x96, 0xdb, 0xd4, 0xfa, 0xdd, 0xfc, 0xef,
10364     0xc5, 0x26, 0x6b, 0xa6, 0x61, 0x17, 0x22, 0x39, 0x5c, 0x90, 0x65, 0x56,
10365     0xbe, 0x52, 0xaf, 0xe3, 0xf5, 0x65, 0x63, 0x6a, 0xd1, 0xb1, 0x7d, 0x50,
10366     0x8b, 0x73, 0xd8, 0x74, 0x3e, 0xeb, 0x52, 0x4b, 0xe2, 0x2b, 0x3d, 0xcb,
10367     0xc2, 0xc7, 0x46, 0x8d, 0x54, 0x11, 0x9c, 0x74, 0x68, 0x44, 0x9a, 0x13,
10368     0xd8, 0xe3, 0xb9, 0x58, 0x11, 0xa1, 0x98, 0xf3, 0x49, 0x1d, 0xe3, 0xe7,
10369     0xfe, 0x94, 0x2b, 0x33, 0x04, 0x07, 0xab, 0xf8, 0x2a, 0x4e, 0xd7, 0xc1,
10370     0xb3, 0x11, 0x66, 0x3a, 0xc6, 0x98, 0x90, 0xf4, 0x15, 0x70, 0x15, 0x85,
10371     0x3d, 0x91, 0xe9, 0x23, 0x03, 0x7c, 0x22, 0x7a, 0x33, 0xcd, 0xd5, 0xec,
10372     0x28, 0x1c, 0xa3, 0xf7, 0x9c, 0x44, 0x54, 0x6b, 0x9d, 0x90, 0xca, 0x00,
10373     0xf0, 0x64, 0xc9, 0x9e, 0x3d, 0xd9, 0x79, 0x11, 0xd3, 0x9f, 0xe9, 0xc5,
10374     0xd0, 0xb2, 0x3a, 0x22, 0x9a, 0x23, 0x4c, 0xb3, 0x61, 0x86, 0xc4, 0x81,
10375     0x9e, 0x8b, 0x9c, 0x59, 0x27, 0x72, 0x66, 0x32, 0x29, 0x1d, 0x6a, 0x41,
10376     0x82, 0x11, 0xcc, 0x29, 0x62, 0xe2, 0x0f, 0xe4, 0x7f, 0xeb, 0x3e, 0xdf,
10377     0x33, 0x0f, 0x2c, 0x60, 0x3a, 0x9d, 0x48, 0xc0, 0xfc, 0xb5, 0x69, 0x9d,
10378     0xbf, 0xe5, 0x89, 0x64, 0x25, 0xc5, 0xba, 0xc4, 0xae, 0xe8, 0x2e, 0x57,
10379     0xa8, 0x5a, 0xaf, 0x4e, 0x25, 0x13, 0xe4, 0xf0, 0x57, 0x96, 0xb0, 0x7b,
10380     0xa2, 0xee, 0x47, 0xd8, 0x05, 0x06, 0xf8, 0xd2, 0xc2, 0x5e, 0x50, 0xfd,
10381     0x14, 0xde, 0x71, 0xe6, 0xc4, 0x18, 0x55, 0x93, 0x02, 0xf9, 0x39, 0xb0,
10382     0xe1, 0xab, 0xd5, 0x76, 0xf2, 0x79, 0xc4, 0xb2, 0xe0, 0xfe, 0xb8, 0x5c,
10383     0x1f, 0x28, 0xff, 0x18, 0xf5, 0x88, 0x91, 0xff, 0xef, 0x13, 0x2e, 0xef,
10384     0x2f, 0xa0, 0x93, 0x46, 0xae, 0xe3, 0x3c, 0x28, 0xeb, 0x13, 0x0f, 0xf2,
10385     0x8f, 0x5b, 0x76, 0x69, 0x53, 0x33, 0x41, 0x13, 0x21, 0x19, 0x96, 0xd2,
10386     0x00, 0x11, 0xa1, 0x98, 0xe3, 0xfc, 0x43, 0x3f, 0x9f, 0x25, 0x41, 0x01,
10387     0x0a, 0xe1, 0x7c, 0x1b, 0xf2, 0x02, 0x58, 0x0f, 0x60, 0x47, 0x47, 0x2f,
10388     0xb3, 0x68, 0x57, 0xfe, 0x84, 0x3b, 0x19, 0xf5, 0x98, 0x40, 0x09, 0xdd,
10389     0xc3, 0x24, 0x04, 0x4e, 0x84, 0x7a, 0x4f, 0x4a, 0x0a, 0xb3, 0x4f, 0x71,
10390     0x95, 0x95, 0xde, 0x37, 0x25, 0x2d, 0x62, 0x35, 0x36, 0x5e, 0x9b, 0x84,
10391     0x39, 0x2b, 0x06, 0x10, 0x85, 0x34, 0x9d, 0x73, 0x20, 0x3a, 0x4a, 0x13,
10392     0xe9, 0x6f, 0x54, 0x32, 0xec, 0x0f, 0xd4, 0xa1, 0xee, 0x65, 0xac, 0xcd,
10393     0xd5, 0xe3, 0x90, 0x4d, 0xf5, 0x4c, 0x1d, 0xa5, 0x10, 0xb0, 0xff, 0x20,
10394     0xdc, 0xc0, 0xc7, 0x7f, 0xcb, 0x2c, 0x0e, 0x0e, 0xb6, 0x05, 0xcb, 0x05,
10395     0x04, 0xdb, 0x87, 0x63, 0x2c, 0xf3, 0xd8, 0xb4, 0xda, 0xe6, 0xe7, 0x05,
10396     0x76, 0x9d, 0x1d, 0xe3, 0x54, 0x27, 0x01, 0x23, 0xcb, 0x11, 0x45, 0x0e,
10397     0xfc, 0x60, 0xac, 0x47, 0x68, 0x3d, 0x7b, 0x8d, 0x0f, 0x81, 0x13, 0x65,
10398     0x56, 0x5f, 0xd9, 0x8c, 0x4c, 0x8e, 0xb9, 0x36, 0xbc, 0xab, 0x8d, 0x06,
10399     0x9f, 0xc3, 0x3b, 0xd8, 0x01, 0xb0, 0x3a, 0xde, 0xa2, 0xe1, 0xfb, 0xc5,
10400     0xaa, 0x46, 0x3d, 0x08, 0xca, 0x19, 0x89, 0x6d, 0x2b, 0xf5, 0x9a, 0x07,
10401     0x1b, 0x85, 0x1e, 0x6c, 0x23, 0x90, 0x52, 0x17, 0x2f, 0x29, 0x6b, 0xfb,
10402     0x5e, 0x72, 0x40, 0x47, 0x90, 0xa2, 0x18, 0x10, 0x14, 0xf3, 0xb9, 0x4a,
10403     0x4e, 0x97, 0xd1, 0x17, 0xb4, 0x38, 0x13, 0x03, 0x68, 0xcc, 0x39, 0xdb,
10404     0xb2, 0xd1, 0x98, 0x06, 0x5a, 0xe3, 0x98, 0x65, 0x47, 0x92, 0x6c, 0xd2,
10405     0x16, 0x2f, 0x40, 0xa2, 0x9f, 0x0c, 0x3c, 0x87, 0x45, 0xc0, 0xf5, 0x0f,
10406     0xba, 0x38, 0x52, 0xe5, 0x66, 0xd4, 0x45, 0x75, 0xc2, 0x9d, 0x39, 0xa0,
10407     0x3f, 0x0c, 0xda, 0x72, 0x19, 0x84, 0xb6, 0xf4, 0x40, 0x59, 0x1f, 0x35,
10408     0x5e, 0x12, 0xd4, 0x39, 0xff, 0x15, 0x0a, 0xab, 0x76, 0x13, 0x49, 0x9d,
10409     0xbd, 0x49, 0xad, 0xab, 0xc8, 0x67, 0x6e, 0xef, 0x02, 0x3b, 0x15, 0xb6,
10410     0x5b, 0xfc, 0x5c, 0xa0, 0x69, 0x48, 0x10, 0x9f, 0x23, 0xf3, 0x50, 0xdb,
10411     0x82, 0x12, 0x35, 0x35, 0xeb, 0x8a, 0x74, 0x33, 0xbd, 0xab, 0xcb, 0x90,
10412     0x92, 0x71, 0xa6, 0xec, 0xbc, 0xb5, 0x8b, 0x93, 0x6a, 0x88, 0xcd, 0x4e,
10413     0x8f, 0x2e, 0x6f, 0xf5, 0x80, 0x01, 0x75, 0xf1, 0x13, 0x25, 0x3d, 0x8f,
10414     0xa9, 0xca, 0x88, 0x85, 0xc2, 0xf5, 0x52, 0xe6, 0x57, 0xdc, 0x60, 0x3f,
10415     0x25, 0x2e, 0x1a, 0x8e, 0x30, 0x8f, 0x76, 0xf0, 0xbe, 0x79, 0xe2, 0xfb,
10416     0x8f, 0x5d, 0x5f, 0xbb, 0xe2, 0xe3, 0x0e, 0xca, 0xdd, 0x22, 0x07, 0x23,
10417     0xc8, 0xc0, 0xae, 0xa8, 0x07, 0x8c, 0xdf, 0xcb, 0x38, 0x68, 0x26, 0x3f,
10418     0xf8, 0xf0, 0x94, 0x00, 0x54, 0xda, 0x48, 0x78, 0x18, 0x93, 0xa7, 0xe4,
10419     0x9a, 0xd5, 0xaf, 0xf4, 0xaf, 0x30, 0x0c, 0xd8, 0x04, 0xa6, 0xb6, 0x27,
10420     0x9a, 0xb3, 0xff, 0x3a, 0xfb, 0x64, 0x49, 0x1c, 0x85, 0x19, 0x4a, 0xab,
10421     0x76, 0x0d, 0x58, 0xa6, 0x06, 0x65, 0x4f, 0x9f, 0x44, 0x00, 0xe8, 0xb3,
10422     0x85, 0x91, 0x35, 0x6f, 0xbf, 0x64, 0x25, 0xac, 0xa2, 0x6d, 0xc8, 0x52,
10423     0x44, 0x25, 0x9f, 0xf2, 0xb1, 0x9c, 0x41, 0xb9, 0xf9, 0x6f, 0x3c, 0xa9,
10424     0xec, 0x1d, 0xde, 0x43, 0x4d, 0xa7, 0xd2, 0xd3, 0x92, 0xb9, 0x05, 0xdd,
10425     0xf3, 0xd1, 0xf9, 0xaf, 0x93, 0xd1, 0xaf, 0x59, 0x50, 0xbd, 0x49, 0x3f,
10426     0x5a, 0xa7, 0x31, 0xb4, 0x05, 0x6d, 0xf3, 0x1b, 0xd2, 0x67, 0xb6, 0xb9,
10427     0x0a, 0x07, 0x98, 0x31, 0xaa, 0xf5, 0x79, 0xbe, 0x0a, 0x39, 0x01, 0x31,
10428     0x37, 0xaa, 0xc6, 0xd4, 0x04, 0xf5, 0x18, 0xcf, 0xd4, 0x68, 0x40, 0x64,
10429     0x7e, 0x78, 0xbf, 0xe7, 0x06, 0xca, 0x4c, 0xf5, 0xe9, 0xc5, 0x45, 0x3e,
10430     0x9f, 0x7c, 0xfd, 0x2b, 0x8b, 0x4c, 0x8d, 0x16, 0x9a, 0x44, 0xe5, 0x5c,
10431     0x88, 0xd4, 0xa9, 0xa7, 0xf9, 0x47, 0x42, 0x41, 0xe2, 0x21, 0xaf, 0x44,
10432     0x86, 0x00, 0x18, 0xab, 0x08, 0x56, 0x97, 0x2e, 0x19, 0x4c, 0xd9, 0x34
10433 };
10434 
10435 static QUIC_PKT_HDR tx_script_1_hdr = {
10436     QUIC_PKT_TYPE_INITIAL, /* type */
10437     0, /* spin bit */
10438     0, /* key phase */
10439     4, /* PN length */
10440     0, /* partial */
10441     0, /* fixed */
10442     0, /* unused */
10443     0, /* reserved */
10444     1, /* version */
10445     { 8, { 0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51, 0x57, 0x08 } }, /* DCID */
10446     { 0, { 0 } }, /* SCID */
10447     { 0 }, /* PN */
10448     NULL, 0, /* Token */
10449     5555, NULL /* Len/Data */
10450 };
10451 
10452 static const OSSL_QTX_IOVEC tx_script_1_iovec[] = {
10453     { tx_script_1_body, sizeof(tx_script_1_body) }
10454 };
10455 
10456 static const OSSL_QTX_PKT tx_script_1_pkt = {
10457     &tx_script_1_hdr,
10458     tx_script_1_iovec,
10459     OSSL_NELEM(tx_script_1_iovec),
10460     NULL, NULL,
10461     2,
10462     0
10463 };
10464 
10465 static const struct tx_test_op tx_script_1[] = {
10466     TX_OP_PROVIDE_SECRET_INITIAL(tx_script_1_hdr.dst_conn_id, 0)
10467         TX_OP_WRITE_CHECK(1)
10468             TX_OP_END
10469 };
10470 
10471 /* 2. RFC 9001 - A.3 Server Initial */
10472 static const unsigned char tx_script_2_body[] = {
10473     0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x40, 0x5a, 0x02, 0x00, 0x00,
10474     0x56, 0x03, 0x03, 0xee, 0xfc, 0xe7, 0xf7, 0xb3, 0x7b, 0xa1, 0xd1, 0x63,
10475     0x2e, 0x96, 0x67, 0x78, 0x25, 0xdd, 0xf7, 0x39, 0x88, 0xcf, 0xc7, 0x98,
10476     0x25, 0xdf, 0x56, 0x6d, 0xc5, 0x43, 0x0b, 0x9a, 0x04, 0x5a, 0x12, 0x00,
10477     0x13, 0x01, 0x00, 0x00, 0x2e, 0x00, 0x33, 0x00, 0x24, 0x00, 0x1d, 0x00,
10478     0x20, 0x9d, 0x3c, 0x94, 0x0d, 0x89, 0x69, 0x0b, 0x84, 0xd0, 0x8a, 0x60,
10479     0x99, 0x3c, 0x14, 0x4e, 0xca, 0x68, 0x4d, 0x10, 0x81, 0x28, 0x7c, 0x83,
10480     0x4d, 0x53, 0x11, 0xbc, 0xf3, 0x2b, 0xb9, 0xda, 0x1a, 0x00, 0x2b, 0x00,
10481     0x02, 0x03, 0x04
10482 };
10483 
10484 static const unsigned char tx_script_2_dgram[] = {
10485 
10486     0xcf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a,
10487     0x42, 0x62, 0xb5, 0x00, 0x40, 0x75, 0xc0, 0xd9, 0x5a, 0x48, 0x2c, 0xd0,
10488     0x99, 0x1c, 0xd2, 0x5b, 0x0a, 0xac, 0x40, 0x6a, 0x58, 0x16, 0xb6, 0x39,
10489     0x41, 0x00, 0xf3, 0x7a, 0x1c, 0x69, 0x79, 0x75, 0x54, 0x78, 0x0b, 0xb3,
10490     0x8c, 0xc5, 0xa9, 0x9f, 0x5e, 0xde, 0x4c, 0xf7, 0x3c, 0x3e, 0xc2, 0x49,
10491     0x3a, 0x18, 0x39, 0xb3, 0xdb, 0xcb, 0xa3, 0xf6, 0xea, 0x46, 0xc5, 0xb7,
10492     0x68, 0x4d, 0xf3, 0x54, 0x8e, 0x7d, 0xde, 0xb9, 0xc3, 0xbf, 0x9c, 0x73,
10493     0xcc, 0x3f, 0x3b, 0xde, 0xd7, 0x4b, 0x56, 0x2b, 0xfb, 0x19, 0xfb, 0x84,
10494     0x02, 0x2f, 0x8e, 0xf4, 0xcd, 0xd9, 0x37, 0x95, 0xd7, 0x7d, 0x06, 0xed,
10495     0xbb, 0x7a, 0xaf, 0x2f, 0x58, 0x89, 0x18, 0x50, 0xab, 0xbd, 0xca, 0x3d,
10496     0x20, 0x39, 0x8c, 0x27, 0x64, 0x56, 0xcb, 0xc4, 0x21, 0x58, 0x40, 0x7d,
10497     0xd0, 0x74, 0xee
10498 };
10499 
10500 static QUIC_PKT_HDR tx_script_2_hdr = {
10501     QUIC_PKT_TYPE_INITIAL, /* type */
10502     0, /* spin bit */
10503     0, /* key phase */
10504     2, /* PN length */
10505     0, /* partial */
10506     0, /* fixed */
10507     0, /* unused */
10508     0, /* reserved */
10509     1, /* version */
10510     { 0, { 0 } }, /* DCID */
10511     { 8, { 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5 } }, /* SCID */
10512     { 0 }, /* PN */
10513     NULL, 0, /* Token */
10514     5555, NULL /* Len/Data */
10515 };
10516 
10517 static const OSSL_QTX_IOVEC tx_script_2_iovec[] = {
10518     { tx_script_2_body, sizeof(tx_script_2_body) }
10519 };
10520 
10521 static const OSSL_QTX_PKT tx_script_2_pkt = {
10522     &tx_script_2_hdr,
10523     tx_script_2_iovec,
10524     OSSL_NELEM(tx_script_2_iovec),
10525     NULL, NULL,
10526     1,
10527     0
10528 };
10529 
10530 static const struct tx_test_op tx_script_2[] = {
10531     TX_OP_PROVIDE_SECRET_INITIAL(tx_script_1_hdr.dst_conn_id, 1)
10532         TX_OP_WRITE_CHECK(2)
10533             TX_OP_END
10534 };
10535 
10536 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
10537 /* 3. RFC 9001 - A.5 ChaCha20-Poly1305 Short Header Packet */
10538 static const unsigned char tx_script_3_body[] = {
10539     0x01
10540 };
10541 
10542 static const unsigned char tx_script_3_dgram[] = {
10543     0x4c, 0xfe, 0x41, 0x89, 0x65, 0x5e, 0x5c, 0xd5, 0x5c, 0x41, 0xf6, 0x90,
10544     0x80, 0x57, 0x5d, 0x79, 0x99, 0xc2, 0x5a, 0x5b, 0xfb
10545 };
10546 static const unsigned char tx_script_3_secret[] = {
10547     0x9a, 0xc3, 0x12, 0xa7, 0xf8, 0x77, 0x46, 0x8e, 0xbe, 0x69, 0x42, 0x27,
10548     0x48, 0xad, 0x00, 0xa1, 0x54, 0x43, 0xf1, 0x82, 0x03, 0xa0, 0x7d, 0x60,
10549     0x60, 0xf6, 0x88, 0xf3, 0x0f, 0x21, 0x63, 0x2b
10550 };
10551 
10552 static QUIC_PKT_HDR tx_script_3_hdr = {
10553     QUIC_PKT_TYPE_1RTT, /* type */
10554     0, /* spin bit */
10555     0, /* key phase */
10556     3, /* PN length */
10557     0, /* partial */
10558     0, /* fixed */
10559     0, /* unused */
10560     0, /* reserved */
10561     0, /* version */
10562     { 0, { 0 } }, /* DCID */
10563     { 0, { 0 } }, /* SCID */
10564     { 0 }, /* PN */
10565     NULL, 0, /* Token */
10566     5555, NULL /* Len/Data */
10567 };
10568 
10569 static const OSSL_QTX_IOVEC tx_script_3_iovec[] = {
10570     { tx_script_3_body, sizeof(tx_script_3_body) }
10571 };
10572 
10573 static const OSSL_QTX_PKT tx_script_3_pkt = {
10574     &tx_script_3_hdr,
10575     tx_script_3_iovec,
10576     OSSL_NELEM(tx_script_3_iovec),
10577     NULL, NULL,
10578     654360564,
10579     0
10580 };
10581 
10582 static const struct tx_test_op tx_script_3[] = {
10583     TX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT, QRL_SUITE_CHACHA20POLY1305, tx_script_3_secret)
10584         TX_OP_WRITE_CHECK(3)
10585             TX_OP_END
10586 };
10587 #endif /* !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) */
10588 
10589 /* 4. Real World - AES-128-GCM Key Update */
10590 static const unsigned char tx_script_4_secret[] = {
10591     0x70, 0x82, 0xc0, 0x45, 0x61, 0x4d, 0xfe, 0x04, 0x76, 0xa6, 0x4e, 0xf0,
10592     0x38, 0xe6, 0x63, 0xd9, 0xdd, 0x4a, 0x75, 0x16, 0xa8, 0xa0, 0x06, 0x5a,
10593     0xf2, 0x56, 0xfd, 0x84, 0x78, 0xfd, 0xf6, 0x5e
10594 };
10595 
10596 static const unsigned char tx_script_4a_body[] = {
10597     0x02,
10598     0x03,
10599     0x09,
10600     0x00,
10601     0x03,
10602     0x0c,
10603     0x00,
10604     0x36,
10605     0x49,
10606     0x27,
10607     0x6d,
10608     0x20,
10609     0x68,
10610     0x61,
10611     0x76,
10612     0x69,
10613     0x6e,
10614     0x67,
10615     0x20,
10616     0x61,
10617     0x20,
10618     0x77,
10619     0x6f,
10620     0x6e,
10621     0x64,
10622     0x65,
10623     0x72,
10624     0x66,
10625     0x75,
10626     0x6c,
10627     0x20,
10628     0x74,
10629     0x69,
10630     0x6d,
10631     0x65,
10632 };
10633 
10634 static const unsigned char tx_script_4a_dgram[] = {
10635     0x47, 0x6e, 0x4e, 0xbd, 0x49, 0x7e, 0xbd, 0x15, 0x1c, 0xd1, 0x3e, 0xc8,
10636     0xcd, 0x43, 0x87, 0x6b, 0x84, 0xdb, 0xeb, 0x06, 0x8b, 0x8a, 0xae, 0x37,
10637     0xed, 0x9c, 0xeb, 0xbc, 0xcf, 0x0d, 0x3c, 0xf0, 0xa1, 0x6f, 0xee, 0xd2,
10638     0x7c, 0x07, 0x6e, 0xd1, 0xbe, 0x40, 0x6a, 0xd4, 0x53, 0x38, 0x9e, 0x63,
10639     0xb5, 0xde, 0x35, 0x09, 0xb2, 0x78, 0x94, 0xe4, 0x2b, 0x37
10640 };
10641 
10642 static QUIC_PKT_HDR tx_script_4a_hdr = {
10643     QUIC_PKT_TYPE_1RTT, /* type */
10644     0, /* spin bit */
10645     0, /* key phase */
10646     2, /* PN length */
10647     0, /* partial */
10648     0, /* fixed */
10649     0, /* unused */
10650     0, /* reserved */
10651     0, /* version */
10652     { 4, { 0x6e, 0x4e, 0xbd, 0x49 } }, /* DCID */
10653     { 0, { 0 } }, /* SCID */
10654     { 0 }, /* PN */
10655     NULL, 0, /* Token */
10656     5555, NULL /* Len/Data */
10657 };
10658 
10659 static const OSSL_QTX_IOVEC tx_script_4a_iovec[] = {
10660     { tx_script_4a_body, sizeof(tx_script_4a_body) }
10661 };
10662 
10663 static const OSSL_QTX_PKT tx_script_4a_pkt = {
10664     &tx_script_4a_hdr,
10665     tx_script_4a_iovec,
10666     OSSL_NELEM(tx_script_4a_iovec),
10667     NULL, NULL,
10668     4,
10669     0
10670 };
10671 
10672 static const unsigned char tx_script_4b_body[] = {
10673     0x02,
10674     0x04,
10675     0x07,
10676     0x00,
10677     0x00,
10678     0x0c,
10679     0x00,
10680     0x40,
10681     0x51,
10682     0x49,
10683     0x27,
10684     0x6d,
10685     0x20,
10686     0x68,
10687     0x61,
10688     0x76,
10689     0x69,
10690     0x6e,
10691     0x67,
10692     0x20,
10693     0x61,
10694     0x20,
10695     0x77,
10696     0x6f,
10697     0x6e,
10698     0x64,
10699     0x65,
10700     0x72,
10701     0x66,
10702     0x75,
10703     0x6c,
10704     0x20,
10705     0x74,
10706     0x69,
10707     0x6d,
10708     0x65,
10709 };
10710 
10711 static const unsigned char tx_script_4b_dgram[] = {
10712     0x58,
10713     0x6e,
10714     0x4e,
10715     0xbd,
10716     0x49,
10717     0xa4,
10718     0x43,
10719     0x33,
10720     0xea,
10721     0x11,
10722     0x3a,
10723     0x6c,
10724     0xf5,
10725     0x20,
10726     0xef,
10727     0x55,
10728     0x8d,
10729     0x25,
10730     0xe2,
10731     0x3b,
10732     0x0e,
10733     0x8c,
10734     0xea,
10735     0x17,
10736     0xfc,
10737     0x2b,
10738     0x7a,
10739     0xab,
10740     0xfa,
10741     0x3d,
10742     0x07,
10743     0xda,
10744     0xa7,
10745     0x7c,
10746     0xc7,
10747     0x47,
10748     0x82,
10749     0x02,
10750     0x46,
10751     0x40,
10752     0x4f,
10753     0x01,
10754     0xad,
10755     0xb2,
10756     0x9d,
10757     0x97,
10758     0xdb,
10759     0xfc,
10760     0x9c,
10761     0x4b,
10762     0x46,
10763     0xb1,
10764     0x5a,
10765     0x7f,
10766     0x0b,
10767     0x12,
10768     0xaf,
10769     0x49,
10770     0xdf,
10771 };
10772 
10773 static QUIC_PKT_HDR tx_script_4b_hdr = {
10774     QUIC_PKT_TYPE_1RTT, /* type */
10775     0, /* spin bit */
10776     1, /* key phase */
10777     2, /* PN length */
10778     0, /* partial */
10779     0, /* fixed */
10780     0, /* unused */
10781     0, /* reserved */
10782     0, /* version */
10783     { 4, { 0x6e, 0x4e, 0xbd, 0x49 } }, /* DCID */
10784     { 0, { 0 } }, /* SCID */
10785     { 0 }, /* PN */
10786     NULL, 0, /* Token */
10787     5555, NULL /* Len/Data */
10788 };
10789 
10790 static const OSSL_QTX_IOVEC tx_script_4b_iovec[] = {
10791     { tx_script_4b_body, sizeof(tx_script_4b_body) }
10792 };
10793 
10794 static const OSSL_QTX_PKT tx_script_4b_pkt = {
10795     &tx_script_4b_hdr,
10796     tx_script_4b_iovec,
10797     OSSL_NELEM(tx_script_4b_iovec),
10798     NULL, NULL,
10799     5,
10800     0
10801 };
10802 
10803 static const unsigned char tx_script_4c_body[] = {
10804     0x02,
10805     0x09,
10806     0x0e,
10807     0x00,
10808     0x00,
10809     0x0c,
10810     0x00,
10811     0x40,
10812     0xd8,
10813     0x49,
10814     0x27,
10815     0x6d,
10816     0x20,
10817     0x68,
10818     0x61,
10819     0x76,
10820     0x69,
10821     0x6e,
10822     0x67,
10823     0x20,
10824     0x61,
10825     0x20,
10826     0x77,
10827     0x6f,
10828     0x6e,
10829     0x64,
10830     0x65,
10831     0x72,
10832     0x66,
10833     0x75,
10834     0x6c,
10835     0x20,
10836     0x74,
10837     0x69,
10838     0x6d,
10839     0x65,
10840 };
10841 
10842 static const unsigned char tx_script_4c_dgram[] = {
10843     0x49,
10844     0x6e,
10845     0x4e,
10846     0xbd,
10847     0x49,
10848     0x4d,
10849     0xd9,
10850     0x85,
10851     0xba,
10852     0x26,
10853     0xfb,
10854     0x68,
10855     0x83,
10856     0x9b,
10857     0x94,
10858     0x34,
10859     0x7d,
10860     0xc1,
10861     0x7a,
10862     0x05,
10863     0xb7,
10864     0x38,
10865     0x43,
10866     0x21,
10867     0xe2,
10868     0xec,
10869     0x2b,
10870     0xc1,
10871     0x81,
10872     0x74,
10873     0x2d,
10874     0xda,
10875     0x24,
10876     0xba,
10877     0xbd,
10878     0x99,
10879     0x69,
10880     0xd2,
10881     0x56,
10882     0xfa,
10883     0xae,
10884     0x29,
10885     0x24,
10886     0xb2,
10887     0xaa,
10888     0xda,
10889     0xbd,
10890     0x82,
10891     0x80,
10892     0xf1,
10893     0xbb,
10894     0x6a,
10895     0xfd,
10896     0xae,
10897     0xda,
10898     0x0e,
10899     0x09,
10900     0xcf,
10901     0x09,
10902 };
10903 
10904 static QUIC_PKT_HDR tx_script_4c_hdr = {
10905     QUIC_PKT_TYPE_1RTT, /* type */
10906     0, /* spin bit */
10907     0, /* key phase */
10908     2, /* PN length */
10909     0, /* partial */
10910     0, /* fixed */
10911     0, /* unused */
10912     0, /* reserved */
10913     0, /* version */
10914     { 4, { 0x6e, 0x4e, 0xbd, 0x49 } }, /* DCID */
10915     { 0, { 0 } }, /* SCID */
10916     { 0 }, /* PN */
10917     NULL, 0, /* Token */
10918     5555, NULL /* Len/Data */
10919 };
10920 
10921 static const OSSL_QTX_IOVEC tx_script_4c_iovec[] = {
10922     { tx_script_4c_body, sizeof(tx_script_4c_body) }
10923 };
10924 
10925 static const OSSL_QTX_PKT tx_script_4c_pkt = {
10926     &tx_script_4c_hdr,
10927     tx_script_4c_iovec,
10928     OSSL_NELEM(tx_script_4c_iovec),
10929     NULL, NULL,
10930     10,
10931     0
10932 };
10933 
10934 static const struct tx_test_op tx_script_4[] = {
10935     TX_OP_PROVIDE_SECRET(QUIC_ENC_LEVEL_1RTT, QRL_SUITE_AES128GCM, tx_script_4_secret)
10936         TX_OP_WRITE_CHECK(4a)
10937             TX_OP_KEY_UPDATE()
10938                 TX_OP_WRITE_CHECK(4b)
10939                     TX_OP_KEY_UPDATE()
10940                         TX_OP_WRITE_CHECK(4c)
10941                             TX_OP_END
10942 };
10943 
10944 /* 5. Real World - Retry Packet */
10945 static const unsigned char tx_script_5_body[] = {
10946     /* Retry Token */
10947     0x92,
10948     0xe7,
10949     0xc6,
10950     0xd8,
10951     0x09,
10952     0x65,
10953     0x72,
10954     0x55,
10955     0xe5,
10956     0xe2,
10957     0x73,
10958     0x04,
10959     0xf3,
10960     0x07,
10961     0x5b,
10962     0x21,
10963     0x9f,
10964     0x50,
10965     0xcb,
10966     0xbc,
10967     0x79,
10968     0xc5,
10969     0x77,
10970     0x5a,
10971     0x29,
10972     0x43,
10973     0x65,
10974     0x49,
10975     0xf0,
10976     0x6e,
10977     0xc1,
10978     0xc0,
10979     0x3a,
10980     0xe8,
10981     0xca,
10982     0xd2,
10983     0x44,
10984     0x69,
10985     0xdd,
10986     0x23,
10987     0x31,
10988     0x93,
10989     0x52,
10990     0x02,
10991     0xf7,
10992     0x42,
10993     0x07,
10994     0x78,
10995     0xa1,
10996     0x81,
10997     0x61,
10998     0x9c,
10999     0x39,
11000     0x07,
11001     0x18,
11002     0x69,
11003     0x6e,
11004     0x4f,
11005     0xdc,
11006     0xa0,
11007     0xbe,
11008     0x4b,
11009     0xe5,
11010     0xf2,
11011     0xe9,
11012     0xd2,
11013     0xa4,
11014     0xa7,
11015     0x34,
11016     0x55,
11017     0x5e,
11018     0xf3,
11019     0xf8,
11020     0x9c,
11021     0x49,
11022     0x8f,
11023     0x0c,
11024     0xc8,
11025     0xb2,
11026     0x75,
11027     0x4b,
11028     0x4d,
11029     0x2f,
11030     0xfe,
11031     0x05,
11032     0x5a,
11033     0xdd,
11034     0x4b,
11035     0xe6,
11036     0x14,
11037     0xb4,
11038     0xd2,
11039     0xc0,
11040     0x93,
11041     0x6e,
11042     0x0e,
11043     0x84,
11044     0x41,
11045     0x4d,
11046     0x31,
11047     /* Retry Integrity Tag */
11048     0x43,
11049     0x8e,
11050     0xab,
11051     0xcd,
11052     0xce,
11053     0x24,
11054     0x44,
11055     0xc2,
11056     0x20,
11057     0xe1,
11058     0xe2,
11059     0xc8,
11060     0xae,
11061     0xa3,
11062     0x8d,
11063     0x4e,
11064 };
11065 
11066 static const unsigned char tx_script_5_dgram[] = {
11067     0xf0,
11068     0x00,
11069     0x00,
11070     0x00,
11071     0x01,
11072     0x00,
11073     0x04,
11074     0xa9,
11075     0x20,
11076     0xcc,
11077     0xc2,
11078     0x92,
11079     0xe7,
11080     0xc6,
11081     0xd8,
11082     0x09,
11083     0x65,
11084     0x72,
11085     0x55,
11086     0xe5,
11087     0xe2,
11088     0x73,
11089     0x04,
11090     0xf3,
11091     0x07,
11092     0x5b,
11093     0x21,
11094     0x9f,
11095     0x50,
11096     0xcb,
11097     0xbc,
11098     0x79,
11099     0xc5,
11100     0x77,
11101     0x5a,
11102     0x29,
11103     0x43,
11104     0x65,
11105     0x49,
11106     0xf0,
11107     0x6e,
11108     0xc1,
11109     0xc0,
11110     0x3a,
11111     0xe8,
11112     0xca,
11113     0xd2,
11114     0x44,
11115     0x69,
11116     0xdd,
11117     0x23,
11118     0x31,
11119     0x93,
11120     0x52,
11121     0x02,
11122     0xf7,
11123     0x42,
11124     0x07,
11125     0x78,
11126     0xa1,
11127     0x81,
11128     0x61,
11129     0x9c,
11130     0x39,
11131     0x07,
11132     0x18,
11133     0x69,
11134     0x6e,
11135     0x4f,
11136     0xdc,
11137     0xa0,
11138     0xbe,
11139     0x4b,
11140     0xe5,
11141     0xf2,
11142     0xe9,
11143     0xd2,
11144     0xa4,
11145     0xa7,
11146     0x34,
11147     0x55,
11148     0x5e,
11149     0xf3,
11150     0xf8,
11151     0x9c,
11152     0x49,
11153     0x8f,
11154     0x0c,
11155     0xc8,
11156     0xb2,
11157     0x75,
11158     0x4b,
11159     0x4d,
11160     0x2f,
11161     0xfe,
11162     0x05,
11163     0x5a,
11164     0xdd,
11165     0x4b,
11166     0xe6,
11167     0x14,
11168     0xb4,
11169     0xd2,
11170     0xc0,
11171     0x93,
11172     0x6e,
11173     0x0e,
11174     0x84,
11175     0x41,
11176     0x4d,
11177     0x31,
11178     0x43,
11179     0x8e,
11180     0xab,
11181     0xcd,
11182     0xce,
11183     0x24,
11184     0x44,
11185     0xc2,
11186     0x20,
11187     0xe1,
11188     0xe2,
11189     0xc8,
11190     0xae,
11191     0xa3,
11192     0x8d,
11193     0x4e,
11194 };
11195 
11196 static QUIC_PKT_HDR tx_script_5_hdr = {
11197     QUIC_PKT_TYPE_RETRY, /* type */
11198     0, /* spin bit */
11199     0, /* key phase */
11200     0, /* PN length */
11201     0, /* partial */
11202     0, /* fixed */
11203     0, /* unused */
11204     0, /* reserved */
11205     1, /* version */
11206     { 0, { 0 } }, /* DCID */
11207     { 4, { 0xa9, 0x20, 0xcc, 0xc2 } }, /* SCID */
11208     { 0 }, /* PN */
11209     NULL, 0, /* Token */
11210     5555, NULL /* Len/Data */
11211 };
11212 
11213 static const OSSL_QTX_IOVEC tx_script_5_iovec[] = {
11214     { tx_script_5_body, sizeof(tx_script_5_body) }
11215 };
11216 
11217 static const OSSL_QTX_PKT tx_script_5_pkt = {
11218     &tx_script_5_hdr,
11219     tx_script_5_iovec,
11220     OSSL_NELEM(tx_script_5_iovec),
11221     NULL, NULL,
11222     0,
11223     0
11224 };
11225 
11226 static const struct tx_test_op tx_script_5[] = {
11227     TX_OP_WRITE_CHECK(5)
11228         TX_OP_END
11229 };
11230 
11231 /* 6. Real World - Version Negotiation Packet */
11232 static const unsigned char tx_script_6_body[] = {
11233     0x00, 0x00, 0x00, 0x01, /* Supported Version: 1 */
11234     0xaa, 0x9a, 0x3a, 0x9a /* Supported Version: Random (GREASE) */
11235 };
11236 
11237 static const unsigned char tx_script_6_dgram[] = {
11238     0x80, /* Long */
11239     0x00, 0x00, 0x00, 0x00, /* Version 0 (Version Negotiation) */
11240     0x00, /* DCID */
11241     0x0c, 0x35, 0x3c, 0x1b, 0x97, 0xca, /* SCID */
11242     0xf8, 0x99, 0x11, 0x39, 0xad, 0x79,
11243     0x1f,
11244     0x00, 0x00, 0x00, 0x01, /* Supported Version: 1 */
11245     0xaa, 0x9a, 0x3a, 0x9a /* Supported Version: Random (GREASE) */
11246 };
11247 
11248 static QUIC_PKT_HDR tx_script_6_hdr = {
11249     QUIC_PKT_TYPE_VERSION_NEG, /* type */
11250     0, /* spin bit */
11251     0, /* key phase */
11252     0, /* PN length */
11253     0, /* partial */
11254     0, /* fixed */
11255     0, /* unused */
11256     0, /* reserved */
11257     0, /* version */
11258     { 0, { 0 } }, /* DCID */
11259     { 12, { 0x35, 0x3c, 0x1b, 0x97, 0xca, 0xf8, 0x99, 0x11, 0x39, 0xad, 0x79, 0x1f } }, /* SCID */
11260     { 0 }, /* PN */
11261     NULL, 0, /* Token */
11262     5555, NULL /* Len/Data */
11263 };
11264 
11265 static const OSSL_QTX_IOVEC tx_script_6_iovec[] = {
11266     { tx_script_6_body, sizeof(tx_script_6_body) }
11267 };
11268 
11269 static const OSSL_QTX_PKT tx_script_6_pkt = {
11270     &tx_script_6_hdr,
11271     tx_script_6_iovec,
11272     OSSL_NELEM(tx_script_6_iovec),
11273     NULL, NULL,
11274     0,
11275     0
11276 };
11277 
11278 static const struct tx_test_op tx_script_6[] = {
11279     TX_OP_WRITE_CHECK(6)
11280         TX_OP_END
11281 };
11282 
11283 static const struct tx_test_op *const tx_scripts[] = {
11284     tx_script_1,
11285     tx_script_2,
11286 #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
11287     tx_script_3,
11288 #endif
11289     tx_script_4,
11290     tx_script_5,
11291     tx_script_6
11292 };
11293 
tx_run_script(const struct tx_test_op * script)11294 static int tx_run_script(const struct tx_test_op *script)
11295 {
11296     int testresult = 0;
11297     const struct tx_test_op *op = script;
11298     OSSL_QTX *qtx = NULL;
11299     BIO_MSG msg = { 0 };
11300     OSSL_QTX_ARGS args = { 0 };
11301 
11302     args.mdpl = 1472;
11303 
11304     if (!TEST_ptr(qtx = ossl_qtx_new(&args)))
11305         goto err;
11306 
11307     for (; op->op != TX_TEST_OP_END; ++op)
11308         switch (op->op) {
11309         case TX_TEST_OP_PROVIDE_SECRET:
11310             if (!TEST_true(ossl_qtx_provide_secret(qtx, op->enc_level,
11311                     op->suite_id, NULL,
11312                     op->buf, op->buf_len)))
11313                 goto err;
11314             break;
11315         case TX_TEST_OP_PROVIDE_SECRET_INITIAL:
11316             if (!TEST_true(ossl_quic_provide_initial_secret(NULL, NULL,
11317                     op->dcid,
11318                     (int)op->suite_id,
11319                     NULL, qtx)))
11320                 goto err;
11321             break;
11322         case TX_TEST_OP_DISCARD_EL:
11323             if (!TEST_true(ossl_qtx_discard_enc_level(qtx, op->enc_level)))
11324                 goto err;
11325             break;
11326         case TX_TEST_OP_WRITE: {
11327             uint32_t enc_level
11328                 = ossl_quic_pkt_type_to_enc_level(op->pkt->hdr->type);
11329             uint64_t old_value = 0, new_value, max_value;
11330 
11331             if (enc_level < QUIC_ENC_LEVEL_NUM) { /* encrypted packet */
11332                 max_value = ossl_qtx_get_max_epoch_pkt_count(qtx, enc_level);
11333 
11334                 if (!TEST_uint64_t_lt(max_value, UINT64_MAX))
11335                     goto err;
11336 
11337                 old_value = ossl_qtx_get_cur_epoch_pkt_count(qtx, enc_level);
11338                 if (!TEST_uint64_t_lt(old_value, UINT64_MAX))
11339                     goto err;
11340             }
11341 
11342             if (!TEST_true(ossl_qtx_write_pkt(qtx, op->pkt)))
11343                 goto err;
11344 
11345             if (enc_level < QUIC_ENC_LEVEL_NUM) {
11346                 new_value = ossl_qtx_get_cur_epoch_pkt_count(qtx, enc_level);
11347                 if (!TEST_uint64_t_eq(old_value + 1, new_value))
11348                     goto err;
11349             }
11350         } break;
11351         case TX_TEST_OP_CHECK_DGRAM:
11352             if (!TEST_true(ossl_qtx_pop_net(qtx, &msg)))
11353                 goto err;
11354 
11355             if (!TEST_mem_eq(msg.data, msg.data_len, op->buf, op->buf_len))
11356                 goto err;
11357 
11358             break;
11359         case TX_TEST_OP_CHECK_NO_DGRAM:
11360             if (!TEST_false(ossl_qtx_pop_net(qtx, &msg)))
11361                 goto err;
11362             break;
11363         case TX_TEST_OP_KEY_UPDATE:
11364             if (!TEST_true(ossl_qtx_trigger_key_update(qtx)))
11365                 goto err;
11366             break;
11367         default:
11368             OPENSSL_assert(0);
11369             goto err;
11370         }
11371 
11372     testresult = 1;
11373 err:
11374     if (qtx != NULL)
11375         ossl_qtx_free(qtx);
11376 
11377     return testresult;
11378 }
11379 
test_tx_script(int idx)11380 static int test_tx_script(int idx)
11381 {
11382     return tx_run_script(tx_scripts[idx]);
11383 }
11384 
setup_tests(void)11385 int setup_tests(void)
11386 {
11387     ADD_ALL_TESTS(test_rx_script, OSSL_NELEM(rx_scripts));
11388     /*
11389      * Each instance of this test is executed multiple times to get enough
11390      * statistical coverage for our statistical test, as well as for each
11391      * supported key type.
11392      *
11393      * We call the statistical test as the last index in the wire_pkt_hdr
11394      * test rather than as a separate case, as it needs to execute last
11395      * and otherwise random test ordering will cause itt to randomly fail.
11396      */
11397     ADD_ALL_TESTS(test_wire_pkt_hdr, NUM_WIRE_PKT_HDR_TESTS + 1);
11398     ADD_ALL_TESTS(test_tx_script, OSSL_NELEM(tx_scripts));
11399     return 1;
11400 }
11401