|
package edwards_curve
|
|
|
|
import (
|
|
"math/big"
|
|
)
|
|
|
|
var (
|
|
qEd25519, rEd25519 *big.Int
|
|
)
|
|
|
|
func init() {
|
|
// https://neuromancer.sk/std/other/Ed25519
|
|
qEd25519 = newBigInt("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed")
|
|
rEd25519 = newBigInt("1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed")
|
|
}
|
|
|
|
type Ed25519 struct{}
|
|
|
|
func (fp Ed25519) NbLimbs() uint { return 4 }
|
|
func (fp Ed25519) BitsPerLimb() uint { return 64 }
|
|
func (fp Ed25519) IsPrime() bool { return true }
|
|
func (fp Ed25519) Modulus() *big.Int { return qEd25519 }
|
|
func (fp Ed25519) Generator() (*big.Int, *big.Int) {
|
|
return newBigInt("216936D3CD6E53FEC0A4E231FDD6DC5C692CC7609525A7B2C9562D608F25D51A"),
|
|
newBigInt("6666666666666666666666666666666666666666666666666666666666666658")
|
|
}
|
|
|
|
type Ed25519Scalars struct{}
|
|
|
|
func (fp Ed25519Scalars) NbLimbs() uint { return 4 }
|
|
func (fp Ed25519Scalars) BitsPerLimb() uint { return 64 }
|
|
func (fp Ed25519Scalars) IsPrime() bool { return true }
|
|
func (fp Ed25519Scalars) Modulus() *big.Int { return rEd25519 }
|
|
|