Add hash public input methods (#1529)

* Add hash public input methods

* Change vecs to arrays

* ::

* Fix method name
This commit is contained in:
Hamy Ratoanina 2024-02-16 17:55:46 +01:00 committed by GitHub
parent 8753162b77
commit a7b985ce39
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -337,10 +337,15 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
[0; N].map(|_| self.add_virtual_target())
}
/// Adds a new `HashOutTarget`. `NUM_HASH_OUT_ELTS` being hardcoded to 4, it internally
/// adds 4 virtual targets in a vector fashion.
/// Adds a new `HashOutTarget`.
pub fn add_virtual_hash(&mut self) -> HashOutTarget {
HashOutTarget::from_vec(self.add_virtual_targets(4))
HashOutTarget::from(self.add_virtual_target_arr::<4>())
}
/// Registers a new `HashOutTarget` as a public input, adding
/// internally `NUM_HASH_OUT_ELTS` virtual targets.
pub fn add_virtual_hash_public_input(&mut self) -> HashOutTarget {
HashOutTarget::from(self.add_virtual_public_input_arr::<4>())
}
/// Adds a new `MerkleCapTarget`, consisting in `1 << cap_height` `HashOutTarget`.
@ -353,6 +358,13 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
(0..n).map(|_i| self.add_virtual_hash()).collect()
}
/// Registers `n` new `HashOutTarget` as public inputs, in a vector fashion.
pub fn add_virtual_hashes_public_input(&mut self, n: usize) -> Vec<HashOutTarget> {
(0..n)
.map(|_i| self.add_virtual_hash_public_input())
.collect()
}
pub(crate) fn add_virtual_merkle_proof(&mut self, len: usize) -> MerkleProofTarget {
MerkleProofTarget {
siblings: self.add_virtual_hashes(len),