Post-quantum at the handshake and on the ongoing ratchet.
Sessions open with PQXDH — X25519 alongside an ML-KEM-1024 prekey — and every message afterwards carries a Sparse Post-Quantum Ratchet component mixed into the Double Ratchet. The distinction between those two is the whole point: a great many products announce "post-quantum" and mean the handshake only, which fixes the quantum-resistant material once at setup and never refreshes it.
Our test drives fifteen alternating ratchet steps and asserts that no component is empty and no two are equal. That is what separates a continuous ratchet from one that stopped.
All of this is unmodified libsignal. We build on audited cryptography and we do not write our own — which is also why this is the one section of the architecture where we claim no advantage over Signal. We match them here, deliberately.
The two claims above are true of message content and nothing else. Tor's circuit layer is classical — the shipped dependency offers four circuit handshakes and the strongest identifies itself as ntor3-curve25519-sha3_256-1 — so an adversary recording our traffic today could, with a future quantum computer, decrypt the transport. We closed the part of that which was ours: a hybrid X25519 + ML-KEM-1024 handshake now seals every frame inside the circuit, so the queue ids polled and their keys are no longer readable to a future machine. What remains open is Tor's own: that someone dialled the relay onion at time T. Nothing reaches backwards to recordings already made.