PQ Crypta Logo

A second key update after the first is acknowledged

Follow both updates and carry on. §6.1 lets an endpoint update again once the previous phase has been acknowledged, so a long-lived connection changes keys repeatedly and a client has to track the phase rather than assume one change. Distinct from the single update on the neighbouring port. An implementation that hardcodes the first transition — treating key phase as a one-way flag rather than a bit that alternates — passes that test and fails here, which is precisely the bug worth finding.

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.

q-key-update-repeated · RFC 9001 §6.1, §6.5 · interoperability · layer quic · udp/4509 · MUST

Passing this means: Correctly decoded something valid but demanding.

Anomaly type: transport

How each client answered

ClientVersionVerdictWhat happened
curl libcurl/8.23.0 ngtcp2/1.25.0 Pass Decoded it and completed the request.
quinn noq fork (189b0ed) Pass Decoded it and completed the request.
aioquic 1.3.0 (PyPI wheel) Pass Decoded it and completed the request.
chromium build 1248 Pass Decoded it and completed the request.
quic-go quic-go v0.61.0 (h1:9So2anK4Tp22) Pass Decoded it and completed the request.
quiche 0.30.0 (1c8e976) Pass Decoded it and completed the request.
neqo 0.31.1 (cac2b74) Pass Decoded it and completed the request.
picoquic 8162550 Pass Decoded it and completed the request.
ngtcp2 3c23148 Pass Decoded it and completed the request.
lsquic 4.9.4 (2b30189) Pass Decoded it and completed the request.
xquic 2060a44 Pass Decoded it and completed the request.
msquic 2.7.0 (7e6525d) Pass Decoded it and completed the request.
quico 0.7.0 (npm) Pass Decoded it and completed the request.

What the clause requires

Follow both updates and carry on. §6.1 lets an endpoint update again once the previous phase has been acknowledged, so a long-lived connection changes keys repeatedly and a client has to track the phase rather than assume one change. Distinct from the single update on the neighbouring port. An implementation that hardcodes the first transition — treating key phase as a one-way flag rather than a bit that alternates — passes that test and fails here, which is precisely the bug worth finding.

Judged against RFC 9001.

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-key-update-repeated")'