zer0-secret-stream · session
Source declarations, signatures and documentation for session.
Source: sigil/weave/network/zer0-secret-stream/src/session.rs. SHA-256: 657a2f101033d52472faa6208cfc0cc2da5db8f1db42b5172e42d5ac438fdfc7.
This reference follows declared source modules, retains conditional attributes, and includes public declarations and implementation methods. Private-module re-exports and trait resolution require the compiler; this is a source reference, not a claim that every listed item is a root import. Function bodies and constant values are omitted.
session::SecureSessionError
Fail-closed secure-session errors.
#[derive(Debug, Error)]
pub enum SecureSessionError {
#[error("inner secure-stream failure: {0}")]
SecretStream(#[from] SecretStreamError),
#[error("secure-session transcript failure: {0}")]
Protocol(#[from] ProtocolError),
#[error("secure-session handshake or bootstrap confirmation timed out")]
HandshakeDeadline,
#[error("secure-session operation was cancelled")]
Cancelled,
#[error("invalid secure-session policy: {0}")]
InvalidPolicy(&'static str),
#[error("remote bootstrap length exceeds the Protocol 1.0 limit")]
BootstrapTooLarge,
#[error("remote bootstrap bytes differ from the local canonical transcript")]
BootstrapMismatch,
#[error("replacement produced the prior channel-binding digest")]
ReusedChannelBinding,
#[error("replacement context differs from the old session invariant")]
ReplacementContextMismatch,
#[error("replacement plan has no remaining monotonic generation")]
ReplacementGenerationExhausted,
#[error("operating-system CSPRNG initialization failed")]
RandomnessUnavailable,
#[error("flow-credit grant exceeds the configured bounded window")]
FlowCreditOverflow,
#[error("session resource limit is exhausted")]
ResourceLimitExceeded,
#[error("resource governor denied the requested operation")]
ResourceGovernorDenied,
}Source line: 37.
session::SecureSessionOptions
Noise configuration admitted by the Protocol 1.0 alpha constructor.
The pattern is not caller-selectable; it is always a fresh Noise XX handshake.
#[derive(Clone, Debug, Default)]
pub struct SecureSessionOptions {
pub local_key_pair: Option<KeyPair>,
pub expected_remote_noise_static_key: Option<[u8; 32]>,
/// Outer-governed keepalive cadence. Zero disables keepalives.
pub keep_alive_interval: Duration,
/// Inactivity timeout enforced by the inner encrypted stream. Zero disables it.
pub idle_timeout: Duration
}Source line: 78.
session::LocalTransportRole
Local role proven by T-A's authenticated outer connection.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum LocalTransportRole {
Initiator,
Responder,
}Source line: 104.
session::AuthenticatedTransport
Role-bound, protocol-bound authenticated outer substream.
Fields are private and there is no safe raw constructor.
use zer0_secret_stream::session::AuthenticatedTransport;
# let stream = tokio::io::duplex(64).0;
// No safe `new` constructor exists.
let _ = AuthenticatedTransport::new(stream);pub struct AuthenticatedTransport<S> {
}Source line: 125.
session::AuthenticatedTransport<S>::from_verified_outer
Construct the narrow T-A -> T-B cross-crate capability.
Safety
The caller MUST consume T-A's non-forgeable authenticated substream and prove all of the following before calling:
streamis that exact lifetime-coupled substream, including its close, reset, and resource-accounting guard;local_roleis the authenticated connection role for that substream;selected_protocol_idis the exact protocol admitted by T-A's frozen registry for that substream;- both PeerIds are canonical binary inline-Ed25519 libp2p PeerIds;
- PeerIds are in authenticated Noise initiator/responder order;
- local and remote identity placement agrees with
local_role.
Calling this with caller-asserted bytes, a detached raw stream, or a free role is a security invariant violation. T-A owns the sole safe wrapper.
pub unsafe fn from_verified_outer(
stream: S,
local_role: LocalTransportRole,
selected_protocol_id: ProtocolId,
initiator_peer_id: TransportPeerId,
responder_peer_id: TransportPeerId,
) -> Self;Source line: 163.
session::SessionClock
Injected current-time source used for deterministic freshness validation.
pub trait SessionClock: Send + Sync {
fn now_ms(&self) -> u64;
}Source line: 191.
session::SessionCancellation
Wake-capable cancellation handle scoped to one protected substream.
#[derive(Clone, Debug, Default)]
pub struct SessionCancellation(CancellationToken);Source line: 197.
session::SessionCancellation::new
pub fn new() -> Self;Source line: 200.
session::SessionCancellation::cancel
pub fn cancel(&self);Source line: 204.
session::SessionCancellation::is_cancelled
pub fn is_cancelled(&self) -> bool;Source line: 208.
session::SessionPriority
Scheduler-visible priority class. A mandatory resource governor enforces it.
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
pub enum SessionPriority {
Background = 0,
Normal = 1,
Interactive = 2,
Critical = 3,
}Source line: 219.
session::SessionOperation
Operation presented to the mandatory resource governor.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum SessionOperation {
Read,
Write,
}Source line: 228.
session::SessionResourcePermit
Permit retained across Poll::Pending until the exact operation completes.
pub trait SessionResourcePermit: Send + Unpin {}Source line: 234.
session::SessionResourceGovernor
Enforceable admission contract used by T-A's shared priority/resource scheduler.
SecureSession does not poll the inner stream until this returns a permit, and
retains that permit across pending ciphertext writes or reads.
pub trait SessionResourceGovernor: Send + Sync {
fn poll_acquire(
&self,
resource_id: u64,
priority: SessionPriority,
operation: SessionOperation,
requested_bytes: usize,
cx: &mut Context<'_>,
) -> Poll<io::Result<Box<dyn SessionResourcePermit>>>;
}Source line: 242.
session::SessionResourceLimits
Hard per-session resource ceilings.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct SessionResourceLimits {
/// Maximum raw encrypted inbound bytes admitted across the session.
pub max_read_bytes: u64,
pub max_written_bytes: u64,
/// Maximum authenticated encrypted inbound frames, including keepalives.
pub max_read_operations: u64,
pub max_write_operations: u64,
/// Shared hard ceiling for inbound and outbound keepalive control frames.
pub max_control_operations: u64
}Source line: 255.
session::SessionFlowController
Explicit bounded flow-credit grant handle.
Writes consume credit and remain pending at zero. Only a validated remote
window/ack handler should call grant.
#[derive(Clone)]
pub struct SessionFlowController(Arc<FlowCreditInner>);Source line: 293.
session::SessionFlowController::available
pub fn available(&self) -> usize;Source line: 314.
session::SessionFlowController::maximum
pub fn maximum(&self) -> usize;Source line: 318.
session::SessionFlowController::grant
pub fn grant(&self, bytes: usize) -> Result<(), SecureSessionError>;Source line: 322.
session::SessionPolicy
Independent, enforceable controls for one application substream.
pub struct SessionPolicy {
}Source line: 391.
session::SessionPolicy::new
#[allow(clippy::too_many_arguments)]
pub fn new(
handshake_deadline: Duration,
stream_deadline: Option<Duration>,
flow_control_window: usize,
priority: SessionPriority,
resource_id: u64,
cancellation: SessionCancellation,
resource_limits: SessionResourceLimits,
governor: Arc<dyn SessionResourceGovernor>,
) -> Result<Self, SecureSessionError>;Source line: 418.
session::SessionPolicy::handshake_deadline
pub fn handshake_deadline(&self) -> Duration;Source line: 462.
session::SessionPolicy::stream_deadline
pub fn stream_deadline(&self) -> Option<Duration>;Source line: 466.
session::SessionPolicy::flow_control_window
pub fn flow_control_window(&self) -> usize;Source line: 470.
session::SessionPolicy::priority
pub fn priority(&self) -> SessionPriority;Source line: 474.
session::SessionPolicy::resource_id
pub fn resource_id(&self) -> u64;Source line: 478.
session::SessionPolicy::cancellation
pub fn cancellation(&self) -> SessionCancellation;Source line: 482.
session::SessionPolicy::resource_limits
pub fn resource_limits(&self) -> SessionResourceLimits;Source line: 486.
session::MigrationGeneration
Persistable non-secret generation value.
#[derive(Debug, PartialEq, Eq)]
pub struct MigrationGeneration(u64);Source line: 493.
session::MigrationGeneration::initial
pub fn initial() -> Self;Source line: 496.
session::MigrationGeneration::from_persisted
pub fn from_persisted(value: u64) -> Self;Source line: 500.
session::MigrationGeneration::value
pub fn value(&self) -> u64;Source line: 504.
session::ReplacementPlan
Retry-capable monotonic replacement plan bound to the exact old-session invariant.
#[derive(Debug)]
pub struct ReplacementPlan {
}Source line: 561.
session::ReplacementPlan::next_generation
pub fn next_generation(&self) -> u64;Source line: 568.
session::ReplacementPlan::reserve_attempt
Reserve one attempt before any network work. The plan advances first, so a failed attempt can only retry at a higher generation.
pub fn reserve_attempt(&mut self) -> Result<ReplacementAttempt, SecureSessionError>;Source line: 574.
session::ReplacementAttempt
Non-cloneable, one-use replacement attempt.
#[derive(Debug)]
pub struct ReplacementAttempt {
}Source line: 589.
session::ReplacementAttempt::generation
pub fn generation(&self) -> u64;Source line: 596.
session::SessionResourceSnapshot
Point-in-time local accounting for one protected substream.
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub struct SessionResourceSnapshot {
pub resource_id: u64,
/// Raw encrypted inbound frame bytes admitted by the outer governor.
pub bytes_read: u64,
pub bytes_written: u64,
pub read_operations: u64,
pub write_operations: u64,
/// Total authenticated inbound plus physically committed outbound keepalives.
pub keepalive_operations: u64
}Source line: 612.
session::SecureSession
Confirmed Protocol 1.0 secure session.
pub struct SecureSession<S> {
}Source line: 665.
session::SecureSession<S>::establish
pub async fn establish(
transport: AuthenticatedTransport<S>,
options: SecureSessionOptions,
context: SessionBootstrapContext,
generation: MigrationGeneration,
policy: SessionPolicy,
clock: Arc<dyn SessionClock>,
) -> Result<Self, SecureSessionError>;Source line: 687.
session::SecureSession<S>::establish_replacement
pub async fn establish_replacement(
transport: AuthenticatedTransport<S>,
options: SecureSessionOptions,
context: SessionBootstrapContext,
attempt: ReplacementAttempt,
policy: SessionPolicy,
clock: Arc<dyn SessionClock>,
) -> Result<Self, SecureSessionError>;Source line: 698.
session::SecureSession<S>::confirmed_bootstrap
pub fn confirmed_bootstrap(&self) -> &SessionBootstrapV1;Source line: 723.
session::SecureSession<S>::channel_binding
pub fn channel_binding(&self) -> &ChannelBinding;Source line: 727.
session::SecureSession<S>::binding_digest
pub fn binding_digest(&self) -> [u8; 32];Source line: 731.
session::SecureSession<S>::policy
pub fn policy(&self) -> &SessionPolicy;Source line: 735.
session::SecureSession<S>::flow_controller
pub fn flow_controller(&self) -> SessionFlowController;Source line: 739.
session::SecureSession<S>::application_auth_transcript
Construct exact proof bytes only. This is not authorization.
pub fn application_auth_transcript(
&self,
inputs: OpaqueApplicationAuthInputs,
) -> Result<ApplicationAuthTranscriptV1, ProtocolError>;Source line: 744.
session::SecureSession<S>::resource_snapshot
pub fn resource_snapshot(&self) -> SessionResourceSnapshot;Source line: 755.
session::SecureSession<S>::is_terminal
pub fn is_terminal(&self) -> bool;Source line: 766.
session::SecureSession<S>::begin_replacement
pub fn begin_replacement(&mut self) -> Result<ReplacementPlan, ProtocolError>;Source line: 770.