github.com/consensys/gnark@v0.11.0/internal/backend/circuits/exp.go (about) 1 package circuits 2 3 import ( 4 "github.com/consensys/gnark/frontend" 5 ) 6 7 type expCircuit struct { 8 X, E frontend.Variable 9 Y frontend.Variable `gnark:",public"` 10 } 11 12 func (circuit *expCircuit) Define(api frontend.API) error { 13 o := frontend.Variable(1) 14 b := api.ToBinary(circuit.E, 4) 15 16 var i int 17 for i < len(b) { 18 o = api.Mul(o, o) 19 mu := api.Mul(o, circuit.X) 20 o = api.Select(b[len(b)-1-i], mu, o) 21 i++ 22 } 23 api.AssertIsEqual(circuit.Y, o) 24 return nil 25 } 26 27 func init() { 28 var circuit, good, bad expCircuit 29 30 good.X = (2) 31 good.E = (12) 32 good.Y = (4096) 33 34 bad.X = (2) 35 bad.E = (11) 36 bad.Y = (4096) 37 38 addEntry("expo", &circuit, &good, &bad, nil) 39 }