go-iden3-crypto/babyjub/eddsa_test.go
babyjub/eddsa_test.goRaw
1package babyjub
2
3import (
4 "crypto/rand"
5 "encoding/hex"
6 "fmt"
7 "math/big"
8 "testing"
9
10 "github.com/iden3/go-iden3-crypto/constants"
11 "github.com/iden3/go-iden3-crypto/utils"
12 "github.com/stretchr/testify/assert"
13)
14
15func genInputs() (*PrivateKey, *big.Int) {
16 k := NewRandPrivKey()
17 fmt.Println("k", hex.EncodeToString(k[:]))
18
19 msgBuf := [32]byte{}
20 rand.Read(msgBuf[:])
21 msg := utils.SetBigIntFromLEBytes(new(big.Int), msgBuf[:])
22 msg.Mod(msg, constants.Q)
23 fmt.Println("msg", msg)
24
25 return &k, msg
26}
27
28func TestSignVerifyMimc7(t *testing.T) {
29 var k PrivateKey
30 hex.Decode(k[:], []byte("0001020304050607080900010203040506070809000102030405060708090001"))
31 msgBuf, err := hex.DecodeString("00010203040506070809")
32 if err != nil {
33 panic(err)
34 }
35 msg := utils.SetBigIntFromLEBytes(new(big.Int), msgBuf)
36
37 pk := k.Public()
38 assert.Equal(t,
39 "13277427435165878497778222415993513565335242147425444199013288855685581939618",
40 pk.X.String())
41 assert.Equal(t,
42 "13622229784656158136036771217484571176836296686641868549125388198837476602820",
43 pk.Y.String())
44
45 sig := k.SignMimc7(msg)
46 assert.Equal(t,
47 "11384336176656855268977457483345535180380036354188103142384839473266348197733",
48 sig.R8.X.String())
49 assert.Equal(t,
50 "15383486972088797283337779941324724402501462225528836549661220478783371668959",
51 sig.R8.Y.String())
52 assert.Equal(t,
53 "2523202440825208709475937830811065542425109372212752003460238913256192595070",
54 sig.S.String())
55
56 ok := pk.VerifyMimc7(msg, sig)
57 assert.Equal(t, true, ok)
58
59 sigBuf := sig.Compress()
60 sig2, err := new(Signature).Decompress(sigBuf)
61 assert.Equal(t, nil, err)
62
63 assert.Equal(t, ""+
64 "dfedb4315d3f2eb4de2d3c510d7a987dcab67089c8ace06308827bf5bcbe02a2"+
65 "7ed40dab29bf993c928e789d007387998901a24913d44fddb64b1f21fc149405",
66 hex.EncodeToString(sigBuf[:]))
67
68 ok = pk.VerifyMimc7(msg, sig2)
69 assert.Equal(t, true, ok)
70}
71
72func TestSignVerifyPoseidon(t *testing.T) {
73 var k PrivateKey
74 hex.Decode(k[:], []byte("0001020304050607080900010203040506070809000102030405060708090001"))
75 msgBuf, err := hex.DecodeString("00010203040506070809")
76 if err != nil {
77 panic(err)
78 }
79 msg := utils.SetBigIntFromLEBytes(new(big.Int), msgBuf)
80
81 pk := k.Public()
82 assert.Equal(t,
83 "13277427435165878497778222415993513565335242147425444199013288855685581939618",
84 pk.X.String())
85 assert.Equal(t,
86 "13622229784656158136036771217484571176836296686641868549125388198837476602820",
87 pk.Y.String())
88
89 sig := k.SignPoseidon(msg)
90 assert.Equal(t,
91 "11384336176656855268977457483345535180380036354188103142384839473266348197733",
92 sig.R8.X.String())
93 assert.Equal(t,
94 "15383486972088797283337779941324724402501462225528836549661220478783371668959",
95 sig.R8.Y.String())
96 assert.Equal(t,
97 "248298168863866362217836334079793350221620631973732197668910946177382043688",
98 sig.S.String())
99
100 ok := pk.VerifyPoseidon(msg, sig)
101 assert.Equal(t, true, ok)
102
103 sigBuf := sig.Compress()
104 sig2, err := new(Signature).Decompress(sigBuf)
105 assert.Equal(t, nil, err)
106
107 assert.Equal(t, ""+
108 "dfedb4315d3f2eb4de2d3c510d7a987dcab67089c8ace06308827bf5bcbe02a2"+
109 "28506bce274aa1b3f7e7c2fd7e4fe09bff8f9aa37a42def7994e98f322888c00",
110 hex.EncodeToString(sigBuf[:]))
111
112 ok = pk.VerifyPoseidon(msg, sig2)
113 assert.Equal(t, true, ok)
114}
115
116func TestCompressDecompress(t *testing.T) {
117 var k PrivateKey
118 hex.Decode(k[:], []byte("0001020304050607080900010203040506070809000102030405060708090001"))
119 pk := k.Public()
120 for i := 0; i < 64; i++ {
121 msgBuf, err := hex.DecodeString(fmt.Sprintf("000102030405060708%02d", i))
122 if err != nil {
123 panic(err)
124 }
125 msg := utils.SetBigIntFromLEBytes(new(big.Int), msgBuf)
126 sig := k.SignMimc7(msg)
127 sigBuf := sig.Compress()
128 sig2, err := new(Signature).Decompress(sigBuf)
129 assert.Equal(t, nil, err)
130 ok := pk.VerifyMimc7(msg, sig2)
131 assert.Equal(t, true, ok)
132 }
133}