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();
}