go-snark/bn128/bn128_test.go
bn128/bn128_test.goRaw
1package bn128
2
3import (
4 "math/big"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8)
9
10func TestBN128(t *testing.T) {
11 bn128, err := NewBn128()
12 assert.Nil(t, err)
13
14 big40 := big.NewInt(int64(40))
15 big75 := big.NewInt(int64(75))
16
17 g1a := bn128.G1.MulScalar(bn128.G1.G, bn128.Fq1.Copy(big40))
18 g2a := bn128.G2.MulScalar(bn128.G2.G, bn128.Fq1.Copy(big75))
19
20 g1b := bn128.G1.MulScalar(bn128.G1.G, bn128.Fq1.Copy(big75))
21 g2b := bn128.G2.MulScalar(bn128.G2.G, bn128.Fq1.Copy(big40))
22
23 pre1a := bn128.PreComputeG1(g1a)
24 pre2a, err := bn128.PreComputeG2(g2a)
25 assert.Nil(t, err)
26 pre1b := bn128.PreComputeG1(g1b)
27 pre2b, err := bn128.PreComputeG2(g2b)
28 assert.Nil(t, err)
29
30 r1 := bn128.MillerLoop(pre1a, pre2a)
31 r2 := bn128.MillerLoop(pre1b, pre2b)
32
33 rbe := bn128.Fq12.Mul(r1, bn128.Fq12.Inverse(r2))
34
35 res := bn128.FinalExponentiation(rbe)
36
37 a := bn128.Fq12.Affine(res)
38 b := bn128.Fq12.Affine(bn128.Fq12.One())
39
40 assert.True(t, bn128.Fq12.Equal(a, b))
41 assert.True(t, bn128.Fq12.Equal(res, bn128.Fq12.One()))
42}
43
44func TestBN128Pairing(t *testing.T) {
45 bn128, err := NewBn128()
46 assert.Nil(t, err)
47
48 big25 := big.NewInt(int64(25))
49 big30 := big.NewInt(int64(30))
50
51 g1a := bn128.G1.MulScalar(bn128.G1.G, big25)
52 g2a := bn128.G2.MulScalar(bn128.G2.G, big30)
53
54 g1b := bn128.G1.MulScalar(bn128.G1.G, big30)
55 g2b := bn128.G2.MulScalar(bn128.G2.G, big25)
56
57 pA, err := bn128.Pairing(g1a, g2a)
58 assert.Nil(t, err)
59 pB, err := bn128.Pairing(g1b, g2b)
60 assert.Nil(t, err)
61
62 assert.True(t, bn128.Fq12.Equal(pA, pB))
63
64 assert.Equal(t, pA[0][0][0].String(), "73680848340331011700282047627232219336104151861349893575958589557226556635706")
65 assert.Equal(t, bn128.Fq12.Affine(pA)[0][0][0].String(), "8016119724813186033542830391460394070015218389456422587891475873290878009957")
66}