chip::mul_fixed: Move running_sum_config into mul_fixed::Config.

This commit is contained in:
therealyingtong 2021-11-30 22:00:07 -05:00 committed by Jack Grigg
parent 1a7e832ed4
commit f472a16b32
7 changed files with 1049 additions and 1068 deletions

View File

@ -1,8 +1,7 @@
use super::EccInstructions;
use crate::{
circuit::gadget::utilities::{
copy, decompose_running_sum::RunningSumConfig, lookup_range_check::LookupRangeCheckConfig,
CellValue, UtilitiesInstructions, Var,
copy, lookup_range_check::LookupRangeCheckConfig, CellValue, UtilitiesInstructions, Var,
},
constants::{self, NullifierK, OrchardFixedBasesFull, ValueCommitV},
primitives::sinsemilla,
@ -151,17 +150,12 @@ pub struct EccConfig {
pub q_mul_fixed_short: Selector,
/// Canonicity checks on base field element used as scalar in fixed-base mul
pub q_mul_fixed_base_field: Selector,
/// Running sum decomposition of a scalar used in fixed-base mul. This is used
/// when the scalar is a signed short exponent or a base-field element.
pub q_mul_fixed_running_sum: Selector,
/// Witness point
witness_point: witness_point::Config,
/// Lookup range check using 10-bit lookup table
pub lookup_config: LookupRangeCheckConfig<pallas::Base, { sinsemilla::K }>,
/// Running sum decomposition.
pub running_sum_config: RunningSumConfig<pallas::Base, { constants::FIXED_BASE_WINDOW_SIZE }>,
}
/// A chip implementing EccInstructions
@ -213,10 +207,6 @@ impl EccChip {
meta.enable_equality((*column).into());
}
let q_mul_fixed_running_sum = meta.selector();
let running_sum_config =
RunningSumConfig::configure(meta, q_mul_fixed_running_sum, advices[4]);
// Create witness point gate
let witness_point = witness_point::Config::configure(meta, advices[0], advices[1]);
// Create incomplete point addition gate
@ -236,7 +226,6 @@ impl EccChip {
// fixed-base scalar mul.
let mul_fixed = mul_fixed::Config::configure(
meta,
q_mul_fixed_running_sum,
lagrange_coeffs,
advices[4],
advices[0],
@ -255,10 +244,8 @@ impl EccChip {
q_mul_fixed_full: meta.selector(),
q_mul_fixed_short: meta.selector(),
q_mul_fixed_base_field: meta.selector(),
q_mul_fixed_running_sum,
witness_point,
lookup_config: range_check,
running_sum_config,
};
// Create gate that is only used in full-width fixed-base scalar mul.

View File

@ -2,6 +2,7 @@ use super::{
add, add_incomplete, CellValue, EccBaseFieldElemFixed, EccScalarFixed, EccScalarFixedShort,
NonIdentityEccPoint, Var,
};
use crate::circuit::gadget::utilities::decompose_running_sum::RunningSumConfig;
use crate::constants::{
self,
load::{NullifierK, OrchardFixedBase, OrchardFixedBasesFull, ValueCommitV, WindowUs},
@ -77,7 +78,7 @@ impl OrchardFixedBases {
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct Config {
q_mul_fixed_running_sum: Selector,
running_sum_config: RunningSumConfig<pallas::Base, { constants::FIXED_BASE_WINDOW_SIZE }>,
// The fixed Lagrange interpolation coefficients for `x_p`.
lagrange_coeffs: [Column<Fixed>; constants::H],
// The fixed `z` for each window such that `y + z = u^2`.
@ -101,7 +102,6 @@ impl Config {
#[allow(clippy::too_many_arguments)]
pub(super) fn configure(
meta: &mut ConstraintSystem<pallas::Base>,
q_mul_fixed_running_sum: Selector,
lagrange_coeffs: [Column<Fixed>; constants::H],
window: Column<Advice>,
x_p: Column<Advice>,
@ -113,8 +113,11 @@ impl Config {
meta.enable_equality(window.into());
meta.enable_equality(u.into());
let q_running_sum = meta.selector();
let running_sum_config = RunningSumConfig::configure(meta, q_running_sum, window);
let config = Self {
q_mul_fixed_running_sum,
running_sum_config,
lagrange_coeffs,
fixed_z: meta.fixed_column(),
window,
@ -171,7 +174,8 @@ impl Config {
/// via a running sum.
fn running_sum_coords_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
meta.create_gate("Running sum coordinates check", |meta| {
let q_mul_fixed_running_sum = meta.query_selector(self.q_mul_fixed_running_sum);
let q_mul_fixed_running_sum =
meta.query_selector(self.running_sum_config.q_range_check);
let z_cur = meta.query_advice(self.window, Rotation::cur());
let z_next = meta.query_advice(self.window, Rotation::next());

View File

@ -3,8 +3,8 @@ use super::H_BASE;
use crate::{
circuit::gadget::utilities::{
bitrange_subset, copy, decompose_running_sum::RunningSumConfig,
lookup_range_check::LookupRangeCheckConfig, range_check, CellValue, Var,
bitrange_subset, copy, lookup_range_check::LookupRangeCheckConfig, range_check, CellValue,
Var,
},
constants::{self, T_P},
primitives::sinsemilla,
@ -19,22 +19,18 @@ use pasta_curves::{arithmetic::FieldExt, pallas};
use std::convert::TryInto;
pub struct Config {
q_mul_fixed_running_sum: Selector,
q_mul_fixed_base_field: Selector,
canon_advices: [Column<Advice>; 3],
lookup_config: LookupRangeCheckConfig<pallas::Base, { sinsemilla::K }>,
running_sum_config: RunningSumConfig<pallas::Base, { constants::FIXED_BASE_WINDOW_SIZE }>,
super_config: super::Config,
}
impl From<&EccConfig> for Config {
fn from(config: &EccConfig) -> Self {
let config = Self {
q_mul_fixed_running_sum: config.q_mul_fixed_running_sum,
q_mul_fixed_base_field: config.q_mul_fixed_base_field,
canon_advices: [config.advices[6], config.advices[7], config.advices[8]],
lookup_config: config.lookup_config,
running_sum_config: config.running_sum_config.clone(),
super_config: config.mul_fixed,
};
@ -46,8 +42,6 @@ impl From<&EccConfig> for Config {
);
}
assert_eq!(config.running_sum_config.z, config.super_config.window);
config
}
}
@ -166,7 +160,7 @@ impl Config {
// Decompose scalar
let scalar = {
let running_sum = self.running_sum_config.copy_decompose(
let running_sum = self.super_config.running_sum_config.copy_decompose(
&mut region,
offset,
scalar,
@ -187,7 +181,7 @@ impl Config {
offset,
&(&scalar).into(),
base.into(),
self.q_mul_fixed_running_sum,
self.super_config.running_sum_config.q_range_check,
)?;
Ok((scalar, acc, mul_b))

View File

@ -124,13 +124,15 @@ impl Config {
let scalar = self.witness(&mut region, offset, scalar)?;
let (acc, mul_b) = self.super_config.assign_region_inner::<NUM_WINDOWS>(
&mut region,
offset,
&(&scalar).into(),
base.into(),
self.q_mul_fixed_full,
)?;
let (acc, mul_b) = self
.super_config
.assign_region_inner::<{ constants::NUM_WINDOWS }>(
&mut region,
offset,
&(&scalar).into(),
base.into(),
self.q_mul_fixed_full,
)?;
Ok((scalar, acc, mul_b))
},

View File

@ -2,10 +2,8 @@ use std::{array, convert::TryInto};
use super::super::{EccConfig, EccPoint, EccScalarFixedShort};
use crate::{
circuit::gadget::utilities::{
bool_check, copy, decompose_running_sum::RunningSumConfig, CellValue, Var,
},
constants::{ValueCommitV, FIXED_BASE_WINDOW_SIZE, L_VALUE, NUM_WINDOWS_SHORT},
circuit::gadget::utilities::{bool_check, copy, CellValue, Var},
constants::{ValueCommitV, L_VALUE, NUM_WINDOWS_SHORT},
};
use halo2::{
@ -19,8 +17,6 @@ use pasta_curves::pallas;
pub struct Config {
// Selector used for fixed-base scalar mul with short signed exponent.
q_mul_fixed_short: Selector,
q_mul_fixed_running_sum: Selector,
running_sum_config: RunningSumConfig<pallas::Base, { FIXED_BASE_WINDOW_SIZE }>,
super_config: super::Config,
}
@ -28,8 +24,6 @@ impl From<&EccConfig> for Config {
fn from(config: &EccConfig) -> Self {
Self {
q_mul_fixed_short: config.q_mul_fixed_short,
q_mul_fixed_running_sum: config.q_mul_fixed_running_sum,
running_sum_config: config.running_sum_config.clone(),
super_config: config.mul_fixed,
}
}
@ -80,7 +74,7 @@ impl Config {
let (magnitude, sign) = magnitude_sign;
// Decompose magnitude
let running_sum = self.running_sum_config.copy_decompose(
let running_sum = self.super_config.running_sum_config.copy_decompose(
region,
offset,
magnitude,
@ -115,7 +109,7 @@ impl Config {
offset,
&(&scalar).into(),
base.clone().into(),
self.q_mul_fixed_running_sum,
self.super_config.running_sum_config.q_range_check,
)?;
Ok((scalar, acc, mul_b))

View File

@ -44,9 +44,9 @@ impl<F: FieldExt + PrimeFieldBits> std::ops::Deref for RunningSum<F> {
}
}
#[derive(Debug, Clone, Eq, PartialEq)]
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct RunningSumConfig<F: FieldExt + PrimeFieldBits, const WINDOW_NUM_BITS: usize> {
q_range_check: Selector,
pub q_range_check: Selector,
pub z: Column<Advice>,
_marker: PhantomData<F>,
}

File diff suppressed because it is too large Load Diff