class PointEd25519 extends Point {

    @Override
    public Point doubling() {
        Coordinate x1 = this.x;
        Coordinate y1 = this.y;
        Coordinate z1 = this.z;

        Coordinate A = x1.multiply(x1).mod();
        Coordinate B = y1.multiply(y1).mod();
        Coordinate C = new CoordinateEd25519(BigInteger.ONE.shiftLeft(1)).multiply(z1).multiply(z1).mod();
        Coordinate H = A.add(B).mod();
        Coordinate E = H.subtract(x1.add(y1).multiply(x1.add(y1)).mod()).mod();
        Coordinate G = A.subtract(B).mod();
        Coordinate F = C.add(G).mod();

        Coordinate X3 = E.multiply(F).mod();
        Coordinate Y3 = G.multiply(H).mod();
        Coordinate T3 = E.multiply(H).mod();
        Coordinate Z3 = F.multiply(G).mod();

        return new PointEd25519(X3, Y3, Z3, T3);
    }

      PointEd25519(Coordinate x, Coordinate y, Coordinate z, Coordinate t);

}