github.com/consensys/gnark-crypto@v0.14.0/ecc/bls12-377/twistededwards/curve.go (about)

     1  // Copyright 2020 Consensys Software Inc.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  // Code generated by consensys/gnark-crypto DO NOT EDIT
    16  
    17  package twistededwards
    18  
    19  import (
    20  	"math/big"
    21  	"sync"
    22  
    23  	"github.com/consensys/gnark-crypto/ecc/bls12-377/fr"
    24  )
    25  
    26  // CurveParams curve parameters: ax^2 + y^2 = 1 + d*x^2*y^2
    27  type CurveParams struct {
    28  	A, D     fr.Element
    29  	Cofactor fr.Element
    30  	Order    big.Int
    31  	Base     PointAffine
    32  }
    33  
    34  // GetEdwardsCurve returns the twisted Edwards curve on bls12-377/Fr
    35  func GetEdwardsCurve() CurveParams {
    36  	initOnce.Do(initCurveParams)
    37  	// copy to keep Order private
    38  	var res CurveParams
    39  
    40  	res.A.Set(&curveParams.A)
    41  	res.D.Set(&curveParams.D)
    42  	res.Cofactor.Set(&curveParams.Cofactor)
    43  	res.Order.Set(&curveParams.Order)
    44  	res.Base.Set(&curveParams.Base)
    45  
    46  	return res
    47  }
    48  
    49  var (
    50  	initOnce    sync.Once
    51  	curveParams CurveParams
    52  )
    53  
    54  func initCurveParams() {
    55  	curveParams.A.SetString("-1")
    56  	curveParams.D.SetString("3021")
    57  	curveParams.Cofactor.SetString("4")
    58  	curveParams.Order.SetString("2111115437357092606062206234695386632838870926408408195193685246394721360383", 10)
    59  
    60  	curveParams.Base.X.SetString("717051916204163000937139483451426116831771857428389560441264442629694842243")
    61  	curveParams.Base.Y.SetString("882565546457454111605105352482086902132191855952243170543452705048019814192")
    62  }
    63  
    64  // mulByA multiplies fr.Element by curveParams.A
    65  func mulByA(x *fr.Element) {
    66  	x.Neg(x)
    67  }