arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/plonk/gates/public_input_gate.go
plonk/gates/public_input_gate.goRaw
 1package gates
 2
 3import (
 4	"regexp"
 5
 6	"github.com/consensys/gnark/frontend"
 7	gl "github.com/succinctlabs/gnark-plonky2-verifier/goldilocks"
 8)
 9
10var publicInputGateRegex = regexp.MustCompile("PublicInputGate")
11
12func deserializePublicInputGate(parameters map[string]string) Gate {
13	// Has the format "PublicInputGate"
14	return NewPublicInputGate()
15}
16
17type PublicInputGate struct {
18}
19
20func NewPublicInputGate() *PublicInputGate {
21	return &PublicInputGate{}
22}
23
24func (g *PublicInputGate) Id() string {
25	return "PublicInputGate"
26}
27
28func (g *PublicInputGate) WiresPublicInputsHash() []uint64 {
29	return []uint64{0, 1, 2, 3}
30}
31
32func (g *PublicInputGate) EvalUnfiltered(
33	api frontend.API,
34	glApi gl.Chip,
35	vars EvaluationVars,
36) []gl.QuadraticExtensionVariable {
37	constraints := []gl.QuadraticExtensionVariable{}
38
39	wires := g.WiresPublicInputsHash()
40	hash_parts := vars.publicInputsHash
41	for i := 0; i < len(wires); i++ {
42		wire := wires[i]
43		hash_part := hash_parts[i]
44
45		tmp := gl.NewQuadraticExtensionVariable(hash_part, gl.Zero())
46		diff := glApi.SubExtension(vars.localWires[wire], tmp)
47		constraints = append(constraints, diff)
48	}
49
50	return constraints
51}