Skip to content

Commit

Permalink
add test for multi pairing bilinearity
Browse files Browse the repository at this point in the history
  • Loading branch information
PayneJoe committed Jul 20, 2024
1 parent 9b032a8 commit 5086bdb
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions test-templates/src/pairing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,50 @@ macro_rules! test_pairing {
use ark_ff::{CyclotomicMultSubgroup, Field, PrimeField};
use ark_std::{test_rng, One, UniformRand, Zero};

#[test]
fn test_multi_pairing_bilinearity_affine() {
let mut rng = test_rng();
let g1: <$Pairing as Pairing>::G1 = UniformRand::rand(&mut rng);
let g2: <$Pairing as Pairing>::G2 = UniformRand::rand(&mut rng);
let s1: <$Pairing as Pairing>::ScalarField = UniformRand::rand(&mut rng);
let s2: <$Pairing as Pairing>::ScalarField = UniformRand::rand(&mut rng);
let s3 = s1 + s2;

let (p1, p2, p3) = (g1.into_affine(), (g1 * s2).into_affine(), g1.into_affine());
// affine mode
let (q1, q2, q3) = (
(g2 * s1).into_affine(),
g2.into_affine(),
(g2 * s3).into_affine(),
);
let e1 = <$Pairing>::pairing_affine(p1, q1);
let e2 = <$Pairing>::pairing_affine(p2, q2);
let e3 = <$Pairing>::pairing_affine(p3, q3);
let e33 = <$Pairing>::multi_pairing_affine(&[p1, p2], &[q1, q2]);
assert_eq!(e1 + e2, e3);
assert_eq!(e3, e33);
}

#[test]
fn test_multi_pairing_bilinearity_projective() {
let mut rng = test_rng();
let g1: <$Pairing as Pairing>::G1 = UniformRand::rand(&mut rng);
let g2: <$Pairing as Pairing>::G2 = UniformRand::rand(&mut rng);
let s1: <$Pairing as Pairing>::ScalarField = UniformRand::rand(&mut rng);
let s2: <$Pairing as Pairing>::ScalarField = UniformRand::rand(&mut rng);
let s3 = s1 + s2;

let (p1, p2, p3) = (g1.into_affine(), (g1 * s2).into_affine(), g1.into_affine());
// projective mode
let (q1, q2, q3) = (g2 * s1, g2, g2 * s3);
let e1 = <$Pairing>::pairing(p1, q1);
let e2 = <$Pairing>::pairing(p2, q2);
let e3 = <$Pairing>::pairing(p3, q3);
let e33 = <$Pairing>::multi_pairing(&[p1, p2], &[q1, q2]);
assert_eq!(e1 + e2, e3);
assert_eq!(e3, e33);
}

#[test]
fn test_bilinearity_projective() {
for _ in 0..100 {
Expand Down

0 comments on commit 5086bdb

Please sign in to comment.