
Voron messenger crypto/protocol library (X3DH-lite + Double Ratchet, group sender-keys, onion transport) — external review requested
This is the crypto and messaging-protocol core of a small E2EE messenger project, pulled out on its own for outside review. It is not the whole product — the Android client and deployment config are intentionally left out; this is just the part that needs eyes on it.
common/ — the library itself:
e2ee/ — X3DH-lite (asynchronous key agreement) + a Double Ratchet on top, built on
Curve25519/ChaCha20-Poly1305/Ed25519/HKDF (JDK-provided primitives, nothing hand-rolled at
that layer).crypto/ — thin wrappers over those JDK primitives.group/ — group messaging via a sender-keys scheme (the pre-MLS approach early
WhatsApp/Signal groups used), plus a client-side signed hash-chain event log for
membership/roles since the relay has no concept of groups at all.onion/ — an optional layered-encryption transport (fixed hop count, size-bucket padding)
to keep the relay from directly linking a connection's IP to its identity key.client/, transport/, backup/ — the wire protocol, Noise_IK transport handshake, and an
encrypted-backup format.server/ — a reference relay implementation: store-and-forward routing, prekey directory,
offline mailbox, the onion-hop role. Deliberately minimal trust: the relay never sees plaintext,
never holds a message longer than delivery takes, and (by design) has zero group-membership
awareness.client/ — a plain JVM console test harness (not a real app) used to drive common/server
against each other in integration tests, plus a few standalone exploit PoCs (see below).security-audit/ — write-ups from prior internal review passes, the bugs they found, and the
ones already fixed. Read this before reporting something — there's a real chance it's already
in here. REPORT.md is the main one; ADVERSARIAL_REVIEW_PAVEL.md is a later, narrower pass;
fuzz/ and client/.../exploit/ have runnable PoCs, not just descriptions.security-audit/ are exactly "what can a hostile relay do."group/GroupCryptoSession.kt).security-audit/REPORT.md and ADVERSARIAL_REVIEW_PAVEL.md, not something being hidden.common/src/main/kotlin/messenger/common/e2ee/) —
this is the one genuinely bespoke cryptographic construction here, everything under it is
off-the-shelf. It has been reviewed internally multiple times (see security-audit/) but never
by anyone outside this project.common/src/main/kotlin/messenger/common/group/GroupControlLog.kt)
— a client-side signed hash-chain with no server enforcement at all../gradlew test
Standard Gradle/Kotlin project, JDK 17+. No network access or running services needed for the
unit-level suite. security-audit/README.md has instructions for the live relay-fuzzing and
onion-correlation PoCs, which do need local processes running (never point any of it at a
production host).
No independent cryptographic audit has been done on this. Everything in security-audit/ is
internal engineering review — careful, but self-review, with no formal-proof backing and no
professional/institutional track record behind it. Treat it as a starting point for review, not
a certification.