Skip to content

Commit 5086bdb

Browse files
committed
add test for multi pairing bilinearity
1 parent 9b032a8 commit 5086bdb

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

test-templates/src/pairing.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,50 @@ macro_rules! test_pairing {
77
use ark_ff::{CyclotomicMultSubgroup, Field, PrimeField};
88
use ark_std::{test_rng, One, UniformRand, Zero};
99

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+
1054
#[test]
1155
fn test_bilinearity_projective() {
1256
for _ in 0..100 {

0 commit comments

Comments
 (0)