arnaucube
arnaucube/gnark-plonky2-verifierPublic Self-hosted repository
gnark-plonky2-verifier/edwards_curve/edparams.go
edwards_curve/edparams.goRaw
 1package edwards_curve
 2
 3import (
 4	"math/big"
 5)
 6
 7var (
 8	qEd25519, rEd25519 *big.Int
 9)
10
11func init() {
12	// https://neuromancer.sk/std/other/Ed25519
13	qEd25519 = newBigInt("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed")
14	n := newBigInt("1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed")
15	// TODO: is this ok?
16	// h := big.NewInt(8)
17	// rEd25519 = new(big.Int).Mul(n, h)
18	rEd25519 = n
19}
20
21type Ed25519 struct{}
22
23func (fp Ed25519) NbLimbs() uint     { return 4 }
24func (fp Ed25519) BitsPerLimb() uint { return 64 }
25func (fp Ed25519) IsPrime() bool     { return true }
26func (fp Ed25519) Modulus() *big.Int { return qEd25519 }
27func (fp Ed25519) Generator() (*big.Int, *big.Int) {
28	return newBigInt("216936D3CD6E53FEC0A4E231FDD6DC5C692CC7609525A7B2C9562D608F25D51A"),
29		newBigInt("6666666666666666666666666666666666666666666666666666666666666658")
30}
31
32type Ed25519Scalars struct{}
33
34func (fp Ed25519Scalars) NbLimbs() uint     { return 4 }
35func (fp Ed25519Scalars) BitsPerLimb() uint { return 64 }
36func (fp Ed25519Scalars) IsPrime() bool     { return true }
37func (fp Ed25519Scalars) Modulus() *big.Int { return rEd25519 }
38