gpt4 book ai didi

java - 质域上椭圆曲线的标量乘法

转载 作者:行者123 更新时间:2023-11-30 04:09:54 26 4
gpt4 key购买 nike

我正在尝试在 P192r1 的素数域上实现标量乘法。通过使用借自 java Scalar Multiplication 的代码,点加法可以正常工作。

但是关于我再次使用该链接中的代码的点加倍,它没有得到正确的结果。我试图找出错误,但找不到。有没有人已经解决了这个错误。

 `public static ECPoint doublePoint(ECPoint r) {
// TODO Auto-generated method stub

BigInteger ONE = new BigInteger("1");;
BigInteger TWO = new BigInteger("2");
BigInteger p = new BigInteger("6277101735386680763835789423207666416083908700390324961279");

BigInteger slope = (r.getAffineX().pow(2)).multiply(new BigInteger("3"));

slope = slope.add(new BigInteger("3"));
slope = slope.multiply((r.getAffineY().multiply(TWO)).modInverse(p));
BigInteger Xout = slope.pow(2).subtract(r.getAffineX().multiply(new BigInteger("2"))).mod(p);
BigInteger Yout = (r.getAffineY().negate()).add(slope.multiply(r.getAffineX().subtract(Xout))).mod(p);
ECPoint out = new ECPoint(Xout, Yout);
return out;
}`

最佳答案

原代码在这一行添加了3

slope = slope.add(new BigInteger("3"));

但是应该添加a,所以用这一行替换它

slope = slope.add(a);

其中a

static BigInteger a = new BigInteger("6277101735386680763835789423207666416083908700390324961276");

然后你会得到

Doubling is correct

当你运行主函数时。

关于java - 质域上椭圆曲线的标量乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19890542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com