java - 椭圆曲线上的零点

标签 java elliptic-curve

我正在开发一个允许我使用椭圆曲线的库。它还处于萌芽状态,到目前为止它只包含两个类,EllipticCurvePoint

现在我正在实现存在、归属、总和、反射等基本操作。

不幸的是,我现在陷入困境,我必须实现零的概念,即椭圆曲线 E 与 P 和 -P 相交的点,其中 P = (x,y) 和 -P = (x,-y)。所以,我的问题可以改写为“如何实现无穷远点?”

这是到目前为止 Point 类的一部分:

public class Point implements Comparable<Point> {
    private static final BigDecimal MINUSONE = new BigDecimal(-1);

    private BigDecimal x;
    private BigDecimal y;
    private EllipticCurve e;

    public Point(BigDecimal x, BigDecimal y, EllipticCurve e) {
        if(x != null && y != null && e != null) {
            if(liesOn(x,y,e)) {
                this.x = x;
                this.y = y;
                this.e = e;
            }
        }
    }

    public Point reflect() {
        return new Point(x,y.multiply(MINUSONE),e);
    }

    public Point add(Point o) {
        if(this.e == o.getE()) {
            if(this == o) {
                return this.multiply(2);
            }
            if(o == this.reflect()) {
                return /*THE INFAMOUS ZERO POINT*/;
            }

            BigDecimal a;
            BigDecimal b;

            /*
             * computation I still haven't implemented
             */

            return new Point(a,b,e);
        }
    }
    /*
     * other methods
     */
}

P.S.:我知道 java.security.spec.EllipticCurve 的存在,但由于我主要将此类用于数学目的,所以我觉得有必要创建我的个人库ex novo.

最佳答案

无法使用 BigDecimal 来表示无穷大本身。我所知道的 Java 中唯一的方法是:

Double.POSITIVE_INFINITY;

IntegerFloat等。您也不能从上面获取valueOf,因为它会抛出NumberFormatException

您可以使用解决方法,即。 e.一个非常大的值,您知道它总是比任何其他值都大。

关于java - 椭圆曲线上的零点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29231792/

相关文章:

c++ - 如何将 ECDSA DER 编码的签名数据转换为 Microsoft CNG 支持的格式?

java - 如何使用 ECDH 加密明文?

c - 椭圆曲线密码学中的点减法

java - 用于 Java 的充气城堡中的 EC ElGamal

java - 如何使用 JFileChooser 预填充保存对话框?

java - 将字符串数组转换为数组列表?

java - 启动线程作为最终类的构造函数的最后一条语句

java - Android - 从磁盘上传图像

java - Jersey:使用百分比编码解码 QueryParam

java - 为 jCardSim 添加对 bouncycaSTLe API 的支持