Skip to content

Commit a4a291e

Browse files
committed
write out v0.9 pk
1 parent 27e632f commit a4a291e

File tree

2 files changed

+41
-23
lines changed

2 files changed

+41
-23
lines changed

keys/keys.go

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

321335
func 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")

test/example_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,10 @@ func TestSetup(t *testing.T) {
111111
func TestProveAndVerify(t *testing.T) {
112112
// Compile the circuit
113113
var myCircuit Circuit
114-
ccs, _ := frontend.Compile(bn254.ID.ScalarField(), r1cs.NewBuilder, &myCircuit)
114+
ccs, err := frontend.Compile(bn254.ID.ScalarField(), r1cs.NewBuilder, &myCircuit)
115+
if err != nil {
116+
t.Error(err)
117+
}
115118

116119
// Read PK and VK
117120
pkk := groth16.NewProvingKey(ecc.BN254)

0 commit comments

Comments
 (0)