/*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))); }
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)); }
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)); }
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); }