Esempio n. 1
0
        /*public byte[] GetTTH(string Filename)
         * {
         *
         *      HashHolder Result;
         *      try
         *      {
         *              FilePtr = new FileStream(Filename,FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
         *
         *              //if the file is 0 byte long.
         * if (FilePtr.Length == ZERO_BYTE_FILE)
         * {
         *  Tiger TG = new Tiger();
         *
         *  Result.HashValue = TG.ComputeHash(new byte[] { 0 });
         * }
         * //if there's only one block in file use SmallFile().
         * else if (FilePtr.Length <= Block_Size)
         *  Result.HashValue = SmallFile();
         *
         * else
         * {
         *  //get how many leafs are in file.
         *  Leaf_Count = (int)FilePtr.Length / Block_Size;
         *
         *  if (FilePtr.Length % Block_Size > 0)
         *      Leaf_Count++;
         *
         *  //load blocks of data and get tiger hash for each one.
         *  LoadLeafHash();
         *
         *  //get root hash from blocks hash.
         *  Result = GetRootHash();
         * }
         *
         * FilePtr.Close();
         *
         *              return Result.HashValue;
         *      }
         *      catch (Exception e)
         *      {
         *              System.Diagnostics.Debug.WriteLine("error while trying to get TTH for file: " +
         *                      Filename + ". (" + e.Message + ")");
         *
         * if (FilePtr != null)
         *  FilePtr.Close();
         *
         *              return null;
         *      }
         * }*/

        private byte[] SmallFile()
        {
            Tiger TG = new Tiger();

            byte[] Block = new byte[Block_Size];

            int BlockSize = FilePtr.Read(Block, 0, 1024);

            //gets hash for a single block file.
            return(LH(ByteExtract(Block, BlockSize)));
        }
Esempio n. 2
0
        private byte[] LH(byte[] Raw_Data)         //leaf hash.
        {
            byte[] Data = new byte[Raw_Data.Length + 1];

            Data[0] = 0x00;             //leaf hash mark.
            Raw_Data.CopyTo(Data, 1);

            //gets tiger hash value for leafs blocks.
            Tiger TG = new Tiger();

            TG.Initialize();
            return(TG.ComputeHash(Data));
        }
Esempio n. 3
0
        private byte[] IH(byte[] LeafA, byte[] LeafB)        //internal hash.
        {
            byte[] Data = new byte[LeafA.Length + LeafB.Length + 1];

            Data[0] = 0x01;             //internal hash mark.

            //combines two leafs.
            LeafA.CopyTo(Data, 1);
            LeafB.CopyTo(Data, LeafA.Length + 1);

            //gets tiger hash value for combined leaf hash.
            Tiger TG = new Tiger();

            TG.Initialize();
            return(TG.ComputeHash(Data));
        }
Esempio n. 4
0
        public static bool SelfTest()
        {
            ASCIIEncoding enc = null;

            byte[] hash      = null;
            int    nI        = 0;
            string TEST_DATA = null;

            byte[] TEST_HASH  = null;
            Tiger  tg         = null;
            int    _Vb_t_i4_0 = 0;

            byte[] _Vb_t_array_0 = null;
            TEST_DATA     = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
            _Vb_t_array_0 = new byte[] { ((byte)15), ((byte)123), ((byte)249), ((byte)161), ((byte)155), ((byte)156), ((byte)88), ((byte)242), ((byte)183), ((byte)97),
                                         ((byte)13), ((byte)247), ((byte)232), ((byte)79), ((byte)10), ((byte)195), ((byte)167), ((byte)28), ((byte)99), ((byte)30),
                                         ((byte)123), ((byte)83), ((byte)247), ((byte)142) };
            TEST_HASH = _Vb_t_array_0;
            tg        = new Tiger();
            tg.Initialize();
            enc  = new ASCIIEncoding();
            hash = tg.ComputeHash(enc.GetBytes(TEST_DATA));
            if (hash.Length != TEST_HASH.Length)
            {
                return(false);
            }
            _Vb_t_i4_0 = (TEST_HASH.Length - 1);
            for (nI = 0; (nI <= _Vb_t_i4_0); nI++)
            {
                if (hash[nI] != TEST_HASH[nI])
                {
                    return(false);
                }
            }
            return(true);
        }