A clean-room IKEv2 / IKE implementation in Rust — independent client (initiator) and server (responder).
ryke = Rust + IKE. Built from the RFCs; it does not wrap OpenSSL or any
existing IKE/IPsec daemon, and copies no third-party code.
Early and moving. The message framing and the IKE_SA_INIT cryptographic core
are in place and verified against published test vectors.
- Message framing — IKE header + generic payload chain (RFC 7296 §3.1–3.2).
- Payloads — Security Association (proposals/transforms), Key Exchange, Nonce.
-
Crypto core for
IKE_SA_INIT:- X25519 Diffie-Hellman — verified against RFC 7748.
- HMAC-SHA256 PRF — verified against RFC 4231.
-
prf+and the SKEYSEED / SK_* key schedule — RFC 7296 §2.13–2.14.
See docs/implementation-plan.md for the roadmap.
-
Control plane in Rust (framing, exchanges, crypto, auth); the ESP data
plane is a userspace ESP implementation in Rust (AES-GCM) —
rykeencrypts/decrypts tunneled packets itself and uses no external software (not the OS kernel's IPsec stack, not any external VPN daemon). It moves packets you hand it (Tunnel/EspSa/ChildSa); capturing real OS traffic (a TUN device, a SOCKS proxy, …) is the consumer's job and out of scope. - Both roles are first-class ([
Role::Initiator] / [Role::Responder]). The server role targets native iOS/Android IKEv2 clients (no app on the phone).
cargo build
cargo test # includes the RFC 7748 / RFC 4231 known-answer testsMIT — see LICENSE.md. © Vladimir Chebotarev
