arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/plonky2_verifier/verifier.go
plonky2_verifier/verifier.goRaw
 1package plonky2_verifier
 2
 3import (
 4	"fmt"
 5	. "gnark-ed25519/field"
 6	"gnark-ed25519/poseidon"
 7
 8	"github.com/consensys/gnark/frontend"
 9)
10
11type VerifierChip struct {
12	api          frontend.API
13	field        frontend.API
14	poseidonChip poseidon.PoseidonChip
15}
16
17func (c *VerifierChip) GetPublicInputsHash(publicInputs []F) Hash {
18	return c.poseidonChip.HashNoPad(publicInputs)
19}
20
21func (c *VerifierChip) GetChallenges(proofWithPis ProofWithPublicInputs, publicInputsHash Hash, commonData CommonCircuitData) ProofChallenges {
22	config := commonData.Config
23	numChallenges := config.NumChallenges
24	challenger := NewChallengerChip(c.api, c.field, c.poseidonChip)
25
26	var circuitDigest = commonData.CircuitDigest
27
28	challenger.ObserveHash(circuitDigest)
29	challenger.ObserveHash(publicInputsHash)
30	challenger.ObserveCap(proofWithPis.Proof.WiresCap)
31	plonkBetas := challenger.GetNChallenges(numChallenges)
32	plonkGammas := challenger.GetNChallenges(numChallenges)
33
34	challenger.ObserveCap(proofWithPis.Proof.PlonkZsPartialProductsCap)
35	plonkAlphas := challenger.GetNChallenges(numChallenges)
36
37	challenger.ObserveCap(proofWithPis.Proof.QuotientPolysCap)
38	plonkZeta := challenger.GetExtensionChallenge()
39
40	challenger.ObserveOpenings(proofWithPis.Proof.Openings.ToFriOpenings())
41
42	return ProofChallenges{
43		PlonkBetas:  plonkBetas,
44		PlonkGammas: plonkGammas,
45		PlonkAlphas: plonkAlphas,
46		PlonkZeta:   plonkZeta,
47		FriChallenges: challenger.GetFriChallenges(
48			proofWithPis.Proof.OpeningProof.CommitPhaseMerkleCaps,
49			proofWithPis.Proof.OpeningProof.FinalPoly,
50			proofWithPis.Proof.OpeningProof.PowWitness,
51			commonData.DegreeBits,
52			config.FriConfig,
53		),
54	}
55}
56
57func (c *VerifierChip) Verify(proofWithPis ProofWithPublicInputs, verifierData VerifierOnlyCircuitData, commonData CommonCircuitData) {
58	// TODO: Verify shape of the proof?
59
60	publicInputsHash := c.GetPublicInputsHash(proofWithPis.PublicInputs)
61	proofChallenges := c.GetChallenges(proofWithPis, publicInputsHash, commonData)
62	fmt.Printf("%+v\n", proofChallenges)
63}