Noise IK by default — and a security layer you can replace
Out of the box, sessions come from a Noise IK handshake — X25519 key agreement, ChaCha20-Poly1305 AEAD, BLAKE2s — with deterministic tie-breaking when both sides initiate at once, and make-before-break rekeying every 2 minutes or 1 GiB with zero measured loss. security ↗
The whole security layer is a module, not a hard-coding. Identity, handshake, cipher suite and peer authorization sit behind narrow interfaces; the rest of the engine only ever asks for “make me a session with this peer” and “seal this fragment”. Nothing about scheduling, fragmentation, routing or traversal knows which algorithms answered. That seam is the point: cryptography is one of the few things an operator is frequently not free to choose, and a transport that welds one suite into its data path is unusable the moment a national standard, an accreditation regime or an internal policy says otherwise.
What that means concretely. Within the Noise framework the primitive set is a parameter of the same handshake, so moving to a different key agreement, AEAD or hash — an accredited module, a mandated national algorithm set, or the X25519 + ML-KEM-768 hybrid — is a build-time change rather than a redesign. Replacing the handshake framework outright with something else entirely is a bounded integration at that same boundary, not a fork of the engine. Today the default build ships the suite above; the FIPS-validated and post-quantum variants are specified engineering, not shipped features Roadmap — so if a programme is obliged to run a particular suite, that is precisely where the work lands, and the answer is an integration conversation rather than a “no”. One honest constraint comes with it: there is no cipher negotiation on the wire by explicit decision — one protocol version, one build across the fleet — so a suite is a fleet-wide choice, not a per-session one.
Authorization is pluggable today, separately from the crypto. The handshake proves a peer holds its key; deciding whether that key may join the network — and with which addresses — is a swappable component behind a single trait. Three providers ship (a static allowlist, a hot-reloaded keyfile, an external command hook), and an embedder can replace the module wholesale with their own PKI, an HSM, a corporate identity service or a bespoke enrolment protocol without touching the data path. So an operator runs the cryptography and the authorization scheme they want — or the ones their organisation and accreditation oblige them to run. Every failure mode fails closed. the providers ↗