Struct casper_hashing::Digest

source ·
pub struct Digest(/* private fields */);
Expand description

The output of the hash function.

Implementations§

source§

impl Digest

source

pub const LENGTH: usize = 32usize

The number of bytes in a Digest.

source

pub const SENTINEL_NONE: Digest = _

Sentinel hash to be used for hashing options in the case of None.

source

pub const SENTINEL_RFOLD: Digest = _

Sentinel hash to be used by hash_slice_rfold. Terminates the fold.

source

pub const SENTINEL_MERKLE_TREE: Digest = _

Sentinel hash to be used by hash_merkle_tree in the case of an empty list.

source

pub fn hash<T: AsRef<[u8]>>(data: T) -> Digest

Creates a 32-byte BLAKE2b hash digest from a given a piece of data.

source

pub fn hash_pair<T: AsRef<[u8]>, U: AsRef<[u8]>>(data1: T, data2: U) -> Digest

Hashes a pair of byte slices.

source

pub fn value(&self) -> [u8; 32]

Returns the underlying BLAKE2b hash bytes

source

pub fn into_vec(self) -> Vec<u8>

Converts the underlying BLAKE2b hash digest array to a Vec

source

pub fn hash_merkle_tree<I>(leaves: I) -> Digestwhere I: IntoIterator<Item = Digest>, I::IntoIter: ExactSizeIterator,

Hashes an impl IntoIterator of Digests into a single Digest by constructing a Merkle tree. Reduces pairs of elements in the collection by repeatedly calling Digest::hash_pair.

The pattern of hashing is as follows. It is akin to graph reduction:

1 2 4 5 8 9
│ │ │ │ │ │
└─3 └─6 └─10
  │   │   │
  └───7   │
      │   │
      └───11

Finally hashes the number of elements with the resulting hash. In the example above the final output would be hash_pair(6_u64.to_le_bytes(), l).

Returns Digest::SENTINEL_MERKLE_TREE when the input is empty.

source

pub fn hash_btree_map<K, V>(btree_map: &BTreeMap<K, V>) -> Result<Digest, Error>where K: ToBytes, V: ToBytes,

Hashes a BTreeMap.

source

pub fn hash_slice_rfold(slice: &[Digest]) -> Digest

Hashes a &[Digest] using a right fold.

This pattern of hashing is as follows:

hash_pair(a, &hash_pair(b, &hash_pair(c, &SENTINEL_RFOLD)))

Unlike Merkle trees, this is suited to hashing heterogeneous lists we may wish to extend in the future (ie, hashes of data structures that may undergo revision).

Returns Digest::SENTINEL_RFOLD when given an empty slice as input.

source

pub fn hash_slice_with_proof(slice: &[Digest], proof: Digest) -> Digest

Hashes a &[Digest] using a right fold. Uses proof as a Merkle proof for the missing tail of the slice.

source

pub fn from_hex<T: AsRef<[u8]>>(hex_input: T) -> Result<Self, Error>

Returns a Digest parsed from a hex-encoded Digest.

source

pub fn hash_into_chunks_if_necessary(bytes: &[u8]) -> Digest

Hash data into chunks if necessary.

source

pub fn hash_vec_merkle_tree(vec: Vec<Digest>) -> Digest

👎Deprecated since 1.5.0: use hash_merkle_tree instead

Provides the same functionality as Digest::hash_merkle_tree.

Trait Implementations§

source§

impl AsRef<[u8]> for Digest

source§

fn as_ref(&self) -> &[u8]

Converts this type into a shared reference of the (usually inferred) input type.
source§

impl CLTyped for Digest

source§

fn cl_type() -> CLType

The CLType of Self.
source§

impl Clone for Digest

source§

fn clone(&self) -> Digest

Returns a copy 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 DataSize for Digest

source§

const IS_DYNAMIC: bool = false

If true, the type has a heap size that can vary at runtime, depending on the actual value.
source§

const STATIC_HEAP_SIZE: usize = 0usize

The amount of space a value of the type always occupies. If IS_DYNAMIC is false, this is the total amount of heap memory occupied by the value. Otherwise this is a lower bound.
source§

fn estimate_heap_size(&self) -> usize

Estimates the size of heap memory taken up by this value. Read more
source§

impl Debug for Digest

source§

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

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

impl Default for Digest

source§

fn default() -> Digest

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

impl<'de> Deserialize<'de> for Digest

source§

fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Digest

source§

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

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

impl From<[u8; 32]> for Digest

source§

fn from(arr: [u8; 32]) -> Self

Converts to this type from the input type.
source§

impl From<Digest> for [u8; 32]

source§

fn from(hash: Digest) -> Self

Converts to this type from the input type.
source§

impl FromBytes for Digest

source§

fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), Error>

Deserializes the slice into Self.
source§

fn from_vec(bytes: Vec<u8>) -> Result<(Self, Vec<u8>), Error>

Deserializes the Vec<u8> into Self.
source§

impl Hash for Digest

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 JsonSchema for Digest

source§

fn schema_name() -> String

The name of the generated JSON Schema. Read more
source§

fn json_schema(gen: &mut SchemaGenerator) -> Schema

Generates a JSON Schema for this type. Read more
source§

fn is_referenceable() -> bool

Whether JSON Schemas generated for this type should be re-used where possible using the $ref keyword. Read more
source§

impl LowerHex for Digest

source§

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

Formats the value using the given formatter.
source§

impl Ord for Digest

source§

fn cmp(&self, other: &Digest) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Digest

source§

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

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Digest

source§

fn partial_cmp(&self, other: &Digest) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

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

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

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

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

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

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

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

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl Serialize for Digest

source§

fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error>

Serialize this value into the given Serde serializer. Read more
source§

impl ToBytes for Digest

source§

fn to_bytes(&self) -> Result<Vec<u8>, Error>

Serializes &self to a Vec<u8>.
source§

fn serialized_length(&self) -> usize

Returns the length of the Vec<u8> which would be returned from a successful call to to_bytes() or into_bytes(). The data is not actually serialized, so this call is relatively cheap.
source§

fn write_bytes(&self, writer: &mut Vec<u8>) -> Result<(), Error>

Writes &self into a mutable writer.
source§

fn into_bytes(self) -> Result<Vec<u8>, Error>where Self: Sized,

Consumes self and serializes to a Vec<u8>.
source§

impl<'a> TryFrom<&'a [u8]> for Digest

§

type Error = TryFromSliceError

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

fn try_from(slice: &[u8]) -> Result<Digest, Self::Error>

Performs the conversion.
source§

impl UpperHex for Digest

source§

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

Formats the value using the given formatter.
source§

impl Copy for Digest

source§

impl Eq for Digest

source§

impl StructuralEq for Digest

source§

impl StructuralPartialEq for Digest

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
§

impl<Q, K> Comparable<K> for Qwhere Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
source§

impl<T> DynClone for Twhere T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere 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> Same for T

§

type Output = T

Should always be Self
source§

impl<T> ToHex for Twhere T: AsRef<[u8]>,

source§

fn encode_hex<U>(&self) -> Uwhere U: FromIterator<char>,

Encode the hex strict representing self into the result. Lower case letters are used (e.g. f9b4ca)
source§

fn encode_hex_upper<U>(&self) -> Uwhere U: FromIterator<char>,

Encode the hex strict representing self into the result. Upper case letters are used (e.g. F9B4CA)
source§

impl<T> ToOwned for Twhere T: Clone,

§

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> ToString for Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

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

§

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 Twhere U: TryFrom<T>,

§

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.
source§

impl<T> DeserializeOwned for Twhere T: for<'de> Deserialize<'de>,