PQ Crypta Logo

xquic — HTTP/3 Conformance Results

Alibaba xquic + BoringSSL, 2060a44. How it answers when the server deliberately breaks the protocol.

PQ CRYPTA PLATFORM

🏠 Main

📰 News

👤 Account

⟨ QUANTUM ERROR PORTAL ⟩

Navigate the Error Dimensions

Jump to an anomaly59

Every one of these is a page: what the server emits, the clause it is judged against, and how each client answered. The full list carries the verdict tallies too.

43Pass
6Fail
7Unsupported
3Inconclusive
88%of 49 conclusive

Stack: Alibaba xquic + BoringSSL · Language: C · Version: 2060a44 · Measured 2026-10-27

Badge for a README: https://pqcrypta.com/conformance/badge/xquic.svg xquic conformance badge

By class

Rolled up by what the clause requires rather than into one number. A client that ignores unknown extensions correctly but never emits the right error codes has a specific, nameable problem, and an average is exactly what hides it.

ClassPassing meansPassFailInconclusive
correctness Rejected something invalid, with the code the RFC names. 15 5 3
discretionary The RFC permits either behaviour; the report says which was chosen. 12 0 0
extensibility Ignored something unknown and carried on. 4 0 0
interoperability Correctly decoded something valid but demanding. 7 0 0
resilience Recovered rather than giving up. 5 1 0

Every result

