github.com/consensys/gnark@v0.11.0/internal/backend/circuits/div.go (about) 1 package circuits 2 3 import ( 4 "math/big" 5 6 "github.com/consensys/gnark-crypto/ecc" 7 "github.com/consensys/gnark/frontend" 8 ) 9 10 type divCircuit struct { 11 A, B frontend.Variable 12 C frontend.Variable `gnark:",public"` 13 } 14 15 func (circuit *divCircuit) Define(api frontend.API) error { 16 c := api.DivUnchecked(circuit.A, circuit.B) 17 d := api.DivUnchecked(2387287246, circuit.B) 18 e := api.DivUnchecked(circuit.A, 987342642) 19 api.AssertIsEqual(c, circuit.C) 20 api.AssertIsEqual(d, circuit.C) 21 api.AssertIsEqual(e, circuit.C) 22 return nil 23 } 24 25 func init() { 26 27 var good, bad divCircuit 28 29 a := big.NewInt(2387287246) 30 b := big.NewInt(987342642) 31 m := ecc.BN254.ScalarField() 32 var c big.Int 33 c.ModInverse(b, m).Mul(&c, a) 34 c.Mod(&c, m) 35 36 // good.A = a 37 good.A = a 38 good.B = b 39 good.C = c 40 41 // bad.A = a 42 bad.A = a 43 bad.B = b 44 bad.C = 1 45 46 addEntry("div", &divCircuit{}, &good, &bad, []ecc.ID{ecc.BN254}) 47 }