mirror of https://github.com/zcash/halo2.git
chip::witness_point: Refactor witness_point::Config.
This commit is contained in:
parent
76c8bb9711
commit
9d8fee29c7
|
@ -165,10 +165,8 @@ pub struct EccConfig {
|
||||||
/// when the scalar is a signed short exponent or a base-field element.
|
/// when the scalar is a signed short exponent or a base-field element.
|
||||||
pub q_mul_fixed_running_sum: Selector,
|
pub q_mul_fixed_running_sum: Selector,
|
||||||
|
|
||||||
/// Witness point (can be identity)
|
/// Witness point
|
||||||
pub q_point: Selector,
|
witness_point: witness_point::Config,
|
||||||
/// Witness non-identity point
|
|
||||||
pub q_point_non_id: Selector,
|
|
||||||
|
|
||||||
/// Lookup range check using 10-bit lookup table
|
/// Lookup range check using 10-bit lookup table
|
||||||
pub lookup_config: LookupRangeCheckConfig<pallas::Base, { sinsemilla::K }>,
|
pub lookup_config: LookupRangeCheckConfig<pallas::Base, { sinsemilla::K }>,
|
||||||
|
@ -249,6 +247,9 @@ impl EccChip {
|
||||||
let running_sum_config =
|
let running_sum_config =
|
||||||
RunningSumConfig::configure(meta, q_mul_fixed_running_sum, advices[4]);
|
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]);
|
||||||
|
|
||||||
let config = EccConfig {
|
let config = EccConfig {
|
||||||
advices,
|
advices,
|
||||||
lagrange_coeffs,
|
lagrange_coeffs,
|
||||||
|
@ -264,18 +265,11 @@ impl EccChip {
|
||||||
q_mul_fixed_short: meta.selector(),
|
q_mul_fixed_short: meta.selector(),
|
||||||
q_mul_fixed_base_field: meta.selector(),
|
q_mul_fixed_base_field: meta.selector(),
|
||||||
q_mul_fixed_running_sum,
|
q_mul_fixed_running_sum,
|
||||||
q_point: meta.selector(),
|
witness_point,
|
||||||
q_point_non_id: meta.selector(),
|
|
||||||
lookup_config: range_check,
|
lookup_config: range_check,
|
||||||
running_sum_config,
|
running_sum_config,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Create witness point gate
|
|
||||||
{
|
|
||||||
let config: witness_point::Config = (&config).into();
|
|
||||||
config.create_gate(meta);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create incomplete point addition gate
|
// Create incomplete point addition gate
|
||||||
{
|
{
|
||||||
let config: add_incomplete::Config = (&config).into();
|
let config: add_incomplete::Config = (&config).into();
|
||||||
|
@ -408,7 +402,7 @@ impl EccInstructions<pallas::Affine> for EccChip {
|
||||||
layouter: &mut impl Layouter<pallas::Base>,
|
layouter: &mut impl Layouter<pallas::Base>,
|
||||||
value: Option<pallas::Affine>,
|
value: Option<pallas::Affine>,
|
||||||
) -> Result<Self::Point, Error> {
|
) -> Result<Self::Point, Error> {
|
||||||
let config: witness_point::Config = self.config().into();
|
let config = self.config().witness_point;
|
||||||
layouter.assign_region(
|
layouter.assign_region(
|
||||||
|| "witness point",
|
|| "witness point",
|
||||||
|mut region| config.point(value, 0, &mut region),
|
|mut region| config.point(value, 0, &mut region),
|
||||||
|
@ -420,7 +414,7 @@ impl EccInstructions<pallas::Affine> for EccChip {
|
||||||
layouter: &mut impl Layouter<pallas::Base>,
|
layouter: &mut impl Layouter<pallas::Base>,
|
||||||
value: Option<pallas::Affine>,
|
value: Option<pallas::Affine>,
|
||||||
) -> Result<Self::NonIdentityPoint, Error> {
|
) -> Result<Self::NonIdentityPoint, Error> {
|
||||||
let config: witness_point::Config = self.config().into();
|
let config = self.config().witness_point;
|
||||||
layouter.assign_region(
|
layouter.assign_region(
|
||||||
|| "witness non-identity point",
|
|| "witness non-identity point",
|
||||||
|mut region| config.point_non_id(value, 0, &mut region),
|
|mut region| config.point_non_id(value, 0, &mut region),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use super::{CellValue, EccConfig, EccPoint, NonIdentityEccPoint, Var};
|
use super::{CellValue, EccPoint, NonIdentityEccPoint, Var};
|
||||||
|
|
||||||
use group::prime::PrimeCurveAffine;
|
use group::prime::PrimeCurveAffine;
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ use halo2::{
|
||||||
};
|
};
|
||||||
use pasta_curves::{arithmetic::CurveAffine, pallas};
|
use pasta_curves::{arithmetic::CurveAffine, pallas};
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
q_point: Selector,
|
q_point: Selector,
|
||||||
q_point_non_id: Selector,
|
q_point_non_id: Selector,
|
||||||
|
@ -19,19 +19,25 @@ pub struct Config {
|
||||||
pub y: Column<Advice>,
|
pub y: Column<Advice>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<&EccConfig> for Config {
|
impl Config {
|
||||||
fn from(ecc_config: &EccConfig) -> Self {
|
pub(super) fn configure(
|
||||||
Self {
|
meta: &mut ConstraintSystem<pallas::Base>,
|
||||||
q_point: ecc_config.q_point,
|
x: Column<Advice>,
|
||||||
q_point_non_id: ecc_config.q_point_non_id,
|
y: Column<Advice>,
|
||||||
x: ecc_config.advices[0],
|
) -> Self {
|
||||||
y: ecc_config.advices[1],
|
let config = Self {
|
||||||
}
|
q_point: meta.selector(),
|
||||||
}
|
q_point_non_id: meta.selector(),
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
};
|
||||||
|
|
||||||
|
config.create_gate(meta);
|
||||||
|
|
||||||
|
config
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
|
||||||
pub(super) fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
|
|
||||||
let curve_eqn = |meta: &mut VirtualCells<pallas::Base>| {
|
let curve_eqn = |meta: &mut VirtualCells<pallas::Base>| {
|
||||||
let x = meta.query_advice(self.x, Rotation::cur());
|
let x = meta.query_advice(self.x, Rotation::cur());
|
||||||
let y = meta.query_advice(self.y, Rotation::cur());
|
let y = meta.query_advice(self.y, Rotation::cur());
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue