@@ -61,7 +61,7 @@ func (vk *VerifyingKey) writeTo(w io.Writer) (int64, error) {
6161 return enc .BytesWritten (), nil
6262}
6363
64- func extractPK (phase2Path string ) error {
64+ func extractPK (phase2Path string , commitmentKeys []pedersen. ProvingKey ) error {
6565 // Phase 2 file
6666 phase2File , err := os .Open (phase2Path )
6767 if err != nil {
@@ -225,22 +225,35 @@ func extractPK(phase2Path string) error {
225225 return err
226226 }
227227
228+ // 16. Write length of commitment keys
229+ if err := encPk .Encode (uint32 (len (commitmentKeys ))); err != nil {
230+ return err
231+ }
232+
233+ // 17. Write commitment keys
234+ for _ , ck := range commitmentKeys {
235+ _ , err := ck .WriteTo (pkWriter )
236+ if err != nil {
237+ return err
238+ }
239+ }
240+
228241 return nil
229242}
230243
231- func extractVK (phase2Path string ) error {
244+ func extractVK (phase2Path string ) ([]pedersen. ProvingKey , error ) {
232245 vk := VerifyingKey {}
233246 // Phase 2 file
234247 phase2File , err := os .Open (phase2Path )
235248 if err != nil {
236- return err
249+ return nil , err
237250 }
238251 defer phase2File .Close ()
239252
240253 // Evaluations
241254 evalsFile , err := os .Open ("evals" )
242255 if err != nil {
243- return err
256+ return nil , err
244257 }
245258 defer evalsFile .Close ()
246259
@@ -250,33 +263,33 @@ func extractVK(phase2Path string) error {
250263
251264 var header phase2.Header
252265 if err := header .Read (ph2Reader ); err != nil {
253- return err
266+ return nil , err
254267 }
255268
256269 decPh2 := bn254 .NewDecoder (ph2Reader )
257270 decEvals := bn254 .NewDecoder (evalsReader )
258271
259272 vkFile , err := os .Create ("vk" )
260273 if err != nil {
261- return err
274+ return nil , err
262275 }
263276 defer vkFile .Close ()
264277 vkWriter := bufio .NewWriter (vkFile )
265278 defer vkWriter .Flush ()
266279
267280 // 1. Read [α]₁
268281 if err := decEvals .Decode (& vk .G1 .Alpha ); err != nil {
269- return err
282+ return nil , err
270283 }
271284
272285 // 2. Read [β]₁
273286 if err := decEvals .Decode (& vk .G1 .Beta ); err != nil {
274- return err
287+ return nil , err
275288 }
276289
277290 // 3. Read [β]₂
278291 if err := decEvals .Decode (& vk .G2 .Beta ); err != nil {
279- return err
292+ return nil , err
280293 }
281294
282295 // 4. Set [γ]₂
@@ -285,46 +298,48 @@ func extractVK(phase2Path string) error {
285298
286299 // 5. Read [δ]₁
287300 if err := decPh2 .Decode (& vk .G1 .Delta ); err != nil {
288- return err
301+ return nil , err
289302 }
290303
291304 // 6. Read [δ]₂
292305 if err := decPh2 .Decode (& vk .G2 .Delta ); err != nil {
293- return err
306+ return nil , err
294307 }
295308
296309 // 7. Read VKK
297310 pos := int64 (128 * (header .Wires + 1 ) + 12 )
298311 if _ , err := evalsFile .Seek (pos , io .SeekStart ); err != nil {
299- return err
312+ return nil , err
300313 }
301314 evalsReader .Reset (evalsFile )
302315 if err := decEvals .Decode (& vk .G1 .K ); err != nil {
303- return err
316+ return nil , err
304317 }
305318
306319 // 8. Setup commitment key
307320 var ckk []bn254.G1Affine
308321 if err := decEvals .Decode (& ckk ); err != nil {
309- return err
322+ return nil , err
310323 }
311- _ , vk .CommitmentKey , err = pedersen .Setup (ckk )
324+ var pk []pedersen.ProvingKey
325+ pk , vk .CommitmentKey , err = pedersen .Setup (ckk )
312326 if err != nil {
313- return err
327+ return nil , err
314328 }
315329 if _ , err := vk .writeTo (vkWriter ); err != nil {
316- return err
330+ return nil , err
317331 }
318- return nil
332+ return pk , nil
319333}
320334
321335func ExtractKeys (phase2Path string ) error {
322- fmt .Println ("Extracting proving key" )
323- if err := extractPK (phase2Path ); err != nil {
336+ fmt .Println ("Extracting verifying key" )
337+ pk , err := extractVK (phase2Path )
338+ if err != nil {
324339 return err
325340 }
326- fmt .Println ("Extracting verifying key" )
327- if err := extractVK (phase2Path ); err != nil {
341+ fmt .Println ("Extracting proving key" )
342+ if err := extractPK (phase2Path , pk ); err != nil {
328343 return err
329344 }
330345 fmt .Println ("Keys have been extracted successfully" )
0 commit comments