Использую Go, и там под кривой
elliptic.P256() из
crypto/elliptic, подразумевается
secp256r1
Рекоммендуемые параметры для этой эллиптической кривой можно проверить сравнив с
https://www.secg.org/sec2-v2.pdf#page=13&zoom=100,0,884
Но CurveParams кривой содержат не все параметры
type CurveParams struct {
P *big.Int // the order of the underlying field
N *big.Int // the order of the base point
B *big.Int // the constant of the curve equation
Gx, Gy *big.Int // (x,y) of the base point
BitSize int // the size of the underlying field
Name string // the canonical name of the curve
}
Не хватает
A и
H, как понимаю они рассчитываться должны из имеющихся.
Так как формула кривой
y^2 = x^3 + ax + b
Пробовал решить так
a = (y^2 - x^3 - b)/xB, _ := new(big.Int).SetString("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b", 16)
Gx, _ := new(big.Int).SetString("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", 16)
Gy, _ := new(big.Int).SetString("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", 16)
x3:=new(big.Int).Mul(Gx, Gx)
x3.Mul(x3, Gx)
Gy.Mul(Gy, Gy)
Gy.Sub(Gy, x3)
Gy.Sub(Gy, B)
a := Gy.Div(Gy, Gx)
aR,_ := new(big.Int).SetString("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", 16)
fmt.Print(aR.Cmp(a)==0, aR, a)
Но что-то результат не сходится.