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