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