Skip to main content

StoreShareRequestMessage

Struct StoreShareRequestMessage 

Source
pub struct StoreShareRequestMessage {
    pub share: Vec<u8>,
    pub share_algorithm: i32,
    pub version: i32,
    pub keep_list: Vec<i32>,
    pub version_description: String,
    pub timestamp: Option<Timestamp>,
}
Expand description

StoreShareRequestMessage instructs a Helper to store a share for a given secret and manage the set of retained share versions.

§Context

This message is used in the sharing flow when:

  • a new secret is created
  • an existing secret is updated
  • the helper set or recovery threshold changes

The Owner sends this message to each Helper to:

  • store (or replace) a specific share version
  • update the set of versions that must be retained (keepList)

§Semantics

This message may carry two independent instructions:

  1. Share storage/update:

    • If share is present, the Helper MUST store this share under the specified version
    • If the version already exists, the Helper MUST replace it
  2. Retention policy update:

    • If keepList is present, it defines the complete set of versions that MUST be retained
    • Any stored version not in keepList SHOULD be deleted

If keepList is absent:

  • The Helper MUST preserve the existing keepList
  • The Helper MUST add the new version to the retained set

§Consistency Requirements

The Owner MUST ensure that for a given (secretId, version):

  • all Helpers receive identical share contents

It is an error for different shares to be associated with the same version and secretId.

§Replay Protection

To prevent replay attacks:

  • If version is less than the latest stored version, the Helper MUST ignore the keepList field

This ensures that stale messages cannot cause deletion of newer shares.

§Share Opacity

The Helper MUST treat the share field as opaque data. It is not required to understand or validate the share contents.

§Idempotency

This message is idempotent:

  • Re-sending the same (version, share) pair SHOULD result in the same state
  • Re-applying the same keepList SHOULD not change state after the first time

Fields§

§share: Vec<u8>

Share bytes to be stored by the Helper.

This is an opaque byte array produced by the share distribution algorithm. The Helper MUST store it without interpretation.

§share_algorithm: i32

Identifier of the algorithm used to produce the share.

This allows the Owner and Helper to coordinate on how the share should be interpreted during recovery.

Algorithm 0 defines the share as a serialized CommittedDeRecShare protobuf message (see DeRec cryptography repository).

Implementations SHOULD support algorithm 0 for interoperability.

§version: i32

Version number of the share.

Each resharing event increments this value. The secretId is provided in the enclosing DeRecMessage.

§keep_list: Vec<i32>

List of share versions that MUST be retained by the Helper.

Any stored version not included in this list SHOULD be deleted.

If absent, the Helper MUST:

  • retain the existing keepList
  • add the current version to the retained set

This field MUST be ignored if version is older than the latest version already stored, to prevent replay attacks.

§version_description: String

Optional human-readable description of this share version.

This field is visible to the Helper and is not intended to carry sensitive information. It may be used for debugging, labeling, or user-facing display.

§timestamp: Option<Timestamp>

Timestamp indicating when this message was created.

Used for observability, replay detection, and timeout handling.

Trait Implementations§

Source§

impl Clone for StoreShareRequestMessage

Source§

fn clone(&self) -> StoreShareRequestMessage

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for StoreShareRequestMessage

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for StoreShareRequestMessage

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Hash for StoreShareRequestMessage

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Message for StoreShareRequestMessage

Source§

fn encoded_len(&self) -> usize

Returns the encoded length of the message without a length delimiter.
Source§

fn clear(&mut self)

Clears the message, resetting all fields to their default.
Source§

fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>
where Self: Sized,

Encodes the message to a buffer. Read more
Source§

fn encode_to_vec(&self) -> Vec<u8>
where Self: Sized,

Encodes the message to a newly allocated buffer.
Source§

fn encode_length_delimited( &self, buf: &mut impl BufMut, ) -> Result<(), EncodeError>
where Self: Sized,

Encodes the message with a length-delimiter to a buffer. Read more
Source§

fn encode_length_delimited_to_vec(&self) -> Vec<u8>
where Self: Sized,

Encodes the message with a length-delimiter to a newly allocated buffer.
Source§

fn decode(buf: impl Buf) -> Result<Self, DecodeError>
where Self: Default,

Decodes an instance of the message from a buffer. Read more
Source§

fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>
where Self: Default,

Decodes a length-delimited instance of the message from the buffer.
Source§

fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>
where Self: Sized,

Decodes an instance of the message from a buffer, and merges it into self. Read more
Source§

fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>
where Self: Sized,

Decodes a length-delimited instance of the message from buffer, and merges it into self.
Source§

impl PartialEq for StoreShareRequestMessage

Source§

fn eq(&self, other: &StoreShareRequestMessage) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for StoreShareRequestMessage

Source§

impl StructuralPartialEq for StoreShareRequestMessage

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.