diff --git a/Adler32Context.cs b/Adler32Context.cs index e03f763..9bb2887 100644 --- a/Adler32Context.cs +++ b/Adler32Context.cs @@ -79,6 +79,7 @@ namespace DiscImageChef.Checksums public byte[] Final() { uint finalSum = (uint)((sum2 << 16) | sum1); + BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; return BigEndianBitConverter.GetBytes(finalSum); } @@ -90,6 +91,7 @@ namespace DiscImageChef.Checksums uint finalSum = (uint)((sum2 << 16) | sum1); StringBuilder adlerOutput = new StringBuilder(); + BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; for(int i = 0; i < BigEndianBitConverter.GetBytes(finalSum).Length; i++) { adlerOutput.Append(BigEndianBitConverter.GetBytes(finalSum)[i].ToString("x2")); @@ -123,12 +125,16 @@ namespace DiscImageChef.Checksums localSum1 = 1; localSum2 = 0; - localSum1 = (ushort)((localSum1 + fileStream.ReadByte()) % AdlerModule); - localSum2 = (ushort)((localSum2 + localSum1) % AdlerModule); + for(int i = 0; i < fileStream.Length; i++) + { + localSum1 = (ushort)((localSum1 + fileStream.ReadByte()) % AdlerModule); + localSum2 = (ushort)((localSum2 + localSum1) % AdlerModule); + } finalSum = (uint)((localSum2 << 16) | localSum1); - hash = BitConverter.GetBytes(finalSum); + BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; + hash = BigEndianBitConverter.GetBytes(finalSum); StringBuilder adlerOutput = new StringBuilder(); @@ -164,7 +170,8 @@ namespace DiscImageChef.Checksums finalSum = (uint)((localSum2 << 16) | localSum1); - hash = BitConverter.GetBytes(finalSum); + BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; + hash = BigEndianBitConverter.GetBytes(finalSum); StringBuilder adlerOutput = new StringBuilder(); diff --git a/CRC32Context.cs b/CRC32Context.cs index 69d0dc1..3d51503 100644 --- a/CRC32Context.cs +++ b/CRC32Context.cs @@ -153,8 +153,9 @@ namespace DiscImageChef.Checksums for(int i = 0; i < fileStream.Length; i++) localhashInt = (localhashInt >> 8) ^ localTable[fileStream.ReadByte() ^ localhashInt & 0xff]; + localhashInt ^= crc32Seed; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; - hash = BitConverter.GetBytes(localhashInt); + hash = BigEndianBitConverter.GetBytes(localhashInt); StringBuilder crc32Output = new StringBuilder(); @@ -209,8 +210,9 @@ namespace DiscImageChef.Checksums for(int i = 0; i < len; i++) localhashInt = (localhashInt >> 8) ^ localTable[data[i] ^ localhashInt & 0xff]; + localhashInt ^= crc32Seed; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; - hash = BitConverter.GetBytes(localhashInt); + hash = BigEndianBitConverter.GetBytes(localhashInt); StringBuilder crc32Output = new StringBuilder(); diff --git a/CRC64Context.cs b/CRC64Context.cs index 7e7d8e1..8c96b94 100644 --- a/CRC64Context.cs +++ b/CRC64Context.cs @@ -153,8 +153,9 @@ namespace DiscImageChef.Checksums for(int i = 0; i < fileStream.Length; i++) localhashInt = (localhashInt >> 8) ^ localTable[(ulong)fileStream.ReadByte() ^ localhashInt & 0xffL]; + localhashInt ^= crc64Seed; BigEndianBitConverter.IsLittleEndian = BigEndianBitConverter.IsLittleEndian; - hash = BitConverter.GetBytes(localhashInt); + hash = BigEndianBitConverter.GetBytes(localhashInt); StringBuilder crc64Output = new StringBuilder(); @@ -209,8 +210,9 @@ namespace DiscImageChef.Checksums for(int i = 0; i < len; i++) localhashInt = (localhashInt >> 8) ^ localTable[data[i] ^ localhashInt & 0xff]; + localhashInt ^= crc64Seed; BigEndianBitConverter.IsLittleEndian = BigEndianBitConverter.IsLittleEndian; - hash = BitConverter.GetBytes(localhashInt); + hash = BigEndianBitConverter.GetBytes(localhashInt); StringBuilder crc64Output = new StringBuilder(); diff --git a/SpamSumContext.cs b/SpamSumContext.cs index 9b1b45c..7fb173f 100644 --- a/SpamSumContext.cs +++ b/SpamSumContext.cs @@ -491,12 +491,10 @@ namespace DiscImageChef.Checksums fuzzyContext.Init(); fuzzyContext.Update(data, len); + hash = null; - byte[] result; - fuzzy_digest(out result); - - return CToString(result); + return fuzzyContext.End(); } ///