pub type EccChip<C> = BaseFieldEccChip<C, LIMBS, BITS>;
Expand description

BaseFieldEccChip with hardcoded LIMBS and BITS serving as EccChip for Halo2Loader.

Aliased Type§

struct EccChip<C> { /* private fields */ }

Implementations

§

impl<C, const NUMBER_OF_LIMBS: usize, const BIT_LEN_LIMB: usize> BaseFieldEccChip<C, NUMBER_OF_LIMBS, BIT_LEN_LIMB>
where C: CurveAffine,

pub fn expose_public( &self, layouter: impl Layouter<<C as PrimeCurveAffine>::Scalar>, point: AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, offset: usize ) -> Result<(), Error>

Expose AssignedPoint as Public Input

pub fn assign_constant( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, point: C ) -> Result<AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, Error>

Takes Point and assign its coordiantes as constant Returned as AssignedPoint

pub fn assign_point( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, point: Value<C> ) -> Result<AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, Error>

Takes Point of the EC and returns it as AssignedPoint

pub fn assign_aux_generator( &mut self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, aux_generator: Value<C> ) -> Result<(), Error>

Assigns the auxiliary generator point

pub fn assign_aux( &mut self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, window_size: usize, number_of_pairs: usize ) -> Result<(), Error>

Assigns multiplication auxiliary point for a pair of (window_size, n_pairs)

pub fn assert_is_on_curve( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, point: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB> ) -> Result<(), Error>

Constraints to ensure AssignedPoint is on curve

pub fn assert_equal( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, p0: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, p1: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB> ) -> Result<(), Error>

Constraints assert two AssignedPoints are equal

pub fn select( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, c: &AssignedCell<<C as PrimeCurveAffine>::Scalar, <C as PrimeCurveAffine>::Scalar>, p1: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, p2: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB> ) -> Result<AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, Error>

Selects between 2 AssignedPoint determined by an AssignedCondition

pub fn select_or_assign( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, c: &AssignedCell<<C as PrimeCurveAffine>::Scalar, <C as PrimeCurveAffine>::Scalar>, p1: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, p2: C ) -> Result<AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, Error>

Selects between an AssignedPoint and a point on the EC Emulated determined by an AssignedCondition

pub fn normalize( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, point: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB> ) -> Result<AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, Error>

Normalizes an AssignedPoint by reducing each of its coordinates

pub fn add( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, p0: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, p1: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB> ) -> Result<AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, Error>

Adds 2 distinct AssignedPoints

pub fn double( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, p: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB> ) -> Result<AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, Error>

Doubles an AssignedPoint

pub fn double_n( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, p: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, logn: usize ) -> Result<AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, Error>

Given an AssignedPoint $P$ computes P * 2^logn

pub fn ladder( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, to_double: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, to_add: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB> ) -> Result<AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, Error>

Wrapper for _ladder_incomplete Given 2 AssignedPoint $P$ and $Q$ efficiently computes $2*P + Q$

pub fn neg( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, p: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB> ) -> Result<AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, Error>

Returns the negative or inverse of an AssignedPoint

pub fn sign( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, p: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB> ) -> Result<AssignedCell<<C as PrimeCurveAffine>::Scalar, <C as PrimeCurveAffine>::Scalar>, Error>

Returns sign of the assigned point

§

impl<C, const NUMBER_OF_LIMBS: usize, const BIT_LEN_LIMB: usize> BaseFieldEccChip<C, NUMBER_OF_LIMBS, BIT_LEN_LIMB>
where C: CurveAffine,

pub fn mul( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, point: &AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, scalar: &AssignedCell<<C as PrimeCurveAffine>::Scalar, <C as PrimeCurveAffine>::Scalar>, window_size: usize ) -> Result<AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, Error>

Scalar multiplication of a point in the EC Performed with the sliding-window algorithm

