Skip to content

Commit

Permalink
feat: allow to set circom simplification level via CLI
Browse files Browse the repository at this point in the history
Also fix the test cases to use the old default simplificaiton level of O2
  • Loading branch information
dkales committed Nov 5, 2024
1 parent 2b4dbc9 commit b0d64ba
Show file tree
Hide file tree
Showing 19 changed files with 85 additions and 54 deletions.
12 changes: 5 additions & 7 deletions co-circom/circom-mpc-compiler/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,22 +46,20 @@ use serde::{Deserialize, Serialize};
use std::{collections::HashMap, marker::PhantomData, path::PathBuf};

/// The simplification level applied during constraint generation
#[derive(Debug, Copy, Clone, Serialize, Deserialize, Eq, PartialEq, PartialOrd, Ord, Hash)]
#[derive(
Debug, Default, Copy, Clone, Serialize, Deserialize, Eq, PartialEq, PartialOrd, Ord, Hash,
)]
pub enum SimplificationLevel {
/// No simplification
O0,
/// Only applies signal to signal and signal to constant simplification
/// The default value since circom 2.2.0
#[default]
O1,
/// Full constraint simplification (applied for n rounds)
O2(usize),
}

impl Default for SimplificationLevel {
fn default() -> Self {
SimplificationLevel::O1
}
}

