gnark-plonky2-verifier/plonky2_verifier/public_input_gate.go
plonky2_verifier/public_input_gate.goRaw
1package plonky2_verifier
2
3import (
4 . "gnark-plonky2-verifier/field"
5 "regexp"
6)
7
8var publicInputGateRegex = regexp.MustCompile("PublicInputGate")
9
10func deserializePublicInputGate(parameters map[string]string) gate {
11 // Has the format "PublicInputGate"
12 return NewPublicInputGate()
13}
14
15type PublicInputGate struct {
16}
17
18func NewPublicInputGate() *PublicInputGate {
19 return &PublicInputGate{}
20}
21
22func (g *PublicInputGate) Id() string {
23 return "PublicInputGate"
24}
25
26func (g *PublicInputGate) WiresPublicInputsHash() []uint64 {
27 return []uint64{0, 1, 2, 3}
28}
29
30func (g *PublicInputGate) EvalUnfiltered(p *PlonkChip, vars EvaluationVars) []QuadraticExtension {
31 constraints := []QuadraticExtension{}
32
33 wires := g.WiresPublicInputsHash()
34 hash_parts := vars.publicInputsHash
35 for i := 0; i < 4; i++ {
36 wire := wires[i]
37 hash_part := hash_parts[i]
38
39 diff := p.qeAPI.SubExtension(vars.localWires[wire], p.qeAPI.FieldToQE(hash_part))
40 constraints = append(constraints, diff)
41 }
42
43 return constraints
44}