cryptofun/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
29 r1 := bn128.MillerLoop(pre1a, pre2a)
30 r2 := bn128.MillerLoop(pre1b, pre2b)
31
32 rbe := bn128.Fq12.Mul(r1, bn128.Fq12.Inverse(r2))
33
34 res := bn128.FinalExponentiation(rbe)
35
36 a := bn128.Fq12.Affine(res)
37 b := bn128.Fq12.Affine(bn128.Fq12.One())
38
39 assert.True(t, bn128.Fq12.Equal(a, b))
40 assert.True(t, bn128.Fq12.Equal(res, bn128.Fq12.One()))
41}
42
43func TestBN128_PairingFunction(t *testing.T) {
44 bn128, err := NewBn128()
45 assert.Nil(t, err)
46
47 big25 := big.NewInt(int64(25))
48 big30 := big.NewInt(int64(30))
49
50 g1a := bn128.G1.MulScalar(bn128.G1.G, big25)
51 g2a := bn128.G2.MulScalar(bn128.G2.G, big30)
52
53 g1b := bn128.G1.MulScalar(bn128.G1.G, big30)
54 g2b := bn128.G2.MulScalar(bn128.G2.G, big25)
55
56 pA, err := bn128.Pairing(g1a, g2a)
57 assert.Nil(t, err)
58 pB, err := bn128.Pairing(g1b, g2b)
59 assert.Nil(t, err)
60
61 assert.True(t, bn128.Fq12.Equal(pA, pB))
62
63 assert.Equal(t, pA[0][0][0].String(), "73680848340331011700282047627232219336104151861349893575958589557226556635706")
64 assert.Equal(t, bn128.Fq12.Affine(pA)[0][0][0].String(), "8016119724813186033542830391460394070015218389456422587891475873290878009957")
65}