q-stateless-reset
· RFC 9000 §10.3 · correctness · layer quic · udp/4465 · MUST
Passing this means: Rejected something invalid, with the code the RFC names.
Anomaly type: transport
How each client answered
| Client | Version | Verdict | What happened |
|---|---|---|---|
| curl | libcurl/8.23.0 ngtcp2/1.25.0 | Pass | Responded correctly: was sent a Stateless Reset and went quiet — nothing further arrived in the 3 seconds that followed, which is the draining period §10.3.1 requires (0 datagram(s) were already in flight when the reset went out and are not counted against it). |
| quinn | noq fork (189b0ed) | Pass | Responded correctly: was sent a Stateless Reset and went quiet — nothing further arrived in the 3 seconds that followed, which is the draining period §10.3.1 requires (0 datagram(s) were already in flight when the reset went out and are not counted against it). |
| aioquic | 1.3.0 (PyPI wheel) | Fail | kept sending after the Stateless Reset: 2 more datagram(s) arrived in the following 3 seconds, after a 500ms grace for packets already in flight (89 of those). RFC 9000 §10.3.1 requires a client that recognises the token to enter the draining period and send nothing further, so this connection is wedged against an endpoint that has forgotten it. |
| chromium | build 1248 | Pass | Responded correctly: was sent a Stateless Reset and went quiet — nothing further arrived in the 3 seconds that followed, which is the draining period §10.3.1 requires (0 datagram(s) were already in flight when the reset went out and are not counted against it). |
| quic-go | quic-go v0.61.0 (h1:9So2anK4Tp22) | Pass | Responded correctly: was sent a Stateless Reset and went quiet — nothing further arrived in the 3 seconds that followed, which is the draining period §10.3.1 requires (0 datagram(s) were already in flight when the reset went out and are not counted against it). |
| quiche | 0.30.0 (1c8e976) | Pass | Responded correctly: was sent a Stateless Reset and went quiet — nothing further arrived in the 3 seconds that followed, which is the draining period §10.3.1 requires (0 datagram(s) were already in flight when the reset went out and are not counted against it). |
| neqo | 0.31.1 (cac2b74) | Pass | Responded correctly: was sent a Stateless Reset and went quiet — nothing further arrived in the 3 seconds that followed, which is the draining period §10.3.1 requires (0 datagram(s) were already in flight when the reset went out and are not counted against it). |
| picoquic | 8162550 | Pass | Responded correctly: was sent a Stateless Reset and went quiet — nothing further arrived in the 3 seconds that followed, which is the draining period §10.3.1 requires (0 datagram(s) were already in flight when the reset went out and are not counted against it). |
| ngtcp2 | 3c23148 | Pass | Responded correctly: was sent a Stateless Reset and went quiet — nothing further arrived in the 3 seconds that followed, which is the draining period §10.3.1 requires (0 datagram(s) were already in flight when the reset went out and are not counted against it). |
| lsquic | 4.9.4 (2b30189) | Fail | kept sending after the Stateless Reset: 9 more datagram(s) arrived in the following 3 seconds, after a 500ms grace for packets already in flight (0 of those). RFC 9000 §10.3.1 requires a client that recognises the token to enter the draining period and send nothing further, so this connection is wedged against an endpoint that has forgotten it. |
| xquic | 2060a44 | 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. |
| msquic | 2.7.0 (7e6525d) | Pass | Responded correctly: was sent a Stateless Reset and went quiet — nothing further arrived in the 3 seconds that followed, which is the draining period §10.3.1 requires (0 datagram(s) were already in flight when the reset went out and are not counted against it). |
| quico | 0.7.0 (npm) | Pass | Responded correctly: was sent a Stateless Reset and went quiet — nothing further arrived in the 3 seconds that followed, which is the draining period §10.3.1 requires (0 datagram(s) were already in flight when the reset went out and are not counted against it). |
What the clause requires
Recognise the token in the last 16 bytes of the datagram, enter the draining period, and send no further packets on the connection. The packet cannot be authenticated, so there is nothing to reply with and nothing to report to the peer — continuing to send is the failure §10.3.1 names.
Judged against RFC 9000.
Run this one yourself
Every test is reachable from your own client. Nothing here needs an account.
curl -s https://conformance.pqcrypta.com/catalog.json \
| jq '.tests[] | select(.id == "q-stateless-reset")'