diff --git a/DiscImageChef.Checksums/CRC16Context.cs b/DiscImageChef.Checksums/CRC16Context.cs index cb5afeea0..7bcb2155f 100644 --- a/DiscImageChef.Checksums/CRC16Context.cs +++ b/DiscImageChef.Checksums/CRC16Context.cs @@ -90,9 +90,8 @@ namespace DiscImageChef.Checksums /// public byte[] Final() { - hashInt ^= CRC16_SEED; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; - return BigEndianBitConverter.GetBytes(hashInt); + return BigEndianBitConverter.GetBytes(hashInt ^ CRC16_SEED); } /// @@ -100,12 +99,11 @@ namespace DiscImageChef.Checksums /// public string End() { - hashInt ^= CRC16_SEED; StringBuilder crc16Output = new StringBuilder(); BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; - for(int i = 0; i < BigEndianBitConverter.GetBytes(hashInt).Length; i++) - crc16Output.Append(BigEndianBitConverter.GetBytes(hashInt)[i].ToString("x2")); + for(int i = 0; i < BigEndianBitConverter.GetBytes(hashInt ^ CRC16_SEED).Length; i++) + crc16Output.Append(BigEndianBitConverter.GetBytes(hashInt ^ CRC16_SEED)[i].ToString("x2")); return crc16Output.ToString(); } diff --git a/DiscImageChef.Checksums/CRC32Context.cs b/DiscImageChef.Checksums/CRC32Context.cs index 73c5161b4..97680b60c 100644 --- a/DiscImageChef.Checksums/CRC32Context.cs +++ b/DiscImageChef.Checksums/CRC32Context.cs @@ -90,9 +90,8 @@ namespace DiscImageChef.Checksums /// public byte[] Final() { - hashInt ^= CRC32_SEED; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; - return BigEndianBitConverter.GetBytes(hashInt); + return BigEndianBitConverter.GetBytes(hashInt ^ CRC32_SEED); } /// @@ -100,12 +99,11 @@ namespace DiscImageChef.Checksums /// public string End() { - hashInt ^= CRC32_SEED; StringBuilder crc32Output = new StringBuilder(); BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; - for(int i = 0; i < BigEndianBitConverter.GetBytes(hashInt).Length; i++) - crc32Output.Append(BigEndianBitConverter.GetBytes(hashInt)[i].ToString("x2")); + for(int i = 0; i < BigEndianBitConverter.GetBytes(hashInt ^ CRC32_SEED).Length; i++) + crc32Output.Append(BigEndianBitConverter.GetBytes(hashInt ^ CRC32_SEED)[i].ToString("x2")); return crc32Output.ToString(); } @@ -144,7 +142,13 @@ namespace DiscImageChef.Checksums } for(int i = 0; i < fileStream.Length; i++) + { localhashInt = (localhashInt >> 8) ^ localTable[fileStream.ReadByte() ^ (localhashInt & 0xff)]; + if((localhashInt ^ CRC32_SEED) == 0xB883C628 || (localhashInt ^CRC32_SEED) == 0x28C683B8) + { + System.Console.WriteLine("CRC found at position {0}", fileStream.Position); + } + } localhashInt ^= CRC32_SEED; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; diff --git a/DiscImageChef.Checksums/CRC64Context.cs b/DiscImageChef.Checksums/CRC64Context.cs index 238afa176..ae0416c1c 100644 --- a/DiscImageChef.Checksums/CRC64Context.cs +++ b/DiscImageChef.Checksums/CRC64Context.cs @@ -89,9 +89,8 @@ namespace DiscImageChef.Checksums /// public byte[] Final() { - hashInt ^= CRC64_SEED; BigEndianBitConverter.IsLittleEndian = BigEndianBitConverter.IsLittleEndian; - return BigEndianBitConverter.GetBytes(hashInt); + return BigEndianBitConverter.GetBytes(hashInt ^= CRC64_SEED); } /// @@ -99,12 +98,11 @@ namespace DiscImageChef.Checksums /// public string End() { - hashInt ^= CRC64_SEED; StringBuilder crc64Output = new StringBuilder(); BigEndianBitConverter.IsLittleEndian = BigEndianBitConverter.IsLittleEndian; - for(int i = 0; i < BigEndianBitConverter.GetBytes(hashInt).Length; i++) - crc64Output.Append(BigEndianBitConverter.GetBytes(hashInt)[i].ToString("x2")); + for(int i = 0; i < BigEndianBitConverter.GetBytes(hashInt ^= CRC64_SEED).Length; i++) + crc64Output.Append(BigEndianBitConverter.GetBytes(hashInt ^= CRC64_SEED)[i].ToString("x2")); return crc64Output.ToString(); }