ryke 0.3.0

A clean-room IKEv2 / IKE implementation in Rust — independent client (initiator) and server (responder).
Documentation
[package]
name = "ryke"
version = "0.3.0"
edition = "2024"
rust-version = "1.85"
license = "MIT"
description = "A clean-room IKEv2 / IKE implementation in Rust — independent client (initiator) and server (responder)."
repository = "https://github.com/excitoon/ryke"
readme = "README.md"
keywords = ["ikev2", "ipsec", "vpn", "networking", "crypto"]
categories = ["network-programming", "cryptography"]
authors = ["Vladimir Chebotarev"]

[dependencies]
thiserror = "2"
hmac = "0.12"
sha2 = "0.10"
x25519-dalek = { version = "2", features = ["static_secrets"] }
aes-gcm = "0.10"
# EAP-MSCHAPv2 (RFC 2759) legacy crypto — required only for that auth method.
md4 = "0.10"
des = "0.8"
sha1 = "0.10"
# Certificate / RFC 7427 Digital Signature auth (the iOS/Android server-auth path).
# Pinned to the sha2-0.10 / der-0.7 / spki-0.7 generation so everything unifies on
# a single sha2 (p256 0.14 / rsa 0.10-rc pull sha2 0.11 and would duplicate it).
rsa = { version = "0.9.10", default-features = false, features = ["std", "sha2", "pem"] }
p256 = { version = "0.13.2", default-features = false, features = ["ecdsa", "pem", "std"] }
x509-cert = { version = "0.2.5", default-features = false, features = ["std"] }
der = "0.7"
# MODP (finite-field) Diffie-Hellman for DH groups 2/14 — bignum modexp. Already
# in the tree via rsa; used directly here. (X25519 stays on x25519-dalek.)
num-bigint-dig = { version = "0.8", default-features = false }
# IKEv1 uses AES-CBC with explicit IV chaining (not the AEAD IKEv2 uses).
aes = "0.8"
cbc = { version = "0.1", features = ["alloc"] }

[dev-dependencies]
# Only tests build throwaway certificates; the builder never ships in the library.
x509-cert = { version = "0.2.5", default-features = false, features = ["std", "builder"] }