pub struct BHP<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8>where
E: Environment,{ /* 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, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> Commit for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> Commit for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
Source§fn commit(
&self,
input: &[<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as Commit>::Input],
randomizer: &<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as Commit>::Randomizer,
) -> <BHP<E, NUM_WINDOWS, WINDOW_SIZE> as Commit>::Output
fn commit( &self, input: &[<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as Commit>::Input], randomizer: &<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as Commit>::Randomizer, ) -> <BHP<E, NUM_WINDOWS, WINDOW_SIZE> as Commit>::Output
Returns the BHP commitment of the given input and randomizer as a field element.
type Input = Boolean<E>
type Output = Field<E>
type Randomizer = Scalar<E>
Source§impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> CommitUncompressed for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> CommitUncompressed for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
Source§fn commit_uncompressed(
&self,
input: &[<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as CommitUncompressed>::Input],
randomizer: &<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as CommitUncompressed>::Randomizer,
) -> <BHP<E, NUM_WINDOWS, WINDOW_SIZE> as CommitUncompressed>::Output
fn commit_uncompressed( &self, input: &[<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as CommitUncompressed>::Input], randomizer: &<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as CommitUncompressed>::Randomizer, ) -> <BHP<E, NUM_WINDOWS, WINDOW_SIZE> as CommitUncompressed>::Output
Returns the BHP commitment of the given input and randomizer as an affine group element.
type Input = Boolean<E>
type Output = Group<E>
type Randomizer = Scalar<E>
Source§impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> Hash for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> Hash for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
Source§impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> HashUncompressed for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> HashUncompressed for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
Source§fn hash_uncompressed(
&self,
input: &[<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as HashUncompressed>::Input],
) -> <BHP<E, NUM_WINDOWS, WINDOW_SIZE> as HashUncompressed>::Output
fn hash_uncompressed( &self, input: &[<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as HashUncompressed>::Input], ) -> <BHP<E, NUM_WINDOWS, WINDOW_SIZE> as HashUncompressed>::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.
type Input = Boolean<E>
type Output = Group<E>
Source§impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> Inject for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> Inject for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
Source§impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> LeafHash for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> LeafHash for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
Source§impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> PathHash<E> for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> PathHash<E> for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
Source§fn hash_children(
&self,
children: &[<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as PathHash<E>>::Hash],
) -> <BHP<E, NUM_WINDOWS, WINDOW_SIZE> as PathHash<E>>::Hash
fn hash_children( &self, children: &[<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as PathHash<E>>::Hash], ) -> <BHP<E, NUM_WINDOWS, WINDOW_SIZE> as PathHash<E>>::Hash
Returns the hash of the given child nodes.
type Hash = Field<E>
type Primitive = BHP<<E as Environment>::Network, NUM_WINDOWS, WINDOW_SIZE>
Source§fn hash_empty<const ARITY: u8>(&self) -> Self::Hash
fn hash_empty<const ARITY: u8>(&self) -> Self::Hash
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>
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> UnwindSafe for BHP<E, NUM_WINDOWS, WINDOW_SIZE>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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