Exemple #1
0
 private static byte[] ComputeLeafHash(byte[] rawData)
 {
     var data = new byte[rawData.Length + 1];
     data[0] = LeafHashMark;
     rawData.CopyTo(data, 1);
     var tiger = new TigerHash();
     return tiger.ComputeHash(data);
 }
Exemple #2
0
 private static byte[] ComputeInternalHash(byte[] leafA, byte[] leafB)
 {
     var data = new byte[leafA.Length + leafB.Length + 1];
     data[0] = InternalHashMark;
     leafA.CopyTo(data, 1);
     leafB.CopyTo(data, leafA.Length + 1);
     var tiger = new TigerHash();
     return tiger.ComputeHash(data);
 }
        public override async Task<bool> Guard(StateMachineEvent evt, Command parameter)
        {
            var command = (Information)parameter;
            if (!command.Pid.IsDefined)
            {
                CreateRequiredFieldIsMissing("PD");
                return false;
            }

            if (!command.Cid.IsDefined)
            {
                CreateRequiredFieldIsMissing("ID");
                return false;
            }

            var cid = AdcBase32Encoder.Decode(command.Cid.Value);
            var pid = AdcBase32Encoder.Decode(command.Pid.Value);
            var hash = new TigerHash().ComputeHash(pid);
            if (!hash.SequenceEqual(cid))
            {
                CreateInvalidPid();
                return false;
            }

            if (!command.IpAddressV4.IsDefined && !command.IpAddressV6.IsDefined)
            {
                CreateRequiredFieldIsMissing("I4");
                return false;
            }

            if (command.IpAddressV4.IsDefined && command.IpAddressV4.Value != _user.ClientIPv4.ToString())
            {
                CreateInvalidIPv4(_user.ClientIPv4.ToString());
                return false;
            }

            if (command.IpAddressV6.IsDefined && command.IpAddressV6.Value != _user.ClientIPv6.ToString())
            {
                CreateInvalidIPv6(_user.ClientIPv6.ToString());
                return false;
            }

            if (!command.Nickname.IsDefined || string.IsNullOrWhiteSpace(command.Nickname.Value))
            {
                CreateInvalidNick();
                return false;
            }

            var catalog = ServiceProxy.Create<ICatalog>(new Uri("fabric:/FabricAdcHub.ServiceFabric/Catalog"));
            if (!await catalog.ReserveNick(_user.Sid, command.Nickname.Value))
            {
                CreateNonUniqueNick();
                return false;
            }

            return true;
        }
Exemple #4
0
        public void TigerShouldBeCorrectForAllTestData()
        {
            foreach (var pair in TestData)
            {
                // arrange
                var tiger = new TigerHash();

                // act
                var hash = tiger.ComputeHash(Encoding.ASCII.GetBytes(pair.Key));

                // assert
                Assert.Equal(pair.Value, HashToString(hash), true);
            }
        }
Exemple #5
0
        public void TigerShouldBeCorrectForTestDataSet1()
        {
            TestDataSet1.Add(new string('a', 1000000), "6DB0E2729CBEAD93D715C6A7D36302E9B3CEE0D2BC314B41");
            foreach (var pair in TestDataSet1)
            {
                // arrange
                var tiger = new TigerHash();

                // act
                var hash = tiger.ComputeHash(Encoding.ASCII.GetBytes(pair.Key));

                // assert
                Assert.Equal(pair.Value, HashToString(hash), true);
            }
        }
Exemple #6
0
        public static byte[] ComputeTth(Stream data)
        {
            if (data.Length == 0)
            {
                var tiger = new TigerHash();
                return tiger.ComputeHash(new byte[] { 0 });
            }

            if (data.Length <= BlockSize)
            {
                return ComputeOneBlockTth(data);
            }

            var leafHashes = LoadLeafHash(data);
            return GetRootHash(leafHashes);
        }
Exemple #7
0
        public void TigerShouldBeCorrectForTestDataSet2()
        {
            var correctHashes = File.ReadAllLines("TestSet2Data.txt");
            foreach (var byteNum in Enumerable.Range(0, 128))
            {
                // arrange
                var data = new byte[byteNum];
                var tiger = new TigerHash();

                // act
                var hash = tiger.ComputeHash(data);

                // assert
                Assert.Equal(correctHashes[byteNum * 8], HashToString(hash), true);
            }
        }
Exemple #8
0
        public void TigerShouldBeCorrectForTestDataSet4()
        {
            var data = new byte[24];

            // arrange
            var tiger = new TigerHash();

            // act
            var hash = tiger.ComputeHash(data);

            // assert
            Assert.Equal("CDDDCACFEA7B70B485655BA3DC3F60DEE4F6B8F861069E33", HashToString(hash), true);

            data = Enumerable
                .Range(0, 100000)
                .Select(iteration => new TigerHash())
                .Aggregate(data, (current, newTiger) => newTiger.ComputeHash(current));

            // assert
            Assert.Equal("35C4F594F7E827FFC68BFECEBEDA314EDC6FE917BDF00B66", HashToString(data), true);
        }
Exemple #9
0
        public void TigerShouldBeCorrectForTestDataSet3()
        {
            var oneBitBytes = new byte[] { 0x80, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1 };
            var correctHashes = File.ReadAllLines("TestSet3Data.txt");
            foreach (var byteIndex in Enumerable.Range(0, 64))
            {
                foreach (var byteValue in oneBitBytes)
                {
                    // arrange
                    var data = new byte[64];
                    data[byteIndex] = byteValue;
                    var tiger = new TigerHash();

                    // act
                    var hash = tiger.ComputeHash(data);

                    // assert
                    Assert.Equal(correctHashes[(byteIndex * 8) + Array.IndexOf(oneBitBytes, byteValue)], HashToString(hash), true);
                }
            }
        }