PARITY: post-quantum is shipped on both clients #90

Merged
paulhitt merged 1 commits from docs/parity-pq-is-shipped into main 2026-09-05 00:30:07 +00:00
1 Commits
Author SHA1 Message Date
Paul HittandClaude Opus 5 28169a648f PARITY: post-quantum is shipped on both clients, not missing on either
Both rows said ⚪/⚠️ and the note under them said "neither client does
post-quantum anything today". That was wrong in the understating
direction — the same direction relay#45 warns about, and the same one that
had the comparison page scoring Signal unfairly in our favour.

- **Android** uses BouncyCastle's ML-KEM (FIPS 203), shipped in the engine.
  The old note's "no ML-KEM at any API level" was about the PLATFORM, which
  is true and is why the engine carries its own — not a reason it has none.
- **iOS** uses CryptoKit `MLKEM768`, unconditional since `project.yml` moved
  the deployment target to 26.0. The runtime gate that made those files
  inert is gone, and `PQKEM.swift` says so at the top.

⚠️ Corrected by a run rather than by reading the source, which is the rule
this file keeps to. `test/interop-swift-kotlin.mjs` establishes it end to
end in both directions: "Android picks v3 for an iPhone peer", "the first
Android envelope carries a PQ ratchet step", "the iPhone agrees the session
is v3", "a v3 session survives being archived and restored
mid-conversation".

⚠️ The honest limit is unchanged and kept: it counts only once BOTH ends
have it, so today that means two Android phones — or an Android phone and
an iPhone running a build that has not shipped.

Found while correcting relay#11, where I went in expecting to find our own
cells overstated and found the opposite.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 20:29:01 -04:00