github.com/consensys/gnark@v0.11.0/internal/backend/circuits/inv.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 invCircuit struct { 11 A frontend.Variable 12 C frontend.Variable `gnark:",public"` 13 } 14 15 func (circuit *invCircuit) Define(api frontend.API) error { 16 d := api.Inverse(circuit.A) 17 e := api.Inverse(2387287246) 18 api.AssertIsEqual(d, circuit.C) 19 api.AssertIsEqual(e, circuit.C) 20 return nil 21 } 22 23 func init() { 24 25 var good, bad invCircuit 26 27 a := big.NewInt(2387287246) 28 m := ecc.BN254.ScalarField() 29 var c big.Int 30 c.ModInverse(a, m) 31 32 good.A = a 33 good.C = c 34 35 bad.A = a 36 bad.C = 1 37 38 addEntry("inv", &invCircuit{}, &good, &bad, []ecc.ID{ecc.BN254}) 39 }