Files
fips/Cargo.toml
T
Johnathan Corgan 299df5ad19 Open the maintenance line at 0.5.2-dev and bring its changelog up to date
The version moves from the released 0.5.1 to 0.5.2-dev, so builds from
this branch can be told from the 0.5.1 release by version alone. The
line was left at 0.5.1 after that release was tagged. The status badge
keeps naming the released version, as it does throughout a maintenance
line.

The Unreleased section of the changelog is regrouped. It had grown
sixteen Fixed groups, with packaging split by package format in one
place and by platform in another. It now uses one set of group names
across Added, Changed, Fixed and a new Security section, ordered by
what an upgrading operator meets first: identity and config, the
gateway, the Linux packages, OpenWrt, Windows and FreeBSD, then links
and transports, sessions and rekey, routing and discovery, node health
and the control socket, the native datagram API and dependencies.

Eight fixes that close an exposure move into the Security section: the
gateway pool exhaustion fixes, the three Windows fixes to directory and
peer ACL permissions, the inbound TCP counter lockout, the forged rekey
msg2 and SessionAck rekey fixes, and the routing key published beside
traversal signals.

A walk of every commit since 0.5.1 found two changes with no entry, now
described in the entries they belong with: the gateway resolver
forwards to the upstream address its startup check resolved, so a
hostname upstream works, and the shipped example configs no longer
claim BLE needs a Cargo feature that does not exist. Three entries are
corrected against the code: the OpenWrt warning that the first upgrade
re-enables a hand-disabled gateway now applies only to opkg, since an
apk upgrade runs the incoming package's scripts; the forged rekey msg2
entry no longer says the responder cuts over on its own tick; and a
garbled sentence in the SessionAck entry is rewritten. The .deb and AUR
nftables entries are merged, and the draining-mapping DNS renewal fix
credits its author, Martti Malmi.
2026-09-28 15:14:21 +00:00

147 lines
5.8 KiB
TOML

