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