Weave documentation
Rust referencezer0-secret-stream

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:

  • stream is that exact lifetime-coupled substream, including its close, reset, and resource-accounting guard;
  • local_role is the authenticated connection role for that substream;
  • selected_protocol_id is 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.

On this page

session::SecureSessionErrorsession::SecureSessionOptionssession::LocalTransportRolesession::AuthenticatedTransportsession::AuthenticatedTransport<S>::from_verified_outerSafetysession::SessionClocksession::SessionCancellationsession::SessionCancellation::newsession::SessionCancellation::cancelsession::SessionCancellation::is_cancelledsession::SessionPrioritysession::SessionOperationsession::SessionResourcePermitsession::SessionResourceGovernorsession::SessionResourceLimitssession::SessionFlowControllersession::SessionFlowController::availablesession::SessionFlowController::maximumsession::SessionFlowController::grantsession::SessionPolicysession::SessionPolicy::newsession::SessionPolicy::handshake_deadlinesession::SessionPolicy::stream_deadlinesession::SessionPolicy::flow_control_windowsession::SessionPolicy::prioritysession::SessionPolicy::resource_idsession::SessionPolicy::cancellationsession::SessionPolicy::resource_limitssession::MigrationGenerationsession::MigrationGeneration::initialsession::MigrationGeneration::from_persistedsession::MigrationGeneration::valuesession::ReplacementPlansession::ReplacementPlan::next_generationsession::ReplacementPlan::reserve_attemptsession::ReplacementAttemptsession::ReplacementAttempt::generationsession::SessionResourceSnapshotsession::SecureSessionsession::SecureSession<S>::establishsession::SecureSession<S>::establish_replacementsession::SecureSession<S>::confirmed_bootstrapsession::SecureSession<S>::channel_bindingsession::SecureSession<S>::binding_digestsession::SecureSession<S>::policysession::SecureSession<S>::flow_controllersession::SecureSession<S>::application_auth_transcriptsession::SecureSession<S>::resource_snapshotsession::SecureSession<S>::is_terminalsession::SecureSession<S>::begin_replacement