E2E crypto handshake: - Client/relay handshake via SignalMessage (CallOffer/CallAnswer) - X25519 ephemeral key exchange with Ed25519 identity signatures - Integration tests proving bidirectional encrypt/decrypt Codec2 integration: - Pure Rust codec2 crate (v0.3) — no C bindings needed - MODE_3200 (160 samples/20ms, 8 bytes) and MODE_1200 (320 samples/40ms, 6 bytes) - 11 new tests including encode/decode roundtrip and adaptive switching Relay forwarding: - Bidirectional client → remote forwarding with pipeline processing - CLI args: --listen, --remote - Periodic stats logging, clean shutdown via tokio::select! Benchmark tool (wzp-bench): - Codec roundtrip, FEC recovery, crypto throughput, full pipeline benchmarks - Sine wave PCM generator for realistic testing Audio I/O (cpal): - AudioCapture (microphone) and AudioPlayback (speakers) at 48kHz mono - CLI --live mode: mic → encode → send / recv → decode → speakers 120 tests passing, 0 failures. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
53 lines
1.1 KiB
TOML
53 lines
1.1 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = [
|
|
"crates/wzp-proto",
|
|
"crates/wzp-codec",
|
|
"crates/wzp-fec",
|
|
"crates/wzp-crypto",
|
|
"crates/wzp-transport",
|
|
"crates/wzp-relay",
|
|
"crates/wzp-client",
|
|
]
|
|
|
|
[workspace.package]
|
|
version = "0.1.0"
|
|
edition = "2024"
|
|
license = "MIT OR Apache-2.0"
|
|
rust-version = "1.85"
|
|
|
|
[workspace.dependencies]
|
|
# Shared
|
|
bytes = "1"
|
|
thiserror = "2"
|
|
async-trait = "0.1"
|
|
tokio = { version = "1", features = ["full"] }
|
|
tracing = "0.1"
|
|
tracing-subscriber = "0.3"
|
|
serde = { version = "1", features = ["derive"] }
|
|
|
|
# Transport
|
|
quinn = "0.11"
|
|
|
|
# FEC
|
|
raptorq = "2"
|
|
|
|
# Codec
|
|
audiopus = "0.3.0-rc.0"
|
|
codec2 = "0.3"
|
|
|
|
# Crypto
|
|
x25519-dalek = { version = "2", features = ["static_secrets"] }
|
|
ed25519-dalek = { version = "2", features = ["rand_core"] }
|
|
chacha20poly1305 = "0.10"
|
|
hkdf = "0.12"
|
|
sha2 = "0.10"
|
|
rand = "0.8"
|
|
|
|
# Workspace crates
|
|
wzp-proto = { path = "crates/wzp-proto" }
|
|
wzp-codec = { path = "crates/wzp-codec" }
|
|
wzp-fec = { path = "crates/wzp-fec" }
|
|
wzp-crypto = { path = "crates/wzp-crypto" }
|
|
wzp-transport = { path = "crates/wzp-transport" }
|