Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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");
            }
        }
Esempio n. 3
0
        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");
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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));
            }
        }
Esempio n. 6
0
        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;
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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));
                }
            }
        }
Esempio n. 9
0
 public static byte[] Calculate(BigEndianBigInteger a, byte[] b)
 {
     return(Calculate(a, new BigEndianBigInteger(b)));
 }
Esempio n. 10
0
        public void Zero_ToByteArray()
        {
            var result = new BigEndianBigInteger(0).ToByteArray();

            Assert.IsTrue(result.Length == 0 || result.Single() == 0);
        }