Passphrase-based peer rendezvous for iroh-gossip swarms over the public Mainline DHT. Two nodes that share a passphrase + application salt find each other and join the same gossip topic — no bootstrap server, no prior knowledge of peer addresses. The algorithm is a clock-free variant of HyParView-style partition healing on BEP 44 mutable items, with K-sharded slots, logical aging with random-tie eviction, vouching of up to V neighbors at age 1, and a two-layer AEAD record envelope. Full spec in PROTOCOL.md. Ships with: * 119 tests (unit / property / integration / doctest) all green * 100% mutation-testing catch rate (cargo-mutants) * cargo-fuzz harnesses for the parse surface * Kani proofs of no-UB / no-panic on crypto::epoch_of and wire::decode_entries across their full symbolic input spaces * Stateright distributed-system model: safety invariants S1 + S2 proved exhaustively for N ≤ 6, K ≤ 3; liveness witness under weak fairness * Miri green on the synchronous modules * cargo-deny + cargo-audit clean * criterion benches * Full-matrix CI (Linux + macOS + Windows × stable + MSRV 1.93.0) * Dedicated nightly lane for Miri / mutation / fuzz / Kani / Stateright Pinned iroh 0.98.x. License MIT. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
48 lines
885 B
TOML
48 lines
885 B
TOML
[package]
|
|
name = "iroh-gossip-rendezvous-fuzz"
|
|
version = "0.0.0"
|
|
publish = false
|
|
edition = "2024"
|
|
|
|
[package.metadata]
|
|
cargo-fuzz = true
|
|
|
|
[dependencies]
|
|
libfuzzer-sys = "0.4"
|
|
arbitrary = { version = "1", features = ["derive"] }
|
|
iroh-gossip-rendezvous = { path = "..", features = ["sim"] }
|
|
rand = "0.9"
|
|
ed25519-dalek = "2"
|
|
|
|
[[bin]]
|
|
name = "fuzz_decode_entries"
|
|
path = "fuzz_targets/fuzz_decode_entries.rs"
|
|
test = false
|
|
doc = false
|
|
bench = false
|
|
|
|
[[bin]]
|
|
name = "fuzz_crypto_open"
|
|
path = "fuzz_targets/fuzz_crypto_open.rs"
|
|
test = false
|
|
doc = false
|
|
bench = false
|
|
|
|
[[bin]]
|
|
name = "fuzz_merge"
|
|
path = "fuzz_targets/fuzz_merge.rs"
|
|
test = false
|
|
doc = false
|
|
bench = false
|
|
|
|
[[bin]]
|
|
name = "fuzz_wire_roundtrip"
|
|
path = "fuzz_targets/fuzz_wire_roundtrip.rs"
|
|
test = false
|
|
doc = false
|
|
bench = false
|
|
|
|
[workspace]
|
|
members = ["."]
|
|
# Keep the fuzz workspace isolated from the parent crate's target dir.
|