golang 实现比特币内核:实现基于有限域上的椭圆曲线
我们已经看到了椭圆曲线上整数的操作,令人惊讶的是,我们可以将这些整数转换为有限域中的成员而不出现问题。请记住,字段成员的运算“+”和“.”是正常的算术运算,但结果会进行模运算。结果表明,即使基于模数操作,椭圆曲线点加法仍然成立。
例如,我们可以验证有限域的阶为103,从该字段中取出两个成员17和64,将它们组合为一个点坐标(17, 64),该点在模103的曲线 y^2 = x^3 + 7 上:
y^2 = 64^2 % 103 = 79,x^3 + 7 = (17^3 + 7) % 103 = 79
现在让我们将Point结构重写,将其组件从big.Int改为FieldElement,修改后的代码如下所示:
package elliptic_curveimport ("fmt""math/big"
)type OP_TYPE intconst (ADD OP_TYPE = iotaSUBMULDIVEXP
)type Point struct {a *FieldElementb *FieldElementx *FieldElementy *FieldElement
}func OpOnBig(x *FieldElement, y *FieldElement, s