mirror of https://github.com/zcash/orchard.git
mul_fixed::full_width: Refactor full_width::Config.
This commit does not result in circuit changes.
This commit is contained in:
parent
f472a16b32
commit
165c9b6941
|
@ -145,7 +145,7 @@ pub struct EccConfig {
|
|||
pub mul_fixed: mul_fixed::Config,
|
||||
|
||||
/// Fixed-base full-width scalar multiplication
|
||||
pub q_mul_fixed_full: Selector,
|
||||
mul_fixed_full: mul_fixed::full_width::Config,
|
||||
/// Fixed-base signed short scalar multiplication
|
||||
pub q_mul_fixed_short: Selector,
|
||||
/// Canonicity checks on base field element used as scalar in fixed-base mul
|
||||
|
@ -235,25 +235,22 @@ impl EccChip {
|
|||
add_incomplete,
|
||||
);
|
||||
|
||||
// Create gate that is only used in full-width fixed-base scalar mul.
|
||||
let mul_fixed_full = mul_fixed::full_width::Config::configure(meta, mul_fixed);
|
||||
|
||||
let config = EccConfig {
|
||||
advices,
|
||||
add_incomplete,
|
||||
add,
|
||||
mul,
|
||||
mul_fixed,
|
||||
q_mul_fixed_full: meta.selector(),
|
||||
mul_fixed_full,
|
||||
q_mul_fixed_short: meta.selector(),
|
||||
q_mul_fixed_base_field: meta.selector(),
|
||||
witness_point,
|
||||
lookup_config: range_check,
|
||||
};
|
||||
|
||||
// Create gate that is only used in full-width fixed-base scalar mul.
|
||||
{
|
||||
let mul_fixed_full_config: mul_fixed::full_width::Config = (&config).into();
|
||||
mul_fixed_full_config.create_gate(meta);
|
||||
}
|
||||
|
||||
// Create gate that is only used in short fixed-base scalar mul.
|
||||
{
|
||||
let short_config: mul_fixed::short::Config = (&config).into();
|
||||
|
@ -426,7 +423,7 @@ impl EccInstructions<pallas::Affine> for EccChip {
|
|||
scalar: Option<pallas::Scalar>,
|
||||
base: &Self::FixedPoints,
|
||||
) -> Result<(Self::Point, Self::ScalarFixed), Error> {
|
||||
let config: mul_fixed::full_width::Config = self.config().into();
|
||||
let config = self.config().mul_fixed_full;
|
||||
config.assign(
|
||||
layouter.namespace(|| format!("fixed-base mul of {:?}", base)),
|
||||
scalar,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use super::super::{EccConfig, EccPoint, EccScalarFixed, OrchardFixedBasesFull};
|
||||
use super::super::{EccPoint, EccScalarFixed, OrchardFixedBasesFull};
|
||||
|
||||
use crate::{
|
||||
circuit::gadget::utilities::{range_check, CellValue, Var},
|
||||
|
@ -12,22 +12,28 @@ use halo2::{
|
|||
};
|
||||
use pasta_curves::{arithmetic::FieldExt, pallas};
|
||||
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||
pub struct Config {
|
||||
q_mul_fixed_full: Selector,
|
||||
super_config: super::Config,
|
||||
}
|
||||
|
||||
impl From<&EccConfig> for Config {
|
||||
fn from(config: &EccConfig) -> Self {
|
||||
Self {
|
||||
q_mul_fixed_full: config.q_mul_fixed_full,
|
||||
super_config: config.mul_fixed,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Config {
|
||||
pub fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
|
||||
pub(crate) fn configure(
|
||||
meta: &mut ConstraintSystem<pallas::Base>,
|
||||
super_config: super::Config,
|
||||
) -> Self {
|
||||
let config = Self {
|
||||
q_mul_fixed_full: meta.selector(),
|
||||
super_config,
|
||||
};
|
||||
|
||||
config.create_gate(meta);
|
||||
|
||||
config
|
||||
}
|
||||
|
||||
fn create_gate(&self, meta: &mut ConstraintSystem<pallas::Base>) {
|
||||
// Check that each window `k` is within 3 bits
|
||||
meta.create_gate("Full-width fixed-base scalar mul", |meta| {
|
||||
let q_mul_fixed_full = meta.query_selector(self.q_mul_fixed_full);
|
||||
|
|
Loading…
Reference in New Issue