public void Zero_Create() { var zero = new BigEndianBigInteger(0); Assert.AreEqual(new BigEndianBigInteger(new byte[0]), zero); Assert.AreEqual(new BigEndianBigInteger(new byte[2]), zero); }
public void CloserNodes() { var value = new BigEndianBigInteger(1); var closeNodes = new List <Node> (); var farNodes = new List <Node> (); for (int i = 0; i < Bucket.MaxCapacity; i++) { closeNodes.Add(new Node(new NodeId(value << i), new IPEndPoint(IPAddress.Any, i))); farNodes.Add(new Node(new NodeId(value << (i + Bucket.MaxCapacity)), new IPEndPoint(IPAddress.Any, i + Bucket.MaxCapacity))); } var nodes = new ClosestNodesCollection(NodeId.Minimum); foreach (var node in farNodes) { Assert.IsTrue(nodes.Add(node), "#1"); } Assert.AreEqual(Bucket.MaxCapacity, nodes.Capacity, "#2"); CollectionAssert.AreEquivalent(farNodes, nodes, "#3"); foreach (var node in closeNodes) { Assert.IsTrue(nodes.Add(node), "#4"); } Assert.AreEqual(Bucket.MaxCapacity, nodes.Capacity, "#5"); CollectionAssert.AreEquivalent(closeNodes, nodes, "#6"); foreach (var node in farNodes) { Assert.IsFalse(nodes.Add(node), "#7"); } }
public void CompareTest2() { byte[] data = { 1, 179, 114, 132, 233, 117, 195, 250, 164, 35, 157, 48, 170, 96, 87, 111, 42, 137, 195, 199 }; var a = new BigEndianBigInteger(data); var b = new BigEndianBigInteger(new byte[0]); Assert.AreNotEqual(a, b, "#1"); }
public void Zero_Create() { var zero = new BigEndianBigInteger(0); Assert.AreEqual(new BigEndianBigInteger(new byte[0]), zero); Assert.AreEqual(new BigEndianBigInteger(new byte[2]), zero); Assert.AreEqual(new BigEndianBigInteger(BigEndianBigInteger.FallbackConstructor(new byte[0])), zero); Assert.AreEqual(new BigEndianBigInteger(BigEndianBigInteger.FallbackConstructor(new byte[1])), zero); Assert.AreEqual(new BigEndianBigInteger(BigEndianBigInteger.FallbackConstructor(new byte[2])), zero); }
internal NodeId(BigEndianBigInteger value) { Bytes = value.ToByteArray(); if (Bytes.Length < 20) { var newBytes = new byte[20]; Buffer.BlockCopy(Bytes, 0, newBytes, newBytes.Length - Bytes.Length, Bytes.Length); Bytes = newBytes; } if (Bytes.Length != 20) { throw new ArgumentException("The provided value cannot be represented in 160bits", nameof(value)); } }
internal NodeId(BigEndianBigInteger value) { var b = value.ToByteArray(); if (b.Length < 20) { byte[] newBytes = new byte[20]; b.AsSpan().CopyTo(newBytes.AsSpan().Slice(newBytes.Length - b.Length, b.Length)); b = newBytes; } if (b.Length != 20) { throw new ArgumentException("The provided value cannot be represented in 160bits", nameof(value)); } Bytes = b; }
public static byte[] Calculate(BigEndianBigInteger a, BigEndianBigInteger b) { byte[] bytes = a.ModPow(b, Prime).ToByteArray(); if (bytes.Length < 96) { byte[] oldBytes = bytes; bytes = new byte[96]; Array.Copy(oldBytes, 0, bytes, 96 - oldBytes.Length, oldBytes.Length); for (int i = 0; i < (96 - oldBytes.Length); i++) { bytes[i] = 0; } } else if (bytes.Length > 96) { throw new ArgumentException("ModuloCalculator should return 768bits or fewer as the modulus is 768 bits long"); } return(bytes); }
public void Zero_ToByteArray() { var result = new BigEndianBigInteger(0).ToByteArray(); Assert.IsTrue(result.Length == 0 || result.Single() == 0); Assert.IsEmpty(BigEndianBigInteger.FallbackToBigEndianByteArray(new BigEndianBigInteger(0))); // Check several arrays foreach (var array in new[] { new byte[0], new byte[1], new byte[2] }) { var fastPath = new BigEndianBigInteger(array); var slowPath = new BigEndianBigInteger(BigEndianBigInteger.FallbackConstructor(array)); foreach (var value in new[] { fastPath, slowPath }) { result = value.ToByteArray(); Assert.IsTrue(result.Length == 0 || result.Single() == 0); Assert.IsEmpty(BigEndianBigInteger.FallbackToBigEndianByteArray(value)); } } }
public static byte[] Calculate(BigEndianBigInteger a, byte[] b) { return(Calculate(a, new BigEndianBigInteger(b))); }
public void Zero_ToByteArray() { var result = new BigEndianBigInteger(0).ToByteArray(); Assert.IsTrue(result.Length == 0 || result.Single() == 0); }