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}"); } } }
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)); }
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); }