1# Changelog
2
3All notable changes to SophaxChat are documented here.
4
5Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6Versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
8---
9
10## [Unreleased]
11
12### Added
13- MLS (RFC 9420) is the default for new groups on iPhone, iPad and Mac when every member has exchanged MLS keys; otherwise the group falls back to Sender Keys v2. Android groups use Sender Keys v2 only.
14
15### Planned (not started)
16- Demo GIF / screen recording for README
17- Independent third-party security audit
18
19---
20
21## [0.1.0-alpha] — 2026-04-01
22
23First tagged release. The cryptographic core is complete and has passed three internal security audits. The app is functional but not yet production-ready — an independent audit has not been conducted.
24
25### Cryptography & Protocol
26- X3DH (Extended Triple Diffie-Hellman) session establishment — Signal spec
27- Double Ratchet with Header Encryption — per-message forward secrecy + relay metadata hiding
28- Sealed sender — sender identity hidden from relay nodes via ephemeral ECDH wrapping
29- Ed25519 identity signatures on every message
30- ChaCha20-Poly1305 AEAD for all symmetric encryption
31- AES-256-GCM at-rest storage (messages + attachments)
32- Group messaging — Signal-style Sender Keys v2 (per-member HMAC-SHA256 KDF chains)
33- **MLS (RFC 9420)** group encryption via mls-rs 0.54 + UniFFI Swift bindings — per-epoch post-compromise security, RustCrypto backend, P2P coordinator pattern
34- Safety Numbers — SHA-512 60-digit fingerprint, QR scan + manual verification
35- TOFU key-change detection — "Safety Number changed" warning banner
36- Identity export / backup — PBKDF2 720 000 iterations, min 16-char passphrase, memory zeroing
37- Key Transparency Log — HMAC-SHA256 verified append-only log in UserDefaults
38
39### Transport
40- Bluetooth LE + WiFi Direct mesh via MultipeerConnectivity (iOS)
41- TCP internet transport — 4-byte length-prefix framing, SOCKS5/Tor proxy support, port 25519
42- Tor anonymity — Tor v3 `.onion` address derived from Ed25519 identity key; Orbot auto-detection
43- Multihop relay — TTL=6 flood routing with LRU deduplication
44- Store-and-forward via relay peers — 48 h TTL, up to 300 items
45- Rate limiting — 20 relays / 10 s per peer, 50 / 10 s global cap
46- LAN auto-discovery via mDNS/Bonjour (iOS) and NsdManager (Android)
47- iOS ↔ Android cross-platform interoperability over TCP
48- Pluggable transport adapter — `MessageTransport` protocol for future LoRa / acoustic adapters
49
50### Features
51- 1:1 and group text messaging, image sharing, push-to-talk voice (AAC M4A)
52- Reply to message, message reactions (6-emoji), read receipts, forward message
53- Disappearing messages (30 s – 7 d), per-conversation message search
54- App lock — Face ID / Touch ID / passcode, auto-lock on background, App Switcher blur
55- Local push notifications — grouped by thread, badge count, privacy mode (sender name hidden by default)
56- Contact renaming, block peer, delete conversation
57- Draft persistence, haptic feedback, clipboard auto-clear (60 s)
58- Keyboard privacy — autocorrect disabled, no keyboard learning
59- Screen recording warning banner, screenshot notification toast
60- QR Contact Card + `sophaxchat://add` deep link
61- Local AI assistant — Apple Foundation Models (iOS 26+), fully on-device
62- Full account wipe — two-step confirmation, clears Keychain + messages + attachments + UserDefaults
63- iPad NavigationSplitView layout; iPhone NavigationStack
64
65### Platform
66- iOS 17+, macOS 14+ (Catalyst), Android 8+
67- GMS-free Android (GrapheneOS, CalyxOS, AOSP) — Wi-Fi Direct fallback, no Google Play Services
68- Swift 6.2, strict concurrency
69
70### Security audit findings resolved
71- **Audit I**: group re-keying on member leave (H-1), skipped message key cache (M-1), notification content hiding on lock screen (M-4)
72- **Audit II**: SKD monotonicity check (A-1), relay inner-message signature verification (A-2), global relay rate limit (A-3), TCP 120 s idle timeout (A-4), deep link confirmation gate (A-5), app lock notification clear (A-6)
73- **Audit III**: Android port bounds check (S3-A1), strict Tor v3 regex (S3-A2), X3DH dhConcat zeroing (S3-I1), EncryptedSharedPreferences (S3-A3), Double Ratchet `mk.fill(0)` (S3-A4), Android clipboard auto-clear (S3-A5), dhConcat length precondition (S3-I2), error message sanitisation (S3-A6), `assert` → `precondition` (S3-I3)
74
75### Known limitations (open)
76- M-2: Sender Key Distribution may arrive after first messages in high-load scenarios
77- M-3: One-time prekey exhaustion window reduces X3DH entropy temporarily
78- No independent third-party security audit yet
79
80---
81
82[Unreleased]: https://github.com/richardmetzner/SophaxChat/compare/v0.1.0-alpha...HEAD
83[0.1.0-alpha]: https://github.com/richardmetzner/SophaxChat/releases/tag/v0.1.0-alpha