Description:
Encrypt/decrypt DM messages through the Double Ratchet, persisting ratchet state per session in IndexedDB (never uploaded — server forbids it, doc "Forbidden"). Maintain the per-device envelope shape (#132) so the backend is unchanged.
Acceptance criteria:
- DMs use ratcheted keys (forward secrecy verified by test vectors)
- Ratchet state stored locally only
- Envelope/back-end contract unchanged
Description:
Encrypt/decrypt DM messages through the Double Ratchet, persisting ratchet state per session in IndexedDB (never uploaded — server forbids it, doc "Forbidden"). Maintain the per-device envelope shape (#132) so the backend is unchanged.
Acceptance criteria: