pub fn msm_par<F, FC, C>(
    chip: &EccChip<'_, F, FC>,
    builder: &mut GateThreadBuilder<F>,
    points: &[C],
    scalars: Vec<Vec<AssignedValue<F>>>,
    max_scalar_bits_per_cell: usize,
    window_bits: usize,
    phase: usize
) -> EcPoint<F, FC::FieldPoint>where
    F: PrimeField,
    C: CurveAffineExt,
    FC: FieldChip<F, FieldType = C::Base> + Selectable<F, FC::FieldPoint>,
Expand description

Assumptions

  • points.len() = scalars.len()
  • scalars[i].len() = scalars[j].len() for all i,j
  • points are all on the curve
  • points[i] is not point at infinity (0, 0); these should be filtered out beforehand
  • The integer value of scalars[i] is less than the order of points[i]
  • Output may be point at infinity, in which case (0, 0) is returned