gmsm/sm9/twist_test.go
2022-06-07 17:13:23 +08:00

111 lines
2.6 KiB
Go

package sm9
import (
"testing"
)
func TestIsOnCurve(t *testing.T) {
if !twistGen.IsOnCurve() {
t.Errorf("twist gen point should be on curve")
}
a := &twistPoint{}
a.SetInfinity()
if !a.IsOnCurve() {
t.Errorf("infinity zero point should be on curve")
}
}
func TestAddNeg(t *testing.T) {
neg := &twistPoint{}
neg.Neg(twistGen)
res := &twistPoint{}
res.Add(twistGen, neg)
if !res.IsInfinity() {
t.Errorf("a add its neg should be zero")
}
}
func Test_TwistFrobeniusP(t *testing.T) {
ret1, ret2 := &twistPoint{}, &twistPoint{}
ret1.Frobenius(twistGen)
ret1.MakeAffine()
ret2.x.Conjugate(&twistGen.x)
ret2.x.MulScalar(&ret2.x, betaToNegPPlus1Over3)
ret2.y.Conjugate(&twistGen.y)
ret2.y.MulScalar(&ret2.y, betaToNegPPlus1Over2)
ret2.z.SetOne()
ret2.t.SetOne()
if !ret2.IsOnCurve() {
t.Errorf("point should be on curve")
}
if ret1.x != ret2.x || ret1.y != ret2.y || ret1.z != ret2.z || ret1.t != ret2.t {
t.Errorf("not same")
}
}
func Test_TwistFrobeniusP2(t *testing.T) {
ret1, ret2 := &twistPoint{}, &twistPoint{}
ret1.Frobenius(twistGen)
ret1.Frobenius(ret1)
if !ret1.IsOnCurve() {
t.Errorf("point should be on curve")
}
ret2.FrobeniusP2(twistGen)
if !ret2.IsOnCurve() {
t.Errorf("point should be on curve")
}
if ret1.x != ret2.x || ret1.y != ret2.y || ret1.z != ret2.z || ret1.t != ret2.t {
t.Errorf("not same")
}
}
func Test_TwistFrobeniusP2_Case2(t *testing.T) {
ret1, ret2 := &twistPoint{}, &twistPoint{}
ret1.x.Set(&twistGen.x)
ret1.x.MulScalar(&ret1.x, betaToNegP2Plus1Over3)
ret1.y.Set(&twistGen.y)
ret1.y.MulScalar(&ret1.y, betaToNegP2Plus1Over2)
ret1.z.SetOne()
ret1.t.SetOne()
if !ret1.IsOnCurve() {
t.Errorf("point should be on curve")
}
ret2.FrobeniusP2(twistGen)
ret2.MakeAffine()
if !ret2.IsOnCurve() {
t.Errorf("point should be on curve")
}
if ret1.x != ret2.x || ret1.y != ret2.y || ret1.z != ret2.z || ret1.t != ret2.t {
t.Errorf("not same")
}
}
func Test_TwistNegFrobeniusP2_Case2(t *testing.T) {
ret1, ret2 := &twistPoint{}, &twistPoint{}
ret1.x.Set(&twistGen.x)
ret1.x.MulScalar(&ret1.x, betaToNegP2Plus1Over3)
ret1.y.Neg(&twistGen.y)
ret1.y.MulScalar(&ret1.y, betaToNegP2Plus1Over2)
ret1.z.SetOne()
ret1.t.SetOne()
if !ret1.IsOnCurve() {
t.Errorf("point should be on curve")
}
ret2.NegFrobeniusP2(twistGen)
ret2.MakeAffine()
if !ret2.IsOnCurve() {
t.Errorf("point should be on curve")
}
if ret1.x != ret2.x || ret1.y != ret2.y || ret1.z != ret2.z || ret1.t != ret2.t {
t.Errorf("not same")
}
}