Struct snarkvm_wasm::algorithms::BHP
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] ]);
Implementations
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
pub fn setup(domain: &str) -> Result<BHP<E, NUM_WINDOWS, WINDOW_SIZE>, Error>
pub fn setup(domain: &str) -> Result<BHP<E, NUM_WINDOWS, WINDOW_SIZE>, Error>
Initializes a new instance of BHP with the given domain.
pub fn random_base(&self) -> &Arc<Vec<Group<E>, Global>>
pub fn random_base(&self) -> &Arc<Vec<Group<E>, Global>>
Returns the random base window.
pub fn num_windows(&self) -> u8
pub fn num_windows(&self) -> u8
Returns the number of windows.
pub fn window_size(&self) -> u8
pub fn window_size(&self) -> u8
Returns the window size.
Trait Implementations
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> Clone for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Clone + Environment,
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> Clone for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Clone + Environment,
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,
fn commit(
&self,
input: &[<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as Commit>::Input],
randomizer: &<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as Commit>::Randomizer
) -> Result<<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as Commit>::Output, Error>
fn commit(
&self,
input: &[<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as Commit>::Input],
randomizer: &<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as Commit>::Randomizer
) -> Result<<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as Commit>::Output, Error>
Returns the BHP commitment of the given input and randomizer as a field element.
type Input = bool
type Output = Field<E>
type Randomizer = Scalar<E>
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,
fn commit_uncompressed(
&self,
input: &[<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as CommitUncompressed>::Input],
randomizer: &<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as CommitUncompressed>::Randomizer
) -> Result<<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as CommitUncompressed>::Output, Error>
fn commit_uncompressed(
&self,
input: &[<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as CommitUncompressed>::Input],
randomizer: &<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as CommitUncompressed>::Randomizer
) -> Result<<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as CommitUncompressed>::Output, Error>
Returns the BHP commitment of the given input and randomizer as an affine group element.
type Input = bool
type Output = Group<E>
type Randomizer = Scalar<E>
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,
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,
fn hash_uncompressed(
&self,
input: &[<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as HashUncompressed>::Input]
) -> Result<<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as HashUncompressed>::Output, Error>
fn hash_uncompressed(
&self,
input: &[<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as HashUncompressed>::Input]
) -> Result<<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as HashUncompressed>::Output, Error>
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 = bool
type Output = Group<E>
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,
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> PathHash for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> PathHash for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
E: Environment,
fn hash_children(
&self,
left: &<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as PathHash>::Hash,
right: &<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as PathHash>::Hash
) -> Result<<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as PathHash>::Hash, Error>
fn hash_children(
&self,
left: &<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as PathHash>::Hash,
right: &<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as PathHash>::Hash
) -> Result<<BHP<E, NUM_WINDOWS, WINDOW_SIZE> as PathHash>::Hash, Error>
Returns the hash of the given child nodes.
type Hash = Field<E>
fn hash_empty(&self) -> Result<Self::Hash, Error>
fn hash_empty(&self) -> Result<Self::Hash, Error>
Auto Trait Implementations
impl<E, const NUM_WINDOWS: u8, const WINDOW_SIZE: u8> RefUnwindSafe for BHP<E, NUM_WINDOWS, WINDOW_SIZE>where
<E as Environment>::Projective: RefUnwindSafe,
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>where
<E as Environment>::Projective: RefUnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T>where
T: Future, type Output = <T as Future>::Output;
fn instrument(self, span: Span) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T>where
T: Future, type Output = <T as Future>::Output;
T: Future, type Output = <T as Future>::Output;
sourcefn in_current_span(self) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T>where
T: Future, type Output = <T as Future>::Output;
fn in_current_span(self) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T>where
T: Future, type Output = <T as Future>::Output;
T: Future, type Output = <T as Future>::Output;
impl<T> Pointable for T
impl<T> Pointable for T
impl<V, T> VZip<V> for Twhere
V: MultiLane<T>,
impl<V, T> VZip<V> for Twhere
V: MultiLane<T>,
fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T>where
T: Future, type Output = <T as Future>::Output;
where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T>where
T: Future, type Output = <T as Future>::Output;
where
S: Into<Dispatch>,
T: Future, type Output = <T as Future>::Output;
sourcefn with_current_subscriber(self) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T>where
T: Future, type Output = <T as Future>::Output;
fn with_current_subscriber(self) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T>where
T: Future, type Output = <T as Future>::Output;
T: Future, type Output = <T as Future>::Output;