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	challenger.ObserveHash(circuitDigest)
30	challenger.ObserveHash(publicInputsHash)
31	challenger.ObserveCap(proofWithPis.Proof.WiresCap)
32	plonkBetas := challenger.GetNChallenges(numChallenges)
33	plonkGammas := challenger.GetNChallenges(numChallenges)
34
35	challenger.ObserveCap(proofWithPis.Proof.PlonkZsPartialProductsCap)
36	plonkAlphas := challenger.GetNChallenges(numChallenges)
37
38	challenger.ObserveCap(proofWithPis.Proof.QuotientPolysCap)
39	plonkZeta := challenger.GetExtensionChallenge()
40
41	challenger.ObserveOpenings(proofWithPis.Proof.Openings.ToFriOpenings())
42
43	return ProofChallenges{
44		PlonkBetas:  plonkBetas,
45		PlonkGammas: plonkGammas,
46		PlonkAlphas: plonkAlphas,
47		PlonkZeta:   plonkZeta,
48		FriChallenges: challenger.GetFriChallenges(
49			proofWithPis.Proof.OpeningProof.CommitPhaseMerkleCaps,
50			proofWithPis.Proof.OpeningProof.FinalPoly,
51			proofWithPis.Proof.OpeningProof.PowWitness,
52			commonData.DegreeBits,
53			config.FriConfig,
54		),
55	}
56}
57
58func (c *VerifierChip) Verify(proofWithPis ProofWithPublicInputs, verifierData VerifierOnlyCircuitData, commonData CommonCircuitDataRaw) {
59	publicInputsHash := c.GetPublicInputsHash(proofWithPis.PublicInputs)
60	proofChallenges := c.GetChallenges(proofWithPis, publicInputsHash, commonData)
61	fmt.Printf("%+v\n", proofChallenges)
62}