Contact Exchange Sequence

Interaction Type: 🀝 IN-PERSON (Proximity Required)

Two users exchange contact cards by scanning QR codes while physically present together. Proximity is verified via ultrasonic audio handshake to prevent remote/screenshot attacks.

Participants

  • Alice - User initiating exchange (displays QR)
  • Alice's Device - Mobile/Desktop running Vauchi
  • Bob - User completing exchange (scans QR)
  • Bob's Device - Mobile/Desktop running Vauchi
  • Relay - WebSocket relay server (fallback only)

Sequence Diagram

 β”Œβ”€β”€β”€β”€β”€β”€β”€β”           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”Œβ”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”     
 β”‚ Alice β”‚           β”‚ Alice's Device β”‚                                β”‚ Bob's Device β”‚               β”‚ Bob β”‚   β”‚ Relay β”‚     
 β””β”€β”€β”€β”¬β”€β”€β”€β”˜           β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜                                β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜               β””β”€β”€β”¬β”€β”€β”˜   β””β”€β”€β”€β”¬β”€β”€β”€β”˜     
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚  Tap "Share Contact"   β”‚                                                β”‚                         β”‚          β”‚         
     │────────────────────────▢                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”œβ”€β”€β”€β”                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚   β”‚ Generate ephemeral X25519 keypair          β”‚                         β”‚          β”‚         
     β”‚                        β—€β”€β”€β”€β”˜                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”œβ”€β”€β”€β”                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚   β”‚ Create exchange token (expires 5 min)      β”‚                         β”‚          β”‚         
     β”‚                        β—€β”€β”€β”€β”˜                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”œβ”€β”€β”€β”                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚   β”‚ Generate audio challenge seed              β”‚                         β”‚          β”‚         
     β”‚                        β—€β”€β”€β”€β”˜                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”œβ”€β”€β”€β”                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚   β”‚ Encode QR: [public_key, token, audio_challenge]                      β”‚          β”‚         
     β”‚                        β—€β”€β”€β”€β”˜                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚    Display QR code     β”‚                                                β”‚                         β”‚          β”‚         
     ◀────────────────────────│                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚  Open camera, scan QR   β”‚          β”‚         
     β”‚                        β”‚                                                ◀─────────────────────────│          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”œβ”€β”€β”€β”                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚   β”‚ Decode QR data      β”‚          β”‚         
     β”‚                        β”‚                                                β—€β”€β”€β”€β”˜                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”œβ”€β”€β”€β”                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚   β”‚ Validate token not expired     β”‚         
     β”‚                        β”‚                                                β—€β”€β”€β”€β”˜                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”œβ”€β”€β”€β”                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚   β”‚ Extract Alice's public key     β”‚         
     β”‚                        β”‚                                                β—€β”€β”€β”€β”˜                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚                         β”‚          β”‚         
     β”‚                        β”‚ β”‚ PROXIMITY VERIFICATION (Ultrasonic Audio) β”‚  β”‚                         β”‚          β”‚         
     β”‚                        β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”œβ”€β”€β”€β”                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚   β”‚ Emit ultrasonic challenge (18-20 kHz)      β”‚                         β”‚          β”‚         
     β”‚                        β—€β”€β”€β”€β”˜                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”œβ”€β”€β”€β”                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚   β”‚ Detect ultrasonic challenge    β”‚         
     β”‚                        β”‚                                                β—€β”€β”€β”€β”˜                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”œβ”€β”€β”€β”                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚   β”‚ Sign challenge with Bob's key  β”‚         
     β”‚                        β”‚                                                β—€β”€β”€β”€β”˜                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”œβ”€β”€β”€β”                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚   β”‚ Emit ultrasonic response       β”‚         
     β”‚                        β”‚                                                β—€β”€β”€β”€β”˜                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”œβ”€β”€β”€β”                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚   β”‚ Detect and verify response                 β”‚                         β”‚          β”‚         
     β”‚                        β—€β”€β”€β”€β”˜                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”œβ”€β”€β”€β”                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚   β”‚ Confirm proximity                          β”‚                         β”‚          β”‚         
     β”‚                        β—€β”€β”€β”€β”˜                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”œβ”€β”€β”€β”                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚   β”‚ Confirm proximity   β”‚          β”‚         
     β”‚                        β”‚                                                β—€β”€β”€β”€β”˜                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚                         β”‚          β”‚         
     β”‚                        β”‚            β”‚ X3DH KEY AGREEMENT β”‚              β”‚                         β”‚          β”‚         
     β”‚                        β”‚            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”œβ”€β”€β”€β”                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚   β”‚ Generate ephemeral X25519 keypair        
     β”‚                        β”‚                                                β—€β”€β”€β”€β”˜                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚   Send: [Bob's identity key, ephemeral key]    β”‚                         β”‚          β”‚         
     β”‚                        ◀────────────────────────────────────────────────│                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”œβ”€β”€β”€β”                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚   β”‚ X3DH: Derive shared secret                 β”‚                         β”‚          β”‚         
     β”‚                        β—€β”€β”€β”€β”˜                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚  Send: [Alice's identity key, ephemeral key]   β”‚                         β”‚          β”‚         
     β”‚                        │────────────────────────────────────────────────▢                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”œβ”€β”€β”€β”                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚   β”‚ X3DH: Derive shared secret     β”‚         
     β”‚                        β”‚                                                β—€β”€β”€β”€β”˜                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚                         β”‚          β”‚         
     β”‚                        β”‚     β”‚ Both have identical shared secret β”‚      β”‚                         β”‚          β”‚         
     β”‚                        β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚                         β”‚          β”‚         
     β”‚                        β”‚           β”‚ CONTACT CARD EXCHANGE β”‚            β”‚                         β”‚          β”‚         
     β”‚                        β”‚           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”œβ”€β”€β”€β”                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚   β”‚ Encrypt Alice's card with shared secret    β”‚                         β”‚          β”‚         
     β”‚                        β—€β”€β”€β”€β”˜                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚          Send encrypted contact card           β”‚                         β”‚          β”‚         
     β”‚                        │────────────────────────────────────────────────▢                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”œβ”€β”€β”€β”                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚   β”‚ Decrypt Alice's cardβ”‚          β”‚         
     β”‚                        β”‚                                                β—€β”€β”€β”€β”˜                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”œβ”€β”€β”€β”                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚   β”‚ Store Alice as contact         β”‚         
     β”‚                        β”‚                                                β—€β”€β”€β”€β”˜                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”œβ”€β”€β”€β”                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚   β”‚ Encrypt Bob's card with shared secret    
     β”‚                        β”‚                                                β—€β”€β”€β”€β”˜                     β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚          Send encrypted contact card           β”‚                         β”‚          β”‚         
     β”‚                        ◀────────────────────────────────────────────────│                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”œβ”€β”€β”€β”                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚   β”‚ Decrypt Bob's card                         β”‚                         β”‚          β”‚         
     β”‚                        β—€β”€β”€β”€β”˜                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”œβ”€β”€β”€β”                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚   β”‚ Store Bob as contact                       β”‚                         β”‚          β”‚         
     β”‚                        β—€β”€β”€β”€β”˜                                            β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚  Exchange Successful   β”‚                                                β”‚                         β”‚          β”‚         
     ◀────────────────────────│                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                        β”‚                                                β”‚   Exchange Successful   β”‚          β”‚         
     β”‚                        β”‚                                                │─────────────────────────▢          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
     β”‚                       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                       β”‚          β”‚         
     β”‚                       β”‚β”‚Alice and Bob now have each other's contact cards β”‚                       β”‚          β”‚         
     β”‚                       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚          β”‚         
     β”‚                        β”‚                                                β”‚                         β”‚          β”‚         
 β”Œβ”€β”€β”€β”΄β”€β”€β”€β”           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”                                β”Œβ”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”               β”Œβ”€β”€β”΄β”€β”€β”   β”Œβ”€β”€β”€β”΄β”€β”€β”€β”     
 β”‚ Alice β”‚           β”‚ Alice's Device β”‚                                β”‚ Bob's Device β”‚               β”‚ Bob β”‚   β”‚ Relay β”‚     
 β””β”€β”€β”€β”€β”€β”€β”€β”˜           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β””β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”˜     

Data Exchanged

QR Code Contents

Binary format (v3) with WBEX magic bytes:

WBEX (4 bytes magic)
version (1 byte) = 0x03
Ed25519 public key (32 bytes)
X25519 exchange key (32 bytes)
exchange token (32 bytes)
audio_challenge seed (16 bytes)
creation timestamp (8 bytes)
name_len (2 bytes, big-endian)
name (N bytes, UTF-8)
flags (1 byte, bitfield)
  [if bit 0] relay_url_len (2 bytes) + relay_url (M bytes)
  [if bit 1] relay_noise_pubkey (32 bytes)
signature (64 bytes, Ed25519 over all preceding fields)

Minimum size (empty name, no relay fields): 192 bytes.

Contact Card (Encrypted)

{
  "display_name": "Alice Smith",
  "fields": [
    {"type": "phone", "label": "Mobile", "value": "+1-555-1234"},
    {"type": "email", "label": "Personal", "value": "alice@example.com"}
  ],
  "signature": "Ed25519 signature of card"
}

Security Properties

PropertyMechanism
ProximityUltrasonic audio (18-20 kHz)
No MITMX3DH with identity keys
Forward SecrecyEphemeral keys discarded
Replay PreventionOne-time token, 5-min expiry
Card AuthenticityEd25519 signature

Failure Scenarios

Proximity Verification Fails

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                  
β”‚ Alice's Device β”‚  β”‚ Bob's Device β”‚                                  
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜                                  
         β”‚                  β”‚                                         
         β”œβ”€β”€β”€β”              β”‚                                         
         β”‚   β”‚ Emit ultrasonic challenge                              
         β—€β”€β”€β”€β”˜              β”‚                                         
         β”‚                  β”‚                                         
         β”‚                  β”œβ•Œβ•Œβ•Œβ”                                     
         β”‚                  β”‚   β”‚ No ultrasonic detected (too far)    
         β”‚                  β—€β•Œβ•Œβ•Œβ”˜                                     
         β”‚                  β”‚                                         
         β”‚                  β”œβ”€β”€β”€β”                                     
         β”‚                  β”‚   β”‚ Proximity verification FAILED       
         β”‚                  β—€β”€β”€β”€β”˜                                     
         β”‚                  β”‚                                         
         β”‚                  β”œβ”€β”€β”€β”                                     
         β”‚                  β”‚   β”‚ Proximity verification failed       
         β”‚                  β—€β”€β”€β”€β”˜                                     
         β”‚                  β”‚                                         
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                             
β”‚ Exchange blocked - no cards exchanged β”‚                             
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                             
         β”‚                  β”‚                                         
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”                                  
β”‚ Alice's Device β”‚  β”‚ Bob's Device β”‚                                  
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                  

QR Code Expired

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                         
β”‚ Alice's Device β”‚  β”‚ Bob's Device β”‚                         
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜                         
         β”‚                  β”‚                                
         β”‚                  β”œβ”€β”€β”€β”                            
         β”‚                  β”‚   β”‚ Decode QR, check expiry    
         β”‚                  β—€β”€β”€β”€β”˜                            
         β”‚                  β”‚                                
         β”‚                  β”œβ”€β”€β”€β”                            
         β”‚                  β”‚   β”‚ Token expired              
         β”‚                  β—€β”€β”€β”€β”˜                            
         β”‚                  β”‚                                
         β”‚                  β”œβ”€β”€β”€β”                            
         β”‚                  β”‚   β”‚ QR code expired            
         β”‚                  β—€β”€β”€β”€β”˜                            
         β”‚                  β”‚                                
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                            
   β”‚ Alice must generate new QR β”‚                            
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                            
         β”‚                  β”‚                                
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”                         
β”‚ Alice's Device β”‚  β”‚ Bob's Device β”‚                         
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                         

Platform Variations

PlatformProximity MethodFallback
iOS ↔ iOSUltrasonicManual confirm
Android ↔ AndroidUltrasonicManual confirm
iOS ↔ AndroidUltrasonicManual confirm
Desktop ↔ MobileN/A (no mic)Manual confirm
Desktop ↔ DesktopN/AManual confirm