我正在尝试找到椭圆点的Y坐标。我知道公式是y^2≡x^3+ax+b mod p
.
但是我不确定如何在 Go 中实际编程。
xCubed.Exp(X, 3, nil)
AX.Mul(A,X)
N.Add(XPow3, AX) // x^3 + ax
N.Mod(N, P) // mod p
N.Add(N, B) // (x^3 + ax) + b
N.Mod(N, P) // mod p
return N
其中 xCubed,X,N,P,B *big.Int
,N 表示 y^2
我是模算术的菜鸟,所以我的假设 mod P 适用于每个操作;这是计算x^3 + ax + b mod p
的正确方法吗?
编辑:我应该添加AX。模组(p) ?
我想通了,通过在椭圆形库中查找一些代码
func GetY(x *big.Int, curve *elliptic.CurveParams) *big.Int {
x3 := new(big.Int).Mul(x, x)
x3.Mul(x3, x)
threeX := new(big.Int).Lsh(x, 1)
threeX.Add(threeX, x)
x3.Sub(x3, threeX)
x3.Add(x3, curve.B)
x3.Mod(x3, curve.P)
return x3.ModSqrt(x3, curve.P)
}