add some traits to efficiently work with Poseidon hash for now
This commit is contained in:
parent
dc47502ad2
commit
b6160fcd1b
@ -20,7 +20,7 @@ pub trait Circuit<E: Engine> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Represents a variable in our constraint system.
|
/// Represents a variable in our constraint system.
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq)]
|
||||||
pub struct Variable(pub(crate) Index);
|
pub struct Variable(pub(crate) Index);
|
||||||
|
|
||||||
impl Variable {
|
impl Variable {
|
||||||
@ -39,7 +39,7 @@ impl Variable {
|
|||||||
|
|
||||||
/// Represents the index of either an input variable or
|
/// Represents the index of either an input variable or
|
||||||
/// auxillary variable.
|
/// auxillary variable.
|
||||||
#[derive(Copy, Clone, PartialEq, Debug)]
|
#[derive(Copy, Clone, PartialEq, Debug, Hash, Eq)]
|
||||||
pub enum Index {
|
pub enum Index {
|
||||||
Input(usize),
|
Input(usize),
|
||||||
Aux(usize)
|
Aux(usize)
|
||||||
|
@ -31,9 +31,9 @@ use crate::{
|
|||||||
SynthesisError
|
SynthesisError
|
||||||
};
|
};
|
||||||
|
|
||||||
const MIMC_ROUNDS: usize = 322;
|
// const MIMC_ROUNDS: usize = 322;
|
||||||
|
|
||||||
// const MIMC_ROUNDS: usize = 1000000;
|
const MIMC_ROUNDS: usize = 1000000;
|
||||||
|
|
||||||
fn mimc<E: Engine>(
|
fn mimc<E: Engine>(
|
||||||
mut xl: E::Fr,
|
mut xl: E::Fr,
|
||||||
@ -471,7 +471,8 @@ fn test_succinct_sonic_mimc() {
|
|||||||
let srs_alpha = Fr::from_str("23728792").unwrap();
|
let srs_alpha = Fr::from_str("23728792").unwrap();
|
||||||
println!("making srs");
|
println!("making srs");
|
||||||
let start = Instant::now();
|
let start = Instant::now();
|
||||||
let srs = SRS::<Bls12>::dummy(830564, srs_x, srs_alpha);
|
// let srs = SRS::<Bls12>::dummy(830564, srs_x, srs_alpha);
|
||||||
|
let srs = SRS::<Bls12>::dummy(40000000, srs_x, srs_alpha);
|
||||||
println!("done in {:?}", start.elapsed());
|
println!("done in {:?}", start.elapsed());
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -132,6 +132,8 @@ pub fn create_aggregate_on_srs_using_information<E: Engine, C: Circuit<E>, S: Sy
|
|||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
println!("Commit and opening of for s(z, w) taken {:?}", start.elapsed());
|
||||||
|
|
||||||
// now we need signature of correct computation. For this purpose
|
// now we need signature of correct computation. For this purpose
|
||||||
// verifier already knows specialized SRS, so we can just commit to
|
// verifier already knows specialized SRS, so we can just commit to
|
||||||
// s1 and s2 parts of such signature to get `w` and later open at this point!
|
// s1 and s2 parts of such signature to get `w` and later open at this point!
|
||||||
@ -141,10 +143,20 @@ pub fn create_aggregate_on_srs_using_information<E: Engine, C: Circuit<E>, S: Sy
|
|||||||
// TODO: Precompute!
|
// TODO: Precompute!
|
||||||
// this will internally synthesize a circuit and structure of permutations
|
// this will internally synthesize a circuit and structure of permutations
|
||||||
|
|
||||||
|
let start = Instant::now();
|
||||||
|
|
||||||
let s2_eval = S2Eval::new(n);
|
let s2_eval = S2Eval::new(n);
|
||||||
let s2_proof = s2_eval.evaluate(z, w, &srs);
|
let s2_proof = s2_eval.evaluate(z, w, &srs);
|
||||||
|
|
||||||
|
println!("S2 proof taken {:?}", start.elapsed());
|
||||||
|
let start = Instant::now();
|
||||||
|
|
||||||
let permutation_structure = create_permutation_structure(circuit);
|
let permutation_structure = create_permutation_structure(circuit);
|
||||||
let (non_permuted_coeffs, permutations) = permutation_structure.create_permutation_vectors();
|
let (non_permuted_coeffs, permutations) = permutation_structure.create_permutation_vectors();
|
||||||
|
|
||||||
|
println!("Permutation vectors synthesis taken {:?}", start.elapsed());
|
||||||
|
let start = Instant::now();
|
||||||
|
|
||||||
let signature = PermutationArgument::make_signature(
|
let signature = PermutationArgument::make_signature(
|
||||||
non_permuted_coeffs,
|
non_permuted_coeffs,
|
||||||
permutations,
|
permutations,
|
||||||
|
@ -38,7 +38,9 @@ use bellman_ce::groth16::{
|
|||||||
verify_proof,
|
verify_proof,
|
||||||
};
|
};
|
||||||
|
|
||||||
const MIMC_ROUNDS: usize = 322;
|
// const MIMC_ROUNDS: usize = 322;
|
||||||
|
|
||||||
|
const MIMC_ROUNDS: usize = 1000000;
|
||||||
|
|
||||||
/// This is an implementation of MiMC, specifically a
|
/// This is an implementation of MiMC, specifically a
|
||||||
/// variant named `LongsightF322p3` for BLS12-381.
|
/// variant named `LongsightF322p3` for BLS12-381.
|
||||||
@ -171,7 +173,7 @@ impl<'a, E: Engine> Circuit<E> for MiMCDemo<'a, E> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_mimc() {
|
fn test_mimc_bls12() {
|
||||||
// This may not be cryptographically safe, use
|
// This may not be cryptographically safe, use
|
||||||
// `OsRng` (for example) in production software.
|
// `OsRng` (for example) in production software.
|
||||||
let rng = &mut thread_rng();
|
let rng = &mut thread_rng();
|
||||||
@ -198,7 +200,7 @@ fn test_mimc() {
|
|||||||
println!("Creating proofs...");
|
println!("Creating proofs...");
|
||||||
|
|
||||||
// Let's benchmark stuff!
|
// Let's benchmark stuff!
|
||||||
const SAMPLES: u32 = 50;
|
const SAMPLES: u32 = 1;
|
||||||
let mut total_proving = Duration::new(0, 0);
|
let mut total_proving = Duration::new(0, 0);
|
||||||
let mut total_verifying = Duration::new(0, 0);
|
let mut total_verifying = Duration::new(0, 0);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user