pub fn mul_batch_1d_horizontal( &self, ctx: &mut RegionCtx<'_, <C as PrimeCurveAffine>::Scalar>, pairs: Vec<(AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, AssignedCell<<C as PrimeCurveAffine>::Scalar, <C as PrimeCurveAffine>::Scalar>)>, window_size: usize ) -> Result<AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>, Error>

Computes multi-product

Given a vector of point, scalar pairs [(P_0, e_0), (P_1, e_1), ..., (P_k, e_k)] Returns P_0 * e_0 + P_1 * e_1 + ...+ P_k * e_k

§

impl<C, const NUMBER_OF_LIMBS: usize, const BIT_LEN_LIMB: usize> BaseFieldEccChip<C, NUMBER_OF_LIMBS, BIT_LEN_LIMB>
where C: CurveAffine,

pub fn new( config: EccConfig ) -> BaseFieldEccChip<C, NUMBER_OF_LIMBS, BIT_LEN_LIMB>

Return BaseEccChip from EccConfig

pub fn rns( &self ) -> Rc<Rns<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>>

Residue numeral system Used to emulate C::Base (wrong field) over C::Scalar (native field)

pub fn integer_chip( &self ) -> &IntegerChip<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>

Returns IntegerChip for the base field of the emulated EC

pub fn main_gate(&self) -> &MainGate<<C as PrimeCurveAffine>::Scalar>

Return Maingate of the GeneralEccChip

pub fn to_rns_point( &self, point: C ) -> Point<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, NUMBER_OF_LIMBS, BIT_LEN_LIMB>

Returns a Point (Rns representation) from a point in the emulated EC

Trait Implementations

§

impl<C, const NUMBER_OF_LIMBS: usize, const BIT_LEN_LIMB: usize> Clone for BaseFieldEccChip<C, NUMBER_OF_LIMBS, BIT_LEN_LIMB>
where C: Clone + CurveAffine, <C as CurveAffine>::Base: Clone, <C as PrimeCurveAffine>::Scalar: Clone,

§

fn clone(&self) -> BaseFieldEccChip<C, NUMBER_OF_LIMBS, BIT_LEN_LIMB>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl<C, const NUMBER_OF_LIMBS: usize, const BIT_LEN_LIMB: usize> Debug for BaseFieldEccChip<C, NUMBER_OF_LIMBS, BIT_LEN_LIMB>
where C: Debug + CurveAffine, <C as CurveAffine>::Base: Debug, <C as PrimeCurveAffine>::Scalar: Debug,

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<'a, C, const LIMBS: usize, const BITS: usize> EccInstructions<'a, C> for BaseFieldEccChip<C, LIMBS, BITS>
where C: CurveAffine,

§

type Context = RegionCtx<'a, <C as PrimeCurveAffine>::Scalar>

Context
§

type ScalarChip = MainGate<<C as PrimeCurveAffine>::Scalar>

[IntegerInstructions] to handle scalar field operation.
§

type AssignedCell = AssignedCell<<C as PrimeCurveAffine>::Scalar, <C as PrimeCurveAffine>::Scalar>

Assigned cell.
§

type AssignedScalar = AssignedCell<<C as PrimeCurveAffine>::Scalar, <C as PrimeCurveAffine>::Scalar>

Assigned scalar field element.
§

type AssignedEcPoint = AssignedPoint<<C as CurveAffine>::Base, <C as PrimeCurveAffine>::Scalar, LIMBS, BITS>

Assigned elliptic curve point.
§

fn scalar_chip( &self ) -> &<BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::ScalarChip

Returns reference of [EccInstructions::ScalarChip].
§

fn assign_constant( &self, ctx: &mut <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::Context, ec_point: C ) -> Result<<BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedEcPoint, Error>

Assign a elliptic curve point constant.
§

fn assign_point( &self, ctx: &mut <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::Context, ec_point: Value<C> ) -> Result<<BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedEcPoint, Error>

Assign a elliptic curve point witness.
§

fn sum_with_const( &self, ctx: &mut <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::Context, values: &[impl Deref<Target = <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedEcPoint>], constant: C ) -> Result<<BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedEcPoint, Error>

Sum elliptic curve points and constant.
§

fn fixed_base_msm( &mut self, ctx: &mut <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::Context, pairs: &[(impl Deref<Target = <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedScalar>, C)] ) -> Result<<BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedEcPoint, Error>

Perform fixed base multi-scalar multiplication.
§

fn variable_base_msm( &mut self, ctx: &mut <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::Context, pairs: &[(impl Deref<Target = <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedScalar>, impl Deref<Target = <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedEcPoint>)] ) -> Result<<BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedEcPoint, Error>

Perform variable base multi-scalar multiplication.
§

fn assert_equal( &self, ctx: &mut <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::Context, lhs: &<BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedEcPoint, rhs: &<BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedEcPoint ) -> Result<(), Error>

Enforce lhs and rhs are equal.
§

impl<'a, C, const LIMBS: usize, const BITS: usize> LimbsEncodingInstructions<'a, C, LIMBS, BITS> for BaseFieldEccChip<C, LIMBS, BITS>
where C: CurveAffine,

§

fn assign_ec_point_from_limbs( &self, ctx: &mut <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::Context, limbs: &[impl Deref<Target = <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedScalar>] ) -> Result<<BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedEcPoint, Error>

Decode and assign an elliptic curve point from limbs.
§

fn assign_ec_point_to_limbs( &self, _: &mut <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::Context, ec_point: impl Deref<Target = <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedEcPoint> ) -> Result<Vec<<BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedCell>, Error>

Encode an elliptic curve point into limbs.
§

impl<'a, C, const LIMBS: usize, const BITS: usize> NativeEncoding<'a, C> for BaseFieldEccChip<C, LIMBS, BITS>
where C: CurveAffine,

§

fn encode( &self, _: &mut <BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::Context, ec_point: &<BaseFieldEccChip<C, LIMBS, BITS> as EccInstructions<'a, C>>::AssignedEcPoint ) -> Result<Vec<AssignedCell<<C as PrimeCurveAffine>::Scalar, <C as PrimeCurveAffine>::Scalar>>, Error>

Encode an elliptic curve point into field elements.