package ecc
|
|
|
|
import (
|
|
"fmt"
|
|
"math/big"
|
|
"testing"
|
|
)
|
|
|
|
func TestECC(t *testing.T) {
|
|
ec := NewEC(0, 7, 11)
|
|
p1, p1_, 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 !p1_.Equal(Point{big.NewInt(int64(7)), big.NewInt(int64(8))}) {
|
|
t.Errorf("p1_!=(7, 8)")
|
|
}
|
|
}
|
|
func TestNeg(t *testing.T) {
|
|
ec := NewEC(0, 7, 11)
|
|
p1, p1_, err := ec.At(big.NewInt(int64(7)))
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
p1Neg := ec.Neg(p1)
|
|
if !p1Neg.Equal(p1_) {
|
|
t.Errorf("p1Neg!=p1_")
|
|
}
|
|
|
|
}
|
|
func TestAdd(t *testing.T) {
|
|
fmt.Println("y^2 = x^3 + 7")
|
|
fmt.Print("ec: ")
|
|
ec := NewEC(0, 7, 11)
|
|
fmt.Println(ec)
|
|
p1, _, err := ec.At(big.NewInt(int64(7)))
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
fmt.Print("p1: ")
|
|
fmt.Println(p1)
|
|
p2, _, err := ec.At(big.NewInt(int64(6)))
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
fmt.Print("p2: ")
|
|
fmt.Println(p2)
|
|
|
|
q, err := ec.Add(p1, p2)
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
fmt.Print("q: ")
|
|
fmt.Println(q)
|
|
if !q.Equal(Point{big.NewInt(int64(2)), big.NewInt(int64(9))}) {
|
|
t.Errorf("q!=(2, 9)")
|
|
}
|
|
|
|
// check that q exists on the elliptic curve
|
|
pt, pt_, err := ec.At(q.X)
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
if !q.Equal(pt) && !q.Equal(pt_) {
|
|
t.Errorf("q not exist on the elliptic curve")
|
|
}
|
|
|
|
}
|