Add num_bits to exp.

This commit is contained in:
wborgeaud 2021-06-16 08:56:58 +02:00
parent 6203eb0097
commit 4437012d2a
2 changed files with 6 additions and 4 deletions

View File

@ -276,7 +276,7 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
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() {

View File

@ -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<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
/// Computes `-x`.
@ -173,11 +174,12 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
}
// 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]);