如何使用 Golang big.Int 计算 'x^3 + ax + b mod p'



我正在尝试找到椭圆点的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)
}

最新更新