pub struct RetainedKeyPackageMaterial {
pub epoch_id: EpochId,
pub leaf_index: LeafNodeIndex,
pub generation: u32,
pub key_package_ciphersuite: Ciphersuite,
pub key_package_index: u32,
pub key_package_seed_secret: KeyPackageSeedSecret,
pub key_package_extensions: Extensions<KeyPackage>,
}extensions-draft and crate feature virtual-clients-draft and (32-bit or 64-bit) only.Expand description
Per-KeyPackageRef material a sibling retains when it processes a
KeyPackageUpload. It captures what the Welcome path needs to later
rederive the KeyPackage’s init and leaf-encryption keys without touching the
operation tree: the per-KeyPackage seed secret, plus the derivation epoch,
leaf index, generation, and batch index used to validate the leaf found in
the ratchet tree. The sibling also keeps the KeyPackage’s extensions, s.t.
it can apply the corresponding semantics when processing a Welcome.
The seed is pinned here at upload-processing time so the Welcome path stays independent of the operation tree’s bounded out-of-order tolerance: a batch can hold more KeyPackages than that tolerance, and Welcomes can arrive in any order, yet every seed remains available because the single batch generation is consumed once and each seed is stored alongside its index.
The uploader stores the same material when it finalizes the batch, next to
its KeyPackages. It joins through the KeyPackage itself, so for the uploader
the material only keeps the derivation epoch alive, as it does for the
sibling (see
StorageProvider::delete_unreferenced_vc_derivation_epoch_states).
Fields§
§epoch_id: EpochIdDerivation epoch the KeyPackage belongs to.
leaf_index: LeafNodeIndexUploader’s emulation-group leaf index, identifying the operation ratchet the batch generation was allocated from.
generation: u32Operation-ratchet generation consumed for the whole batch.
key_package_ciphersuite: CiphersuiteCiphersuite of the KeyPackage.
key_package_index: u32Position of this KeyPackage within the batch.
key_package_seed_secret: KeyPackageSeedSecretPer-KeyPackage seed secret from which the init and leaf-encryption keys are derived at Welcome time.
key_package_extensions: Extensions<KeyPackage>The KeyPackage’s extensions, as listed in the upload. Records stored before uploads carried extensions read back with only a last resort extension.
Trait Implementations§
Source§impl Debug for RetainedKeyPackageMaterial
impl Debug for RetainedKeyPackageMaterial
Source§impl<'de> Deserialize<'de> for RetainedKeyPackageMaterial
impl<'de> Deserialize<'de> for RetainedKeyPackageMaterial
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 RetainedKeyPackageMaterial
impl RetainedKeyPackageMaterial<CURRENT_VERSION> for RetainedKeyPackageMaterial
Auto Trait Implementations§
impl Freeze for RetainedKeyPackageMaterial
impl RefUnwindSafe for RetainedKeyPackageMaterial
impl Send for RetainedKeyPackageMaterial
impl Sync for RetainedKeyPackageMaterial
impl Unpin for RetainedKeyPackageMaterial
impl UnsafeUnpin for RetainedKeyPackageMaterial
impl UnwindSafe for RetainedKeyPackageMaterial
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