/// The mpc-compiler configuration
#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, PartialOrd, Ord, Hash)]
pub struct CompilerConfig {
Expand Down
6 changes: 3 additions & 3 deletions co-circom/co-circom/examples/groth16/run_full_kyc.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# split input into shares
cargo run --release --bin co-circom -- split-input --circuit test_vectors/kyc/circuit.circom --input test_vectors/kyc/input.json --protocol REP3 --curve BN254 --out-dir test_vectors/kyc --config test_vectors/kyc/config.toml
# run witness extension in MPC
cargo run --release --bin co-circom -- generate-witness --input test_vectors/kyc/input.json.0.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party1.toml --out test_vectors/kyc/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/kyc/input.json.1.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party2.toml --out test_vectors/kyc/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/kyc/input.json.2.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party3.toml --out test_vectors/kyc/witness.wtns.2.shared
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/kyc/input.json.0.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party1.toml --out test_vectors/kyc/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/kyc/input.json.1.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party2.toml --out test_vectors/kyc/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/kyc/input.json.2.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party3.toml --out test_vectors/kyc/witness.wtns.2.shared
wait $(jobs -p)
# run proving in MPC
cargo run --release --bin co-circom -- generate-proof groth16 --witness test_vectors/kyc/witness.wtns.0.shared --zkey test_vectors/kyc/bn254/kyc.zkey --protocol REP3 --curve BN254 --config ../configs/party1.toml --out proof.0.json --public-input public_input.json &
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# split input into shares
cargo run --release --bin co-circom -- split-input --circuit test_vectors/kyc/circuit.circom --input test_vectors/kyc/input.json --protocol REP3 --curve BLS12-381 --out-dir test_vectors/kyc --config test_vectors/kyc/config.toml
# run witness extension in MPC
cargo run --release --bin co-circom -- generate-witness --input test_vectors/kyc/input.json.0.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BLS12-381 --config ../configs/party1.toml --out test_vectors/kyc/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/kyc/input.json.1.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BLS12-381 --config ../configs/party2.toml --out test_vectors/kyc/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/kyc/input.json.2.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BLS12-381 --config ../configs/party3.toml --out test_vectors/kyc/witness.wtns.2.shared
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/kyc/input.json.0.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BLS12-381 --config ../configs/party1.toml --out test_vectors/kyc/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/kyc/input.json.1.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BLS12-381 --config ../configs/party2.toml --out test_vectors/kyc/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/kyc/input.json.2.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BLS12-381 --config ../configs/party3.toml --out test_vectors/kyc/witness.wtns.2.shared
wait $(jobs -p)
# run translation from REP3 to Shamir
cargo run --release --bin co-circom -- translate-witness --witness test_vectors/kyc/witness.wtns.0.shared --src-protocol REP3 --target-protocol SHAMIR --curve BLS12-381 --config ../configs/party1.toml --out test_vectors/kyc/shamir_witness.wtns.0.shared &
Expand Down
6 changes: 3 additions & 3 deletions co-circom/co-circom/examples/groth16/run_full_multiplier2.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# split input into shares
cargo run --release --bin co-circom -- split-input --circuit test_vectors/multiplier2/circuit.circom --input test_vectors/multiplier2/input.json --protocol REP3 --curve BN254 --out-dir test_vectors/multiplier2
# run witness extension in MPC
cargo run --release --bin co-circom -- generate-witness --input test_vectors/multiplier2/input.json.0.shared --circuit test_vectors/multiplier2/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party1.toml --out test_vectors/multiplier2/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/multiplier2/input.json.1.shared --circuit test_vectors/multiplier2/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party2.toml --out test_vectors/multiplier2/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/multiplier2/input.json.2.shared --circuit test_vectors/multiplier2/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party3.toml --out test_vectors/multiplier2/witness.wtns.2.shared
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/multiplier2/input.json.0.shared --circuit test_vectors/multiplier2/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party1.toml --out test_vectors/multiplier2/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/multiplier2/input.json.1.shared --circuit test_vectors/multiplier2/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party2.toml --out test_vectors/multiplier2/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/multiplier2/input.json.2.shared --circuit test_vectors/multiplier2/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party3.toml --out test_vectors/multiplier2/witness.wtns.2.shared
wait $(jobs -p)
# run proving in MPC
cargo run --release --bin co-circom -- generate-proof groth16 --witness test_vectors/multiplier2/witness.wtns.0.shared --zkey test_vectors/multiplier2/multiplier2.zkey --protocol REP3 --curve BN254 --config ../configs/party1.toml --out proof.0.json --public-input public_input.json &
Expand Down
6 changes: 3 additions & 3 deletions co-circom/co-circom/examples/groth16/run_full_poseidon.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# split input into shares
cargo run --release --bin co-circom -- split-input --circuit test_vectors/poseidon/circuit.circom --input test_vectors/poseidon/input.json --protocol REP3 --curve BN254 --out-dir test_vectors/poseidon --config test_vectors/poseidon/config.toml
# run witness extension in MPC
cargo run --release --bin co-circom -- generate-witness --input test_vectors/poseidon/input.json.0.shared --circuit test_vectors/poseidon/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party1.toml --out test_vectors/poseidon/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/poseidon/input.json.1.shared --circuit test_vectors/poseidon/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party2.toml --out test_vectors/poseidon/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/poseidon/input.json.2.shared --circuit test_vectors/poseidon/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party3.toml --out test_vectors/poseidon/witness.wtns.2.shared
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/poseidon/input.json.0.shared --circuit test_vectors/poseidon/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party1.toml --out test_vectors/poseidon/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/poseidon/input.json.1.shared --circuit test_vectors/poseidon/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party2.toml --out test_vectors/poseidon/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/poseidon/input.json.2.shared --circuit test_vectors/poseidon/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party3.toml --out test_vectors/poseidon/witness.wtns.2.shared
wait $(jobs -p)
# run proving in MPC
cargo run --release --bin co-circom -- generate-proof groth16 --witness test_vectors/poseidon/witness.wtns.0.shared --zkey test_vectors/poseidon/poseidon.zkey --protocol REP3 --curve BN254 --config ../configs/party1.toml --out proof.0.json --public-input public_input.json &
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# split input into shares
cargo run --release --bin co-circom -- split-input --circuit test_vectors/poseidon/circuit.circom --input test_vectors/poseidon/input.json --protocol REP3 --curve BN254 --out-dir test_vectors/poseidon --config test_vectors/kyc/config.toml
# run witness extension in MPC
cargo run --release --bin co-circom -- generate-witness --input test_vectors/poseidon/input.json.0.shared --circuit test_vectors/poseidon/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party1.toml --out test_vectors/poseidon/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/poseidon/input.json.1.shared --circuit test_vectors/poseidon/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party2.toml --out test_vectors/poseidon/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/poseidon/input.json.2.shared --circuit test_vectors/poseidon/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party3.toml --out test_vectors/poseidon/witness.wtns.2.shared
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/poseidon/input.json.0.shared --circuit test_vectors/poseidon/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party1.toml --out test_vectors/poseidon/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/poseidon/input.json.1.shared --circuit test_vectors/poseidon/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party2.toml --out test_vectors/poseidon/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/poseidon/input.json.2.shared --circuit test_vectors/poseidon/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party3.toml --out test_vectors/poseidon/witness.wtns.2.shared
wait $(jobs -p)
# run translation from REP3 to Shamir
cargo run --release --bin co-circom -- translate-witness --witness test_vectors/poseidon/witness.wtns.0.shared --src-protocol REP3 --target-protocol SHAMIR --curve BN254 --config ../configs/party1.toml --out test_vectors/poseidon/shamir_witness.wtns.0.shared &
Expand Down
6 changes: 3 additions & 3 deletions co-circom/co-circom/examples/groth16/run_full_sum_arrays.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# split input into shares
cargo run --release --bin co-circom -- split-input --circuit test_vectors/sum_arrays/circuit.circom --input test_vectors/sum_arrays/input.json --protocol REP3 --curve BN254 --out-dir test_vectors/sum_arrays
# run witness extension in MPC
cargo run --release --bin co-circom -- generate-witness --input test_vectors/sum_arrays/input.json.0.shared --circuit test_vectors/sum_arrays/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party1.toml --out test_vectors/sum_arrays/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/sum_arrays/input.json.1.shared --circuit test_vectors/sum_arrays/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party2.toml --out test_vectors/sum_arrays/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/sum_arrays/input.json.2.shared --circuit test_vectors/sum_arrays/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party3.toml --out test_vectors/sum_arrays/witness.wtns.2.shared
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/sum_arrays/input.json.0.shared --circuit test_vectors/sum_arrays/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party1.toml --out test_vectors/sum_arrays/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/sum_arrays/input.json.1.shared --circuit test_vectors/sum_arrays/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party2.toml --out test_vectors/sum_arrays/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/sum_arrays/input.json.2.shared --circuit test_vectors/sum_arrays/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party3.toml --out test_vectors/sum_arrays/witness.wtns.2.shared
wait $(jobs -p)
# run proving in MPC
cargo run --release --bin co-circom -- generate-proof groth16 --witness test_vectors/sum_arrays/witness.wtns.0.shared --zkey test_vectors/sum_arrays/sum_arrays.zkey --protocol REP3 --curve BN254 --config ../configs/party1.toml --out proof.0.json --public-input public_input.json &
Expand Down
6 changes: 3 additions & 3 deletions co-circom/co-circom/examples/groth16/run_full_with_merge.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ cargo run --release --bin co-circom -- merge-input-shares --inputs test_vectors/
cargo run --release --bin co-circom -- merge-input-shares --inputs test_vectors/$EXAMPLE_NAME/input0.json.1.shared --inputs test_vectors/$EXAMPLE_NAME/input1.json.1.shared --protocol REP3 --curve BN254 --out test_vectors/$EXAMPLE_NAME/input.json.1.shared
cargo run --release --bin co-circom -- merge-input-shares --inputs test_vectors/$EXAMPLE_NAME/input0.json.2.shared --inputs test_vectors/$EXAMPLE_NAME/input1.json.2.shared --protocol REP3 --curve BN254 --out test_vectors/$EXAMPLE_NAME/input.json.2.shared
# run witness extension in MPC
cargo run --release --bin co-circom -- generate-witness --input test_vectors/$EXAMPLE_NAME/input.json.0.shared --circuit test_vectors/$EXAMPLE_NAME/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party1.toml --out test_vectors/$EXAMPLE_NAME/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/$EXAMPLE_NAME/input.json.1.shared --circuit test_vectors/$EXAMPLE_NAME/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party2.toml --out test_vectors/$EXAMPLE_NAME/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/$EXAMPLE_NAME/input.json.2.shared --circuit test_vectors/$EXAMPLE_NAME/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party3.toml --out test_vectors/$EXAMPLE_NAME/witness.wtns.2.shared
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/$EXAMPLE_NAME/input.json.0.shared --circuit test_vectors/$EXAMPLE_NAME/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party1.toml --out test_vectors/$EXAMPLE_NAME/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/$EXAMPLE_NAME/input.json.1.shared --circuit test_vectors/$EXAMPLE_NAME/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party2.toml --out test_vectors/$EXAMPLE_NAME/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/$EXAMPLE_NAME/input.json.2.shared --circuit test_vectors/$EXAMPLE_NAME/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party3.toml --out test_vectors/$EXAMPLE_NAME/witness.wtns.2.shared
wait $(jobs -p)
# run proving in MPC
cargo run --release --bin co-circom -- generate-proof groth16 --witness test_vectors/$EXAMPLE_NAME/witness.wtns.0.shared --zkey test_vectors/$EXAMPLE_NAME/$EXAMPLE_NAME.zkey --protocol REP3 --curve BN254 --config ../configs/party1.toml --out proof.0.json --public-input public_input.json &
Expand Down
6 changes: 3 additions & 3 deletions co-circom/co-circom/examples/plonk/run_full_kyc.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# split input into shares
cargo run --release --bin co-circom -- split-input --circuit test_vectors/kyc/circuit.circom --input test_vectors/kyc/input.json --protocol REP3 --curve BN254 --out-dir test_vectors/kyc --config test_vectors/kyc/config.toml
# run witness extension in MPC
cargo run --release --bin co-circom -- generate-witness --input test_vectors/kyc/input.json.0.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party1.toml --out test_vectors/kyc/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/kyc/input.json.1.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party2.toml --out test_vectors/kyc/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness --input test_vectors/kyc/input.json.2.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party3.toml --out test_vectors/kyc/witness.wtns.2.shared
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/kyc/input.json.0.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party1.toml --out test_vectors/kyc/witness.wtns.0.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/kyc/input.json.1.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party2.toml --out test_vectors/kyc/witness.wtns.1.shared &
cargo run --release --bin co-circom -- generate-witness -O2 --input test_vectors/kyc/input.json.2.shared --circuit test_vectors/kyc/circuit.circom --protocol REP3 --curve BN254 --config ../configs/party3.toml --out test_vectors/kyc/witness.wtns.2.shared
wait $(jobs -p)
# run proving in MPC
cargo run --release --bin co-circom -- generate-proof plonk --witness test_vectors/kyc/witness.wtns.0.shared --zkey test_vectors/kyc/bn254/kyc.zkey --protocol REP3 --curve BN254 --config ../configs/party1.toml --out proof.0.json --public-input public_input.json &
Expand Down
Loading

0 comments on commit b0d64ba

Please sign in to comment.