mirror of
https://github.com/sonr-io/crypto.git
synced 2026-01-12 04:09:13 +00:00
65 lines
1.2 KiB
Go
65 lines
1.2 KiB
Go
|
|
package bls12381
|
||
|
|
|
||
|
|
import (
|
||
|
|
crand "crypto/rand"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/stretchr/testify/require"
|
||
|
|
|
||
|
|
"github.com/sonr-io/sonr/crypto/core/curves/native"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestSinglePairing(t *testing.T) {
|
||
|
|
g := new(G1).Generator()
|
||
|
|
h := new(G2).Generator()
|
||
|
|
|
||
|
|
e := new(Engine)
|
||
|
|
e.AddPair(g, h)
|
||
|
|
p := e.Result()
|
||
|
|
p.Neg(p)
|
||
|
|
|
||
|
|
e.Reset()
|
||
|
|
e.AddPairInvG2(g, h)
|
||
|
|
q := e.Result()
|
||
|
|
e.Reset()
|
||
|
|
e.AddPairInvG1(g, h)
|
||
|
|
r := e.Result()
|
||
|
|
|
||
|
|
require.Equal(t, 1, p.Equal(q))
|
||
|
|
require.Equal(t, 1, q.Equal(r))
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestMultiPairing(t *testing.T) {
|
||
|
|
const Tests = 10
|
||
|
|
e1 := new(Engine)
|
||
|
|
e2 := new(Engine)
|
||
|
|
|
||
|
|
g1s := make([]*G1, Tests)
|
||
|
|
g2s := make([]*G2, Tests)
|
||
|
|
sc := make([]*native.Field, Tests)
|
||
|
|
res := make([]*Gt, Tests)
|
||
|
|
expected := new(Gt).SetOne()
|
||
|
|
|
||
|
|
for i := 0; i < Tests; i++ {
|
||
|
|
var bytes [64]byte
|
||
|
|
g1s[i] = new(G1).Generator()
|
||
|
|
g2s[i] = new(G2).Generator()
|
||
|
|
sc[i] = Bls12381FqNew()
|
||
|
|
_, _ = crand.Read(bytes[:])
|
||
|
|
sc[i].SetBytesWide(&bytes)
|
||
|
|
if i&1 == 0 {
|
||
|
|
g1s[i].Mul(g1s[i], sc[i])
|
||
|
|
} else {
|
||
|
|
g2s[i].Mul(g2s[i], sc[i])
|
||
|
|
}
|
||
|
|
e1.AddPair(g1s[i], g2s[i])
|
||
|
|
e2.AddPair(g1s[i], g2s[i])
|
||
|
|
res[i] = e1.Result()
|
||
|
|
e1.Reset()
|
||
|
|
expected.Add(expected, res[i])
|
||
|
|
}
|
||
|
|
|
||
|
|
actual := e2.Result()
|
||
|
|
require.Equal(t, 1, expected.Equal(actual))
|
||
|
|
}
|