if (k.signum() == 0) { return new ECPoint.Fp(this.curve, null, null, this.withCompression); }
        public ECPoint multiply(BigInteger k)        {            // BigInteger e = k.mod(n); // n == order this            BigInteger e = k;            BigInteger h = e.multiply(BigInteger.valueOf(3));            ECPoint R = this;            for (int i = h.bitLength() - 2; i > 0; i--)            {                             R = R.twice();                       if (h.testBit(i) && !e.testBit(i))                {                                        //System.out.print("+");                    R = R.add(this);                }                else if (!h.testBit(i) && e.testBit(i))                {                    //System.out.print("-");                    R = R.subtract(this);                }                // else                // System.out.print(".");            }            // System.out.println();            return R;        }