snarkvm_circuit_algorithms::bhp

Struct BHP

Source
pub struct BHP<E: Environment, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> { /* private fields */ }
Expand description

BHP is a collision-resistant hash function that takes a variable-length input. The BHP hash function does not behave like a random oracle, see Poseidon for one.

§Design

The BHP hash function splits the given input into blocks, and processes them iteratively.

The first iteration is initialized as follows:

DIGEST_0 = BHP([ 0...0 || DOMAIN || LENGTH(INPUT) || INPUT[0..BLOCK_SIZE] ]);

Each subsequent iteration is initialized as follows:

DIGEST_N+1 = BHP([ DIGEST_N[0..DATA_BITS] || INPUT[(N+1)*BLOCK_SIZE..(N+2)*BLOCK_SIZE] ]);

Trait Implementations§

Source§

impl<E: Environment, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> Commit for BHP<E, NUM_WINDOWS, WINDOW_SIZE>

Source§

fn commit( &self, input: &[Self::Input], randomizer: &Self::Randomizer, ) -> Self::Output

Returns the BHP commitment of the given input and randomizer as a field element.

Source§

type Input = Boolean<E>

Source§

type Output = Field<E>

Source§

type Randomizer = Scalar<E>

Source§

impl<E: Environment, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> CommitUncompressed for BHP<E, NUM_WINDOWS, WINDOW_SIZE>

Source§

fn commit_uncompressed( &self, input: &[Self::Input], randomizer: &Self::Randomizer, ) -> Self::Output

Returns the BHP commitment of the given input and randomizer as an affine group element.

Source§

type Input = Boolean<E>

Source§

type Output = Group<E>

Source§

type Randomizer = Scalar<E>

Source§

impl<E: Environment, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> Hash for BHP<E, NUM_WINDOWS, WINDOW_SIZE>

Source§

fn hash(&self, input: &[Self::Input]) -> Self::Output

Returns the BHP hash of the given input as a field element.

Source§

type Input = Boolean<E>

Source§

type Output = Field<E>

Source§

impl<E: Environment, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> HashUncompressed for BHP<E, NUM_WINDOWS, WINDOW_SIZE>

Source§

fn hash_uncompressed(&self, input: &[Self::Input]) -> Self::Output

Returns the BHP hash of the given input as an affine group element.

This uncompressed variant of the BHP hash function is provided to support the BHP commitment scheme, as it is typically not used by applications.

Source§

type Input = Boolean<E>

Source§

type Output = Group<E>

Source§

impl<E: Environment, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> Inject for BHP<E, NUM_WINDOWS, WINDOW_SIZE>

Source§

fn new(_mode: Mode, bhp: Self::Primitive) -> Self

Initializes a new instance of a BHP circuit with the given BHP variant.

Source§

type Primitive = BHP<<E as Environment>::Network, NUM_WINDOWS, WINDOW_SIZE>

Source§

fn constant(value: Self::Primitive) -> Self
where Self: Sized,

Initializes a constant of the given primitive value.

Auto Trait Implementations§

§

impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> Freeze for BHP<E, NUM_WINDOWS, WINDOW_SIZE>

§

impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> RefUnwindSafe for BHP<E, NUM_WINDOWS, WINDOW_SIZE>

§

impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> !Send for BHP<E, NUM_WINDOWS, WINDOW_SIZE>

§

impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> !Sync for BHP<E, NUM_WINDOWS, WINDOW_SIZE>

§

impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> Unpin for BHP<E, NUM_WINDOWS, WINDOW_SIZE>
where <E as Environment>::BaseField: Unpin,

§

impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> UnwindSafe for BHP<E, NUM_WINDOWS, WINDOW_SIZE>

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> 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, 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