triton_vm::prelude

Struct Digest

Source
pub struct Digest(pub [BFieldElement; 5]);
Expand description

The result of hashing a sequence of elements, for example using Tip5. Sometimes called a “hash”.

Tuple Fields§

§0: [BFieldElement; 5]

Implementations§

Source§

impl Digest

Source

pub const LEN: usize = 5usize

The number of elements in a digest.

Source

pub const BYTES: usize = 40usize

The number of bytes in a digest.

Source

pub const fn values(self) -> [BFieldElement; 5]

Source

pub const fn new(digest: [BFieldElement; 5]) -> Digest

Source

pub const fn reversed(self) -> Digest

Returns a new digest but whose elements are reversed relative to self. This function is an involutive endomorphism.

Source§

impl Digest

Source

pub fn hash(self) -> Digest

Hash this digest using Tip5, producing a new digest.

A digest can be used as a source of entropy. It can be beneficial or even necessary to not reveal the entropy itself, but use it as the seed for some deterministic computation. In such cases, hashing the digest using this method is probably the right thing to do. If the digest in question is used for its entropy only, there might not be a known meaningful pre-image for that digest.

This method invokes Tip5::hash_pair with the right operand being the zero digest, agreeing with the standard way to hash a digest in the virtual machine.

Source

pub fn to_hex(self) -> String

Encode digest as hex.

Since Digest also implements LowerHex and UpperHex, it is possible to {:x}-format directly, e.g., print!("{digest:x}").

Source

pub fn try_from_hex( data: impl AsRef<[u8]>, ) -> Result<Digest, TryFromHexDigestError>

Decode hex string to Digest. Must not include leading “0x”.

Trait Implementations§

Source§

impl<'arbitrary> Arbitrary<'arbitrary> for Digest

Source§

fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<Digest, Error>

Generate an arbitrary value of Self from the given unstructured data. Read more
Source§

fn arbitrary_take_rest(u: Unstructured<'arbitrary>) -> Result<Digest, Error>

Generate an arbitrary value of Self from the entirety of the given unstructured data. Read more
Source§

fn size_hint(depth: usize) -> (usize, Option<usize>)

Get a size hint for how many bytes out of an Unstructured this type needs to construct itself. Read more
Source§

impl BFieldCodec for Digest

Source§

type Error = DigestBFieldDecodingError

Source§

fn decode( sequence: &[BFieldElement], ) -> Result<Box<Digest>, <Digest as BFieldCodec>::Error>

Source§

fn encode(&self) -> Vec<BFieldElement>

Source§

fn static_length() -> Option<usize>

Returns the length in number of BFieldElements if it is known at compile-time. Otherwise, None.
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 Debug for Digest

Source§

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

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: D, ) -> Result<Digest, <D as Deserializer<'de>>::Error>
where D: Deserializer<'de>,

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

impl Display for Digest

Source§

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

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

impl From<Digest> for [u8; 40]

Source§

fn from(_: Digest) -> [u8; 40]

Converts to this type from the input type.
Source§

impl From<Digest> for Vec<BFieldElement>

Source§

fn from(val: Digest) -> Vec<BFieldElement>

Converts to this type from the input type.
Source§

impl From<XFieldElement> for Digest

Source§

fn from(xfe: XFieldElement) -> Digest

Interpret the XFieldElement as a Digest. No hashing is performed. This interpretation can be useful for the AlgebraicHasher trait and, by extension, allows building MerkleTrees directly from XFieldElements.

Source§

impl FromStr for Digest

Source§

type Err = TryFromDigestError

The associated error which can be returned from parsing.
Source§

fn from_str(string: &str) -> Result<Digest, <Digest as FromStr>::Err>

Parses a string s to return a value of this type. Read more
Source§

impl GetSize for Digest

Source§

fn get_stack_size() -> usize

Determines how may bytes this object occupies inside the stack. Read more
Source§

fn get_heap_size(&self) -> usize

Determines how many bytes this object occupies inside the heap. Read more
Source§

fn get_size(&self) -> usize

Determines the total size of the object. Read more
Source§

impl Hash for Digest

Source§

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

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

Source§

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

Formats the value using the given formatter. Read more
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) -> Self
where Self: Sized,

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

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

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

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

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

impl PartialEq for Digest

Source§

fn eq(&self, other: &Digest) -> 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 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

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

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

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

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>( &self, serializer: S, ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where S: Serializer,

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

impl TryFrom<&[BFieldElement]> for Digest

Source§

type Error = TryFromDigestError

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

fn try_from( value: &[BFieldElement], ) -> Result<Digest, <Digest as TryFrom<&[BFieldElement]>>::Error>

Performs the conversion.
Source§

impl TryFrom<&[u8]> for Digest

Source§

type Error = TryFromDigestError

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

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

Performs the conversion.
Source§

impl TryFrom<[u8; 40]> for Digest

Source§

type Error = TryFromDigestError

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

fn try_from( item: [u8; 40], ) -> Result<Digest, <Digest as TryFrom<[u8; 40]>>::Error>

Performs the conversion.
Source§

impl TryFrom<BigUint> for Digest

Source§

type Error = TryFromDigestError

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

fn try_from( value: BigUint, ) -> Result<Digest, <Digest as TryFrom<BigUint>>::Error>

Performs the conversion.
Source§

impl TryFrom<Digest> for XFieldElement

Source§

type Error = TryFromXFieldElementError

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

fn try_from( digest: Digest, ) -> Result<XFieldElement, <XFieldElement as TryFrom<Digest>>::Error>

Performs the conversion.
Source§

impl TryFrom<Vec<BFieldElement>> for Digest

Source§

type Error = TryFromDigestError

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

fn try_from( value: Vec<BFieldElement>, ) -> Result<Digest, <Digest as TryFrom<Vec<BFieldElement>>>::Error>

Performs the conversion.
Source§

impl UpperHex for Digest

Source§

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

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

impl Copy for Digest

Source§

impl Eq for Digest

Source§

impl StructuralPartialEq for Digest

Auto Trait Implementations§

§

impl Freeze for Digest

§

impl RefUnwindSafe for Digest

§

impl Send for Digest

§

impl Sync for Digest

§

impl Unpin for Digest

§

impl UnwindSafe for Digest

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, dst: *mut T)

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

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

Source§

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

Compare self to key and return their ordering.
Source§

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

Source§

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

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

impl<Q, K> Equivalent<K> for Q
where 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 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize = _

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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> ToString for T
where 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 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

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