// Copyright 2020 ConsenSys Software Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Code generated by consensys/gnark-crypto DO NOT EDIT // Package ffg contains field arithmetic operations for modulus = 0xffffff...000001. // // The API is similar to math/big (big.Int), but the operations are significantly faster (up to 20x for the modular multiplication on amd64, see also https://hackmd.io/@zkteam/modular_multiplication) // // The modulus is hardcoded in all the operations. // // Field elements are represented as an array, and assumed to be in Montgomery form in all methods: // type Element [1]uint64 // // Example API signature // // Mul z = x * y mod q // func (z *Element) Mul(x, y *Element) *Element // // and can be used like so: // var a, b Element // a.SetUint64(2) // b.SetString("984896738") // a.Mul(a, b) // a.Sub(a, a) // .Add(a, b) // .Inv(a) // b.Exp(b, new(big.Int).SetUint64(42)) // // Modulus // 0xffffffff00000001 // base 16 // 18446744069414584321 // base 10 package ffg