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

Multi-thread witness generation for multi-scalar multiplication.

Assumptions

  • points.len() == scalars.len()
  • scalars[i].len() == scalars[j].len() for all i, j
  • points are all on the curve or the point at infinity
  • points[i] is allowed to be (0, 0) to represent the point at infinity (identity point)
  • Currently implementation assumes that the only point on curve with y-coordinate equal to 0 is identity point