public void NonAdjacentBitStringShouldHaveTheCorrectIntegerValue(string hex)
        {
            var bs     = new BitString(hex);
            var bigInt = bs.ToPositiveBigInteger();

            var subject = new NonAdjacentBitString(bigInt);

            BigInteger result = 0;

            for (var i = subject.BitLength - 1; i >= 0; i--)
            {
                result += subject.Bits[i] * (BigInteger.One << i);
            }

            Assert.AreEqual(bigInt, result);
        }
        public void NonAdjacentBitStringsShouldNotHaveTwoValuesNextToEachOther(string hex)
        {
            var bs     = new BitString(hex);
            var bigInt = bs.ToPositiveBigInteger();

            var subject = new NonAdjacentBitString(bigInt);

            for (var i = 0; i < subject.BitLength - 1; i++)
            {
                // If the current bit is not 0, the next bit should not be -1 or 1
                if (subject.Bits[i] != 0)
                {
                    Assert.AreNotEqual(1, System.Math.Abs(subject.Bits[i + 1]), $"Adjacent bit found at {i}");
                }
            }
        }
Beispiel #3
0
        private EdPoint Multiply(ExtendedEdPoint startPoint, NonAdjacentBitString nafBs)
        {
            var point  = new ExtendedEdPoint(0, 1, 0, 1);
            var naBits = nafBs.Bits;

            for (var i = naBits.Length - 1; i >= 0; i--)
            {
                point = Double(point);
                if (naBits[i] == 1)
                {
                    point = Add(point, startPoint);
                }
                else if (naBits[i] == -1)
                {
                    point = Subtract(point, startPoint);
                }
            }

            return(ExtendedToEdPoint(point));
        }
Beispiel #4
0
        private EccPoint Multiply(EccPoint startPoint, NonAdjacentBitString nafBs)
        {
            var point  = new EccPoint("infinity");
            var naBits = nafBs.Bits;

            for (var i = naBits.Length - 1; i >= 0; i--)
            {
                point = Double(point);
                if (naBits[i] == 1)
                {
                    point = Add(point, startPoint);
                }
                else if (naBits[i] == -1)
                {
                    point = Subtract(point, startPoint);
                }
            }

            return(point);
        }