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}