TestClauseVerdictWhat happened
Version Negotiation offering a reserved version alongside v1 RFC 9000 §6 Pass Responded correctly: sent Version Negotiation for 2 datagram(s); the client did not persist with an unsupported version.
Retry packet for source-address validation RFC 9000 §8.1.2 Pass Responded correctly: echoed the Retry token and completed the handshake.
Reserved transport parameter (31·N+27) RFC 9000 §18.1 Pass Ignored the unrecognised element and carried on: completed a handshake carrying a reserved transport parameter.
Unknown frame type in a 1-RTT packet RFC 9000 §12.4 Fail closed cleanly after receiving a frame of unknown type. RFC 9000 §12.4 requires a connection error of type FRAME_ENCODING_ERROR: QUIC reserves no ignorable frame types, and an unknown frame carries no length, so nothing after it in the packet can be parsed.
NEW_CONNECTION_ID followed by RETIRE_CONNECTION_ID RFC 9000 §5.1 Fail Gave up (closed the connection with transport error FRAME_ENCODING_ERROR ("local error") and retired none of the connection IDs this endpoint asked it to. The port's only departure from an ordinary one is the rotation: a NEW_CONNECTION_ID whose retire_prior_to retires every earlier ID) instead of recovering.
Stateless reset RFC 9000 §10.3 Inconclusive The run did not exercise this test: no Stateless Reset was triggered in the 12s after the endpoint forgot the connection, so there was nothing for the client to recognise: 0 datagram(s) arrived in that time.
Deliberately tight MAX_DATA and MAX_STREAM_DATA RFC 9000 §4 Pass Handled it: respected the window and announced the stall (2 DATA_BLOCKED, 2 STREAM_DATA_BLOCKED).
ACK Frequency extension offered draft-ietf-quic-ack-frequency Pass Handled it: ignored the extension, which the specification permits.
Packets marked ECT(0) RFC 9000 §13.4 Unsupported does not report ECN counts. Another peer has echoed the markings this same port sent, so the codepoint demonstrably survives the path from here -- this client simply reported nothing, which §13.4.1 permits where the ECN field is not accessible to it.
Path MTU black hole above a threshold RFC 9000 §14, RFC 8899 Unsupported does not raise its path MTU above the 1200-byte minimum, so there is no black hole for it to detect. The server streamed 96 KiB at it and the path swallows anything over 1300, but nothing it sent was ever that large.
Server-initiated PATH_CHALLENGE RFC 9000 §8.2 Pass Responded correctly: answered with 1 PATH_RESPONSE.
0-RTT rejected after the client sends early data RFC 9001 §4.6.2 Pass Recovered and completed the follow-up request.
A second path offered mid-connection draft-ietf-quic-multipath Pass Handled it: declined the multipath offer and stayed on one path, which is conformant.
Spontaneous 1-RTT key update RFC 9001 §6.2 Pass Decoded it and completed the request.
Stream limits set to the minimum a request needs RFC 9000 §4.6 Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant.
One datagram in twelve dropped once the path is established RFC 9000 §2.2, §13.3 Pass Recovered and completed the follow-up request.
Datagrams arriving from a second server address RFC 9000 §9.6 Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant. The client process had already exited 1202ms in, before this test's reaction point at 3006ms, so the silence after that is not evidence either way.
Transport parameter carrying a value the specification forbids RFC 9000 §7.4, §18.2 Pass Responded correctly: closed with TRANSPORT_PARAMETER_ERROR, which is the code §7.4 requires for a parameter carrying an invalid value (ack_delay_exponent = 21, where §18.2 permits at most 20).
425 (Too Early) in answer to a request sent as early data RFC 8470 §5.2 Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant.
Path marking packets CE, not just ECT(0) RFC 9000 §13.4 Unsupported does not report ECN counts, so the congestion signal had nowhere to be seen. 1 datagram(s) were marked CE and the codepoint demonstrably survives this path, so nothing here was lost in transit -- §13.4.1 requires reporting only where the ECN field is accessible to the endpoint, and for this client it is not.
A second key update after the first is acknowledged RFC 9001 §6.1, §6.5 Pass Decoded it and completed the request.
No stream credit at first, then MAX_STREAMS mid-connection RFC 9000 §4.6 Pass Rejected it (closed at the QUIC layer: received a frame for a stream identifier that exceeded advertised the stream limit for the corresponding stream type). The specification permits this but does not require it; a client that ignored it would also be conformant.
Reserved SETTINGS identifier (0x1f·N+0x21) RFC 9114 §7.2.4.1 Pass Ignored the unrecognised element and completed the follow-up request. The client process had already exited 1252ms in, before this test's reaction point at never observed, so the silence after that is not evidence either way.
Reserved frame type on the response stream RFC 9114 §7.2.8 Pass Ignored the unrecognised element and completed the follow-up request.
Unidirectional stream with a reserved stream type RFC 9114 §6.2.3 Pass Ignored the unrecognised element and completed the follow-up request. The client process had already exited 1402ms in, before this test's reaction point at never observed, so the silence after that is not evidence either way.
SETTINGS containing the same identifier twice RFC 9114 §7.2.4 Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant. The client process had already exited 1252ms in, before this test's reaction point at never observed, so the silence after that is not evidence either way.
A DATA frame on the control stream RFC 9114 §7.2.1 Pass Rejected with the required error code 0x105.
Control stream whose first frame is not SETTINGS RFC 9114 §6.2.1 Pass Rejected with the required error code 0x10a.
A second control stream opened by the server RFC 9114 §6.2.1 Pass Rejected with the required error code 0x103.
Field lines referencing dynamic table insertions RFC 9204 §4.3.3, §4.5.2 Pass Decoded it and completed the request.
Huffman-coded field lines with maximal padding RFC 9204 §4.1.2, RFC 7541 §5.2 Pass Decoded it and completed the request.
Field section larger than the client's advertised maximum RFC 9114 §4.2.2 Pass Decoded it and completed the request.
Trailing field section after the body RFC 9114 §4.1 Pass Decoded it and completed the request.
103 Early Hints before the final response RFC 9110 §15.2, RFC 8297 Pass Recovered and completed the follow-up request.
GOAWAY sent mid-connection RFC 9114 §5.2 Pass Recovered and completed the follow-up request. The client process had already exited 1252ms in, before this test's reaction point at never observed, so the silence after that is not evidence either way.
MAX_PUSH_ID sent by the server RFC 9114 §7.2.7 Pass Rejected with the required error code 0x105.
SETTINGS frame on a request stream RFC 9114 §7.2.4 Pass Rejected with the required error code 0x105.
DATA frame before any HEADERS on the response stream RFC 9114 §4.1 Inconclusive The client completed its request and then answered nothing at all — neither a close nor an acknowledgement of the PING sent to elicit one. So this says less than the case above it: the server cannot show the question was even received, and a client that exited without closing looks from here exactly like one that read the anomaly and carried on. Reported separately rather than as silence from a live peer, which is a stronger claim than the run supports.
CANCEL_PUSH for a push ID that was never promised RFC 9114 §7.2.3 Pass Rejected with the required error code 0x108.
Field section that blocks until the encoder stream catches up RFC 9204 §2.1.2, §2.2.1 Pass Decoded it and completed the request.
Response stream reset mid-body with H3_REQUEST_CANCELLED RFC 9114 §8, §4.1 Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant.
PRIORITY_UPDATE sent by the server RFC 9218 §7.2 Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant. The client process had already exited 1252ms in, before this test's reaction point at never observed, so the silence after that is not evidence either way.
SETTINGS_ENABLE_CONNECT_PROTOCOL with a value outside 0 and 1 RFC 9220 §3, RFC 8441 §3 Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant. The client process had already exited 1252ms in, before this test's reaction point at never observed, so the silence after that is not evidence either way.
PUSH_PROMISE for a push the client never allowed RFC 9114 §7.2.5, §4.6 Fail Accepted a protocol violation and carried on. The anomaly was in the response the client read and delivered, so it was seen; this should have been rejected.
SETTINGS_H3_DATAGRAM with a value that is neither 0 nor 1 RFC 9297 §2.1.1 Inconclusive The client completed its request and closed without objecting, and the anomaly was on the control stream — a unidirectional stream nothing obliges it to read on any schedule. Accepting the violation and never reaching the stream look the same from here. The one signal that separates reading from receiving is a flow-control credit grant, and a receiver grants credit only as its consumption approaches the window it advertised, so a client with a large window reads everything sent and says nothing. Not a judgement withheld — a distinction this vantage point cannot draw for this client. The client process had already exited 1553ms in, before this test's reaction point at never observed, so the silence after that is not evidence either way.
Encoder stream setting a dynamic table capacity above the client's limit RFC 9204 §4.3.1, §6 Fail Rejected, but with error 0x106 where the specification requires 0x201. The violation was detected; the code reported is wrong.
A second GOAWAY naming a larger identifier than the first RFC 9114 §5.2 Pass Rejected with the required error code 0x108.
Push stream opened for a push nobody allowed RFC 9114 §6.2.2 Pass Rejected with the required error code 0x108.
Field line indexing a static table entry that does not exist RFC 9204 §3.1, §4.5.2 Fail Rejected, but with error 0x106 where the specification requires 0x200. The violation was detected; the code reported is wrong.
Datagrams delivered out of order RFC 9000 §2.2 Pass Recovered and completed the follow-up request.
Encoder instruction naming a static index that does not exist RFC 9204 §3.1, §4.3.2 Fail Rejected, but with error 0x106 where the specification requires 0x201. The violation was detected; the code reported is wrong.
Server negotiates only the post-quantum hybrid X25519MLKEM768 RFC 8446 §4.1.4, draft-ietf-tls-hybrid-design Unsupported The client offers no key exchange group this port will negotiate, so it was refused before a handshake existed (the cryptographic handshake failed: error 40: peer is incompatible: NoKxGroupsInCommon). That is a capability this client does not have, rather than something the run failed to measure.
Server negotiates only classical X25519 against a hybrid offer RFC 8446 §4.1.1, draft-ietf-tls-hybrid-design §5 Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant.
Hybrid key share large enough to split the Initial across packets RFC 9000 §8.1, §14.1, RFC 9001 §4.4 Unsupported The client offers no key exchange group this port will negotiate, so it was refused before a handshake existed (the cryptographic handshake failed: error 40: peer is incompatible: NoKxGroupsInCommon). That is a capability this client does not have, rather than something the run failed to measure.
Server selects a key exchange group the client never offered RFC 8446 §4.1.3, §4.2.8, RFC 9001 §4.8 Pass Responded correctly: aborted the handshake with TLS alert 40 (CRYPTO_ERROR 0x128) rather than illegal_parameter. §4.1.3 requires the abort, and RFC 9001 §4.8 expressly permits replacing any alert with a generic one over QUIC, so the code is reported and not judged.
Hybrid key share with an intact X25519 half and a corrupt ML-KEM half draft-ietf-tls-hybrid-design §3.2, RFC 8446 §4.1.3 Pass Responded correctly: rejected the handshake with TLS alert 40. The shared secret is both halves through the key schedule, so a corrupt ML-KEM half must break it -- and this client did not fall back to the intact X25519 half.
Hybrid key share whose length does not match the group named with it draft-kwiatkowski-tls-ecdhe-mlkem §3.1.2, RFC 8446 §6.2, RFC 9001 §4.8 Pass Responded correctly: aborted the handshake with TLS alert 40 rather than illegal_parameter. §3.1.2 requires the abort and RFC 9001 §4.8 permits replacing the alert over QUIC, so the code is reported and not judged -- though note that a truncated share also breaks the key schedule, so this abort does not on its own show the length was what the client objected to.
Post-quantum certificate chain, compressed per RFC 8879 RFC 8879 §4, RFC 8446 §4.4.2 Unsupported The client aborted with handshake_failure (alert 40), which it sends when the parameters cannot be agreed at all — on this port, most often the key exchange group. Nothing shows the certificate was reached, so this is not evidence either way about its handling of an ML-DSA-87 chain.
GREASE named group a client must tolerate RFC 8701 §4, RFC 8446 §4.2.7 Unsupported The client offers no key exchange group this port will negotiate, so it was refused before a handshake existed (the cryptographic handshake failed: error 40: peer is incompatible: NoKxGroupsInCommon). That is a capability this client does not have, rather than something the run failed to measure.