pub struct PnpSuite { /* private fields */ }Expand description
A keyed one-time-pad channel over one directional half of a PadPool at one pad epoch. A peer
seals with the suite for its send direction and opens with the suite for its receive
direction; because the two directions are different pad halves, a peer never seals and opens over
the same bytes.
State is behind interior mutability so the suite is used through a shared &self (as
super::channel::PqSuite is): PnpSuite::seal serializes cursor reservation under a lock and
commits the ledger before returning a frame; PnpSuite::open tracks consumed covers.
Implementations§
Source§impl PnpSuite
impl PnpSuite
Sourcepub fn with_ledger(self, ledger: Arc<dyn PadLedgerStore>) -> Self
pub fn with_ledger(self, ledger: Arc<dyn PadLedgerStore>) -> Self
Install a durable ledger, resuming the send cursor from it (crash-safety across restarts).
Sourcepub fn with_recv_window(self, bytes: u64) -> Self
pub fn with_recv_window(self, bytes: u64) -> Self
Set the receiver reorder/replay window, in pad bytes.
Sourcepub fn send_remaining(&self) -> usize
pub fn send_remaining(&self) -> usize
Pad bytes remaining in the send direction — the low-water gauge. When this reaches zero,
PnpSuite::seal fails closed.
Sourcepub fn is_low(&self, threshold: usize) -> bool
pub fn is_low(&self, threshold: usize) -> bool
Whether the send pad has dropped below threshold bytes — the signal to provision and roll to
the next epoch before exhaustion.
Sourcepub fn seal(&self, blob: &[u8]) -> Option<Vec<u8>>
pub fn seal(&self, blob: &[u8]) -> Option<Vec<u8>>
Seal blob into a fresh data cover. None — fail-closed — when the pad is exhausted.
Sourcepub fn seal_roll(
&self,
next_epoch: u32,
next_commitment: &[u8; 32],
) -> Option<Vec<u8>>
pub fn seal_roll( &self, next_epoch: u32, next_commitment: &[u8; 32], ) -> Option<Vec<u8>>
Seal an authenticated roll cover announcing the next pad epoch and a commitment (hash) to
its bytes, using the current pad’s one-time MAC. The peer confirms via PnpSuite::open_roll
that it holds the identical next pad before switching. None if the current pad is exhausted.
Auto Trait Implementations§
impl !Freeze for PnpSuite
impl !RefUnwindSafe for PnpSuite
impl Send for PnpSuite
impl Sync for PnpSuite
impl Unpin for PnpSuite
impl UnsafeUnpin for PnpSuite
impl !UnwindSafe for PnpSuite
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.