private static EllipticCurvePoint getResult(int[] bits, int index, EllipticCurve curve, EllipticCurvePoint auxPoint)
        {
            EllipticCurvePoint result = auxPoint;

            while (index < bits.Length)
            {
                auxPoint = PointDoubling.doublePoint(curve, auxPoint);
                if (bits[index] == 1)
                {
                    result = PointAddition.addPoints(curve, result, auxPoint);
                }
                index++;
            }

            return(result);
        }
        public static EllipticCurvePoint multiplyPoint(BigInteger prk, EllipticCurvePoint point, EllipticCurve curve)
        {
            if (prk == 0)
            {
                return new EllipticCurvePoint {
                           x = 0, y = 0
                }
            }
            ;
            int[] bits = BitOperations.getBits(prk);

            int index = 0;
            EllipticCurvePoint initial = point;

            while (bits[index] == 0)
            {
                initial = PointDoubling.doublePoint(curve, initial);

                index++;
            }

            return(getResult(bits, index + 1, curve, initial));
        }