|
|
package ecc
import ( "fmt" "math/big" "testing" )
func TestECC(t *testing.T) { ec := NewEC(0, 7, 11) p1, p1i, err := ec.At(big.NewInt(int64(7))) if err != nil { t.Errorf(err.Error()) } if !p1.Equal(Point{big.NewInt(int64(7)), big.NewInt(int64(3))}) { t.Errorf("p1!=(7, 11)") } if !p1i.Equal(Point{big.NewInt(int64(7)), big.NewInt(int64(8))}) { t.Errorf("p1i!=(7, 8)") } } func TestNeg(t *testing.T) { ec := NewEC(0, 7, 11) p1, p1i, err := ec.At(big.NewInt(int64(7))) if err != nil { t.Errorf(err.Error()) } p1Neg := ec.Neg(p1) if !p1Neg.Equal(p1i) { t.Errorf("p1Neg!=p1i") }
} func TestAdd(t *testing.T) { ec := NewEC(0, 7, 11) p1 := Point{big.NewInt(int64(4)), big.NewInt(int64(7))} p2 := Point{big.NewInt(int64(2)), big.NewInt(int64(2))} q, err := ec.Add(p1, p2) if err != nil { t.Errorf(err.Error()) } if !q.Equal(Point{big.NewInt(int64(3)), big.NewInt(int64(1))}) { t.Errorf("q!=(3, 1)") }
// check that q exists on the elliptic curve
pt, pti, err := ec.At(q.X) if err != nil { t.Errorf(err.Error()) } if !q.Equal(pt) && !q.Equal(pti) { t.Errorf("q not exist on the elliptic curve") }
}
func TestAddSamePoint(t *testing.T) { ec := NewEC(0, 7, 11) p1 := Point{big.NewInt(int64(4)), big.NewInt(int64(7))} p1i := Point{big.NewInt(int64(4)), big.NewInt(int64(4))}
q, err := ec.Add(p1, p1) if err != nil { t.Errorf(err.Error()) } if !q.Equal(Point{big.NewInt(int64(6)), big.NewInt(int64(5))}) { t.Errorf("q!=(6, 5)") }
q_, err := ec.Add(p1i, p1i) if err != nil { t.Errorf(err.Error()) } if !q_.Equal(Point{big.NewInt(int64(6)), big.NewInt(int64(6))}) { t.Errorf("q_!=(6, 6)") }
}
func TestMulEqualSelfAdd(t *testing.T) { ec := NewEC(0, 7, 29) p1 := Point{big.NewInt(int64(11)), big.NewInt(int64(27))}
p1p1, err := ec.Add(p1, p1) if err != nil { t.Errorf(err.Error()) } p1p1, err = ec.Add(p1p1, p1) if err != nil { t.Errorf(err.Error()) } q, err := ec.Mul(p1, 3) if err != nil { t.Errorf(err.Error()) } if !q.Equal(p1p1) { fmt.Println(q) fmt.Println(p1p1) t.Errorf("q!=p1*p1") } }
func TestMul(t *testing.T) { ec := NewEC(0, 7, 29) p1 := Point{big.NewInt(int64(4)), big.NewInt(int64(19))} q3, err := ec.Mul(p1, 3) if err != nil { t.Errorf(err.Error()) } if !q3.Equal(Point{big.NewInt(int64(6)), big.NewInt(int64(7))}) { t.Errorf("q3!=(6, 7)") } q7, err := ec.Mul(p1, 7) if err != nil { t.Errorf(err.Error()) } if !q7.Equal(Point{big.NewInt(int64(19)), big.NewInt(int64(14))}) { t.Errorf("q7!=(19, 14)") }
q8, err := ec.Mul(p1, 8) if err != nil { t.Errorf(err.Error()) } if !q8.Equal(Point{big.NewInt(int64(19)), big.NewInt(int64(15))}) { t.Errorf("q8!=(19, 15)") } }
|