mirror of
https://github.com/jmcorgan/fips.git
synced 2026-08-10 00:26:59 +00:00
Migrate the FSP end-to-end session subsystem into src/proto/fsp/ following the established sans-IO shape, and retire the src/protocol grab-bag now that FSP was its last occupant. Relocate the FSP session wire (node/session_wire.rs plus the FSP message types from protocol/session.rs) into proto/fsp/wire.rs. Hoist the pure decision logic into proto/fsp/core.rs over plain-data SessionSnapshots returning an ordered FspAction list the shell drives: session-rekey policy, msg3-resend classification, post-decrypt epoch reaction, setup/dual-init tie-break, coords/path-MTU emit-policy, bounded pending-queue, and IPv6 ECN. The crypto-owning SessionEntry stays shell-side in node/session.rs (matching the FMP ActivePeer pattern); proto/fsp is wire + core + limits only, with no proto->noise dependency and no crypto. Move the coords helpers to proto/stp/ (they serialize TreeCoordinate), and split SessionMessageType: the encrypted-inner 0x10-0x1F variants stay in proto/fsp/wire.rs while the 0x20-0x2F routing signals become a new RoutingSignalType in proto/routing/wire.rs. Migrate the session-MMP shell adapter, which continues to drive proto/mmp/. Retire src/protocol: LinkMessageType and SessionDatagram move to a new shared proto/link.rs, ProtocolError becomes proto::Error (relocated verbatim), the deprecated MessageType alias and the unimported PROTOCOL_VERSION are dropped, and src/protocol/ is deleted along with its lib.rs module declaration. Behavior-neutral: wire bytes unchanged, oracle tests pass unedited except mod-path relocation; adds rekey/epoch characterization tests and pure poll/emit-policy core tests.
36 lines
1.5 KiB
Rust
36 lines
1.5 KiB
Rust
//! Sans-IO FSP (end-to-end session) protocol.
|
|
//!
|
|
//! The FSP session **wire** — the message types
|
|
//! (`SessionSetup`/`SessionAck`/`SessionMsg3`), the packet flags, the
|
|
//! `SessionMessageType` inner-message catalog, and the prefix/header/
|
|
//! inner-header codec — migrated out of the async node shell (`protocol::session`
|
|
//! + `node::session_wire`) per the wire-migrates-with-subsystem policy.
|
|
//!
|
|
//! The crypto-owning `SessionEntry` session state machine stays shell-side in
|
|
//! `node::session`, so `proto::fsp` carries no `proto -> noise` dependency and
|
|
//! no crypto. It imports the shared [`crate::proto::Error`] and the
|
|
//! address-only coordinate helpers downward from `crate::proto::stp`.
|
|
//!
|
|
//! - `core.rs` — the stateless [`Fsp`] anchor + [`FspAction`]: the pure rekey
|
|
//! choreography (`poll_rekey`/`poll_rekey_msg3_resends`), the post-decrypt
|
|
//! `classify_epoch`, the initiation tie-break, and the pure MTU-clamp /
|
|
//! bounded-queue / ECN transforms. No clock/crypto/I/O/tracing.
|
|
//! - `limits.rs` — the session-rekey timing constants.
|
|
//! - `wire.rs` — the FSP session wire codec and message types. Clock-free,
|
|
//! crypto-free.
|
|
|
|
pub(crate) mod core;
|
|
pub(crate) mod limits;
|
|
pub(crate) mod wire;
|
|
|
|
#[cfg(test)]
|
|
mod tests;
|
|
|
|
pub(crate) use core::{
|
|
DecryptSlot, EpochReaction, Fsp, FspAction, RekeyCfg, RekeyMsg3ResendSnapshot, SessionSnapshot,
|
|
cutover_timer_elapsed, initiation_winner, mark_ipv6_ecn_ce, push_bounded_pending,
|
|
};
|
|
pub use wire::{
|
|
FspInnerFlags, SessionAck, SessionFlags, SessionMessageType, SessionMsg3, SessionSetup,
|
|
};
|