Exemple #1
0
        /// <summary>
        /// Based on the Fixed-base comb method (Algorithm 17 from https://link.springer.com/content/pdf/10.1007/3-540-44499-8_1.pdf)
        /// </summary>
        /// <param name="scalar"></param>
        /// <returns></returns>
        private EccPoint FastMultiply(BigInteger scalar)
        {
            var width      = 4;
            var degree     = FieldSizeQ.ExactBitLength();
            var d          = degree.CeilingDivide(width);
            var scalarBits = new BitString(scalar, degree).Bits;
            var point      = new EccPoint("infinity");

            for (var i = d - 1; i >= 0; i--)
            {
                point = Double(point);

                var index = 0;
                for (var j = width - 1; j >= 0; j--)
                {
                    index *= 2;
                    if (i + d * j >= degree)
                    {
                        continue;
                    }
                    if (scalarBits[i + d * j])
                    {
                        index++;
                    }
                }

                if (index != 0)
                {
                    point = Add(point, _precomputedMultiplication[index]);
                }
            }

            return(point);
        }
Exemple #2
0
        public bool PointExistsInField(EccPoint point)
        {
            var m = FieldSizeQ.ExactBitLength();

            if (point.X.ExactBitLength() == m || point.Y.ExactBitLength() == m)
            {
                return(false);
            }

            return(true);
        }