pub struct VcEmulation {
pub epoch_id: EpochId,
}extensions-draft-08 and crate feature virtual-clients-draft and (32-bit or 64-bit) only.Expand description
Per-commit virtual-clients material that the application supplies to
CommitBuilder::vc_emulation when sending a commit on a virtual-clients
group.
The PPRF, per-epoch AEAD key, and the registering client’s
emulation-group leaf index live in the storage provider — the
application registers them once per emulation epoch via
MlsGroup::register_vc_emulation_epoch, which sources the
per-emulation-epoch root secret from the emulation group’s
safe_export_secret(VC_COMPONENT_ID). When creating a commit, the
application supplies just the epoch_id; the library hashes
(stored leaf_index, fresh random) to produce the PPRF input,
evaluates the PPRF, and persists the punctured state.
The leaf carrying a VC commit must declare
ExtensionType::AppDataDictionary
in its capabilities and must include an AppComponents entry (component
id 1) listing VC_COMPONENT_ID in its AppDataDictionary extension;
otherwise the sender pre-check rejects the commit with
VirtualClientsError::AppDataDictionaryNotSupported or
VirtualClientsError::VcComponentNotListed.
Fields§
§epoch_id: EpochIdIdentifier of the emulation epoch whose registered PPRF + AEAD key the library should use for this commit.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for VcEmulation
impl RefUnwindSafe for VcEmulation
impl Send for VcEmulation
impl Sync for VcEmulation
impl Unpin for VcEmulation
impl UnsafeUnpin for VcEmulation
impl UnwindSafe for VcEmulation
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> Classify for T
impl<T> Classify for T
type Classified = T
fn classify(self) -> T
§impl<T> Declassify for T
impl<T> Declassify for T
type Declassified = T
fn declassify(self) -> T
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