From a746f03531fa72ad156cda42024edac35f55b1ca Mon Sep 17 00:00:00 2001 From: Kobi Gurkan Date: Sat, 7 Sep 2019 21:10:22 +0300 Subject: [PATCH] adds working tools for circom import/export --- phase2/src/bin/circom.rs | 14 ++++++++++---- phase2/tools/copy_json.py | 23 +++++++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 phase2/tools/copy_json.py diff --git a/phase2/src/bin/circom.rs b/phase2/src/bin/circom.rs index e4b1b06..36a6c45 100644 --- a/phase2/src/bin/circom.rs +++ b/phase2/src/bin/circom.rs @@ -114,7 +114,7 @@ impl<'a, E: Engine> Circuit for CircomCircuit<'a> { let content = str::from_utf8(&mmap).unwrap(); let circuit_json: CircuitJson = serde_json::from_str(&content).unwrap(); let return_err = || Err(SynthesisError::AssignmentMissing); - let num_public_inputs = circuit_json.num_inputs + circuit_json.num_outputs; + let num_public_inputs = circuit_json.num_inputs + circuit_json.num_outputs + 1; for i in 0..circuit_json.num_variables { if i < num_public_inputs { cs.alloc_input(|| format!("variable {}", i), return_err); @@ -123,18 +123,24 @@ impl<'a, E: Engine> Circuit for CircomCircuit<'a> { } } let mut constraint_num = 0; - for constraint in circuit_json.constraints.iter() { + for (i, constraint) in circuit_json.constraints.iter().enumerate() { let mut lcs = vec![]; for lc_description in constraint { let mut lc = LinearCombination::::zero(); + println!("lc_description: {:?}, i: {}, len: {}", lc_description, i, constraint.len()); for (var_index_str, coefficient_str) in lc_description { + println!("var_index_str: {}, coefficient_str: {}", var_index_str, coefficient_str); let var_index_num: usize = var_index_str.parse().unwrap(); let var_index = if var_index_num < num_public_inputs { Index::Input(var_index_num) } else { Index::Aux(var_index_num - num_public_inputs) }; - lc = lc + (E::Fr::from_str(coefficient_str).unwrap(), Variable::new_unchecked(var_index)); + if i == 2 { + lc = lc + (E::Fr::from_str(coefficient_str).unwrap(), Variable::new_unchecked(var_index)); + } else { + lc = lc + (E::Fr::from_str(coefficient_str).unwrap(), Variable::new_unchecked(var_index)); + } } lcs.push(lc); } @@ -251,7 +257,7 @@ fn main() { proving_key.b2.push(p2_to_vec(e)); } let c = params.l.clone(); - for _ in 0..params.vk.ic.len() { + for _ in 1..params.vk.ic.len() { proving_key.c.push(None); } for e in c.iter() { diff --git a/phase2/tools/copy_json.py b/phase2/tools/copy_json.py new file mode 100644 index 0000000..3c9055a --- /dev/null +++ b/phase2/tools/copy_json.py @@ -0,0 +1,23 @@ +import json + +f = json.load(open('proving_key.json')) +f2 = json.load(open('pk.json')) + +for k in f2: + f[k] = f2[k] + +f3 = open('transformed_pk.json', 'w') +f3.write(json.dumps(f)) +f3.close() + +f = json.load(open('verification_key.json')) +f2 = json.load(open('vk.json')) + +for k in f2: + f[k] = f2[k] + +del f['vk_alfabeta_12'] + +f3 = open('transformed_vk.json', 'w') +f3.write(json.dumps(f)) +f3.close()