在椭圆曲线上指向零点

时间:2015-03-24 11:43:34

标签: java elliptic-curve

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

现在我正在实施存在,归属,总和,反思等基本操作。

不幸的是,我现在已经陷入困境,我必须实现零的概念,即椭圆曲线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
     */
}

PS:我知道java.security.spec.EllipticCurve的存在,但由于我将这个类主要用于数学目的,我觉得有必要创建我的个人库 ex从头

1 个答案:

答案 0 :(得分:1)

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

Double.POSITIVE_INFINITY;

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

您可以使用解决方法,i。即一个非常大的值,你知道它将永远比任何其他值大。