return testresult;
}
+/* RFC 9001 s. A.4 */
+static const QUIC_CONN_ID retry_orig_dcid = {
+ 8, { 0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51, 0x57, 0x08 }
+};
+
+static const unsigned char retry_encoded[] = {
+ 0xff, /* Long Header, Retry */
+ 0x00, 0x00, 0x00, 0x01, /* Version 1 */
+ 0x00, /* DCID */
+ 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, /* SCID */
+
+ /* Retry Token */
+ 0x74, 0x6f, 0x6b, 0x65, 0x6e,
+
+ /* Retry Integrity Tag */
+ 0x04, 0xa2, 0x65, 0xba, 0x2e, 0xff, 0x4d, 0x82, 0x90, 0x58, 0xfb, 0x3f, 0x0f,
+ 0x24, 0x96, 0xba
+};
+
+static int test_wire_retry_integrity_tag(void)
+{
+ int testresult = 0;
+ PACKET pkt = {0};
+ QUIC_PKT_HDR hdr = {0};
+ unsigned char got_tag[QUIC_RETRY_INTEGRITY_TAG_LEN] = {0};
+
+ if (!TEST_true(PACKET_buf_init(&pkt, retry_encoded, sizeof(retry_encoded))))
+ goto err;
+
+ if (!TEST_true(ossl_quic_wire_decode_pkt_hdr(&pkt, 0, 0, &hdr, NULL)))
+ goto err;
+
+ if (!TEST_int_eq(hdr.type, QUIC_PKT_TYPE_RETRY))
+ goto err;
+
+ if (!TEST_true(ossl_quic_calculate_retry_integrity_tag(NULL, NULL, &hdr,
+ &retry_orig_dcid,
+ got_tag)))
+ goto err;
+
+ if (!TEST_mem_eq(got_tag, sizeof(got_tag),
+ retry_encoded + sizeof(retry_encoded)
+ - QUIC_RETRY_INTEGRITY_TAG_LEN,
+ QUIC_RETRY_INTEGRITY_TAG_LEN))
+ goto err;
+
+ if (!TEST_true(ossl_quic_validate_retry_integrity_tag(NULL, NULL, &hdr,
+ &retry_orig_dcid)))
+ goto err;
+
+ testresult = 1;
+err:
+ return testresult;
+}
+
int setup_tests(void)
{
ADD_ALL_TESTS(test_wire_encode, OSSL_NELEM(encode_cases));
ADD_ALL_TESTS(test_wire_ack, OSSL_NELEM(ack_cases));
ADD_ALL_TESTS(test_wire_pkt_hdr_pn, OSSL_NELEM(pn_tests));
+ ADD_TEST(test_wire_retry_integrity_tag);
return 1;
}