pub struct OperationSecretTree { /* private fields */ }extensions-draft and crate feature virtual-clients-draft and (32-bit or 64-bit) only.Expand description
Per-emulation-epoch Virtual Client Operation Secret Tree.
Rooted at the epoch’s epoch_base_secret and shaped like the emulation
group’s ratchet tree at the corresponding epoch (sized by the leaf
count, including blank leaves). Node secrets and per-leaf operation
ratchets are derived lazily on first use, and consumed material is deleted
as it is used (see the module documentation for the forward-secrecy
rules).
§Concurrency
One tree is shared by all higher-level groups the virtual client is a member of. Every derivation mutates it, so a load-derive-store cycle against the storage provider must be atomic per emulation epoch. Applications that process messages for multiple higher-level groups in parallel must serialize these cycles. Two concurrent cycles on separate copies of the tree can allocate the same generation for two different operations (the key reuse the draft forbids) and last-write-wins persistence loses the other copy’s punctured nodes and retained skipped generations.
Trait Implementations§
Source§impl Debug for OperationSecretTree
impl Debug for OperationSecretTree
Source§impl<'de> Deserialize<'de> for OperationSecretTree
impl<'de> Deserialize<'de> for OperationSecretTree
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Entity<CURRENT_VERSION> for OperationSecretTree
Source§impl Serialize for OperationSecretTree
impl Serialize for OperationSecretTree
impl VcOperationTree<CURRENT_VERSION> for OperationSecretTree
Auto Trait Implementations§
impl Freeze for OperationSecretTree
impl RefUnwindSafe for OperationSecretTree
impl Send for OperationSecretTree
impl Sync for OperationSecretTree
impl Unpin for OperationSecretTree
impl UnsafeUnpin for OperationSecretTree
impl UnwindSafe for OperationSecretTree
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more