init: v1.0.0
This commit is contained in:
@@ -0,0 +1,215 @@
|
||||
package bn256
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestLatticeReduceCurve(t *testing.T) {
|
||||
for {
|
||||
k, _ := rand.Int(rand.Reader, N)
|
||||
//for i:=255;i>100;i-- {
|
||||
// k.SetBit(k, i, 0)
|
||||
//}
|
||||
ks := curveLattice.decompose(k)
|
||||
fmt.Println("============================================")
|
||||
fmt.Println("k = ", k.Text(16), k.BitLen(), k.Sign())
|
||||
fmt.Println("k1 = ", ks[0].Text(16), ks[0].BitLen(), ks[0].Sign())
|
||||
fmt.Println("k2 = ", ks[1].Text(16), ks[1].BitLen(), ks[1].Sign())
|
||||
if ks[0].BitLen() > 130 || ks[1].BitLen() > 130 {
|
||||
t.Fatal("reduction too large")
|
||||
} else if ks[0].Sign() < 0 || ks[1].Sign() < 0 {
|
||||
t.Fatal("reduction must be positive")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestLatticeReduceTarget(t *testing.T) {
|
||||
k, _ := rand.Int(rand.Reader, N)
|
||||
ks := targetLattice.decompose(k)
|
||||
|
||||
if ks[0].BitLen() > 66 || ks[1].BitLen() > 66 || ks[2].BitLen() > 66 || ks[3].BitLen() > 66 {
|
||||
t.Fatal("reduction too large")
|
||||
} else if ks[0].Sign() < 0 || ks[1].Sign() < 0 || ks[2].Sign() < 0 || ks[3].Sign() < 0 {
|
||||
t.Fatal("reduction must be positive")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLatticeCurveMul(t *testing.T) {
|
||||
useLattice = false
|
||||
pt := &curvePoint{}
|
||||
t.Log("G =", curveGen)
|
||||
l2 := bigFromBase10("82434016654578246432914077779442682275270229881604616279947255993657999048255")
|
||||
l := bigFromBase10("11916685325803286854045818138240527491926474132365765087461")
|
||||
pt.Mul(curveGen, l)
|
||||
t.Log("[l]G=", pt)
|
||||
pt.Add(curveGen, pt)
|
||||
t.Log("[l+1]G=", pt)
|
||||
pt.Neg(pt)
|
||||
t.Log("-[l+1]G=", pt)
|
||||
pt.Mul(curveGen, l2)
|
||||
t.Log("[l2]G=", pt)
|
||||
|
||||
pt.Set(curveGen)
|
||||
gfpMul(&pt.x, &curveGen.x, xiTo2PMinus2Over3)
|
||||
t.Log("phiG=", pt)
|
||||
t.Log("phi(G) is on curve:", pt.IsOnCurve())
|
||||
|
||||
}
|
||||
|
||||
func TestLatticeTwistCurveMul(t *testing.T) {
|
||||
useLattice = false
|
||||
pt := &twistPoint{}
|
||||
t.Log("G =", twistGen)
|
||||
l2 := bigFromBase10("82434016654578246432914077779442682275270229881604616279947255993657999048255")
|
||||
l := bigFromBase10("11916685325803286854045818138240527491926474132365765087461")
|
||||
pt.Mul(twistGen, l)
|
||||
t.Log("[l]G=", pt)
|
||||
pt.Add(twistGen, pt)
|
||||
t.Log("[l+1]G=", pt)
|
||||
pt.Neg(pt)
|
||||
t.Log("-[l+1]G=", pt)
|
||||
pt.Mul(twistGen, l2)
|
||||
t.Log("[l2]G=", pt)
|
||||
|
||||
pt.Set(twistGen)
|
||||
//gfpMul(&pt.x, &twistGen.x, xiTo2PMinus2Over3)
|
||||
pt.x.MulScalar(&pt.x, xiTo2PSquaredMinus2Over3)
|
||||
t.Log("phiG=", pt)
|
||||
t.Log("phi(G) is on curve:", pt.IsOnCurve())
|
||||
|
||||
}
|
||||
|
||||
func TestTemp(t *testing.T) {
|
||||
useLattice = true
|
||||
l := bigFromBase10("11916685325803286854045818138240527491926474132365765087461")
|
||||
// a := bigFromBase10("18601171214415468628822298024872005604767796808132779597987639723831549415194")
|
||||
a := bigFromBase10("186011712144154686288222980248720056047677968081327795979876397238315495")
|
||||
//a = new(big.Int).Sub(Order,gmath.BigInt2)
|
||||
//multiScalar := curveLattice.Multi(a)
|
||||
decomp := curveLattice.decompose(a)
|
||||
fmt.Println(decomp)
|
||||
s := decomp[1]
|
||||
s.Mul(s, l)
|
||||
s.Add(s, decomp[0])
|
||||
s.Mod(s, N)
|
||||
fmt.Println(s)
|
||||
fmt.Println(a)
|
||||
|
||||
pt1 := &curvePoint{}
|
||||
pt1.Mul(curveGen, a)
|
||||
fmt.Println(pt1)
|
||||
|
||||
useLattice = false
|
||||
pt2 := &curvePoint{}
|
||||
pt2.Mul(curveGen, a)
|
||||
fmt.Println(pt2)
|
||||
|
||||
}
|
||||
|
||||
func TestTemp1(t *testing.T) {
|
||||
count := 0
|
||||
for {
|
||||
a, _ := rand.Int(rand.Reader, N)
|
||||
useLattice = true
|
||||
pt1 := &curvePoint{}
|
||||
pt1.Mul(curveGen, a)
|
||||
|
||||
useLattice = false
|
||||
pt2 := &curvePoint{}
|
||||
pt2.Mul(curveGen, a)
|
||||
|
||||
pt1.MakeAffine()
|
||||
pt2.MakeAffine()
|
||||
if *pt1 != *pt2 {
|
||||
fmt.Println(pt1)
|
||||
fmt.Println(pt2)
|
||||
t.Fail()
|
||||
return
|
||||
}
|
||||
count++
|
||||
if count%10000 == 0 {
|
||||
fmt.Println(count, "pass")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestGfP12Lattice(t *testing.T) {
|
||||
k, _ := rand.Int(rand.Reader, N)
|
||||
e := &gfP12{}
|
||||
f := &gfP12{}
|
||||
e.Exp(gfP12Gen, k)
|
||||
f.latticeExp(gfP12Gen, k)
|
||||
if *e != *f {
|
||||
t.Log(e)
|
||||
t.Log(f)
|
||||
t.Fatalf("bad lattice exponitial:")
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestGfP12LatticePairint(t *testing.T) {
|
||||
useLattice = true
|
||||
fmt.Println("Test bilinear")
|
||||
|
||||
k1, p1, _ := RandomG1(rand.Reader)
|
||||
k2, p2, _ := RandomG2(rand.Reader)
|
||||
e1 := Pair(p1, p2)
|
||||
|
||||
e2 := >{*gfP12Gen}
|
||||
e2.ScalarBaseMult(k1)
|
||||
e2.ScalarMult(e2, k2)
|
||||
|
||||
if e1.p != e2.p {
|
||||
t.Log(e1)
|
||||
t.Log(e2)
|
||||
t.Fatalf("bad pairing result:")
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkLatticeGFP12(b *testing.B) {
|
||||
k, _ := rand.Int(rand.Reader, N)
|
||||
e := &gfP12{}
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
e.latticeExp(gfP12Gen, k)
|
||||
}
|
||||
}
|
||||
func BenchmarkNormalLatticeGFP12(b *testing.B) {
|
||||
k, _ := rand.Int(rand.Reader, N)
|
||||
e := &gfP12{}
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
e.Exp(gfP12Gen, k)
|
||||
}
|
||||
}
|
||||
func TestGfP12LatticeSpeed(t *testing.T) {
|
||||
k, _ := rand.Int(rand.Reader, N)
|
||||
e := &gfP12{}
|
||||
f := &gfP12{}
|
||||
total := 1000
|
||||
{
|
||||
//800
|
||||
begin := time.Now()
|
||||
for i := 0; i < total; i++ {
|
||||
e.Exp(gfP12Gen, k)
|
||||
}
|
||||
elaspe := time.Since(begin)
|
||||
fmt.Println("time: ", elaspe.Milliseconds(), "ms")
|
||||
fmt.Println(float64(total) / float64(elaspe.Milliseconds()) * 1000)
|
||||
}
|
||||
{
|
||||
// 1600 次/秒
|
||||
begin := time.Now()
|
||||
|
||||
for i := 0; i < total; i++ {
|
||||
f.latticeExp(gfP12Gen, k)
|
||||
}
|
||||
elaspe := time.Since(begin)
|
||||
fmt.Println("time: ", elaspe.Milliseconds(), "ms")
|
||||
fmt.Println(float64(total) / float64(elaspe.Milliseconds()) * 1000)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user