pub struct VerifyShareRequestMessage {
pub version: i32,
pub nonce: u64,
pub timestamp: Option<Timestamp>,
}Expand description
VerifyShareRequestMessage initiates a verification challenge from the Owner to a Helper to confirm that the Helper still retains a specific share.
§Context
This message is part of the verification flow, which allows the Owner to:
- periodically check Helper liveness
- detect data loss or corruption of stored shares
- identify Helpers that are no longer reliable for recovery
§Semantics
The Owner challenges the Helper by providing:
- a
versionidentifying the share to verify - a fresh
nonceto ensure the response is unique and not replayable
The Helper MUST compute a cryptographic hash over:
committedDeRecShare || nonce
and return the result in a VerifyShareResponseMessage.
§Security Properties
- The nonce ensures freshness and prevents replay attacks
- The hash proves possession of the exact share bytes
- The Helper cannot produce a valid response without holding the share
§Idempotency
Each request is uniquely identified by the nonce. Reusing a nonce SHOULD be avoided, as it weakens replay protection guarantees.
Fields§
§version: i32Share version being challenged.
This identifies which stored share the Helper must use to compute the verification proof.
nonce: u64Random challenge nonce generated by the Owner.
This value MUST be unpredictable and unique per request to ensure freshness and prevent replay of previous responses.
timestamp: Option<Timestamp>Timestamp indicating when this message was created.
This value is expressed in UTC and can be used for:
- observability and logging
- replay detection (in combination with sequence numbers)
- timeout handling
Trait Implementations§
Source§fn clone(&self) -> VerifyShareRequestMessage
fn clone(&self) -> VerifyShareRequestMessage
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
Source§fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self. Read moreSource§fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self.