pub struct PadPool { /* private fields */ }Expand description
A shared, pre-provisioned pool of true random bytes for one pad epoch, split into two directional halves. Both peers build an identical pool from the same out-of-band material and split it the same way, so each direction is a private, agreed pad both sides index into.
Implementations§
Source§impl PadPool
impl PadPool
Build a pool from shared true-random material, refusing it (fail-closed) if it is too small to
split or if the logicaffeine_proof::ait classifier finds it compressible — i.e. it is not
actually random. This is the pad-quality gate: a weak pad is never silently accepted.
Build a pool without the incompressibility gate — for trusted provisioning that has already validated the material, and for tests that craft pad contents directly.
Sourcepub fn with_epoch(self, epoch: u32) -> PadPool
pub fn with_epoch(self, epoch: u32) -> PadPool
Label this pool with a pad epoch (the id peers agree on for this pad in the rollover sequence).
Sourcepub fn commitment(&self) -> [u8; 32]
pub fn commitment(&self) -> [u8; 32]
A binding commitment to this pad — SHA3-256(epoch ‖ pad). Both peers compute it from their
loaded material to confirm, over the authenticated PnpSuite::seal_roll handoff, that they
hold the identical next pad. Preimage-resistant, so it is safe to exchange; it reveals nothing
about the pad bytes.
Sourcepub fn direction_len(&self) -> usize
pub fn direction_len(&self) -> usize
Bytes available in each directional half.
Sourcepub fn send_suite(&self, role: Role) -> PnpSuite
pub fn send_suite(&self, role: Role) -> PnpSuite
The suite this peer seals outbound covers with (its send half).
Sourcepub fn recv_suite(&self, role: Role) -> PnpSuite
pub fn recv_suite(&self, role: Role) -> PnpSuite
The suite this peer opens inbound covers with (its receive half — the peer’s send half).
Sourcepub fn session(&self, role: Role) -> PnpSession
pub fn session(&self, role: Role) -> PnpSession
A live PnpSession for role — seals with this peer’s send half, opens with its receive
half — ready to install on the channel’s active-session seam so the interpreter’s Send/receive
path is one-time-pad protected end-to-end.
Auto Trait Implementations§
impl Freeze for PadPool
impl RefUnwindSafe for PadPool
impl Send for PadPool
impl Sync for PadPool
impl Unpin for PadPool
impl UnsafeUnpin for PadPool
impl UnwindSafe for PadPool
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.