Browse Source

Add parameter 'inputs_already_allocated' to CircomCircuit

To allow allocating the inputs in previous stages.
pull/3/head
arnaucube 6 months ago
parent
commit
48f2915b64
2 changed files with 20 additions and 11 deletions
  1. +1
    -0
      src/circom/builder.rs
  2. +19
    -11
      src/circom/circuit.rs

+ 1
- 0
src/circom/builder.rs

@ -58,6 +58,7 @@ impl CircomBuilder {
let mut circom = CircomCircuit {
r1cs: self.cfg.r1cs.clone(),
witness: None,
inputs_already_allocated: false,
};
// Disable the wire mapping

+ 19
- 11
src/circom/circuit.rs

@ -11,6 +11,7 @@ use color_eyre::Result;
pub struct CircomCircuit<F: PrimeField> {
pub r1cs: R1CS<F>,
pub witness: Option<Vec<F>>,
pub inputs_already_allocated: bool,
}
impl<F: PrimeField> CircomCircuit<F> {
@ -31,16 +32,18 @@ impl ConstraintSynthesizer for CircomCircuit {
let wire_mapping = &self.r1cs.wire_mapping;
// Start from 1 because Arkworks implicitly allocates One for the first input
for i in 1..self.r1cs.num_inputs {
cs.new_input_variable(|| {
Ok(match witness {
None => F::from(1u32),
Some(w) => match wire_mapping {
Some(m) => w[m[i]],
None => w[i],
},
})
})?;
if !self.inputs_already_allocated {
for i in 1..self.r1cs.num_inputs {
cs.new_input_variable(|| {
Ok(match witness {
None => F::from(1u32),
Some(w) => match wire_mapping {
Some(m) => w[m[i]],
None => w[i],
},
})
})?;
}
}
for i in 0..self.r1cs.num_aux {
@ -69,7 +72,12 @@ impl ConstraintSynthesizer for CircomCircuit {
)
};
for constraint in &self.r1cs.constraints {
let skip = if self.inputs_already_allocated {
self.r1cs.num_inputs
} else {
0
};
for constraint in self.r1cs.constraints.iter().skip(skip) {
cs.enforce_constraint(
make_lc(&constraint.0),
make_lc(&constraint.1),

Loading…
Cancel
Save