@@ -7,6 +7,50 @@ macro_rules! test_pairing {
7
7
use ark_ff:: { CyclotomicMultSubgroup , Field , PrimeField } ;
8
8
use ark_std:: { test_rng, One , UniformRand , Zero } ;
9
9
10
+ #[ test]
11
+ fn test_multi_pairing_bilinearity_affine( ) {
12
+ let mut rng = test_rng( ) ;
13
+ let g1: <$Pairing as Pairing >:: G1 = UniformRand :: rand( & mut rng) ;
14
+ let g2: <$Pairing as Pairing >:: G2 = UniformRand :: rand( & mut rng) ;
15
+ let s1: <$Pairing as Pairing >:: ScalarField = UniformRand :: rand( & mut rng) ;
16
+ let s2: <$Pairing as Pairing >:: ScalarField = UniformRand :: rand( & mut rng) ;
17
+ let s3 = s1 + s2;
18
+
19
+ let ( p1, p2, p3) = ( g1. into_affine( ) , ( g1 * s2) . into_affine( ) , g1. into_affine( ) ) ;
20
+ // affine mode
21
+ let ( q1, q2, q3) = (
22
+ ( g2 * s1) . into_affine( ) ,
23
+ g2. into_affine( ) ,
24
+ ( g2 * s3) . into_affine( ) ,
25
+ ) ;
26
+ let e1 = <$Pairing>:: pairing_affine( p1, q1) ;
27
+ let e2 = <$Pairing>:: pairing_affine( p2, q2) ;
28
+ let e3 = <$Pairing>:: pairing_affine( p3, q3) ;
29
+ let e33 = <$Pairing>:: multi_pairing_affine( & [ p1, p2] , & [ q1, q2] ) ;
30
+ assert_eq!( e1 + e2, e3) ;
31
+ assert_eq!( e3, e33) ;
32
+ }
33
+
34
+ #[ test]
35
+ fn test_multi_pairing_bilinearity_projective( ) {
36
+ let mut rng = test_rng( ) ;
37
+ let g1: <$Pairing as Pairing >:: G1 = UniformRand :: rand( & mut rng) ;
38
+ let g2: <$Pairing as Pairing >:: G2 = UniformRand :: rand( & mut rng) ;
39
+ let s1: <$Pairing as Pairing >:: ScalarField = UniformRand :: rand( & mut rng) ;
40
+ let s2: <$Pairing as Pairing >:: ScalarField = UniformRand :: rand( & mut rng) ;
41
+ let s3 = s1 + s2;
42
+
43
+ let ( p1, p2, p3) = ( g1. into_affine( ) , ( g1 * s2) . into_affine( ) , g1. into_affine( ) ) ;
44
+ // projective mode
45
+ let ( q1, q2, q3) = ( g2 * s1, g2, g2 * s3) ;
46
+ let e1 = <$Pairing>:: pairing( p1, q1) ;
47
+ let e2 = <$Pairing>:: pairing( p2, q2) ;
48
+ let e3 = <$Pairing>:: pairing( p3, q3) ;
49
+ let e33 = <$Pairing>:: multi_pairing( & [ p1, p2] , & [ q1, q2] ) ;
50
+ assert_eq!( e1 + e2, e3) ;
51
+ assert_eq!( e3, e33) ;
52
+ }
53
+
10
54
#[ test]
11
55
fn test_bilinearity_projective( ) {
12
56
for _ in 0 ..100 {
0 commit comments