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