1

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;
    }`
4

1 に答える 1

2

元のコードはこの行に 3 を追加しました

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

ただし、追加する必要があるaため、この行に置き換えます

slope = slope.add(a);

どこaですか

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

それからあなたは得るでしょう

Doubling is correct

メイン関数を実行すると。

于 2013-11-12T09:09:50.733 に答える