diff --git a/DepotDownloader/ContentDownloader.cs b/DepotDownloader/ContentDownloader.cs index 726df929..cc41cf98 100644 --- a/DepotDownloader/ContentDownloader.cs +++ b/DepotDownloader/ContentDownloader.cs @@ -1059,18 +1059,7 @@ namespace DepotDownloader { fsOld.Seek((long)match.OldChunk.Offset, SeekOrigin.Begin); - uint a = 0, b = 0; - - for (var i = 0; i < match.OldChunk.UncompressedLength; i++) - { - var c = (uint)fsOld.ReadByte(); - - // adler hash - a = (a + c) % 65521; - b = (b + a) % 65521; - } - - var adler = BitConverter.GetBytes(a | (b << 16)); + var adler = Util.AdlerHash(fsOld, (int)match.OldChunk.UncompressedLength); if (!adler.SequenceEqual(match.OldChunk.Checksum)) { neededChunks.Add(match.NewChunk); diff --git a/DepotDownloader/Util.cs b/DepotDownloader/Util.cs index 5157d92e..e53c2726 100644 --- a/DepotDownloader/Util.cs +++ b/DepotDownloader/Util.cs @@ -83,18 +83,7 @@ namespace DepotDownloader { fs.Seek((long)data.Offset, SeekOrigin.Begin); - uint a = 0, b = 0; - - for (var i = 0; i < data.UncompressedLength; i++) - { - var c = (uint)fs.ReadByte(); - - // adler hash - a = (a + c) % 65521; - b = (b + a) % 65521; - } - - var adler = BitConverter.GetBytes(a | (b << 16)); + var adler = AdlerHash(fs, (int)data.UncompressedLength); if (!adler.SequenceEqual(data.Checksum)) { neededChunks.Add(data); @@ -104,6 +93,20 @@ namespace DepotDownloader return neededChunks; } + public static byte[] AdlerHash(Stream stream, int length) + { + uint a = 0, b = 0; + for (var i = 0; i < length; i++) + { + var c = (uint)stream.ReadByte(); + + a = (a + c) % 65521; + b = (b + a) % 65521; + } + + return BitConverter.GetBytes(a | (b << 16)); + } + public static byte[] DecodeHexString(string hex) { if (hex == null)