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