Example #1
0
 public void Dispose()
 {
     if (TigerHasher != null)
     {
         TigerHasher.Dispose();
         TigerHasher = null;
     }
 }
Example #2
0
        private void ValidateHashes(EraFileEntryChunk fileEntry, IO.EndianStream blockStream)
        {
            fileEntry.ComputeHash(blockStream, TigerHasher);

            if (!fileEntry.CompressedDataTiger128.EqualsArray(TigerHasher.Hash))
            {
                string chunk_name = !string.IsNullOrEmpty(fileEntry.FileName)
                                        ? fileEntry.FileName
                                        : "FileNames";//fileEntry.EntryId.ToString("X16");

                throw new System.IO.InvalidDataException(string.Format(
                                                             "Invalid chunk hash for '{0}' offset={1} size={2} " +
                                                             "expected {3} but got {4}",
                                                             chunk_name, fileEntry.DataOffset, fileEntry.DataSize.ToString("X8"),
                                                             Text.Util.ByteArrayToString(fileEntry.CompressedDataTiger128),
                                                             Text.Util.ByteArrayToString(TigerHasher.Hash, 0, EraFileEntryChunk.kCompresssedDataTigerHashSize)
                                                             ));
            }

            if (fileEntry.CompressionType == ECF.EcfCompressionType.Stored)
            {
                ulong tiger64;
                TigerHasher.TryGetAsTiger64(out tiger64);

                if (fileEntry.DecompressedDataTiger64 != tiger64)
                {
                    string chunk_name = !string.IsNullOrEmpty(fileEntry.FileName)
                                                ? fileEntry.FileName
                                                : "FileNames";//fileEntry.EntryId.ToString("X16");

                    throw new System.IO.InvalidDataException(string.Format(
                                                                 "Chunk id mismatch for '{0}' offset={1} size={2} " +
                                                                 "expected {3} but got {4}",
                                                                 chunk_name, fileEntry.DataOffset, fileEntry.DataSize.ToString("X8"),
                                                                 fileEntry.DecompressedDataTiger64.ToString("X16"),
                                                                 Text.Util.ByteArrayToString(TigerHasher.Hash, 0, sizeof(ulong))
                                                                 ));
                }
            }
        }