gnark-plonky2-verifier/verifier/internal/gates/public_input_gate.go
verifier/internal/gates/public_input_gate.goRaw
1package gates
2
3import (
4 "regexp"
5
6 "github.com/consensys/gnark/frontend"
7 "github.com/succinctlabs/gnark-plonky2-verifier/field"
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(api frontend.API, qeAPI *field.QuadraticExtensionAPI, vars EvaluationVars) []field.QuadraticExtension {
33 constraints := []field.QuadraticExtension{}
34
35 wires := g.WiresPublicInputsHash()
36 hash_parts := vars.publicInputsHash
37 for i := 0; i < 4; i++ {
38 wire := wires[i]
39 hash_part := hash_parts[i]
40
41 diff := qeAPI.SubExtension(vars.localWires[wire], qeAPI.FieldToQE(hash_part))
42 constraints = append(constraints, diff)
43 }
44
45 return constraints
46}