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, pt_, err := ec.At(q.X)
48 if err != nil {
49 t.Errorf(err.Error())
50 }
51 if !q.Equal(pt) && !q.Equal(pt_) {
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}