go-iden3-crypto/babyjub/babyjub_test.go
babyjub/babyjub_test.goRaw
1package babyjub
2
3import (
4 // "fmt"
5 "encoding/hex"
6 "github.com/stretchr/testify/assert"
7 "math/big"
8 "testing"
9)
10
11func TestAdd1(t *testing.T) {
12 a := &Point{X: big.NewInt(0), Y: big.NewInt(1)}
13 b := &Point{X: big.NewInt(0), Y: big.NewInt(1)}
14
15 c := NewPoint().Add(a, b)
16 // fmt.Printf("%v = 2 * %v", *c, *a)
17 assert.Equal(t, "0", c.X.String())
18 assert.Equal(t, "1", c.Y.String())
19}
20
21func TestAdd2(t *testing.T) {
22 aX := NewIntFromString(
23 "17777552123799933955779906779655732241715742912184938656739573121738514868268")
24 aY := NewIntFromString(
25 "2626589144620713026669568689430873010625803728049924121243784502389097019475")
26 a := &Point{X: aX, Y: aY}
27
28 bX := NewIntFromString(
29 "17777552123799933955779906779655732241715742912184938656739573121738514868268")
30 bY := NewIntFromString(
31 "2626589144620713026669568689430873010625803728049924121243784502389097019475")
32 b := &Point{X: bX, Y: bY}
33
34 c := NewPoint().Add(a, b)
35 // fmt.Printf("%v = 2 * %v", *c, *a)
36 assert.Equal(t,
37 "6890855772600357754907169075114257697580319025794532037257385534741338397365",
38 c.X.String())
39 assert.Equal(t,
40 "4338620300185947561074059802482547481416142213883829469920100239455078257889",
41 c.Y.String())
42}
43
44func TestAdd3(t *testing.T) {
45 aX := NewIntFromString(
46 "17777552123799933955779906779655732241715742912184938656739573121738514868268")
47 aY := NewIntFromString(
48 "2626589144620713026669568689430873010625803728049924121243784502389097019475")
49 a := &Point{X: aX, Y: aY}
50
51 bX := NewIntFromString(
52 "16540640123574156134436876038791482806971768689494387082833631921987005038935")
53 bY := NewIntFromString(
54 "20819045374670962167435360035096875258406992893633759881276124905556507972311")
55 b := &Point{X: bX, Y: bY}
56
57 c := NewPoint().Add(a, b)
58 // fmt.Printf("%v = 2 * %v", *c, *a)
59 assert.Equal(t,
60 "7916061937171219682591368294088513039687205273691143098332585753343424131937",
61 c.X.String())
62 assert.Equal(t,
63 "14035240266687799601661095864649209771790948434046947201833777492504781204499",
64 c.Y.String())
65}
66
67func TestAdd4(t *testing.T) {
68 aX := NewIntFromString(
69 "0")
70 aY := NewIntFromString(
71 "1")
72 a := &Point{X: aX, Y: aY}
73
74 bX := NewIntFromString(
75 "16540640123574156134436876038791482806971768689494387082833631921987005038935")
76 bY := NewIntFromString(
77 "20819045374670962167435360035096875258406992893633759881276124905556507972311")
78 b := &Point{X: bX, Y: bY}
79
80 c := NewPoint().Add(a, b)
81 // fmt.Printf("%v = 2 * %v", *c, *a)
82 assert.Equal(t,
83 "16540640123574156134436876038791482806971768689494387082833631921987005038935",
84 c.X.String())
85 assert.Equal(t,
86 "20819045374670962167435360035096875258406992893633759881276124905556507972311",
87 c.Y.String())
88}
89
90func TestInCurve1(t *testing.T) {
91 p := &Point{X: big.NewInt(0), Y: big.NewInt(1)}
92 assert.Equal(t, true, p.InCurve())
93}
94
95func TestInCurve2(t *testing.T) {
96 p := &Point{X: big.NewInt(1), Y: big.NewInt(0)}
97 assert.Equal(t, false, p.InCurve())
98}
99
100func TestMul0(t *testing.T) {
101 x := NewIntFromString(
102 "17777552123799933955779906779655732241715742912184938656739573121738514868268")
103 y := NewIntFromString(
104 "2626589144620713026669568689430873010625803728049924121243784502389097019475")
105 p := &Point{X: x, Y: y}
106 s := NewIntFromString("3")
107
108 r2 := NewPoint().Add(p, p)
109 r2 = NewPoint().Add(r2, p)
110 r := NewPoint().Mul(s, p)
111 assert.Equal(t, r2.X.String(), r.X.String())
112 assert.Equal(t, r2.Y.String(), r.Y.String())
113
114 assert.Equal(t,
115 "19372461775513343691590086534037741906533799473648040012278229434133483800898",
116 r.X.String())
117 assert.Equal(t,
118 "9458658722007214007257525444427903161243386465067105737478306991484593958249",
119 r.Y.String())
120}
121
122func TestMul1(t *testing.T) {
123 x := NewIntFromString(
124 "17777552123799933955779906779655732241715742912184938656739573121738514868268")
125 y := NewIntFromString(
126 "2626589144620713026669568689430873010625803728049924121243784502389097019475")
127 p := &Point{X: x, Y: y}
128 s := NewIntFromString(
129 "14035240266687799601661095864649209771790948434046947201833777492504781204499")
130 r := NewPoint().Mul(s, p)
131 assert.Equal(t,
132 "17070357974431721403481313912716834497662307308519659060910483826664480189605",
133 r.X.String())
134 assert.Equal(t,
135 "4014745322800118607127020275658861516666525056516280575712425373174125159339",
136 r.Y.String())
137}
138
139func TestMul2(t *testing.T) {
140 x := NewIntFromString(
141 "6890855772600357754907169075114257697580319025794532037257385534741338397365")
142 y := NewIntFromString(
143 "4338620300185947561074059802482547481416142213883829469920100239455078257889")
144 p := &Point{X: x, Y: y}
145 s := NewIntFromString(
146 "20819045374670962167435360035096875258406992893633759881276124905556507972311")
147 r := NewPoint().Mul(s, p)
148 assert.Equal(t,
149 "13563888653650925984868671744672725781658357821216877865297235725727006259983",
150 r.X.String())
151 assert.Equal(t,
152 "8442587202676550862664528699803615547505326611544120184665036919364004251662",
153 r.Y.String())
154}
155
156func TestInCurve3(t *testing.T) {
157 x := NewIntFromString(
158 "17777552123799933955779906779655732241715742912184938656739573121738514868268")
159 y := NewIntFromString(
160 "2626589144620713026669568689430873010625803728049924121243784502389097019475")
161 p := &Point{X: x, Y: y}
162 assert.Equal(t, true, p.InCurve())
163}
164
165func TestInCurve4(t *testing.T) {
166 x := NewIntFromString(
167 "6890855772600357754907169075114257697580319025794532037257385534741338397365")
168 y := NewIntFromString(
169 "4338620300185947561074059802482547481416142213883829469920100239455078257889")
170 p := &Point{X: x, Y: y}
171 assert.Equal(t, true, p.InCurve())
172}
173
174func TestInSubGroup1(t *testing.T) {
175 x := NewIntFromString(
176 "17777552123799933955779906779655732241715742912184938656739573121738514868268")
177 y := NewIntFromString(
178 "2626589144620713026669568689430873010625803728049924121243784502389097019475")
179 p := &Point{X: x, Y: y}
180 assert.Equal(t, true, p.InSubGroup())
181}
182
183func TestInSubGroup2(t *testing.T) {
184 x := NewIntFromString(
185 "6890855772600357754907169075114257697580319025794532037257385534741338397365")
186 y := NewIntFromString(
187 "4338620300185947561074059802482547481416142213883829469920100239455078257889")
188 p := &Point{X: x, Y: y}
189 assert.Equal(t, true, p.InSubGroup())
190}
191
192func TestCompressDecompress1(t *testing.T) {
193 x := NewIntFromString(
194 "17777552123799933955779906779655732241715742912184938656739573121738514868268")
195 y := NewIntFromString(
196 "2626589144620713026669568689430873010625803728049924121243784502389097019475")
197 p := &Point{X: x, Y: y}
198
199 buf := p.Compress()
200 assert.Equal(t, "53b81ed5bffe9545b54016234682e7b2f699bd42a5e9eae27ff4051bc698ce85", hex.EncodeToString(buf[:]))
201
202 p2, err := NewPoint().Decompress(buf)
203 assert.Equal(t, nil, err)
204 assert.Equal(t, p.X.String(), p2.X.String())
205 assert.Equal(t, p.Y.String(), p2.Y.String())
206}
207
208func TestCompressDecompress2(t *testing.T) {
209 x := NewIntFromString(
210 "6890855772600357754907169075114257697580319025794532037257385534741338397365")
211 y := NewIntFromString(
212 "4338620300185947561074059802482547481416142213883829469920100239455078257889")
213 p := &Point{X: x, Y: y}
214
215 buf := p.Compress()
216 assert.Equal(t, "e114eb17eddf794f063a68fecac515e3620e131976108555735c8b0773929709", hex.EncodeToString(buf[:]))
217
218 p2, err := NewPoint().Decompress(buf)
219 assert.Equal(t, nil, err)
220 assert.Equal(t, p.X.String(), p2.X.String())
221 assert.Equal(t, p.Y.String(), p2.Y.String())
222}
223
224func TestCompressDecompressRnd(t *testing.T) {
225 for i := 0; i < 64; i++ {
226 p1 := NewPoint().Mul(big.NewInt(int64(i)), B8)
227 buf := p1.Compress()
228 p2, err := NewPoint().Decompress(buf)
229 assert.Equal(t, nil, err)
230 assert.Equal(t, p1, p2)
231 }
232}