diff --git a/src/fri/recursive_verifier.rs b/src/fri/recursive_verifier.rs index d0795520..2d8cabff 100644 --- a/src/fri/recursive_verifier.rs +++ b/src/fri/recursive_verifier.rs @@ -276,7 +276,7 @@ impl, const D: usize> CircuitBuilder { let phi = self.constant(F::primitive_root_of_unity(n_log)); let reversed_x = self.reverse_bits::<2>(x_index, n_log); - let phi = self.exp(phi, reversed_x); + let phi = self.exp(phi, reversed_x, n_log); let mut subgroup_x = self.mul(g, phi); for (i, &arity_bits) in config.reduction_arity_bits.iter().enumerate() { diff --git a/src/gadgets/arithmetic.rs b/src/gadgets/arithmetic.rs index 8bf3a797..6250ea81 100644 --- a/src/gadgets/arithmetic.rs +++ b/src/gadgets/arithmetic.rs @@ -1,3 +1,5 @@ +use std::convert::TryInto; + use crate::circuit_builder::CircuitBuilder; use crate::field::extension_field::target::ExtensionTarget; use crate::field::extension_field::{Extendable, FieldExtension}; @@ -8,7 +10,6 @@ use crate::generator::SimpleGenerator; use crate::target::Target; use crate::wire::Wire; use crate::witness::PartialWitness; -use std::convert::TryInto; impl, const D: usize> CircuitBuilder { /// Computes `-x`. @@ -173,11 +174,12 @@ impl, const D: usize> CircuitBuilder { } // TODO: Optimize this, maybe with a new gate. - pub fn exp(&mut self, base: Target, exponent: Target) -> Target { + /// Exponentiate `base` to the power of `exponent`, where `exponent < 2^num_bits`. + pub fn exp(&mut self, base: Target, exponent: Target, num_bits: usize) -> Target { let mut current = base; let one = self.one(); let mut product = one; - let exponent_bits = self.split_le(exponent, 64); + let exponent_bits = self.split_le(exponent, num_bits); for bit in exponent_bits.into_iter() { product = self.mul_many(&[bit, current, product]);