123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package bn256
- import (
- "bytes"
- "crypto/rand"
- "testing"
- )
- func TestG1Marshal(t *testing.T) {
- _, Ga, err := RandomG1(rand.Reader)
- if err != nil {
- t.Fatal(err)
- }
- ma := Ga.Marshal()
- Gb := new(G1)
- _, err = Gb.Unmarshal(ma)
- if err != nil {
- t.Fatal(err)
- }
- mb := Gb.Marshal()
- if !bytes.Equal(ma, mb) {
- t.Fatal("bytes are different")
- }
- }
- func TestG2Marshal(t *testing.T) {
- _, Ga, err := RandomG2(rand.Reader)
- if err != nil {
- t.Fatal(err)
- }
- ma := Ga.Marshal()
- Gb := new(G2)
- _, err = Gb.Unmarshal(ma)
- if err != nil {
- t.Fatal(err)
- }
- mb := Gb.Marshal()
- if !bytes.Equal(ma, mb) {
- t.Fatal("bytes are different")
- }
- }
- func TestBilinearity(t *testing.T) {
- for i := 0; i < 2; i++ {
- a, p1, _ := RandomG1(rand.Reader)
- b, p2, _ := RandomG2(rand.Reader)
- e1 := Pair(p1, p2)
- e2 := Pair(&G1{curveGen}, &G2{twistGen})
- e2.ScalarMult(e2, a)
- e2.ScalarMult(e2, b)
- if *e1.p != *e2.p {
- t.Fatalf("bad pairing result: %s", e1)
- }
- }
- }
- func TestTripartiteDiffieHellman(t *testing.T) {
- a, _ := rand.Int(rand.Reader, Order)
- b, _ := rand.Int(rand.Reader, Order)
- c, _ := rand.Int(rand.Reader, Order)
- pa, pb, pc := new(G1), new(G1), new(G1)
- qa, qb, qc := new(G2), new(G2), new(G2)
- pa.Unmarshal(new(G1).ScalarBaseMult(a).Marshal())
- qa.Unmarshal(new(G2).ScalarBaseMult(a).Marshal())
- pb.Unmarshal(new(G1).ScalarBaseMult(b).Marshal())
- qb.Unmarshal(new(G2).ScalarBaseMult(b).Marshal())
- pc.Unmarshal(new(G1).ScalarBaseMult(c).Marshal())
- qc.Unmarshal(new(G2).ScalarBaseMult(c).Marshal())
- k1 := Pair(pb, qc)
- k1.ScalarMult(k1, a)
- k1Bytes := k1.Marshal()
- k2 := Pair(pc, qa)
- k2.ScalarMult(k2, b)
- k2Bytes := k2.Marshal()
- k3 := Pair(pa, qb)
- k3.ScalarMult(k3, c)
- k3Bytes := k3.Marshal()
- if !bytes.Equal(k1Bytes, k2Bytes) || !bytes.Equal(k2Bytes, k3Bytes) {
- t.Errorf("keys didn't agree")
- }
- }
- func BenchmarkG1(b *testing.B) {
- x, _ := rand.Int(rand.Reader, Order)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- new(G1).ScalarBaseMult(x)
- }
- }
- func BenchmarkG2(b *testing.B) {
- x, _ := rand.Int(rand.Reader, Order)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- new(G2).ScalarBaseMult(x)
- }
- }
- func BenchmarkPairing(b *testing.B) {
- for i := 0; i < b.N; i++ {
- Pair(&G1{curveGen}, &G2{twistGen})
- }
- }
|