@@ -63,10 +63,46 @@ fn bench_msm_p256(c: &mut Criterion) {
6363 group. finish ( ) ;
6464}
6565
66+ fn bench_msm_bls12_381_g1 ( c : & mut Criterion ) {
67+ use bls12_381:: { G1Projective , Scalar } ;
68+
69+ let mut group = c. benchmark_group ( "MSM bls12_381 G1Projective" ) ;
70+ let mut rng = thread_rng ( ) ;
71+
72+ for size in [ 1 , 2 , 4 , 8 , 16 , 64 , 256 , 1024 ] . iter ( ) {
73+ let scalars: Vec < Scalar > = ( 0 ..* size) . map ( |_| Scalar :: random ( & mut rng) ) . collect ( ) ;
74+ let bases: Vec < G1Projective > = ( 0 ..* size) . map ( |_| G1Projective :: random ( & mut rng) ) . collect ( ) ;
75+
76+ group. bench_with_input ( BenchmarkId :: new ( "size" , size) , size, |b, _| {
77+ b. iter ( || G1Projective :: msm ( black_box ( & scalars) , black_box ( & bases) ) )
78+ } ) ;
79+ }
80+ group. finish ( ) ;
81+ }
82+
83+ fn bench_msm_bls12_381_g2 ( c : & mut Criterion ) {
84+ use bls12_381:: { G2Projective , Scalar } ;
85+
86+ let mut group = c. benchmark_group ( "MSM bls12_381 G2Projective" ) ;
87+ let mut rng = thread_rng ( ) ;
88+
89+ for size in [ 1 , 2 , 4 , 8 , 16 , 64 , 256 , 1024 ] . iter ( ) {
90+ let scalars: Vec < Scalar > = ( 0 ..* size) . map ( |_| Scalar :: random ( & mut rng) ) . collect ( ) ;
91+ let bases: Vec < G2Projective > = ( 0 ..* size) . map ( |_| G2Projective :: random ( & mut rng) ) . collect ( ) ;
92+
93+ group. bench_with_input ( BenchmarkId :: new ( "size" , size) , size, |b, _| {
94+ b. iter ( || G2Projective :: msm ( black_box ( & scalars) , black_box ( & bases) ) )
95+ } ) ;
96+ }
97+ group. finish ( ) ;
98+ }
99+
66100criterion_group ! (
67101 benches,
68102 bench_msm_curve25519_dalek,
69103 bench_msm_k256,
70- bench_msm_p256
104+ bench_msm_p256,
105+ bench_msm_bls12_381_g1,
106+ bench_msm_bls12_381_g2,
71107) ;
72108criterion_main ! ( benches) ;
0 commit comments