diff --git a/src/gadgets/arithmetic.rs b/src/gadgets/arithmetic.rs index a8ec3754..d670f58d 100644 --- a/src/gadgets/arithmetic.rs +++ b/src/gadgets/arithmetic.rs @@ -110,7 +110,8 @@ impl, const D: usize> CircuitBuilder { let zero = self.zero(); let gate = ExponentiationGate::new(self.config.clone()); let num_power_bits = gate.num_power_bits; - let mut exp_bits_vec: Vec = exponent_bits.into_iter().map(|b| *b.borrow()).collect(); + let mut exp_bits_vec: Vec = + exponent_bits.into_iter().map(|b| *b.borrow()).collect(); while exp_bits_vec.len() < num_power_bits { exp_bits_vec.push(zero); } diff --git a/src/gates/exponentiation.rs b/src/gates/exponentiation.rs index 7bbb6eeb..a1ef69f6 100644 --- a/src/gates/exponentiation.rs +++ b/src/gates/exponentiation.rs @@ -159,10 +159,8 @@ impl, const D: usize> Gate for ExponentiationGate { // power_bits is in LE order, but we accumulate in BE order. let cur_bit = power_bits[self.num_power_bits - i - 1]; let mul_by = builder.select_ext(cur_bit, base, one); - let computed_intermediate_value = - builder.mul_extension(prev_intermediate_value, mul_by); let intermediate_value_diff = - builder.sub_extension(computed_intermediate_value, intermediate_values[i]); + builder.mul_sub_extension(prev_intermediate_value, mul_by, intermediate_values[i]); constraints.push(intermediate_value_diff); } diff --git a/src/gates/gmimc.rs b/src/gates/gmimc.rs index 97847d41..fe3f7d70 100644 --- a/src/gates/gmimc.rs +++ b/src/gates/gmimc.rs @@ -191,11 +191,10 @@ impl, const D: usize, const R: usize> Gate for GMiMCGate< let constant = builder.constant_extension(self.constants[r].into()); let cubing_input = - builder.add_many_extension(&[state[active], addition_buffer, constant]); + builder.add_three_extension(state[active], addition_buffer, constant); let cubing_input_wire = vars.local_wires[Self::wire_cubing_input(r)]; constraints.push(builder.sub_extension(cubing_input, cubing_input_wire)); - let square = builder.mul_extension(cubing_input_wire, cubing_input_wire); - let f = builder.mul_extension(square, cubing_input_wire); + let f = builder.cube_extension(cubing_input_wire); addition_buffer = builder.add_extension(addition_buffer, f); state[active] = builder.sub_extension(state[active], f); } diff --git a/src/gates/random_access.rs b/src/gates/random_access.rs index ff35eaa2..21667f49 100644 --- a/src/gates/random_access.rs +++ b/src/gates/random_access.rs @@ -140,10 +140,10 @@ impl, const D: usize> Gate for RandomAccessGate { let index_matches = vars.local_wires[self.wire_index_matches_for_index(i)]; // The two equality constraints. - let prod = builder.mul_extension(difference, equality_dummy); - let one = builder.constant_extension(F::Extension::ONE); + let one = builder.one_extension(); let not_index_matches = builder.sub_extension(one, index_matches); - let first_equality_constraint = builder.sub_extension(prod, not_index_matches); + let first_equality_constraint = + builder.mul_sub_extension(difference, equality_dummy, not_index_matches); constraints.push(first_equality_constraint); let second_equality_constraint = builder.mul_extension(index_matches, difference);