package proof import ( "math/big" "github.com/arnaucube/go-snark/bn128" "github.com/arnaucube/go-snark/circuit" "github.com/arnaucube/go-snark/fields" "github.com/arnaucube/go-snark/r1csqap" ) type utils struct { Bn bn128.Bn128 FqR fields.Fq PF r1csqap.PolynomialField } // Utils is the data structure holding the BN128, FqR Finite Field over R, PolynomialField, that will be used inside the snarks operations var Utils = prepareUtils() func prepareUtils() utils { bn, err := bn128.NewBn128() if err != nil { panic(err) } // new Finite Field fqR := fields.NewFq(bn.R) // new Polynomial Field pf := r1csqap.NewPolynomialField(fqR) return utils{ Bn: bn, FqR: fqR, PF: pf, } } // Proof is type Proof interface{} // Setup is type Setup interface { Z() []*big.Int Init(witnessLength int, circuit circuit.Circuit, alphas, betas, gammas [][]*big.Int) error Generate(circuit circuit.Circuit, w []*big.Int, px []*big.Int) (Proof, error) Verify(circuit circuit.Circuit, proof Proof, publicSignals []*big.Int, debug bool) bool }