arnaucube
arnaucube/go-iden3-cryptoPublic Self-hosted repository
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}