arnaucube
arnaucube/cryptofunPublic Self-hosted repository
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}