Я работаю над библиотекой, которая позволяет мне работать с эллиптическими кривыми. Он все еще находится в зачаточном состоянии и пока состоит только из двух классов: EllipticCurve и Point.
Сейчас я реализую базовые операции существования, принадлежности, суммы, отражения и т.д.
К сожалению, сейчас я застрял, потому что мне нужно реализовать концепцию нуля, т. е. точки эллиптической кривой E, пересекающей прямую, проходящую через P и -P, где P = (x, y) и -P = (x, -у). Итак, мой вопрос можно было бы перефразировать как «как мне реализовать точку в бесконечности?»
Вот часть класса 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 novo .