예제 #1
0
        public void Pool_SameEntropyIsSameDigest()
        {
            var p1 = new EntropyPool();
            var p2 = new EntropyPool();

            p1.Add(EventFromBytes(_Zero8Bytes));
            p2.Add(EventFromBytes(_Zero8Bytes));
            CollectionAssert.AreEqual(p1.GetDigest(), p2.GetDigest());
            p1.Add(EventFromBytes(_Incrementing16Bytes));
            p2.Add(EventFromBytes(_Incrementing16Bytes));
            CollectionAssert.AreEqual(p1.GetDigest(), p2.GetDigest());
        }
예제 #2
0
        public void Pool_OneEventDigestIsNonZero()
        {
            var p = new EntropyPool();

            p.Add(EventFromBytes(_Zero8Bytes));
            Assert.IsFalse(p.GetDigest().All(b => b == 0));
        }
예제 #3
0
        public void Pool_NoEntropyIsSameDigest()
        {
            var p1 = new EntropyPool();
            var p2 = new EntropyPool();

            CollectionAssert.AreEqual(p1.GetDigest(), p2.GetDigest());
        }
예제 #4
0
        public void Pool_CanUseIncrementalHash()
        {
            var p = new EntropyPool(IncrementalHash.CreateHash(HashAlgorithmName.SHA256));

            p.Add(EventFromBytes(_Zero8Bytes));
            Assert.IsFalse(p.GetDigest().All(b => b == 0));
        }
예제 #5
0
        public void Pool_CanUseDifferentHashAlgorithm()
        {
            var p = new EntropyPool(new SHA256Managed());

            p.Add(EventFromBytes(_Zero8Bytes));
            Assert.IsFalse(p.GetDigest().All(b => b == 0));
        }
예제 #6
0
        public void Pool_CountersResetAfterDigest()
        {
            var p = new EntropyPool();

            p.Add(EventFromBytes(_Zero8Bytes));
            Assert.AreEqual(p.TotalEntropyBytes, 8);
            Assert.AreEqual(p.EntropyBytesSinceLastDigest, 8);
            p.GetDigest();
            Assert.AreEqual(p.TotalEntropyBytes, 8);
            Assert.AreEqual(p.EntropyBytesSinceLastDigest, 0);

            p.Add(EventFromBytes(_Zero16Bytes));
            Assert.AreEqual(p.TotalEntropyBytes, 24);
            Assert.AreEqual(p.EntropyBytesSinceLastDigest, 16);
            p.GetDigest();
            Assert.AreEqual(p.TotalEntropyBytes, 24);
            Assert.AreEqual(p.EntropyBytesSinceLastDigest, 0);
        }
예제 #7
0
        //[TestMethod]
        public void Pool_CanUseNonShaBasedAlgorithm()
        {
            var blake2b = System.Data.HashFunction.Blake2.Blake2BFactory.Instance.Create();

            Assert.Fail("TODO: must change the EntropyPool to accept an object which we can plug various hash implementations into.");
            var p = new EntropyPool(new SHA256Managed());

            p.Add(EventFromBytes(_Zero8Bytes));
            Assert.IsFalse(p.GetDigest().All(b => b == 0));
        }
예제 #8
0
        public void Pool_GetDigestResetsCountsBySource()
        {
            var p   = new EntropyPool();
            var evt = EventFromBytes(_Zero16Bytes);

            p.Add(evt);
            Assert.AreEqual(p.GetCountOfBytesBySource().Count, 1);
            var digest = p.GetDigest();

            Assert.AreEqual(p.GetCountOfBytesBySource().Count, 0);
        }