gnark-plonky2-verifier/verifier/internal/gates/gate.go
verifier/internal/gates/gate.goRaw
1package gates
2
3import (
4 "fmt"
5 "regexp"
6
7 "github.com/consensys/gnark/frontend"
8 "github.com/succinctlabs/gnark-plonky2-verifier/field"
9)
10
11type Gate interface {
12 Id() string
13 EvalUnfiltered(api frontend.API, qeAPI *field.QuadraticExtensionAPI, vars EvaluationVars) []field.QuadraticExtension
14}
15
16var gateRegexHandlers = map[*regexp.Regexp]func(parameters map[string]string) Gate{
17 aritheticGateRegex: deserializeArithmeticGate,
18 aritheticExtensionGateRegex: deserializeExtensionArithmeticGate,
19 baseSumGateRegex: deserializeBaseSumGate,
20 constantGateRegex: deserializeConstantGate,
21 cosetInterpolationGateRegex: deserializeCosetInterpolationGate,
22 exponentiationGateRegex: deserializeExponentiationGate,
23 mulExtensionGateRegex: deserializeMulExtensionGate,
24 noopGateRegex: deserializeNoopGate,
25 poseidonGateRegex: deserializePoseidonGate,
26 poseidonMdsGateRegex: deserializePoseidonMdsGate,
27 publicInputGateRegex: deserializePublicInputGate,
28 randomAccessGateRegex: deserializeRandomAccessGate,
29 reducingExtensionGateRegex: deserializeReducingExtensionGate,
30 reducingGateRegex: deserializeReducingGate,
31}
32
33func GateInstanceFromId(gateId string) Gate {
34 for regex, handler := range gateRegexHandlers {
35 matches := regex.FindStringSubmatch(gateId)
36 if matches != nil {
37 parameters := make(map[string]string)
38 for i, name := range regex.SubexpNames() {
39 if i != 0 && name != "" {
40 parameters[name] = matches[i]
41 }
42 }
43
44 if matches != nil {
45 return handler(parameters)
46 }
47 }
48 }
49 panic(fmt.Sprintf("Unknown gate ID %s", gateId))
50}