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	. "gnark-ed25519/field"
 5	"gnark-ed25519/poseidon"
 6
 7	"github.com/consensys/gnark/frontend"
 8)
 9
10type VerifierChip struct {
11	api          frontend.API
12	field        frontend.API
13	poseidonChip poseidon.PoseidonChip
14}
15
16func (c *VerifierChip) GetPublicInputsHash(publicInputs []F) Hash {
17	return c.poseidonChip.HashNoPad(publicInputs)
18}
19
20func (c *VerifierChip) GetChallenges(proofWithPis ProofWithPublicInputs, publicInputsHash Hash, commonData CommonCircuitData) ProofChallenges {
21	config := commonData.Config
22	numChallenges := config.NumChallenges
23	challenger := NewChallengerChip(c.api, c.field, c.poseidonChip)
24
25	challenger.ObserveHash(commonData.CircuitDigest)
26	challenger.ObserveHash(publicInputsHash)
27	challenger.ObserveCap(proofWithPis.Proof.WiresCap)
28	plonkBetas := challenger.GetNChallenges(numChallenges)
29	plonkGammas := challenger.GetNChallenges(numChallenges)
30
31	challenger.ObserveCap(proofWithPis.Proof.PlonkZsPartialProductsCap)
32	plonkAlphas := challenger.GetNChallenges(numChallenges)
33
34	challenger.ObserveCap(proofWithPis.Proof.QuotientPolysCap)
35	plonkZeta := challenger.GetExtensionChallenge()
36
37	_, _, _, _ = plonkAlphas, plonkBetas, plonkGammas, plonkZeta
38
39	challenger.ObserveOpenings(proofWithPis.Proof.Openings.ToFriOpenings())
40
41	return ProofChallenges{
42		PlonkBetas:  plonkBetas,
43		PlonkGammas: plonkGammas,
44		PlonkAlphas: plonkAlphas,
45		PlonkZeta:   plonkZeta,
46		FriChallenges: challenger.GetFriChallenges(
47			proofWithPis.Proof.OpeningProof.CommitPhaseMerkleCaps,
48			proofWithPis.Proof.OpeningProof.FinalPoly,
49			proofWithPis.Proof.OpeningProof.PowWitness,
50			commonData.DegreeBits, config.FriConfig,
51		),
52	}
53}
54
55func (c *VerifierChip) Verify(proofWithPis ProofWithPublicInputs, verifierData VerifierOnlyCircuitData, commonData CommonCircuitData) {
56	publicInputsHash := c.GetPublicInputsHash(proofWithPis.PublicInputs)
57	_ = c.GetChallenges(proofWithPis, publicInputsHash, commonData)
58}