public virtual void CalcHashes(Hashes hashFlags, Validations validationFlags) { if (IssueModel.Data.HasFatal) { return; } bool hitCache = Data.fBuf != null && Data.FileSize < Int32.MaxValue; if ((hashFlags & Hashes.FileMD5) != 0 && Data.fileMD5 == null) { var hasher = new Md5Hasher(); if (hitCache) { hasher.Append(Data.fBuf, 0, Data.fBuf.Length); } else { hasher.Append(Data.fbs); } Data.fileMD5 = hasher.GetHashAndReset(); } if ((hashFlags & Hashes.FileSHA1) != 0 && Data.fileSHA1 == null) { var hasher = new Sha1Hasher(); if (hitCache) { hasher.Append(Data.fBuf, 0, Data.fBuf.Length); } else { hasher.Append(Data.fbs); } Data.fileSHA1 = hasher.GetHashAndReset(); } if ((hashFlags & Hashes.FileSHA256) != 0 && Data.fileSHA256 == null) { var hasher = new Sha256Hasher(); if (hitCache) { hasher.Append(Data.fBuf, 0, Data.fBuf.Length); } else { hasher.Append(Data.fbs); } Data.fileSHA256 = hasher.GetHashAndReset(); } if ((hashFlags & Hashes.MediaSHA1) != 0 && Data.mediaSHA1 == null) { if (Data.MediaCount == Data.FileSize && Data.fileSHA1 != null) { System.Diagnostics.Debug.Assert(Data.mediaPosition == 0); Data.mediaSHA1 = Data.fileSHA1; } else { var hasher = new Sha1Hasher(); if (hitCache) { hasher.Append(Data.fBuf, (int)Data.mediaPosition, (int)Data.MediaCount); } else { hasher.Append(Data.fbs, Data.mediaPosition, Data.MediaCount); } Data.mediaSHA1 = hasher.GetHashAndReset(); } } if ((hashFlags & Hashes.MetaSHA1) != 0 && Data.metaSHA1 == null) { var hasher = new Sha1Hasher(); var suffixPos = Data.mediaPosition + Data.MediaCount; if (hitCache) { hasher.Append(Data.fBuf, 0, (int)Data.mediaPosition, (int)suffixPos, (int)(Data.FileSize - suffixPos)); } else { hasher.Append(Data.fbs, 0, Data.mediaPosition, suffixPos, Data.FileSize - suffixPos); } Data.metaSHA1 = hasher.GetHashAndReset(); } }