Copy impl BabyJubjubPoint {
pub fn msm(points: &[(&BabyJubjubPoint, &[u64; 4])]) -> BabyJubjubPoint {
let mut len = points.len();
unsafe {
babyjubjub_sum_new(1u64);
}
for (point, scalar) in points {
unsafe {
babyjubjub_sum_push(point.x.0[0]);
babyjubjub_sum_push(point.x.0[1]);
babyjubjub_sum_push(point.x.0[2]);
babyjubjub_sum_push(point.x.0[3]);
babyjubjub_sum_push(point.y.0[0]);
babyjubjub_sum_push(point.y.0[1]);
babyjubjub_sum_push(point.y.0[2]);
babyjubjub_sum_push(point.y.0[3]);
babyjubjub_sum_push(scalar[0]);
babyjubjub_sum_push(scalar[1]);
babyjubjub_sum_push(scalar[2]);
babyjubjub_sum_push(scalar[3]);
len -= 1;
if len != 0 {
babyjubjub_sum_finalize();
babyjubjub_sum_finalize();
babyjubjub_sum_finalize();
babyjubjub_sum_finalize();
babyjubjub_sum_finalize();
babyjubjub_sum_finalize();
babyjubjub_sum_finalize();
babyjubjub_sum_finalize();
babyjubjub_sum_new(0u64);
}
}
}
unsafe {
BabyJubjubPoint {
x: U256([
babyjubjub_sum_finalize(),
babyjubjub_sum_finalize(),
babyjubjub_sum_finalize(),
babyjubjub_sum_finalize(),
]),
y: U256([
babyjubjub_sum_finalize(),
babyjubjub_sum_finalize(),
babyjubjub_sum_finalize(),
babyjubjub_sum_finalize(),
]),
}
}
}
}