pub struct ReadSizedMerkleVerifier { /* private fields */ }Expand description
Verifies reads against a merkle tree.
MerkleVerifier verifies data at a granularity of BLOCK_SIZE. Consequently, it stores one
hash (of size HASH_SIZE) for each data block. This hash storage consumes memory equal to
1/256th of the original data size.
ReadSizedMerkleVerifier optimizes memory usage when reads are always aligned and are
guaranteed to be a multiple of the BLOCK_SIZE. Instead of storing a hash for every
BLOCK_SIZE blocks like MerkleVerifier, it stores only one hash for each read sized
chunk. For example, 128KiB aligned reads would require storing 1/16th the number of hashes.
Implementations§
Source§impl ReadSizedMerkleVerifier
impl ReadSizedMerkleVerifier
Sourcepub fn new(verifier: MerkleVerifier, read_size: usize) -> Result<Self, Status>
pub fn new(verifier: MerkleVerifier, read_size: usize) -> Result<Self, Status>
Constructs a ReadSizedMerkleVerifier from an existing MerkleVerifier and a
read_size.
Returns an error if read_size is not a multiple of BLOCK_SIZE.
Sourcepub fn verify(&self, offset: usize, data: &[u8]) -> Result<(), Status>
pub fn verify(&self, offset: usize, data: &[u8]) -> Result<(), Status>
Verifies a data slice against the Merkle tree, assuming it corresponds to original data
starting at offset.
§Requirements:
- The
offsetmust be aligned to the configured read size granularity. - The length of
datamust be a multiple of the read size, except ifdatarepresents the final chunk of the original data source (in which case it can be shorter).
Sourcepub fn verify_aligned(
&self,
offset: usize,
data: PtrByteSlice<'_>,
unaligned_len: usize,
) -> Result<(), Status>
pub fn verify_aligned( &self, offset: usize, data: PtrByteSlice<'_>, unaligned_len: usize, ) -> Result<(), Status>
Verifies aligned, zero-padded data against the Merkle tree.
The buffer length (data.len()) must be a multiple of 4096 bytes.
unaligned_len specifies the actual valid data length within the buffer
(0 < unaligned_len <= data.len()).
Any buffer bytes beyond unaligned_len up to data.len() MUST be zeroed for verification
to pass.
Note: Does not support the null blob (empty 0-length blob, unaligned_len == 0).
Trait Implementations§
Source§impl Clone for ReadSizedMerkleVerifier
impl Clone for ReadSizedMerkleVerifier
Source§fn clone(&self) -> ReadSizedMerkleVerifier
fn clone(&self) -> ReadSizedMerkleVerifier
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more