Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions src/bin/benchmark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ use whir::{
whir::{
committer::CommitmentReader,
domainsep::DigestDomainSeparator,
parameters::{DeduplicationStrategy, MerkleProofStrategy},
statement::{Statement, Weights},
utils::{DigestToUnitDeserialize, DigestToUnitSerialize},
},
Expand Down Expand Up @@ -282,7 +283,12 @@ fn run_whir<F, MerkleConfig>(
initial_statement: false,
..whir_params.clone()
};
let params = WhirConfig::<F, MerkleConfig, PowStrategy>::new(mv_params, whir_params);
let params = WhirConfig::<F, MerkleConfig, PowStrategy>::new(
mv_params,
whir_params,
DeduplicationStrategy::Enabled,
Comment thread
shreyas-londhe marked this conversation as resolved.
Outdated
MerkleProofStrategy::Compressed,
);
if !params.check_pow_bits() {
println!("WARN: more PoW bits required than what specified.");
}
Expand Down Expand Up @@ -355,7 +361,12 @@ fn run_whir<F, MerkleConfig>(
prover::Prover, verifier::Verifier,
};

let params = WhirConfig::<F, MerkleConfig, PowStrategy>::new(mv_params, whir_params);
let params = WhirConfig::<F, MerkleConfig, PowStrategy>::new(
mv_params,
whir_params,
DeduplicationStrategy::Enabled,
MerkleProofStrategy::Compressed,
);
if !params.check_pow_bits() {
println!("WARN: more PoW bits required than what specified.");
}
Expand Down
15 changes: 13 additions & 2 deletions src/bin/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ use whir::{
whir::{
committer::CommitmentReader,
domainsep::DigestDomainSeparator,
parameters::{DeduplicationStrategy, MerkleProofStrategy},
statement::{Statement, Weights},
utils::{DigestToUnitDeserialize, DigestToUnitSerialize},
},
Expand Down Expand Up @@ -262,7 +263,12 @@ fn run_whir_as_ldt<F, MerkleConfig>(
batch_size: 1,
};

let params = WhirConfig::<F, MerkleConfig, PowStrategy>::new(mv_params, whir_params);
let params = WhirConfig::<F, MerkleConfig, PowStrategy>::new(
mv_params,
whir_params,
DeduplicationStrategy::Enabled,
MerkleProofStrategy::Compressed,
);

let domainsep = DomainSeparator::new("🌪️")
.commit_statement(&params)
Expand Down Expand Up @@ -376,7 +382,12 @@ fn run_whir_pcs<F, MerkleConfig>(
batch_size: 1,
};

let params = WhirConfig::<F, MerkleConfig, PowStrategy>::new(mv_params, whir_params);
let params = WhirConfig::<F, MerkleConfig, PowStrategy>::new(
mv_params,
whir_params,
DeduplicationStrategy::Enabled,
MerkleProofStrategy::Compressed,
);

let domainsep = DomainSeparator::new("🌪️")
.commit_statement(&params)
Expand Down
1 change: 1 addition & 0 deletions src/crypto/merkle_tree/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ pub mod blake3;
pub mod digest;
pub mod keccak;
pub mod parameters;
pub mod proof;

#[derive(Debug, Default)]
pub struct HashCounter;
Expand Down
46 changes: 46 additions & 0 deletions src/crypto/merkle_tree/proof.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
use std::borrow::Borrow;

use ark_crypto_primitives::{
merkle_tree::{Config, LeafParam, Path, TwoToOneParam},
Error,
};
use ark_serialize::{CanonicalDeserialize, CanonicalSerialize};

#[derive(Clone, Default, CanonicalSerialize, CanonicalDeserialize)]
pub struct FullMultiPath<P: Config> {
pub proofs: Vec<Path<P>>,
}

impl<P: Config> FullMultiPath<P> {
pub fn indices(&self) -> Vec<usize> {
self.proofs.iter().map(|p| p.leaf_index).collect()
}

pub fn verify<L: Borrow<P::Leaf> + Clone>(
&self,
leaf_hash_params: &LeafParam<P>,
two_to_one_params: &TwoToOneParam<P>,
root_hash: &P::InnerDigest,
leaves: impl IntoIterator<Item = L>,
) -> Result<bool, Error> {
let leaves_vec: Vec<L> = leaves.into_iter().collect();
self.proofs
.iter()
.enumerate()
.map(|(i, proof)| {
proof.verify(
leaf_hash_params,
two_to_one_params,
root_hash,
leaves_vec[i].borrow(),
)
})
.try_fold(true, |acc, res| res.map(|b| acc && b))
}
}

impl<P: Config> From<Vec<Path<P>>> for FullMultiPath<P> {
fn from(proofs: Vec<Path<P>>) -> Self {
Self { proofs }
}
}
9 changes: 7 additions & 2 deletions src/whir/batching.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ mod batching_tests {
whir::{
committer::{reader::CommitmentReader, CommitmentWriter},
domainsep::WhirDomainSeparator,
parameters::WhirConfig,
parameters::{DeduplicationStrategy, MerkleProofStrategy, WhirConfig},
prover::Prover,
statement::{Statement, Weights},
verifier::Verifier,
Expand Down Expand Up @@ -117,7 +117,12 @@ mod batching_tests {
};

// Build global configuration from multivariate + protocol parameters
let params = WhirConfig::new(mv_params, whir_params);
let params = WhirConfig::new(
mv_params,
whir_params,
DeduplicationStrategy::Enabled,
MerkleProofStrategy::Compressed,
);

let mut poly_list = Vec::<CoefficientList<F>>::with_capacity(batch_size);

Expand Down
16 changes: 14 additions & 2 deletions src/whir/committer/writer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,10 @@ mod tests {
},
parameters::{FoldingFactor, MultivariateParameters, ProtocolParameters, SoundnessType},
poly_utils::multilinear::MultilinearPoint,
whir::domainsep::WhirDomainSeparator,
whir::{
domainsep::WhirDomainSeparator,
parameters::{DeduplicationStrategy, MerkleProofStrategy},
},
};

#[test]
Expand Down Expand Up @@ -265,7 +268,12 @@ mod tests {

// Define multivariate parameters for the polynomial.
let mv_params = MultivariateParameters::<F>::new(num_variables);
let params = WhirConfig::<F, MerkleConfig, Blake3PoW>::new(mv_params, whir_params);
let params = WhirConfig::<F, MerkleConfig, Blake3PoW>::new(
mv_params,
whir_params,
DeduplicationStrategy::Enabled,
MerkleProofStrategy::Compressed,
);

// Generate a random polynomial with 32 coefficients.
let polynomial = CoefficientList::new(vec![F::rand(&mut rng); 32]);
Expand Down Expand Up @@ -351,6 +359,8 @@ mod tests {
starting_log_inv_rate: 1,
batch_size: 1,
},
DeduplicationStrategy::Enabled,
MerkleProofStrategy::Compressed,
);

let polynomial = CoefficientList::new(vec![F::rand(&mut rng); 1024]); // Large polynomial
Expand Down Expand Up @@ -391,6 +401,8 @@ mod tests {
starting_log_inv_rate: 1,
batch_size: 1,
},
DeduplicationStrategy::Enabled,
MerkleProofStrategy::Compressed,
);

params.committment_ood_samples = 0; // No OOD samples
Expand Down
9 changes: 7 additions & 2 deletions src/whir/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ mod tests {
whir::{
committer::{CommitmentReader, CommitmentWriter},
domainsep::WhirDomainSeparator,
parameters::WhirConfig,
parameters::{DeduplicationStrategy, MerkleProofStrategy, WhirConfig},
prover::Prover,
statement::{Statement, Weights},
verifier::Verifier,
Expand Down Expand Up @@ -90,7 +90,12 @@ mod tests {
};

// Build global configuration from multivariate + protocol parameters
let params = WhirConfig::new(mv_params, whir_params);
let params = WhirConfig::new(
mv_params,
whir_params,
DeduplicationStrategy::Enabled,
MerkleProofStrategy::Compressed,
);

// Test that the config is serializable
eprintln!("{params:?}");
Expand Down
Loading
Loading