Three key exchanges, one secret
Quantum-safe messaging cannot rest on a single key exchange. The client's DSKE ships as a closed native SDK, ML-KEM is a C library, and both had to run inside a Flutter app without blocking it.
final secret = fuse(
await ecdh.exchange(peer), // classical
await dske.quantumSecret(), // client SDK, over FFI
await mlkem.decapsulate(ct), // FIPS 203, post-quantum
);
three exchanges · one secret · breaking one breaks nothing






