arnaucube
arnaucube/cryptofunPublic Self-hosted repository
cryptofun/ecc/ecc_test.go
ecc/ecc_test.goRaw
  1package ecc
  2
  3import (
  4	"fmt"
  5	"math/big"
  6	"testing"
  7)
  8
  9func TestECC(t *testing.T) {
 10	ec := NewEC(0, 7, 11)
 11	p1, p1i, err := ec.At(big.NewInt(int64(7)))
 12	if err != nil {
 13		t.Errorf(err.Error())
 14	}
 15	if !p1.Equal(Point{big.NewInt(int64(7)), big.NewInt(int64(3))}) {
 16		t.Errorf("p1!=(7, 11)")
 17	}
 18	if !p1i.Equal(Point{big.NewInt(int64(7)), big.NewInt(int64(8))}) {
 19		t.Errorf("p1i!=(7, 8)")
 20	}
 21}
 22func TestNeg(t *testing.T) {
 23	ec := NewEC(0, 7, 11)
 24	p1, p1i, err := ec.At(big.NewInt(int64(7)))
 25	if err != nil {
 26		t.Errorf(err.Error())
 27	}
 28	p1Neg := ec.Neg(p1)
 29	if !p1Neg.Equal(p1i) {
 30		t.Errorf("p1Neg!=p1i")
 31	}
 32
 33}
 34func TestAdd(t *testing.T) {
 35	ec := NewEC(0, 7, 11)
 36	p1 := Point{big.NewInt(int64(4)), big.NewInt(int64(7))}
 37	p2 := Point{big.NewInt(int64(2)), big.NewInt(int64(2))}
 38	q, err := ec.Add(p1, p2)
 39	if err != nil {
 40		t.Errorf(err.Error())
 41	}
 42	if !q.Equal(Point{big.NewInt(int64(3)), big.NewInt(int64(1))}) {
 43		t.Errorf("q!=(3, 1)")
 44	}
 45
 46	// check that q exists on the elliptic curve
 47	pt, pti, err := ec.At(q.X)
 48	if err != nil {
 49		t.Errorf(err.Error())
 50	}
 51	if !q.Equal(pt) && !q.Equal(pti) {
 52		t.Errorf("q not exist on the elliptic curve")
 53	}
 54
 55}
 56
 57func TestAddSamePoint(t *testing.T) {
 58	ec := NewEC(0, 7, 11)
 59	p1 := Point{big.NewInt(int64(4)), big.NewInt(int64(7))}
 60	p1i := Point{big.NewInt(int64(4)), big.NewInt(int64(4))}
 61
 62	q, err := ec.Add(p1, p1)
 63	if err != nil {
 64		t.Errorf(err.Error())
 65	}
 66	if !q.Equal(Point{big.NewInt(int64(6)), big.NewInt(int64(5))}) {
 67		t.Errorf("q!=(6, 5)")
 68	}
 69
 70	q_, err := ec.Add(p1i, p1i)
 71	if err != nil {
 72		t.Errorf(err.Error())
 73	}
 74	if !q_.Equal(Point{big.NewInt(int64(6)), big.NewInt(int64(6))}) {
 75		t.Errorf("q_!=(6, 6)")
 76	}
 77
 78}
 79
 80func TestMulEqualSelfAdd(t *testing.T) {
 81	ec := NewEC(0, 7, 29)
 82	p1 := Point{big.NewInt(int64(11)), big.NewInt(int64(27))}
 83
 84	p1p1, err := ec.Add(p1, p1)
 85	if err != nil {
 86		t.Errorf(err.Error())
 87	}
 88	p1p1, err = ec.Add(p1p1, p1)
 89	if err != nil {
 90		t.Errorf(err.Error())
 91	}
 92	q, err := ec.Mul(p1, 3)
 93	if err != nil {
 94		t.Errorf(err.Error())
 95	}
 96	if !q.Equal(p1p1) {
 97		fmt.Println(q)
 98		fmt.Println(p1p1)
 99		t.Errorf("q!=p1*p1")
100	}
101}
102
103func TestMul(t *testing.T) {
104	ec := NewEC(0, 7, 29)
105	p1 := Point{big.NewInt(int64(4)), big.NewInt(int64(19))}
106	q3, err := ec.Mul(p1, 3)
107	if err != nil {
108		t.Errorf(err.Error())
109	}
110	if !q3.Equal(Point{big.NewInt(int64(6)), big.NewInt(int64(7))}) {
111		t.Errorf("q3!=(6, 7)")
112	}
113	q7, err := ec.Mul(p1, 7)
114	if err != nil {
115		t.Errorf(err.Error())
116	}
117	if !q7.Equal(Point{big.NewInt(int64(19)), big.NewInt(int64(14))}) {
118		t.Errorf("q7!=(19, 14)")
119	}
120
121	q8, err := ec.Mul(p1, 8)
122	if err != nil {
123		t.Errorf(err.Error())
124	}
125	if !q8.Equal(Point{big.NewInt(int64(19)), big.NewInt(int64(15))}) {
126		t.Errorf("q8!=(19, 15)")
127	}
128}