package gates
|
|
|
|
import (
|
|
"regexp"
|
|
|
|
"github.com/consensys/gnark/frontend"
|
|
"github.com/succinctlabs/gnark-plonky2-verifier/field"
|
|
)
|
|
|
|
var publicInputGateRegex = regexp.MustCompile("PublicInputGate")
|
|
|
|
func deserializePublicInputGate(parameters map[string]string) Gate {
|
|
// Has the format "PublicInputGate"
|
|
return NewPublicInputGate()
|
|
}
|
|
|
|
type PublicInputGate struct {
|
|
}
|
|
|
|
func NewPublicInputGate() *PublicInputGate {
|
|
return &PublicInputGate{}
|
|
}
|
|
|
|
func (g *PublicInputGate) Id() string {
|
|
return "PublicInputGate"
|
|
}
|
|
|
|
func (g *PublicInputGate) WiresPublicInputsHash() []uint64 {
|
|
return []uint64{0, 1, 2, 3}
|
|
}
|
|
|
|
func (g *PublicInputGate) EvalUnfiltered(api frontend.API, qeAPI *field.QuadraticExtensionAPI, vars EvaluationVars) []field.QuadraticExtension {
|
|
constraints := []field.QuadraticExtension{}
|
|
|
|
wires := g.WiresPublicInputsHash()
|
|
hash_parts := vars.publicInputsHash
|
|
for i := 0; i < 4; i++ {
|
|
wire := wires[i]
|
|
hash_part := hash_parts[i]
|
|
|
|
diff := qeAPI.SubExtension(vars.localWires[wire], qeAPI.FieldToQE(hash_part))
|
|
constraints = append(constraints, diff)
|
|
}
|
|
|
|
return constraints
|
|
}
|