Message Delivery Flow
Interaction Type: ๐ REMOTE (Via Relay)
End-to-end message delivery from card update to acknowledgment.
Participants
- Alice - User sending card update
- Alice's Device - Source device
- Relay - WebSocket relay server
- Bob's Device - Recipient device
- Bob - Contact receiving update
Message Sizes & Frequency
| Message Type | Payload | Padded Size | Frequency |
|---|---|---|---|
| Card delta | 50-200 B | 256 B | 1-5/month |
| Full card | 500 B-2 KB | 1-4 KB | Initial only |
| Ack | 32-64 B | 256 B | Per message |
| Device sync | 100-500 B | 256 B-1 KB | Real-time |
Complete Delivery Flow
โโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโ
โ Alice โ โ Alice's Device ๐ฑ โ โ Relay ๐ฅ๏ธ โ โ Bob's Device ๐ฑ โ โ Bob โ
โโโโโฌโโโโ โโโโโโโโโโโฌโโโโโโโโโโ โโโโโโโฌโโโโโโ โโโโโโโโโโฌโโโโโโโโโ โโโโฌโโโ
โ โ โ โ โ
โ Edit phone: "555-1111" โ "555-2222" โ โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ โ โ โ
โ โ โ โ โ
โ โโโโโ โ โ โ
โ โ โ Update local card โ โ โ
โ โโโโโ โ โ โ
โ โ โ โ โ
โ โโโโโ โ โ โ
โ โ โ Create CardDelta โ โ โ
โ โโโโโ โ โ โ
โ โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โ Delta: ~100 bytes โ โ โ โ
โ โ โ {"field":"phone","value":"555-2222"} โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โ โ โ
โ โโโโโ โ โ โ
โ โ โ Check visibility: Bob can see phone? โ โ โ โ
โ โโโโโ โ โ โ
โ โ โ โ โ
โ โโโโโ โ โ โ
โ โ โ Ratchet send chain forward โ โ โ
โ โโโโโ โ โ โ
โ โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โ Chain gen 42 โ 43 โ โ โ โ
โ โ โ Message key derived โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โ โ โ
โ โโโโโ โ โ โ
โ โ โ Encrypt delta (XChaCha20-Poly1305) โ โ โ
โ โโโโโ โ โ โ
โ โ โ โ โ
โ โโโโโ โ โ โ
โ โ โ Pad to 256 bytes (bucket) โ โ โ
โ โโโโโ โ โ โ
โ โ โ โ โ
โ โโโโโ โ โ โ
โ โ โ Generate CEK, sign payload โ โ โ
โ โโโโโ โ โ โ
โ โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โ Final: ~256 bytes โ โ โ โ
โ โ โ (v0x02 format) โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โ โ โ
โ โ EncryptedUpdate(recipient=Bob, blob=...) โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ โ โ
โ โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โ WebSocket frame: โ โ โ โ
โ โ โ 4-byte length + JSON envelope โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โ โ โ
โ โ โโโโโ โ โ
โ โ โ โ Validate recipient_id format โ โ
โ โ โโโโโ โ โ
โ โ โ โ โ
โ โ โโโโโ โ โ
โ โ โ โ Check quota (blobs < 1000, storage < 50MB)โ โ
โ โ โโโโโ โ โ
โ โ โ โ โ
โ โ โโโโโ โ โ
โ โ โ โ Store blob indexed by recipient_id โ โ
โ โ โโโโโ โ โ
โ โ โ โ โ
โ โ Acknowledgment(status=Stored) โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ Blob stored with 120-day TTL โ โ โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ
โ โalt [Bob is Online (Connected to Relay)]โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ โ โ โ โ
โ โ โ โ Forward EncryptedUpdate โ โ โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ โ โ
โ โ โ โ โ โ โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ Receive encrypted blob โ โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ Resolve anonymous sender ID โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ โ
โ โ โ โ โ โโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ โ Try each contact's โ โ โ
โ โ โ โ โ โ shared key against โ โ โ
โ โ โ โ โ โ anonymous_id โ โ โ
โ โ โ โ โ โโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ โ โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ Found: Alice โ โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ Derive message key (chain gen โ3)
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ Decrypt payload โ โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ Remove padding โ โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ Verify Ed25519 signature โ โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ Update Alice's card locally โ
โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ โ
โ โ โ โ โ Alice updated contact info โ โ
โ โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ โ
โ โ โ โ โ โ โ
โ โ โ โ Acknowledgment(status=ReceivedByRecipient) โ โ โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ โ โ
โ โ โ Forward Acknowledgment โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โ โ โ โ โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ โ
โ โ โ โ Sender notified if โ โ โ โ โ
โ โ โ โ suppress_presence=false โ โ โ โ โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ โ
โ โ โ โ โ โ โ
โ โ โโโโโ โ โ โ โ
โ โ โ โ Mark update as delivered โ โ โ โ
โ โ โโโโโ โ โ โ โ
โ โ โ โ โ โ โ
โ โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โ โ โ Blob queued for later โ โ โ โ
โ โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โ โ โ โ โ
โ โ โ โopt [Bob comes online later]โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ โ โ โ โ
โ โ[Bob is Offline]โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ โ โ โ โ โ โ โ
โ โ โ โ โ Connect (Handshake) โ โ โ โ
โ โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โ โ โ โ โ โ โ
โ โ โ โ โ Deliver queued blobs โ โ โ โ
โ โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ โ โ โ
โ โ โ โ โ โ โ โ โ
โ โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ โ Process all pending updates โ
โ โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ โ โ โ
โ โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ โ Updates applied in order โ โ
โ โ โ โ โ โโโโโ โ โ
โ โ โ โ โ โ โ โ โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ โ
โ โ โ โ Bob now sees Alice's new phone โ โ โ โ โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ โ โ
โ โ โ โ โ โ โ โ โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ โ โ
โโโโโดโโโโ โโโโโโโโโโโดโโโโโโโโโโ โโโโโโโดโโโโโโ โโโโโโโโโโดโโโโโโโโโ โโโโดโโโ
โ Alice โ โ Alice's Device ๐ฑ โ โ Relay ๐ฅ๏ธ โ โ Bob's Device ๐ฑ โ โ Bob โ
โโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโ
Double Ratchet Message Flow
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ
โ Alice's Ratchet โ โ Bob's Ratchet โ
โโโโโโโโโโฌโโโโโโโโโ โโโโโโโโโฌโโโโโโโโ
โ โ
โrect [rgb(240, 248, 255)]โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ โ
โ โโโโโ โ โ
โ โ โ Ratchet send chain: gen 0 โ 1 โ โ
โ โโโโโ โ โ
โ โ โ โ
โ โโโโโ โ โ
โ โ โ Derive message key (gen 0) โ โ
โ โโโโโ โ โ
โ โ โ โ
โ โโโโโ โ โ
โ โ โ Encrypt with message key โ โ
โ โโโโโ โ โ
โ โ โ โ
โ โโโโโ โ โ
โ โ โ Delete message key โ โ
โ โโโโโ โ โ
โ โ โ โ
โ โ [DH_pub, gen=0, idx=0] + ciphertext โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ โ
โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ RECEIVE (Message 1) โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ โrect [rโ
โ โ โ โ
โ โ โโโโโ
โ โ โ โ Verify DH generation matches
โ โ โโโโโ
โ โ โ โ
โ โ โโโโโ
โ โ โ โ Ratchet receive chain: gen 0 โ 1
โ โ โโโโโ
โ โ โ โ
โ โ โโโโโ
โ โ โ โ Derive message key (gen 0)
โ โ โโโโโ
โ โ โ โ
โ โ โโโโโ
โ โ โ โ Decrypt
โ โ โโโโโ
โ โ โ โ
โ โ โโโโโ
โ โ โ โ Delete message key
โ โ โโโโโ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ SEND REPLY (triggers DH ratchet) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ โ
โ โโโโโโโโโ
โ โ
โrect [rgb(255, 248, 240)]โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ โ
โ โ โโโโโ
โ โ โ โ Generate new ephemeral DH keypair
โ โ โโโโโ
โ โ โ โ
โ โ โโโโโ
โ โ โ โ DH ratchet: compute new root key
โ โ โโโโโ
โ โ โ โ
โ โ โโโโโ
โ โ โ โ Create new send chain
โ โ โโโโโ
โ โ โ โ
โ โ โโโโโ
โ โ โ โ Encrypt with new chain's key
โ โ โโโโโ
โ โ โ โ
โ โ [NEW_DH_pub, gen=1, idx=0] + ciphertext โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ RECEIVE (triggers DH ratchet) โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โrect [rโ โ
โ โ โ โ
โ โโโโโ โ
โ โ โ Detect new DH public key โ
โ โโโโโ โ
โ โ โ โ
โ โโโโโ โ
โ โ โ DH ratchet: compute matching root key โ
โ โโโโโ โ
โ โ โ โ
โ โโโโโ โ
โ โ โ Create new receive chain โ
โ โโโโโ โ
โ โ โ โ
โ โโโโโ โ
โ โ โ Decrypt with new chain's key โ
โ โโโโโ โ
โ โ โ โ
โโโโโโโโโ โ
โ โ
โโโโโโโโโโดโโโโโโโโโ โโโโโโโโโดโโโโโโโโ
โ Alice's Ratchet โ โ Bob's Ratchet โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ
Out-of-Order Message Handling
โโโโโโโโโโโโโโโโโโ โโโโโโโโโ โโโโโโโโโโโโโโโโ
โ Alice's Device โ โ Relay โ โ Bob's Device โ
โโโโโโโโโโฌโโโโโโโโ โโโโโฌโโโโ โโโโโโโโโฌโโโโโโโ
โ โ โ
โ Message 1 (gen=0, idx=0) โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ โ
โ โ โ
โ Message 2 (gen=0, idx=1) โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ โ
โ โ โ
โ Message 3 (gen=0, idx=2) โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโ โ
โ โ Network delays โ โ
โ โโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โ Message 3 arrives first โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ
โ โ โ
โ โ โโโโโ
โ โ โ โ Expected idx=0, got idx=2
โ โ โโโโโ
โ โ โ
โ โ โโโโโ
โ โ โ โ Skip chain to idx=2
โ โ โโโโโ
โ โ โ
โ โ โโโโโ
โ โ โ โ Store skipped keys: [idx=0, idx=1]
โ โ โโโโโ
โ โ โ
โ โ โโโโโ
โ โ โ โ Decrypt message 3
โ โ โโโโโ
โ โ โ
โ โ Message 1 arrives โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ
โ โ โ
โ โ โโโโโ
โ โ โ โ Lookup skipped key for idx=0
โ โ โโโโโ
โ โ โ
โ โ โโโโโ
โ โ โ โ Found! Decrypt message 1
โ โ โโโโโ
โ โ โ
โ โ โโโโโ
โ โ โ โ Delete skipped key
โ โ โโโโโ
โ โ โ
โ โ Message 2 arrives โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโถ
โ โ โ
โ โ โโโโโ
โ โ โ โ Lookup skipped key for idx=1
โ โ โโโโโ
โ โ โ
โ โ โโโโโ
โ โ โ โ Found! Decrypt message 2
โ โ โโโโโ
โ โ โ
โ โ โโโโโ
โ โ โ โ Delete skipped key
โ โ โโโโโ
โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ All messages processed, โ
โ โ โ skipped keys cleaned up โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ
โโโโโโโโโโดโโโโโโโโ โโโโโดโโโโ โโโโโโโโโดโโโโโโโ
โ Alice's Device โ โ Relay โ โ Bob's Device โ
โโโโโโโโโโโโโโโโโโ โโโโโโโโโ โโโโโโโโโโโโโโโโ
Relay Acknowledgment States
โโโโโ โญโโโโโโโฎ โญโโโโโโโโโฎ โญโโโโโโโโโโโโโโโโฎ โญโโโโโโโโโโโโโโโโโโโโโโฎ โโโโโ
โ โ โ โ โ โ โ โ โ โ โ โ
โ โโMessageโcreatedโบโ Sent โRelayโconfirmsโstorageโโบโ Stored โ โโโโโRecipientโconnectedโโโโโบโ Delivered โRecipientโacksโโบโ ReceivedByRecipient โโโโโโบโ โ
โ โ โ โ โ โ โ โ โ โ โ โ
โโโโโ โฐโโโโโโโฏ โฐโโโโโฌโโโโฏ โฐโโโโโโโโฌโโโโโโโโฏ โฐโโโโโโโโโโโโโโโโโโโโโโฏ โโโโโ
โ โ
โ Decrypt error
โ โ
โ โ
โ โผ
โ โญโโโโโโโโโโโโโโโโฎ โโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ โ โ
โโโโโโโโโโโโโQuotaโexceededโโโโโโโโโโโโโโบโ Failed โโโโโโโโโโโโโโโโโบโ โ
โ โ โ โ
โฐโโโโโโโโโโโโโโโโฏ โโโโโโโโโโโโโโโโโโโโโโโ
Wire Protocol
Envelope Format
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MESSAGE ENVELOPE โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ 4 bytes: Length (big-endian) โ
โ JSON payload: โ
โ { โ
โ "version": 1, โ
โ "message_id": "uuid", โ
โ "timestamp": unix_secs, โ
โ "payload": { ... } โ
โ } โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
EncryptedUpdate Payload
{
"type": "EncryptedUpdate",
"sender_id": "anonymous_id (hourly rotation)",
"recipient_id": "mailbox token (daily rotation)",
"ratchet_header": {
"dh_public": "[32 bytes] sender DH public key",
"dh_generation": 5,
"message_index": 10,
"previous_chain_length": 3
},
"ciphertext": "base64(encrypted_delta)"
}
Acknowledgment Payload
{
"type": "Acknowledgment",
"message_id": "original message uuid",
"status": "Stored|Delivered|Received|Failed",
"error": null
}
Timing Estimates
| Phase | Duration | Notes |
|---|---|---|
| Encryption + padding | 1-5 ms | XChaCha20 is fast |
| Network latency | 50-200 ms | Relay location |
| Relay storage | 1-10 ms | SQLite insert |
| Forward to recipient | 50-200 ms | If online |
| Decryption + verify | 1-5 ms | |
| Total (online) | 100-400 ms | End-to-end |
| Total (offline) | < 120 days | Until connect |
Related Features
- Contact Exchange
- How keys are established
- Sync Updates
- Multi-device sync
- Crypto Hierarchy
- Key derivation