[package]
name = "fips"
version = "0.5.2-dev"
edition = "2024"
description = "A distributed, decentralized network routing protocol for mesh nodes connecting over arbitrary transports"
license = "MIT"
authors = ["Johnathan Corgan <johnathan@corganlabs.com>"]
repository = "https://github.com/jmcorgan/fips"
homepage = "https://fips.network"
readme = "README.md"
keywords = ["mesh", "p2p", "decentralized", "overlay-network", "nostr"]
categories = ["network-programming", "command-line-utilities", "cryptography"]
[features]
default = []
# Tick-body profiler (`src/instr`). Off by default: enabling it edits 26 call
# sites in the rx loop's hot tick arm, and only a compile-time gate makes the
# default build's neutrality a property of the generated code rather than of a
# runtime check. Build with `--features profiling` for a measurement run.
profiling = []
[dependencies]
ratatui = "0.30"
secp256k1 = { version = "0.30", features = ["rand", "global-context"] }
sha2 = "0.11"
hkdf = "0.13"
ring = "0.17"
libm = "0.2"
zeroize = { version = "1.9", features = ["zeroize_derive"] }
rand = "0.10.1"
crossbeam-channel = "0.5"
thiserror = "2.0"
bech32 = "0.12"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
serde_yaml = "0.9"
dirs = "6.0"
hex = "0.4"
clap = { version = "4.6", features = ["derive"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
tokio = { version = "1", features = ["rt", "macros", "signal", "sync", "net", "time", "process", "io-util"] }
futures = "0.3"
simple-dns = "0.11.2"
# 0.20 picks up socket-pktinfo 0.4.1, the first release that builds on
# FreeBSD (IP_RECVDSTADDR/IP_RECVIF instead of Linux-style IP_PKTINFO).
mdns-sd = "0.20"
socket2 = { version = "0.6.2", features = ["all"] }
tokio-socks = "0.5"
portable-atomic = { version = "1", features = ["std"] }
nostr = { version = "0.44", features = ["std", "nip59"] }
nostr-sdk = "0.44"
arc-swap = "1"
[target.'cfg(unix)'.dependencies]
tun = { version = "0.8.7", features = ["async"] }
libc = "0.2"
[target.'cfg(target_os = "linux")'.dependencies]
rtnetlink = "0.21.0"
rustables = "0.8.7"
procfs = { version = "0.18", default-features = false }
# Conntrack dump for kernels without /proc/net/nf_conntrack. 0.3 is the
# release on netlink-packet-core 0.8, the version rtnetlink 0.21 uses.
netlink-packet-netfilter = "0.3"
netlink-packet-core = "0.8"
netlink-sys = "0.8"
# bluer/BlueZ needs glibc — see build.rs `bluer_available` cfg gate.
[target.'cfg(all(target_os = "linux", not(target_env = "musl")))'.dependencies]
bluer = { version = "0.17", features = ["bluetoothd", "l2cap"] }
[target.'cfg(windows)'.dependencies]
wintun = "0.5"
windows-service = "0.8.1"
[package.metadata.deb]
maintainer = "Johnathan Corgan <johnathan@corganlabs.com>"
copyright = "2026 Johnathan Corgan"
license-file = ["LICENSE", "0"]
section = "net"
priority = "optional"
# "$auto" runs dpkg-shlibdeps over each packaged binary and derives the real
# dependencies, including the libc6 version floor. Written by hand this field
# said only "libc6", which no glibc fails to satisfy, so a package whose
# binaries needed 2.39 installed happily on a system with 2.35 and the daemon
# then could not start. Deriving it also picks up a libdbus floor the hand
# written list lacked, and re-derives per architecture, which matters because
# arm64 links libdbus in all four binaries where amd64 links it in one.
# libgcc-s1 is written by hand beside "$auto" because cargo-deb removes every
# libgcc entry from what it derives, on the grounds that every system has one.
# testing/check-deb-depends.sh runs dpkg-shlibdeps on every build and fails if
# this floor differs from the derived one, so it cannot fall behind or run
# ahead of what the binaries need.
# systemd stays by hand: nothing links it, so nothing can derive it.
depends = "$auto, libgcc-s1 (>= 4.2), systemd"
# nftables is recommended, not required: only the opt-in fips-firewall.service runs nft.
recommends = "bluez, nftables"
extended-description = """\
FIPS is a distributed, decentralized network routing protocol for mesh \
nodes connecting over arbitrary transports including UDP, TCP, Ethernet, \
Tor, and Bluetooth (BLE). It provides encrypted peer-to-peer connectivity \
with automatic key management, TUN-based virtual networking, and .fips DNS \
resolution."""
maintainer-scripts = "packaging/debian/"
assets = [
["target/release/fips", "/usr/bin/", "755"],
["target/release/fipsctl", "/usr/bin/", "755"],
["target/release/fipstop", "/usr/bin/", "755"],
["packaging/common/fips.yaml", "/usr/share/fips/fips.yaml.example", "644"],
["packaging/common/hosts", "/etc/fips/hosts", "644"],
["packaging/common/fips.nft", "/etc/fips/fips.nft", "644"],
["packaging/debian/fips.service", "/lib/systemd/system/fips.service", "644"],
["packaging/debian/fips-dns.service", "/lib/systemd/system/fips-dns.service", "644"],
["packaging/debian/fips-firewall.service", "/lib/systemd/system/fips-firewall.service", "644"],
["packaging/common/fips-dns-setup", "/usr/lib/fips/fips-dns-setup", "755"],
["packaging/common/fips-dns-teardown", "/usr/lib/fips/fips-dns-teardown", "755"],
["packaging/debian/fips.tmpfiles", "/usr/lib/tmpfiles.d/fips.conf", "644"],
["target/release/fips-gateway", "/usr/bin/", "755"],
["packaging/debian/fips-gateway.service", "/lib/systemd/system/fips-gateway.service", "644"],
["docs/design/fips-security.md", "/usr/share/doc/fips/fips-security.md", "644"],
]
conf-files = ["/etc/fips/hosts", "/etc/fips/fips.nft"]
[dev-dependencies]
tempfile = "3.15"
criterion = { version = "0.8.2", features = ["html_reports"] }
tokio = { version = "1", features = ["test-util"] }
[[bin]]
name = "fipsctl"
path = "src/bin/fipsctl.rs"
[[bin]]
name = "fips-gateway"
path = "src/bin/fips-gateway.rs"
[[bin]]
name = "fipstop"
path = "src/bin/fipstop/main.rs"
[[bench]]
name = "routing_next_hop"
path = "benches/routing_next_hop.rs"
harness = false