Files
fips/CHANGELOG.md
T

6.0 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Added

IPv6 Adapter

  • Pre-seed identity cache from configured peer npubs at startup, so TUN packets can be dispatched immediately without waiting for handshake completion (@v0l)

Mesh Peer Transports

  • Tor transport with SOCKS5 outbound, directory-mode onion service inbound, and optional control port monitoring
  • DNS hostname support in peer addresses for UDP and TCP transports
  • Non-blocking transport connect for connection-oriented transports (TCP, Tor)

Fixed

  • DNS responder returned NXDOMAIN for A queries on valid .fips names, causing resolvers to give up without trying AAAA. Now returns NOERROR with empty answers for non-AAAA queries on resolvable names. (#9, reported by @alopatindev)
  • Stale end-to-end session left in session table after peer removal blocked session re-establishment on reconnect — remove_active_peer now cleans up self.sessions and self.pending_tun_packets. (#5, @v0l)
  • schedule_reconnect reset exponential backoff to zero on each link-dead cycle instead of preserving accumulated retry count. (#5, @v0l)
  • FMP/FSP rekey dual-initiation race on high-latency links (Tor): both sides' timers fired simultaneously, both msg1s crossed in flight, each side's responder path destroyed the initiator state. Fixed with deterministic tie-breaker (smaller NodeAddr wins as initiator).
  • Parent selection SRTT gate bypass: evaluate_parent used default cost 1.0 for peers filtered out by has_srtt(), defeating the MMP eligibility gate. Now skips unmeasured candidates when any peer has cost data.
  • FSP rekey cutover race: initiator cut over before responder received msg3, causing AEAD failures. Fixed by deferring initiator cutover by 2 seconds.
  • MMP metric discontinuity after rekey: receiver state carried stale counters across rekey, inflating reorder counts and jitter. Fixed via reset_for_rekey().
  • Auto-connect peers exhausted max_retries on initial connection failures and were permanently abandoned. Now retry indefinitely with exponential backoff capped at 300 seconds.
  • Control socket permissions: non-root users couldn't connect. Daemon now chowns socket and directory to root:fips group at bind time.

[0.1.0] - 2026-03-12

Added (Initial Release)

Session Layer (FSP)

  • End-to-end encrypted datagram service between mesh nodes addressed by Nostr npub
  • Noise XK sessions with mutual authentication, replay protection, and forward secrecy
  • Automatic session rekeying with configurable time/message thresholds and drain window for in-flight packets
  • Port multiplexing for multiple services over a single session
  • Session-layer metrics: sender/receiver reports with RTT, jitter, delivery ratio, and burst loss tracking
  • Passive RTT measurement via spin bit

IPv6 Adapter

  • IPv6 adapter interface allowing tunneling TCP/IPv6 through FIPS mesh for traditional IP applications (TUN interface)
  • DNS resolver allowing IP applications to reach nodes by npub.fips name
  • Host-to-npub static mappings: resolve hostname.fips via host map populated from peer config aliases and /etc/fips/hosts file

Mesh Layer (FMP)

  • Self-organized core mesh routing protocol with adaptive least cost forwarding
  • Noise IK hop-by-hop link encryption with mutual authentication and replay protection between peer nodes
  • Distributed spanning tree construction with cost-based parent selection and adaptive reconfiguration
  • Destination route discovery via bloom filter-based directed search protocol
  • Path MTU discovery with per-link MTU tracking and MtuExceeded error signaling
  • Link-layer MMP: SRTT, jitter, one-way delay trends, packet loss, and ETX metrics
  • Link-layer heartbeat with configurable liveness timeout for dead peer detection
  • Epoch-based peer restart detection
  • Automatic link rekeying with K-bit epoch coordination and drain window
  • Static peer auto-reconnect with exponential backoff
  • Multi-address peers with transport priority-based failover
  • Msg1 rate limiting for handshake DoS protection

Mesh Peer Transports

  • UDP overlay transport with inbound and static outbound peer configuration
  • TCP overlay transport with listening port and static outbound peer support
  • Ethernet/WiFi transport (MAC address based, no IP stack) with optional automatic peer discovery and auto-connect

Operator Tooling

  • Ephemeral or persistent node identity with key file management
  • Unix domain control socket for runtime observability
  • fipsctl CLI tool for control socket interaction and node management
  • Comprehensive node and transport statistics via control socket
  • fipstop TUI monitoring tool with real-time session, peer, and transport configuration and metrics display

Packaging and Deployment

  • Debian/Ubuntu .deb packaging via cargo-deb
  • Systemd service packaging with tarball installer
  • OpenWRT package with opkg feed and init script
  • Docker sidecar deployment for containerized services
  • Build version metadata: git commit hash, dirty flag, and target triple embedded in all binaries via --version

Testing and CI

  • Comprehensive unit and integration tests covering all protocol layers and transports
  • Docker test harness with static and stochastic topologies
  • Chaos testing with simulated severe network conditions: latency, packet loss, reordering, and peer churn
  • CI with GitHub Actions: x86_64 and aarch64, integration test matrix, nextest JUnit reporting
  • Local CI runner script (testing/ci-local.sh)

Project

  • Design documentation suite covering all protocol layers
  • CHANGELOG.md following Keep a Changelog format
  • Repository mirrored to ngit