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 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 9013 static OSSL_TIME expected_time(uint64_t counter) 9014 { 9015 return ossl_time_multiply(ossl_ticks2time(OSSL_TIME_MS), counter); 9016 } 9017 9018 static OSSL_TIME fake_time(void *arg) 9019 { 9020 return expected_time(++time_counter); 9021 } 9022 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 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 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 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 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 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 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 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 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 11380 static int test_tx_script(int idx) 11381 { 11382 return tx_run_script(tx_scripts[idx]); 11383 } 11384 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