Byte-Identical Interoperability
Three clients (Android, iOS, Desktop), a single wire format. Frame layout, HKDF labels, CBR padding: everything bit-for-bit identical, validated in CI with Known-Answer-Tests.
Frame layout
Every audio frame has the structure: [Version][Flags][SeqNum BE][Timestamp BE][Nonce][Payload][Tag][DeepfakeScore]. Payload is padded to a constant 120-byte target to resist traffic analysis; the rest of the frame is fixed-size. Identical across all client platforms. Verifiable with the included Wireshark dissector.
- Version + Flags: 2 bytes
- SeqNum: 4 bytes big-endian
- Payload + Tag + Score: in the remainder of the frame
Constant HKDF labels
All KDFs use constant label strings defined in the spec: q-audion-frame-key, q-audion-root-ratchet, q-audion-psk-mix, q-audion-next-chain. Changing a label breaks interop. That is why they are KAT-gated in CI across all platforms.
- HKDF-SHA-256 across Android, iOS, and Desktop
- PRK derived from the session master key
- Info-string label completes domain separation
KAT-gated CI
Every platform includes tests that load test vectors produced by BouncyCastle (the Android reference) and verify the results bit for bit. If Desktop or iOS diverge, CI fails. A continuous guarantee of interoperability.
- BouncyCastle KAT dumper as reference
- tools/android-kat-dumper produces the vectors
- Desktop/iOS checks load the vectors and compare them