[package]
edition = "2024"
rust-version = "1.96"
name = "slither"
version = "0.3.0"
authors = ["Nicolas Di Prima <nicolas@primetype.co.uk>"]
build = false
exclude = [
"/.github",
"/CLAUDE.md",
"/TODO.md",
"/deny.toml",
"/.gitignore",
"/.serena",
"/.claude",
"/.spec-v2-clean-slate",
"/.spec-v2-pipeline",
"/.slices",
"/PLAN.md",
"/STORIES.md",
"/demo",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Encrypted peer-to-peer UDP transport: reliable messages, streams and datagrams, authenticated by raw public keys - no certificates, no TLS. WireGuard-shaped handshake, QUIC-shaped frames."
homepage = "https://primetype.co.uk/slither/"
documentation = "https://docs.rs/slither"
readme = "README.md"
keywords = [
"noise",
"udp",
"wireguard",
"quic",
"datagram",
]
categories = [
"cryptography",
"network-programming",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/primetype/slither"
[package.metadata.docs.rs]
all-features = true
[features]
codec = [
"sink",
"dep:tokio-util",
]
default = []
sink = [
"dep:futures-core",
"dep:futures-sink",
]
test-util = []
tower = ["dep:tower-service"]
[lib]
name = "slither"
path = "src/lib.rs"
[[example]]
name = "audit_udp"
path = "examples/audit_udp.rs"
[[example]]
name = "bench_vs_tcp"
path = "examples/bench_vs_tcp.rs"
[[example]]
name = "echo"
path = "examples/echo.rs"
[[test]]
name = "spec_ack_burst"
path = "tests/spec_ack_burst.rs"
required-features = ["test-util"]
[[test]]
name = "spec_compat"
path = "tests/spec_compat.rs"
required-features = [
"test-util",
"sink",
]
[[test]]
name = "spec_constants"
path = "tests/spec_constants.rs"
[[test]]
name = "spec_errors"
path = "tests/spec_errors.rs"
[[test]]
name = "spec_packet"
path = "tests/spec_packet.rs"
[[test]]
name = "spec_rekey"
path = "tests/spec_rekey.rs"
required-features = ["test-util"]
[[test]]
name = "spec_shell"
path = "tests/spec_shell.rs"
required-features = ["test-util"]
[[test]]
name = "spec_streams"
path = "tests/spec_streams.rs"
required-features = ["test-util"]
[[test]]
name = "story_codec"
path = "tests/story_codec.rs"
required-features = [
"test-util",
"codec",
]
[[test]]
name = "story_compat"
path = "tests/story_compat.rs"
required-features = [
"test-util",
"sink",
]
[[test]]
name = "story_datagram"
path = "tests/story_datagram.rs"
required-features = ["test-util"]
[[test]]
name = "story_dial"
path = "tests/story_dial.rs"
required-features = ["test-util"]
[[test]]
name = "story_flow"
path = "tests/story_flow.rs"
required-features = ["test-util"]
[[test]]
name = "story_intro"
path = "tests/story_intro.rs"
required-features = ["test-util"]
[[test]]
name = "story_keepalive"
path = "tests/story_keepalive.rs"
required-features = ["test-util"]
[[test]]
name = "story_lifecycle"
path = "tests/story_lifecycle.rs"
required-features = ["test-util"]
[[test]]
name = "story_message"
path = "tests/story_message.rs"
required-features = ["test-util"]
[[test]]
name = "story_mobility"
path = "tests/story_mobility.rs"
required-features = ["test-util"]
[[test]]
name = "story_pairing"
path = "tests/story_pairing.rs"
required-features = ["test-util"]
[[test]]
name = "story_park"
path = "tests/story_park.rs"
required-features = ["test-util"]
[[test]]
name = "story_path"
path = "tests/story_path.rs"
required-features = ["test-util"]
[[test]]
name = "story_reassembly"
path = "tests/story_reassembly.rs"
required-features = ["test-util"]
[[test]]
name = "story_rekey"
path = "tests/story_rekey.rs"
required-features = ["test-util"]
[[test]]
name = "story_reliability"
path = "tests/story_reliability.rs"
required-features = ["test-util"]
[[test]]
name = "story_streams"
path = "tests/story_streams.rs"
required-features = ["test-util"]
[[test]]
name = "story_suite"
path = "tests/story_suite.rs"
required-features = ["test-util"]
[[test]]
name = "story_tower"
path = "tests/story_tower.rs"
required-features = [
"test-util",
"tower",
]
[[test]]
name = "story_traced"
path = "tests/story_traced.rs"
required-features = ["test-util"]
[[test]]
name = "story_wrong_static"
path = "tests/story_wrong_static.rs"
required-features = ["test-util"]
[[bench]]
name = "throughput"
path = "benches/throughput.rs"
test = false
harness = false
required-features = ["test-util"]
[dependencies.cryptoxide]
version = ">=0.6.3, <0.7"
features = ["blake2"]
default-features = false
[dependencies.futures-core]
version = "0.3"
optional = true
[dependencies.futures-sink]
version = "0.3"
optional = true
[dependencies.getrandom]
version = "0.4"
[dependencies.hiss]
version = "0.4.1"
default-features = false
[dependencies.packtool]
version = "0.6"
[dependencies.rand_chacha]
version = "0.10"
[dependencies.rand_core]
version = "0.10"
[dependencies.thiserror]
version = "2"
[dependencies.tokio]
version = "1"
features = [
"rt",
"time",
"sync",
"macros",
]
[dependencies.tokio-util]
version = "0.7"
features = ["codec"]
optional = true
default-features = false
[dependencies.tower-service]
version = "0.3"
optional = true
[dependencies.tracing]
version = "0.1"
[dev-dependencies.cryptoxide]
version = ">=0.6.3, <0.7"
features = [
"chacha",
"poly1305",
]
default-features = false
[dev-dependencies.futures-util]
version = "0.3"
features = ["sink"]
[dev-dependencies.hiss]
version = "0.4.1"
features = ["x25519-cryptoxide"]
[dev-dependencies.tokio]
version = "1"
features = [
"test-util",
"rt",
"macros",
"time",
"net",
"sync",
"io-util",
]
[dev-dependencies.tower]
version = "0.5"
features = ["util"]
default-features = false
[target.'cfg(not(target_family = "wasm"))'.dependencies.tokio]
version = "1"
features = ["net"]