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  }