mirror of
https://github.com/aaru-dps/Aaru.Server.git
synced 2025-12-16 19:24:27 +00:00
Refactor and code cleanup.
This commit is contained in:
@@ -38,8 +38,8 @@ namespace DiscImageChef.Checksums
|
||||
{
|
||||
public class Adler32Context
|
||||
{
|
||||
UInt16 sum1, sum2;
|
||||
const UInt16 AdlerModule = 65521;
|
||||
ushort sum1, sum2;
|
||||
const ushort AdlerModule = 65521;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the Adler-32 sums
|
||||
@@ -78,7 +78,7 @@ namespace DiscImageChef.Checksums
|
||||
/// </summary>
|
||||
public byte[] Final()
|
||||
{
|
||||
UInt32 finalSum = (uint)((sum2 << 16) | sum1);
|
||||
uint finalSum = (uint)((sum2 << 16) | sum1);
|
||||
return BigEndianBitConverter.GetBytes(finalSum);
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ namespace DiscImageChef.Checksums
|
||||
/// </summary>
|
||||
public string End()
|
||||
{
|
||||
UInt32 finalSum = (uint)((sum2 << 16) | sum1);
|
||||
uint finalSum = (uint)((sum2 << 16) | sum1);
|
||||
StringBuilder adlerOutput = new StringBuilder();
|
||||
|
||||
for(int i = 0; i < BigEndianBitConverter.GetBytes(finalSum).Length; i++)
|
||||
@@ -117,8 +117,8 @@ namespace DiscImageChef.Checksums
|
||||
public static string File(string filename, out byte[] hash)
|
||||
{
|
||||
FileStream fileStream = new FileStream(filename, FileMode.Open);
|
||||
UInt16 localSum1, localSum2;
|
||||
UInt32 finalSum;
|
||||
ushort localSum1, localSum2;
|
||||
uint finalSum;
|
||||
|
||||
localSum1 = 1;
|
||||
localSum2 = 0;
|
||||
@@ -148,8 +148,8 @@ namespace DiscImageChef.Checksums
|
||||
/// <param name="hash">Byte array of the hash value.</param>
|
||||
public static string Data(byte[] data, uint len, out byte[] hash)
|
||||
{
|
||||
UInt16 localSum1, localSum2;
|
||||
UInt32 finalSum;
|
||||
ushort localSum1, localSum2;
|
||||
uint finalSum;
|
||||
|
||||
localSum1 = 1;
|
||||
localSum2 = 0;
|
||||
|
||||
@@ -40,8 +40,8 @@ namespace DiscImageChef.Checksums
|
||||
{
|
||||
static byte[] ECC_F_Table;
|
||||
static byte[] ECC_B_Table;
|
||||
const UInt32 CDCRC32Poly = 0xD8018001;
|
||||
const UInt32 CDCRC32Seed = 0x00000000;
|
||||
const uint CDCRC32Poly = 0xD8018001;
|
||||
const uint CDCRC32Seed = 0x00000000;
|
||||
|
||||
public static bool? CheckCDSector(byte[] buffer)
|
||||
{
|
||||
@@ -84,9 +84,9 @@ namespace DiscImageChef.Checksums
|
||||
ECC_F_Table = new byte[256];
|
||||
ECC_B_Table = new byte[256];
|
||||
|
||||
for(UInt32 i = 0; i < 256; i++)
|
||||
for(uint i = 0; i < 256; i++)
|
||||
{
|
||||
UInt32 j = (uint)((i << 1) ^ ((i & 0x80) == 0x80 ? 0x11D : 0));
|
||||
uint j = (uint)((i << 1) ^ ((i & 0x80) == 0x80 ? 0x11D : 0));
|
||||
ECC_F_Table[i] = (byte)j;
|
||||
ECC_B_Table[i ^ j] = (byte)i;
|
||||
}
|
||||
@@ -95,21 +95,21 @@ namespace DiscImageChef.Checksums
|
||||
static bool CheckECC(
|
||||
byte[] address,
|
||||
byte[] data,
|
||||
UInt32 major_count,
|
||||
UInt32 minor_count,
|
||||
UInt32 major_mult,
|
||||
UInt32 minor_inc,
|
||||
uint major_count,
|
||||
uint minor_count,
|
||||
uint major_mult,
|
||||
uint minor_inc,
|
||||
byte[] ecc
|
||||
)
|
||||
{
|
||||
UInt32 size = major_count * minor_count;
|
||||
UInt32 major;
|
||||
uint size = major_count * minor_count;
|
||||
uint major;
|
||||
for(major = 0; major < major_count; major++)
|
||||
{
|
||||
UInt32 index = (major >> 1) * major_mult + (major & 1);
|
||||
uint index = (major >> 1) * major_mult + (major & 1);
|
||||
byte ecc_a = 0;
|
||||
byte ecc_b = 0;
|
||||
UInt32 minor;
|
||||
uint minor;
|
||||
for(minor = 0; minor < minor_count; minor++)
|
||||
{
|
||||
byte temp;
|
||||
@@ -215,11 +215,11 @@ namespace DiscImageChef.Checksums
|
||||
return false;
|
||||
|
||||
byte[] SectorForCheck = new byte[0x810];
|
||||
UInt32 StoredEDC = BitConverter.ToUInt32(channel, 0x810);
|
||||
uint StoredEDC = BitConverter.ToUInt32(channel, 0x810);
|
||||
byte[] CalculatedEDCBytes;
|
||||
Array.Copy(channel, 0, SectorForCheck, 0, 0x810);
|
||||
CRC32Context.Data(SectorForCheck, 0x810, out CalculatedEDCBytes, CDCRC32Poly, CDCRC32Seed);
|
||||
UInt32 CalculatedEDC = BitConverter.ToUInt32(CalculatedEDCBytes, 0);
|
||||
uint CalculatedEDC = BitConverter.ToUInt32(CalculatedEDCBytes, 0);
|
||||
|
||||
if(CalculatedEDC != StoredEDC)
|
||||
{
|
||||
@@ -241,11 +241,11 @@ namespace DiscImageChef.Checksums
|
||||
}
|
||||
|
||||
byte[] SectorForCheck = new byte[0x91C];
|
||||
UInt32 StoredEDC = BitConverter.ToUInt32(channel, 0x92C);
|
||||
uint StoredEDC = BitConverter.ToUInt32(channel, 0x92C);
|
||||
byte[] CalculatedEDCBytes;
|
||||
Array.Copy(channel, 0x10, SectorForCheck, 0, 0x91C);
|
||||
CRC32Context.Data(SectorForCheck, 0x91C, out CalculatedEDCBytes, CDCRC32Poly, CDCRC32Seed);
|
||||
UInt32 CalculatedEDC = BitConverter.ToUInt32(CalculatedEDCBytes, 0);
|
||||
uint CalculatedEDC = BitConverter.ToUInt32(CalculatedEDCBytes, 0);
|
||||
|
||||
if(CalculatedEDC != StoredEDC && StoredEDC != 0x00000000)
|
||||
{
|
||||
@@ -287,11 +287,11 @@ namespace DiscImageChef.Checksums
|
||||
return false;
|
||||
|
||||
byte[] SectorForCheck = new byte[0x808];
|
||||
UInt32 StoredEDC = BitConverter.ToUInt32(channel, 0x818);
|
||||
uint StoredEDC = BitConverter.ToUInt32(channel, 0x818);
|
||||
byte[] CalculatedEDCBytes;
|
||||
Array.Copy(channel, 0x10, SectorForCheck, 0, 0x808);
|
||||
CRC32Context.Data(SectorForCheck, 0x808, out CalculatedEDCBytes, CDCRC32Poly, CDCRC32Seed);
|
||||
UInt32 CalculatedEDC = BitConverter.ToUInt32(CalculatedEDCBytes, 0);
|
||||
uint CalculatedEDC = BitConverter.ToUInt32(CalculatedEDCBytes, 0);
|
||||
|
||||
if(CalculatedEDC != StoredEDC)
|
||||
{
|
||||
@@ -464,10 +464,10 @@ namespace DiscImageChef.Checksums
|
||||
|
||||
BigEndianBitConverter.IsLittleEndian = true;
|
||||
|
||||
UInt16 QSubChannelCRC = BigEndianBitConverter.ToUInt16(QSubChannel, 10);
|
||||
ushort QSubChannelCRC = BigEndianBitConverter.ToUInt16(QSubChannel, 10);
|
||||
byte[] QSubChannelForCRC = new byte[10];
|
||||
Array.Copy(QSubChannel, 0, QSubChannelForCRC, 0, 10);
|
||||
UInt16 CalculatedQCRC = CalculateCCITT_CRC16(QSubChannelForCRC);
|
||||
ushort CalculatedQCRC = CalculateCCITT_CRC16(QSubChannelForCRC);
|
||||
|
||||
if(QSubChannelCRC != CalculatedQCRC)
|
||||
{
|
||||
@@ -477,10 +477,10 @@ namespace DiscImageChef.Checksums
|
||||
|
||||
if((CDTextPack1[0] & 0x80) == 0x80)
|
||||
{
|
||||
UInt16 CDTextPack1CRC = BigEndianBitConverter.ToUInt16(CDTextPack1, 16);
|
||||
ushort CDTextPack1CRC = BigEndianBitConverter.ToUInt16(CDTextPack1, 16);
|
||||
byte[] CDTextPack1ForCRC = new byte[16];
|
||||
Array.Copy(CDTextPack1, 0, CDTextPack1ForCRC, 0, 16);
|
||||
UInt16 CalculatedCDTP1CRC = CalculateCCITT_CRC16(CDTextPack1ForCRC);
|
||||
ushort CalculatedCDTP1CRC = CalculateCCITT_CRC16(CDTextPack1ForCRC);
|
||||
|
||||
if(CDTextPack1CRC != CalculatedCDTP1CRC && CDTextPack1CRC != 0)
|
||||
{
|
||||
@@ -491,10 +491,10 @@ namespace DiscImageChef.Checksums
|
||||
|
||||
if((CDTextPack2[0] & 0x80) == 0x80)
|
||||
{
|
||||
UInt16 CDTextPack2CRC = BigEndianBitConverter.ToUInt16(CDTextPack2, 16);
|
||||
ushort CDTextPack2CRC = BigEndianBitConverter.ToUInt16(CDTextPack2, 16);
|
||||
byte[] CDTextPack2ForCRC = new byte[16];
|
||||
Array.Copy(CDTextPack2, 0, CDTextPack2ForCRC, 0, 16);
|
||||
UInt16 CalculatedCDTP2CRC = CalculateCCITT_CRC16(CDTextPack2ForCRC);
|
||||
ushort CalculatedCDTP2CRC = CalculateCCITT_CRC16(CDTextPack2ForCRC);
|
||||
DicConsole.DebugWriteLine("CD checksums", "Cyclic CDTP2 0x{0:X4}, Calc CDTP2 0x{1:X4}", CDTextPack2CRC, CalculatedCDTP2CRC);
|
||||
|
||||
if(CDTextPack2CRC != CalculatedCDTP2CRC && CDTextPack2CRC != 0)
|
||||
@@ -506,10 +506,10 @@ namespace DiscImageChef.Checksums
|
||||
|
||||
if((CDTextPack3[0] & 0x80) == 0x80)
|
||||
{
|
||||
UInt16 CDTextPack3CRC = BigEndianBitConverter.ToUInt16(CDTextPack3, 16);
|
||||
ushort CDTextPack3CRC = BigEndianBitConverter.ToUInt16(CDTextPack3, 16);
|
||||
byte[] CDTextPack3ForCRC = new byte[16];
|
||||
Array.Copy(CDTextPack3, 0, CDTextPack3ForCRC, 0, 16);
|
||||
UInt16 CalculatedCDTP3CRC = CalculateCCITT_CRC16(CDTextPack3ForCRC);
|
||||
ushort CalculatedCDTP3CRC = CalculateCCITT_CRC16(CDTextPack3ForCRC);
|
||||
DicConsole.DebugWriteLine("CD checksums", "Cyclic CDTP3 0x{0:X4}, Calc CDTP3 0x{1:X4}", CDTextPack3CRC, CalculatedCDTP3CRC);
|
||||
|
||||
if(CDTextPack3CRC != CalculatedCDTP3CRC && CDTextPack3CRC != 0)
|
||||
@@ -521,10 +521,10 @@ namespace DiscImageChef.Checksums
|
||||
|
||||
if((CDTextPack4[0] & 0x80) == 0x80)
|
||||
{
|
||||
UInt16 CDTextPack4CRC = BigEndianBitConverter.ToUInt16(CDTextPack4, 16);
|
||||
ushort CDTextPack4CRC = BigEndianBitConverter.ToUInt16(CDTextPack4, 16);
|
||||
byte[] CDTextPack4ForCRC = new byte[16];
|
||||
Array.Copy(CDTextPack4, 0, CDTextPack4ForCRC, 0, 16);
|
||||
UInt16 CalculatedCDTP4CRC = CalculateCCITT_CRC16(CDTextPack4ForCRC);
|
||||
ushort CalculatedCDTP4CRC = CalculateCCITT_CRC16(CDTextPack4ForCRC);
|
||||
DicConsole.DebugWriteLine("CD checksums", "Cyclic CDTP4 0x{0:X4}, Calc CDTP4 0x{1:X4}", CDTextPack4CRC, CalculatedCDTP4CRC);
|
||||
|
||||
if(CDTextPack4CRC != CalculatedCDTP4CRC && CDTextPack4CRC != 0)
|
||||
@@ -570,12 +570,12 @@ namespace DiscImageChef.Checksums
|
||||
0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
|
||||
0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
|
||||
0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
|
||||
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0,
|
||||
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
|
||||
};
|
||||
|
||||
static ushort CalculateCCITT_CRC16(byte[] buffer)
|
||||
{
|
||||
UInt16 CRC16 = 0;
|
||||
ushort CRC16 = 0;
|
||||
for(int i = 0; i < buffer.Length; i++)
|
||||
{
|
||||
CRC16 = (ushort)(CCITT_CRC16Table[(CRC16 >> 8) ^ buffer[i]] ^ (CRC16 << 8));
|
||||
|
||||
@@ -41,11 +41,11 @@ namespace DiscImageChef.Checksums
|
||||
/// </summary>
|
||||
public class CRC16Context
|
||||
{
|
||||
const UInt16 crc16Poly = 0xA001;
|
||||
const UInt16 crc16Seed = 0x0000;
|
||||
const ushort crc16Poly = 0xA001;
|
||||
const ushort crc16Seed = 0x0000;
|
||||
|
||||
UInt16[] table;
|
||||
UInt16 hashInt;
|
||||
ushort[] table;
|
||||
ushort hashInt;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the CRC16 table and seed
|
||||
@@ -54,10 +54,10 @@ namespace DiscImageChef.Checksums
|
||||
{
|
||||
hashInt = crc16Seed;
|
||||
|
||||
table = new UInt16[256];
|
||||
table = new ushort[256];
|
||||
for(int i = 0; i < 256; i++)
|
||||
{
|
||||
UInt16 entry = (UInt16)i;
|
||||
ushort entry = (ushort)i;
|
||||
for(int j = 0; j < 8; j++)
|
||||
if((entry & 1) == 1)
|
||||
entry = (ushort)((entry >> 1) ^ crc16Poly);
|
||||
@@ -133,15 +133,15 @@ namespace DiscImageChef.Checksums
|
||||
public static string File(string filename, out byte[] hash)
|
||||
{
|
||||
FileStream fileStream = new FileStream(filename, FileMode.Open);
|
||||
UInt16[] localTable;
|
||||
UInt16 localhashInt;
|
||||
ushort[] localTable;
|
||||
ushort localhashInt;
|
||||
|
||||
localhashInt = crc16Seed;
|
||||
|
||||
localTable = new UInt16[256];
|
||||
localTable = new ushort[256];
|
||||
for(int i = 0; i < 256; i++)
|
||||
{
|
||||
UInt16 entry = (UInt16)i;
|
||||
ushort entry = (ushort)i;
|
||||
for(int j = 0; j < 8; j++)
|
||||
if((entry & 1) == 1)
|
||||
entry = (ushort)((entry >> 1) ^ crc16Poly);
|
||||
@@ -185,17 +185,17 @@ namespace DiscImageChef.Checksums
|
||||
/// <param name="hash">Byte array of the hash value.</param>
|
||||
/// <param name="polynomial">CRC polynomial</param>
|
||||
/// <param name="seed">CRC seed</param>
|
||||
public static string Data(byte[] data, uint len, out byte[] hash, UInt16 polynomial, UInt16 seed)
|
||||
public static string Data(byte[] data, uint len, out byte[] hash, ushort polynomial, ushort seed)
|
||||
{
|
||||
UInt16[] localTable;
|
||||
UInt16 localhashInt;
|
||||
ushort[] localTable;
|
||||
ushort localhashInt;
|
||||
|
||||
localhashInt = seed;
|
||||
|
||||
localTable = new UInt16[256];
|
||||
localTable = new ushort[256];
|
||||
for(int i = 0; i < 256; i++)
|
||||
{
|
||||
UInt16 entry = (UInt16)i;
|
||||
ushort entry = (ushort)i;
|
||||
for(int j = 0; j < 8; j++)
|
||||
if((entry & 1) == 1)
|
||||
entry = (ushort)((entry >> 1) ^ polynomial);
|
||||
|
||||
@@ -41,11 +41,11 @@ namespace DiscImageChef.Checksums
|
||||
/// </summary>
|
||||
public class CRC32Context
|
||||
{
|
||||
const UInt32 crc32Poly = 0xEDB88320;
|
||||
const UInt32 crc32Seed = 0xFFFFFFFF;
|
||||
const uint crc32Poly = 0xEDB88320;
|
||||
const uint crc32Seed = 0xFFFFFFFF;
|
||||
|
||||
UInt32[] table;
|
||||
UInt32 hashInt;
|
||||
uint[] table;
|
||||
uint hashInt;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the CRC32 table and seed
|
||||
@@ -54,10 +54,10 @@ namespace DiscImageChef.Checksums
|
||||
{
|
||||
hashInt = crc32Seed;
|
||||
|
||||
table = new UInt32[256];
|
||||
table = new uint[256];
|
||||
for(int i = 0; i < 256; i++)
|
||||
{
|
||||
UInt32 entry = (UInt32)i;
|
||||
uint entry = (uint)i;
|
||||
for(int j = 0; j < 8; j++)
|
||||
if((entry & 1) == 1)
|
||||
entry = (entry >> 1) ^ crc32Poly;
|
||||
@@ -133,15 +133,15 @@ namespace DiscImageChef.Checksums
|
||||
public static string File(string filename, out byte[] hash)
|
||||
{
|
||||
FileStream fileStream = new FileStream(filename, FileMode.Open);
|
||||
UInt32[] localTable;
|
||||
UInt32 localhashInt;
|
||||
uint[] localTable;
|
||||
uint localhashInt;
|
||||
|
||||
localhashInt = crc32Seed;
|
||||
|
||||
localTable = new UInt32[256];
|
||||
localTable = new uint[256];
|
||||
for(int i = 0; i < 256; i++)
|
||||
{
|
||||
UInt32 entry = (UInt32)i;
|
||||
uint entry = (uint)i;
|
||||
for(int j = 0; j < 8; j++)
|
||||
if((entry & 1) == 1)
|
||||
entry = (entry >> 1) ^ crc32Poly;
|
||||
@@ -185,17 +185,17 @@ namespace DiscImageChef.Checksums
|
||||
/// <param name="hash">Byte array of the hash value.</param>
|
||||
/// <param name="polynomial">CRC polynomial</param>
|
||||
/// <param name="seed">CRC seed</param>
|
||||
public static string Data(byte[] data, uint len, out byte[] hash, UInt32 polynomial, UInt32 seed)
|
||||
public static string Data(byte[] data, uint len, out byte[] hash, uint polynomial, uint seed)
|
||||
{
|
||||
UInt32[] localTable;
|
||||
UInt32 localhashInt;
|
||||
uint[] localTable;
|
||||
uint localhashInt;
|
||||
|
||||
localhashInt = seed;
|
||||
|
||||
localTable = new UInt32[256];
|
||||
localTable = new uint[256];
|
||||
for(int i = 0; i < 256; i++)
|
||||
{
|
||||
UInt32 entry = (UInt32)i;
|
||||
uint entry = (uint)i;
|
||||
for(int j = 0; j < 8; j++)
|
||||
if((entry & 1) == 1)
|
||||
entry = (entry >> 1) ^ polynomial;
|
||||
|
||||
@@ -41,11 +41,11 @@ namespace DiscImageChef.Checksums
|
||||
/// </summary>
|
||||
public class CRC64Context
|
||||
{
|
||||
const UInt64 crc64Poly = 0xC96C5795D7870F42;
|
||||
const UInt64 crc64Seed = 0xFFFFFFFFFFFFFFFF;
|
||||
const ulong crc64Poly = 0xC96C5795D7870F42;
|
||||
const ulong crc64Seed = 0xFFFFFFFFFFFFFFFF;
|
||||
|
||||
UInt64[] table;
|
||||
UInt64 hashInt;
|
||||
ulong[] table;
|
||||
ulong hashInt;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the CRC64 table and seed
|
||||
@@ -54,10 +54,10 @@ namespace DiscImageChef.Checksums
|
||||
{
|
||||
hashInt = crc64Seed;
|
||||
|
||||
table = new UInt64[256];
|
||||
table = new ulong[256];
|
||||
for(int i = 0; i < 256; i++)
|
||||
{
|
||||
UInt64 entry = (UInt64)i;
|
||||
ulong entry = (ulong)i;
|
||||
for(int j = 0; j < 8; j++)
|
||||
if((entry & 1) == 1)
|
||||
entry = (entry >> 1) ^ crc64Poly;
|
||||
@@ -133,15 +133,15 @@ namespace DiscImageChef.Checksums
|
||||
public static string File(string filename, out byte[] hash)
|
||||
{
|
||||
FileStream fileStream = new FileStream(filename, FileMode.Open);
|
||||
UInt64[] localTable;
|
||||
UInt64 localhashInt;
|
||||
ulong[] localTable;
|
||||
ulong localhashInt;
|
||||
|
||||
localhashInt = crc64Seed;
|
||||
|
||||
localTable = new UInt64[256];
|
||||
localTable = new ulong[256];
|
||||
for(int i = 0; i < 256; i++)
|
||||
{
|
||||
UInt64 entry = (UInt64)i;
|
||||
ulong entry = (ulong)i;
|
||||
for(int j = 0; j < 8; j++)
|
||||
if((entry & 1) == 1)
|
||||
entry = (entry >> 1) ^ crc64Poly;
|
||||
@@ -151,7 +151,7 @@ namespace DiscImageChef.Checksums
|
||||
}
|
||||
|
||||
for(int i = 0; i < fileStream.Length; i++)
|
||||
localhashInt = (localhashInt >> 8) ^ localTable[(ulong)fileStream.ReadByte() ^ localhashInt & (ulong)0xff];
|
||||
localhashInt = (localhashInt >> 8) ^ localTable[(ulong)fileStream.ReadByte() ^ localhashInt & 0xffL];
|
||||
|
||||
BigEndianBitConverter.IsLittleEndian = BigEndianBitConverter.IsLittleEndian;
|
||||
hash = BitConverter.GetBytes(localhashInt);
|
||||
@@ -185,17 +185,17 @@ namespace DiscImageChef.Checksums
|
||||
/// <param name="hash">Byte array of the hash value.</param>
|
||||
/// <param name="polynomial">CRC polynomial</param>
|
||||
/// <param name="seed">CRC seed</param>
|
||||
public static string Data(byte[] data, uint len, out byte[] hash, UInt64 polynomial, UInt64 seed)
|
||||
public static string Data(byte[] data, uint len, out byte[] hash, ulong polynomial, ulong seed)
|
||||
{
|
||||
UInt64[] localTable;
|
||||
UInt64 localhashInt;
|
||||
ulong[] localTable;
|
||||
ulong localhashInt;
|
||||
|
||||
localhashInt = seed;
|
||||
|
||||
localTable = new UInt64[256];
|
||||
localTable = new ulong[256];
|
||||
for(int i = 0; i < 256; i++)
|
||||
{
|
||||
UInt64 entry = (UInt64)i;
|
||||
ulong entry = (ulong)i;
|
||||
for(int j = 0; j < 8; j++)
|
||||
if((entry & 1) == 1)
|
||||
entry = (entry >> 1) ^ polynomial;
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
2016-07-28 Natalia Portillo <claunia@claunia.com>
|
||||
|
||||
* CDChecksums.cs:
|
||||
* ReedSolomon.cs:
|
||||
* CRC16Context.cs:
|
||||
* CRC32Context.cs:
|
||||
* CRC64Context.cs:
|
||||
* Adler32Context.cs:
|
||||
* SpamSumContext.cs: Refactor and code cleanup.
|
||||
|
||||
2015-11-30 Natalia Portillo <claunia@claunia.com>
|
||||
|
||||
* FletcherContext.cs:
|
||||
|
||||
@@ -139,7 +139,7 @@ namespace DiscImageChef.Checksums
|
||||
Pp = new[] { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1 };
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException("m", "m must be between 2 and 16 inclusive");
|
||||
throw new ArgumentOutOfRangeException(nameof(m), "m must be between 2 and 16 inclusive");
|
||||
}
|
||||
|
||||
MM = m;
|
||||
|
||||
@@ -49,13 +49,13 @@ namespace DiscImageChef.Checksums
|
||||
/// </summary>
|
||||
public class SpamSumContext
|
||||
{
|
||||
const UInt32 ROLLING_WINDOW = 7;
|
||||
const UInt32 MIN_BLOCKSIZE = 3;
|
||||
const UInt32 HASH_PRIME = 0x01000193;
|
||||
const UInt32 HASH_INIT = 0x28021967;
|
||||
const UInt32 NUM_BLOCKHASHES = 31;
|
||||
const UInt32 SPAMSUM_LENGTH = 64;
|
||||
const UInt32 FUZZY_MAX_RESULT = (2 * SPAMSUM_LENGTH + 20);
|
||||
const uint ROLLING_WINDOW = 7;
|
||||
const uint MIN_BLOCKSIZE = 3;
|
||||
const uint HASH_PRIME = 0x01000193;
|
||||
const uint HASH_INIT = 0x28021967;
|
||||
const uint NUM_BLOCKHASHES = 31;
|
||||
const uint SPAMSUM_LENGTH = 64;
|
||||
const uint FUZZY_MAX_RESULT = (2 * SPAMSUM_LENGTH + 20);
|
||||
//"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
readonly byte[] b64 =
|
||||
{0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
|
||||
@@ -72,10 +72,10 @@ namespace DiscImageChef.Checksums
|
||||
{
|
||||
public byte[] window;
|
||||
// ROLLING_WINDOW
|
||||
public UInt32 h1;
|
||||
public UInt32 h2;
|
||||
public UInt32 h3;
|
||||
public UInt32 n;
|
||||
public uint h1;
|
||||
public uint h2;
|
||||
public uint h3;
|
||||
public uint n;
|
||||
}
|
||||
|
||||
/* A blockhash contains a signature state for a specific (implicit) blocksize.
|
||||
@@ -85,21 +85,21 @@ namespace DiscImageChef.Checksums
|
||||
* output hash to stay compatible with ssdeep output. */
|
||||
struct blockhash_context
|
||||
{
|
||||
public UInt32 h;
|
||||
public UInt32 halfh;
|
||||
public uint h;
|
||||
public uint halfh;
|
||||
public byte[] digest;
|
||||
// SPAMSUM_LENGTH
|
||||
public byte halfdigest;
|
||||
public UInt32 dlen;
|
||||
public uint dlen;
|
||||
}
|
||||
|
||||
struct fuzzy_state
|
||||
{
|
||||
public UInt32 bhstart;
|
||||
public UInt32 bhend;
|
||||
public uint bhstart;
|
||||
public uint bhend;
|
||||
public blockhash_context[] bh;
|
||||
//NUM_BLOCKHASHES
|
||||
public UInt64 total_size;
|
||||
public ulong total_size;
|
||||
public roll_state roll;
|
||||
}
|
||||
|
||||
@@ -145,10 +145,10 @@ namespace DiscImageChef.Checksums
|
||||
void roll_hash(byte c)
|
||||
{
|
||||
self.roll.h2 -= self.roll.h1;
|
||||
self.roll.h2 += ROLLING_WINDOW * (UInt32)c;
|
||||
self.roll.h2 += ROLLING_WINDOW * c;
|
||||
|
||||
self.roll.h1 += (UInt32)c;
|
||||
self.roll.h1 -= (UInt32)self.roll.window[self.roll.n % ROLLING_WINDOW];
|
||||
self.roll.h1 += c;
|
||||
self.roll.h1 -= self.roll.window[self.roll.n % ROLLING_WINDOW];
|
||||
|
||||
self.roll.window[self.roll.n % ROLLING_WINDOW] = c;
|
||||
self.roll.n++;
|
||||
@@ -160,18 +160,18 @@ namespace DiscImageChef.Checksums
|
||||
self.roll.h3 ^= c;
|
||||
}
|
||||
|
||||
UInt32 roll_sum()
|
||||
uint roll_sum()
|
||||
{
|
||||
return self.roll.h1 + self.roll.h2 + self.roll.h3;
|
||||
}
|
||||
|
||||
/* A simple non-rolling hash, based on the FNV hash. */
|
||||
static UInt32 sum_hash(byte c, UInt32 h)
|
||||
static uint sum_hash(byte c, uint h)
|
||||
{
|
||||
return (h * HASH_PRIME) ^ c;
|
||||
}
|
||||
|
||||
static UInt32 SSDEEP_BS(UInt32 index)
|
||||
static uint SSDEEP_BS(uint index)
|
||||
{
|
||||
return (MIN_BLOCKSIZE << (int)index);
|
||||
}
|
||||
@@ -204,7 +204,7 @@ namespace DiscImageChef.Checksums
|
||||
if(self.bhend - self.bhstart < 2)
|
||||
/* Need at least two working hashes. */
|
||||
return;
|
||||
if((UInt64)SSDEEP_BS(self.bhstart) * SPAMSUM_LENGTH >=
|
||||
if((ulong)SSDEEP_BS(self.bhstart) * SPAMSUM_LENGTH >=
|
||||
self.total_size)
|
||||
/* Initial blocksize estimate would select this or a smaller
|
||||
* blocksize. */
|
||||
@@ -219,8 +219,8 @@ namespace DiscImageChef.Checksums
|
||||
|
||||
void fuzzy_engine_step(byte c)
|
||||
{
|
||||
UInt64 h;
|
||||
UInt32 i;
|
||||
ulong h;
|
||||
uint i;
|
||||
/* At each character we update the rolling hash and the normal hashes.
|
||||
* When the rolling hash hits a reset value then we emit a normal hash
|
||||
* as a element of the signature and reset the normal hash. */
|
||||
@@ -295,22 +295,22 @@ namespace DiscImageChef.Checksums
|
||||
}
|
||||
|
||||
// CLAUNIA: Flags seems to never be used in ssdeep, so I just removed it for code simplicity
|
||||
UInt32 fuzzy_digest(out byte[] result)
|
||||
uint fuzzy_digest(out byte[] result)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
UInt32 bi = self.bhstart;
|
||||
UInt32 h = roll_sum();
|
||||
uint bi = self.bhstart;
|
||||
uint h = roll_sum();
|
||||
int i, result_off;
|
||||
int remain = (int)(FUZZY_MAX_RESULT - 1); /* Exclude terminating '\0'. */
|
||||
result = new byte[FUZZY_MAX_RESULT];
|
||||
/* Verify that our elimination was not overeager. */
|
||||
if(!(bi == 0 || (UInt64)SSDEEP_BS(bi) / 2 * SPAMSUM_LENGTH < self.total_size))
|
||||
if(!(bi == 0 || (ulong)SSDEEP_BS(bi) / 2 * SPAMSUM_LENGTH < self.total_size))
|
||||
throw new Exception("Assertion failed");
|
||||
|
||||
result_off = 0;
|
||||
|
||||
/* Initial blocksize guess. */
|
||||
while((UInt64)SSDEEP_BS(bi) * SPAMSUM_LENGTH < self.total_size)
|
||||
while((ulong)SSDEEP_BS(bi) * SPAMSUM_LENGTH < self.total_size)
|
||||
{
|
||||
++bi;
|
||||
if(bi >= NUM_BLOCKHASHES)
|
||||
|
||||
Reference in New Issue
Block a user