go-circom-prover-verifier/parsers/parsers_test.go
parsers/parsers_test.goRaw
1package parsers
2
3import (
4 "io/ioutil"
5 "os"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9 "github.com/stretchr/testify/require"
10)
11
12func TestParseArrayG1(t *testing.T) {
13 aS := [][]string{
14 {
15 "16145916318196730299582072104388453231952213805668281741813587224450782397538",
16 "4434505318477484327659527264104806919103674231447634885054368605283938696207",
17 "1",
18 },
19 {
20 "10618406967550056457559358662746625591602641004174976323307214433994084907915",
21 "1843236360452735081347085412539192450068665510574800388201121698908391533923",
22 "1",
23 },
24 {
25 "1208972877970123411566574123860641832032384890981476033353526096830198333194",
26 "777503551507025252294438107100944741641946695980350712141258191590862204805",
27 "1",
28 },
29 {
30 "0",
31 "1",
32 "0",
33 },
34 }
35
36 a, err := arrayStringToG1(aS)
37 assert.Nil(t, err)
38 assert.Equal(t, "bn256.G1(23b243c928ce40c4cc2dad366e9f61723aef65866e1c66f42a08697f2f030462, 09cdd7500688fb487ec9f27b5a732d68fa0f3ddca5c2c790e330fdfb03b77c0f)", a[0].String())
39 assert.Equal(t, "bn256.G1(1779ce2c586b5fc523e72e755d969a63473052aaad7c11eb5bf0ecdcfdfefb8b, 04133c1c74206dace57cd3d76ce59be381bbf08f51a5b3edc2b0c183d43eed63)", a[1].String())
40 assert.Equal(t, "bn256.G1(02ac4120598d2f2bb81bc09b8df596403360577b0c5ff52485d1ef2200f23f0a, 01b80d298de75f867d6484c55c3da02c042bb4eb9a1734d3386786aaa669af85)", a[2].String())
41 assert.Equal(t, "bn256.G1(0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000001)", a[3].String())
42}
43
44func TestParseG2(t *testing.T) {
45 aS := [][]string{
46 {
47 "9283666785342556550467669770956850930982548182701254051508520248901282197973",
48 "11369378229277445316894458966429873744779877313900506577160370623273013178252",
49 },
50 {
51 "10625777544326349817513295021482494426101347915428005055375725845993157551870",
52 "21401790227434807639472120486932615400751346915707967674912972446672152512583",
53 },
54 {
55 "1",
56 "0",
57 },
58 }
59
60 a, err := stringToG2(aS)
61 assert.Nil(t, err)
62 assert.Equal(t, "bn256.G2((1922d70c934543aa655ec3277f7fa10a25ec973a4f001a7c54ce4954b4916f8c, 14865e836947c42cf35b47d30e06535fff9dab319c4296e28afde368960671d5), (2f50fbe77925b0a9d718c9ab38638bafa7c65f43f0d09035e518df97ad294847, 177dfa1a3b8627faf0425d9511bcb4c6ca986ea05e3803b5c643c35b94a7e6fe))", a.String())
63
64 aS = [][]string{
65 {
66 "13973091636763944887728510851169742544309374663995476311690518173988838518856",
67 "12903946180439304546475897520537621821375470264150438270817301786763517825250",
68 },
69 {
70 "370374369234123593044872519351942112043402224488849374153134091815693350697",
71 "17423079115073430837335625309232513526393852743032331213038909731579295753224",
72 },
73 {
74 "1",
75 "0",
76 },
77 }
78 a, err = stringToG2(aS)
79 assert.Nil(t, err)
80 assert.Equal(t, "bn256.G2((1c875fed67fff3b35f115b03706ec45f281b5f6cc71a99107240e09fce4910e2, 1ee47d566e9a099626b9860bcd96f6d4a1ed65f115d3efa8e05e5f42cc793048), (26851d022ce9961df65a430811824aaf3118710ac03b0614a50c05ee27d8e408, 00d19fdce25b0d78fb317a5f1789823b7ed76274b0d1be9c685792c73b347729))", a.String())
81}
82
83func TestParseArrayG2(t *testing.T) {
84 aS := [][][]string{
85 {
86 {
87 "0",
88 "0",
89 },
90 {
91 "1",
92 "0",
93 },
94 {
95 "0",
96 "0",
97 },
98 },
99 {
100 {
101 "0",
102 "0",
103 },
104 {
105 "1",
106 "0",
107 },
108 {
109 "0",
110 "0",
111 },
112 },
113 {
114 {
115 "0",
116 "0",
117 },
118 {
119 "1",
120 "0",
121 },
122 {
123 "0",
124 "0",
125 },
126 },
127 {
128 {
129 "9283666785342556550467669770956850930982548182701254051508520248901282197973",
130 "11369378229277445316894458966429873744779877313900506577160370623273013178252",
131 },
132 {
133 "10625777544326349817513295021482494426101347915428005055375725845993157551870",
134 "21401790227434807639472120486932615400751346915707967674912972446672152512583",
135 },
136 {
137 "1",
138 "0",
139 },
140 },
141 }
142
143 a, err := arrayStringToG2(aS)
144 assert.Nil(t, err)
145 assert.Equal(t, "bn256.G2((0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000000), (0000000000000000000000000000000000000000000000000000000000000000, 0000000000000000000000000000000000000000000000000000000000000001))", a[0].String())
146 assert.Equal(t, "bn256.G2((1922d70c934543aa655ec3277f7fa10a25ec973a4f001a7c54ce4954b4916f8c, 14865e836947c42cf35b47d30e06535fff9dab319c4296e28afde368960671d5), (2f50fbe77925b0a9d718c9ab38638bafa7c65f43f0d09035e518df97ad294847, 177dfa1a3b8627faf0425d9511bcb4c6ca986ea05e3803b5c643c35b94a7e6fe))", a[3].String())
147
148}
149
150func testCircuitParseWitnessBin(t *testing.T, circuit string) {
151 witnessBinFile, err := os.Open("../testdata/" + circuit + "/witness.bin")
152 require.Nil(t, err)
153 defer witnessBinFile.Close()
154 witness, err := ParseWitnessBin(witnessBinFile)
155 require.Nil(t, err)
156
157 witnessJson, err := ioutil.ReadFile("../testdata/" + circuit + "/witness.json")
158 require.Nil(t, err)
159 w, err := ParseWitness(witnessJson)
160 require.Nil(t, err)
161
162 assert.Equal(t, len(w), len(witness))
163 assert.Equal(t, w[0], witness[0])
164 assert.Equal(t, w[1], witness[1])
165 assert.Equal(t, w[10], witness[10])
166 assert.Equal(t, w[len(w)-3], witness[len(w)-3])
167 assert.Equal(t, w[len(w)-2], witness[len(w)-2])
168 assert.Equal(t, w[len(w)-1], witness[len(w)-1])
169}
170
171func TestParseWitnessBin(t *testing.T) {
172 testCircuitParseWitnessBin(t, "circuit1k")
173 testCircuitParseWitnessBin(t, "circuit5k")
174}