pub trait VariableBaseMSM: ScalarMul {
    // Provided methods
    fn msm_unchecked(
        bases: &[Self::MulBase],
        scalars: &[Self::ScalarField]
    ) -> Self { ... }
    fn msm(
        bases: &[Self::MulBase],
        scalars: &[Self::ScalarField]
    ) -> Result<Self, usize> { ... }
    fn msm_bigint(
        bases: &[Self::MulBase],
        bigints: &[<Self::ScalarField as PrimeField>::BigInt]
    ) -> Self { ... }
    fn msm_chunks<I, J>(bases_stream: &J, scalars_stream: &I) -> Self
       where I: Iterable + ?Sized,
             I::Item: Borrow<Self::ScalarField>,
             J: Iterable,
             J::Item: Borrow<Self::MulBase> { ... }
}

Provided Methods§

source

fn msm_unchecked(bases: &[Self::MulBase], scalars: &[Self::ScalarField]) -> Self

Computes an inner product between the PrimeField elements in scalars and the corresponding group elements in bases.

If the elements have different length, it will chop the slices to the shortest length between scalars.len() and bases.len().

Reference: VariableBaseMSM::msm

source

fn msm( bases: &[Self::MulBase], scalars: &[Self::ScalarField] ) -> Result<Self, usize>

Performs multi-scalar multiplication, without checking that bases.len() == scalars.len().

Warning

This method checks that bases and scalars have the same length. If they are unequal, it returns an error containing the shortest length over which the MSM can be performed.

source

fn msm_bigint( bases: &[Self::MulBase], bigints: &[<Self::ScalarField as PrimeField>::BigInt] ) -> Self

Optimized implementation of multi-scalar multiplication.

source

fn msm_chunks<I, J>(bases_stream: &J, scalars_stream: &I) -> Selfwhere I: Iterable + ?Sized, I::Item: Borrow<Self::ScalarField>, J: Iterable, J::Item: Borrow<Self::MulBase>,

Streaming multi-scalar multiplication algorithm with hard-coded chunk size.

Implementors§

source§

impl<P: SWCurveConfig> VariableBaseMSM for ark_ec::models::short_weierstrass::Projective<P>

source§

impl<P: TECurveConfig> VariableBaseMSM for ark_ec::models::twisted_edwards::Projective<P>

source§

impl<P: Pairing> VariableBaseMSM for PairingOutput<P>