🐛Moved checksums to interface.

This commit is contained in:
2018-02-03 17:01:17 +00:00
parent 6b85fb0628
commit 4b4671b4ef
28 changed files with 230 additions and 273 deletions

View File

@@ -58,6 +58,7 @@
<e p="CRC64Context.cs" t="Include" />
<e p="DiscImageChef.Checksums.csproj" t="IncludeRecursive" />
<e p="FletcherContext.cs" t="Include" />
<e p="IChecksum.cs" t="Include" />
<e p="MD5Context.cs" t="Include" />
<e p="Properties" t="Include">
<e p="AssemblyInfo.cs" t="Include" />

View File

@@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums
/// <summary>
/// Implements the Adler-32 algorithm
/// </summary>
public class Adler32Context
public class Adler32Context : IChecksum
{
const ushort ADLER_MODULE = 65521;
ushort sum1, sum2;

View File

@@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums
/// <summary>
/// Implements a CRC16-CCITT algorithm
/// </summary>
public class Crc16Context
public class Crc16Context : IChecksum
{
const ushort CRC16_POLY = 0xA001;
const ushort CRC16_SEED = 0x0000;

View File

@@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums
/// <summary>
/// Implements a CRC32 algorithm
/// </summary>
public class Crc32Context
public class Crc32Context : IChecksum
{
const uint CRC32_POLY = 0xEDB88320;
const uint CRC32_SEED = 0xFFFFFFFF;

View File

@@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums
/// <summary>
/// Implements a CRC64 (ECMA) algorithm
/// </summary>
public class Crc64Context
public class Crc64Context : IChecksum
{
const ulong CRC64_POLY = 0xC96C5795D7870F42;
const ulong CRC64_SEED = 0xFFFFFFFFFFFFFFFF;

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -34,6 +34,7 @@
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="IChecksum.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SpamSumContext.cs" />
<Compile Include="Adler32Context.cs" />

View File

@@ -31,14 +31,14 @@
// ****************************************************************************/
// Disabled because the speed is abnormally slow
/*
using System;
using System.IO;
using System.Text;
namespace DiscImageChef.Checksums
{
public class Fletcher32Context
public class Fletcher32Context : IChecksum
{
bool inodd;
byte oddValue;
@@ -423,4 +423,4 @@ namespace DiscImageChef.Checksums
return Data(data, (uint)data.Length, out hash);
}
}
}*/
}

View File

@@ -0,0 +1,65 @@
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : IChecksum.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : Checksums.
//
// --[ Description ] ----------------------------------------------------------
//
// Provides an interface for implementing checksums and hashes.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2018 Natalia Portillo
// ****************************************************************************/
namespace DiscImageChef.Checksums
{
public interface IChecksum
{
/// <summary>
/// Initializes the algorithm
/// </summary>
void Init();
/// <summary>
/// Updates the hash with data.
/// </summary>
/// <param name="data">Data buffer.</param>
/// <param name="len">Length of buffer to hash.</param>
void Update(byte[] data, uint len);
/// <summary>
/// Updates the hash with data.
/// </summary>
/// <param name="data">Data buffer.</param>
void Update(byte[] data);
/// <summary>
/// Returns a byte array of the hash value.
/// </summary>
byte[] Final();
/// <summary>
/// Returns a hexadecimal representation of the hash value.
/// </summary>
string End();
}
}

View File

@@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums
/// <summary>
/// Wraps up .NET MD5 implementation to a Init(), Update(), Final() context.
/// </summary>
public class Md5Context
public class Md5Context : IChecksum
{
MD5 md5Provider;

View File

@@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums
/// <summary>
/// Wraps up .NET RIPEMD160 implementation to a Init(), Update(), Final() context.
/// </summary>
public class Ripemd160Context
public class Ripemd160Context : IChecksum
{
RIPEMD160 ripemd160Provider;

View File

@@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums
/// <summary>
/// Wraps up .NET SHA1 implementation to a Init(), Update(), Final() context.
/// </summary>
public class Sha1Context
public class Sha1Context : IChecksum
{
SHA1 sha1Provider;

View File

@@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums
/// <summary>
/// Wraps up .NET SHA256 implementation to a Init(), Update(), Final() context.
/// </summary>
public class Sha256Context
public class Sha256Context : IChecksum
{
SHA256 sha256Provider;

View File

@@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums
/// <summary>
/// Wraps up .NET SHA384 implementation to a Init(), Update(), Final() context.
/// </summary>
public class Sha384Context
public class Sha384Context : IChecksum
{
SHA384 sha384Provider;

View File

@@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums
/// <summary>
/// Wraps up .NET SHA512 implementation to a Init(), Update(), Final() context.
/// </summary>
public class Sha512Context
public class Sha512Context : IChecksum
{
SHA512 sha512Provider;

View File

@@ -47,7 +47,7 @@ namespace DiscImageChef.Checksums
/// <summary>
/// Implements the SpamSum fuzzy hashing algorithm.
/// </summary>
public class SpamSumContext
public class SpamSumContext : IChecksum
{
const uint ROLLING_WINDOW = 7;
const uint MIN_BLOCKSIZE = 3;

View File

@@ -139,8 +139,8 @@ namespace DiscImageChef.Core
results.ReadSpeed = bufferSize / 1048576.0 / (end - start).TotalSeconds;
#region Adler32
object ctx = new Adler32Context();
((Adler32Context)ctx).Init();
IChecksum ctx = new Adler32Context();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -152,11 +152,11 @@ namespace DiscImageChef.Core
UpdateProgress("Checksumming block {0} of {1} with Adler32.", i + 1, bufferSize / blockSize);
byte[] tmp = new byte[blockSize];
ms.Read(tmp, 0, blockSize);
((Adler32Context)ctx).Update(tmp);
ctx.Update(tmp);
}
EndProgress();
((Adler32Context)ctx).End();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -173,7 +173,7 @@ namespace DiscImageChef.Core
#region CRC16
ctx = new Crc16Context();
((Crc16Context)ctx).Init();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -185,11 +185,11 @@ namespace DiscImageChef.Core
UpdateProgress("Checksumming block {0} of {1} with CRC16.", i + 1, bufferSize / blockSize);
byte[] tmp = new byte[blockSize];
ms.Read(tmp, 0, blockSize);
((Crc16Context)ctx).Update(tmp);
ctx.Update(tmp);
}
EndProgress();
((Crc16Context)ctx).End();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -206,7 +206,7 @@ namespace DiscImageChef.Core
#region CRC32
ctx = new Crc32Context();
((Crc32Context)ctx).Init();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -218,11 +218,11 @@ namespace DiscImageChef.Core
UpdateProgress("Checksumming block {0} of {1} with CRC32.", i + 1, bufferSize / blockSize);
byte[] tmp = new byte[blockSize];
ms.Read(tmp, 0, blockSize);
((Crc32Context)ctx).Update(tmp);
ctx.Update(tmp);
}
EndProgress();
((Crc32Context)ctx).End();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -239,7 +239,7 @@ namespace DiscImageChef.Core
#region CRC64
ctx = new Crc64Context();
((Crc64Context)ctx).Init();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -251,11 +251,11 @@ namespace DiscImageChef.Core
UpdateProgress("Checksumming block {0} of {1} with CRC64.", i + 1, bufferSize / blockSize);
byte[] tmp = new byte[blockSize];
ms.Read(tmp, 0, blockSize);
((Crc64Context)ctx).Update(tmp);
ctx.Update(tmp);
}
EndProgress();
((Crc64Context)ctx).End();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -272,7 +272,7 @@ namespace DiscImageChef.Core
#region MD5
ctx = new Md5Context();
((Md5Context)ctx).Init();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -284,11 +284,11 @@ namespace DiscImageChef.Core
UpdateProgress("Checksumming block {0} of {1} with MD5.", i + 1, bufferSize / blockSize);
byte[] tmp = new byte[blockSize];
ms.Read(tmp, 0, blockSize);
((Md5Context)ctx).Update(tmp);
ctx.Update(tmp);
}
EndProgress();
((Md5Context)ctx).End();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -305,7 +305,7 @@ namespace DiscImageChef.Core
#region RIPEMD160
ctx = new Ripemd160Context();
((Ripemd160Context)ctx).Init();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -317,11 +317,11 @@ namespace DiscImageChef.Core
UpdateProgress("Checksumming block {0} of {1} with RIPEMD160.", i + 1, bufferSize / blockSize);
byte[] tmp = new byte[blockSize];
ms.Read(tmp, 0, blockSize);
((Ripemd160Context)ctx).Update(tmp);
ctx.Update(tmp);
}
EndProgress();
((Ripemd160Context)ctx).End();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -338,7 +338,7 @@ namespace DiscImageChef.Core
#region SHA1
ctx = new Sha1Context();
((Sha1Context)ctx).Init();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -350,11 +350,11 @@ namespace DiscImageChef.Core
UpdateProgress("Checksumming block {0} of {1} with SHA1.", i + 1, bufferSize / blockSize);
byte[] tmp = new byte[blockSize];
ms.Read(tmp, 0, blockSize);
((Sha1Context)ctx).Update(tmp);
ctx.Update(tmp);
}
EndProgress();
((Sha1Context)ctx).End();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -371,7 +371,7 @@ namespace DiscImageChef.Core
#region SHA256
ctx = new Sha256Context();
((Sha256Context)ctx).Init();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -383,11 +383,11 @@ namespace DiscImageChef.Core
UpdateProgress("Checksumming block {0} of {1} with SHA256.", i + 1, bufferSize / blockSize);
byte[] tmp = new byte[blockSize];
ms.Read(tmp, 0, blockSize);
((Sha256Context)ctx).Update(tmp);
ctx.Update(tmp);
}
EndProgress();
((Sha256Context)ctx).End();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -404,7 +404,7 @@ namespace DiscImageChef.Core
#region SHA384
ctx = new Sha384Context();
((Sha384Context)ctx).Init();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -416,11 +416,11 @@ namespace DiscImageChef.Core
UpdateProgress("Checksumming block {0} of {1} with SHA384.", i + 1, bufferSize / blockSize);
byte[] tmp = new byte[blockSize];
ms.Read(tmp, 0, blockSize);
((Sha384Context)ctx).Update(tmp);
ctx.Update(tmp);
}
EndProgress();
((Sha384Context)ctx).End();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -437,7 +437,7 @@ namespace DiscImageChef.Core
#region SHA512
ctx = new Sha512Context();
((Sha512Context)ctx).Init();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -449,11 +449,11 @@ namespace DiscImageChef.Core
UpdateProgress("Checksumming block {0} of {1} with SHA512.", i + 1, bufferSize / blockSize);
byte[] tmp = new byte[blockSize];
ms.Read(tmp, 0, blockSize);
((Sha512Context)ctx).Update(tmp);
ctx.Update(tmp);
}
EndProgress();
((Sha512Context)ctx).End();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -470,7 +470,7 @@ namespace DiscImageChef.Core
#region SpamSum
ctx = new SpamSumContext();
((SpamSumContext)ctx).Init();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
@@ -482,11 +482,11 @@ namespace DiscImageChef.Core
UpdateProgress("Checksumming block {0} of {1} with SpamSum.", i + 1, bufferSize / blockSize);
byte[] tmp = new byte[blockSize];
ms.Read(tmp, 0, blockSize);
((SpamSumContext)ctx).Update(tmp);
ctx.Update(tmp);
}
EndProgress();
((SpamSumContext)ctx).End();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;

View File

@@ -60,40 +60,40 @@ namespace DiscImageChef.Core
/// </summary>
public class Checksum
{
Adler32Context adler32Ctx;
AdlerPacket adlerPkt;
IChecksum adler32Ctx;
HashPacket adlerPkt;
Thread adlerThread;
Crc16Context crc16Ctx;
Crc16Packet crc16Pkt;
IChecksum crc16Ctx;
HashPacket crc16Pkt;
Thread crc16Thread;
Crc32Context crc32Ctx;
Crc32Packet crc32Pkt;
IChecksum crc32Ctx;
HashPacket crc32Pkt;
Thread crc32Thread;
Crc64Context crc64Ctx;
Crc64Packet crc64Pkt;
IChecksum crc64Ctx;
HashPacket crc64Pkt;
Thread crc64Thread;
EnableChecksum enabled;
Md5Context md5Ctx;
Md5Packet md5Pkt;
IChecksum md5Ctx;
HashPacket md5Pkt;
Thread md5Thread;
Ripemd160Context ripemd160Ctx;
Ripemd160Packet ripemd160Pkt;
IChecksum ripemd160Ctx;
HashPacket ripemd160Pkt;
Thread ripemd160Thread;
Sha1Context sha1Ctx;
Sha1Packet sha1Pkt;
IChecksum sha1Ctx;
HashPacket sha1Pkt;
Thread sha1Thread;
Sha256Context sha256Ctx;
Sha256Packet sha256Pkt;
IChecksum sha256Ctx;
HashPacket sha256Pkt;
Thread sha256Thread;
Sha384Context sha384Ctx;
Sha384Packet sha384Pkt;
IChecksum sha384Ctx;
HashPacket sha384Pkt;
Thread sha384Thread;
Sha512Context sha512Ctx;
Sha512Packet sha512Pkt;
IChecksum sha512Ctx;
HashPacket sha512Pkt;
Thread sha512Thread;
SpamsumPacket spamsumPkt;
HashPacket spamsumPkt;
Thread spamsumThread;
SpamSumContext ssctx;
IChecksum ssctx;
public Checksum(EnableChecksum enabled = EnableChecksum.All)
{
@@ -102,7 +102,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.Adler32))
{
adler32Ctx = new Adler32Context();
adlerPkt = new AdlerPacket();
adlerPkt = new HashPacket();
adler32Ctx.Init();
adlerPkt.Context = adler32Ctx;
}
@@ -110,7 +110,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.Crc16))
{
crc16Ctx = new Crc16Context();
crc16Pkt = new Crc16Packet();
crc16Pkt = new HashPacket();
crc16Ctx.Init();
crc16Pkt.Context = crc16Ctx;
}
@@ -118,7 +118,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.Crc32))
{
crc32Ctx = new Crc32Context();
crc32Pkt = new Crc32Packet();
crc32Pkt = new HashPacket();
crc32Ctx.Init();
crc32Pkt.Context = crc32Ctx;
}
@@ -126,7 +126,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.Crc64))
{
crc64Ctx = new Crc64Context();
crc64Pkt = new Crc64Packet();
crc64Pkt = new HashPacket();
crc64Ctx.Init();
crc64Pkt.Context = crc64Ctx;
}
@@ -134,7 +134,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.Md5))
{
md5Ctx = new Md5Context();
md5Pkt = new Md5Packet();
md5Pkt = new HashPacket();
md5Ctx.Init();
md5Pkt.Context = md5Ctx;
}
@@ -142,7 +142,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.Ripemd160))
{
ripemd160Ctx = new Ripemd160Context();
ripemd160Pkt = new Ripemd160Packet();
ripemd160Pkt = new HashPacket();
ripemd160Ctx.Init();
ripemd160Pkt.Context = ripemd160Ctx;
}
@@ -150,7 +150,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.Sha1))
{
sha1Ctx = new Sha1Context();
sha1Pkt = new Sha1Packet();
sha1Pkt = new HashPacket();
sha1Ctx.Init();
sha1Pkt.Context = sha1Ctx;
}
@@ -158,7 +158,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.Sha256))
{
sha256Ctx = new Sha256Context();
sha256Pkt = new Sha256Packet();
sha256Pkt = new HashPacket();
sha256Ctx.Init();
sha256Pkt.Context = sha256Ctx;
}
@@ -166,7 +166,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.Sha384))
{
sha384Ctx = new Sha384Context();
sha384Pkt = new Sha384Packet();
sha384Pkt = new HashPacket();
sha384Ctx.Init();
sha384Pkt.Context = sha384Ctx;
}
@@ -174,7 +174,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.Sha512))
{
sha512Ctx = new Sha512Context();
sha512Pkt = new Sha512Packet();
sha512Pkt = new HashPacket();
sha512Ctx.Init();
sha512Pkt.Context = sha512Ctx;
}
@@ -182,22 +182,22 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
ssctx = new SpamSumContext();
spamsumPkt = new SpamsumPacket();
spamsumPkt = new HashPacket();
ssctx.Init();
spamsumPkt.Context = ssctx;
}
adlerThread = new Thread(UpdateAdler);
crc16Thread = new Thread(UpdateCrc16);
crc32Thread = new Thread(UpdateCrc32);
crc64Thread = new Thread(UpdateCrc64);
md5Thread = new Thread(UpdateMd5);
ripemd160Thread = new Thread(UpdateRipemd160);
sha1Thread = new Thread(UpdateSha1);
sha256Thread = new Thread(UpdateSha256);
sha384Thread = new Thread(UpdateSha384);
sha512Thread = new Thread(UpdateSha512);
spamsumThread = new Thread(UpdateSpamSum);
adlerThread = new Thread(UpdateHash);
crc16Thread = new Thread(UpdateHash);
crc32Thread = new Thread(UpdateHash);
crc64Thread = new Thread(UpdateHash);
md5Thread = new Thread(UpdateHash);
ripemd160Thread = new Thread(UpdateHash);
sha1Thread = new Thread(UpdateHash);
sha256Thread = new Thread(UpdateHash);
sha384Thread = new Thread(UpdateHash);
sha512Thread = new Thread(UpdateHash);
spamsumThread = new Thread(UpdateHash);
}
public void Update(byte[] data)
@@ -271,17 +271,17 @@ namespace DiscImageChef.Core
md5Thread.IsAlive || ripemd160Thread.IsAlive || sha1Thread.IsAlive || sha256Thread.IsAlive ||
sha384Thread.IsAlive || sha512Thread.IsAlive || spamsumThread.IsAlive) { }
if(enabled.HasFlag(EnableChecksum.SpamSum)) adlerThread = new Thread(UpdateAdler);
if(enabled.HasFlag(EnableChecksum.SpamSum)) crc16Thread = new Thread(UpdateCrc16);
if(enabled.HasFlag(EnableChecksum.SpamSum)) crc32Thread = new Thread(UpdateCrc32);
if(enabled.HasFlag(EnableChecksum.SpamSum)) crc64Thread = new Thread(UpdateCrc64);
if(enabled.HasFlag(EnableChecksum.SpamSum)) md5Thread = new Thread(UpdateMd5);
if(enabled.HasFlag(EnableChecksum.SpamSum)) ripemd160Thread = new Thread(UpdateRipemd160);
if(enabled.HasFlag(EnableChecksum.SpamSum)) sha1Thread = new Thread(UpdateSha1);
if(enabled.HasFlag(EnableChecksum.SpamSum)) sha256Thread = new Thread(UpdateSha256);
if(enabled.HasFlag(EnableChecksum.SpamSum)) sha384Thread = new Thread(UpdateSha384);
if(enabled.HasFlag(EnableChecksum.SpamSum)) sha512Thread = new Thread(UpdateSha512);
if(enabled.HasFlag(EnableChecksum.SpamSum)) spamsumThread = new Thread(UpdateSpamSum);
if(enabled.HasFlag(EnableChecksum.SpamSum)) adlerThread = new Thread(UpdateHash);
if(enabled.HasFlag(EnableChecksum.SpamSum)) crc16Thread = new Thread(UpdateHash);
if(enabled.HasFlag(EnableChecksum.SpamSum)) crc32Thread = new Thread(UpdateHash);
if(enabled.HasFlag(EnableChecksum.SpamSum)) crc64Thread = new Thread(UpdateHash);
if(enabled.HasFlag(EnableChecksum.SpamSum)) md5Thread = new Thread(UpdateHash);
if(enabled.HasFlag(EnableChecksum.SpamSum)) ripemd160Thread = new Thread(UpdateHash);
if(enabled.HasFlag(EnableChecksum.SpamSum)) sha1Thread = new Thread(UpdateHash);
if(enabled.HasFlag(EnableChecksum.SpamSum)) sha256Thread = new Thread(UpdateHash);
if(enabled.HasFlag(EnableChecksum.SpamSum)) sha384Thread = new Thread(UpdateHash);
if(enabled.HasFlag(EnableChecksum.SpamSum)) sha512Thread = new Thread(UpdateHash);
if(enabled.HasFlag(EnableChecksum.SpamSum)) spamsumThread = new Thread(UpdateHash);
}
public List<ChecksumType> End()
@@ -360,34 +360,34 @@ namespace DiscImageChef.Core
internal static List<ChecksumType> GetChecksums(byte[] data, EnableChecksum enabled = EnableChecksum.All)
{
Adler32Context adler32CtxData = null;
Crc16Context crc16CtxData = null;
Crc32Context crc32CtxData = null;
Crc64Context crc64CtxData = null;
Md5Context md5CtxData = null;
Ripemd160Context ripemd160CtxData = null;
Sha1Context sha1CtxData = null;
Sha256Context sha256CtxData = null;
Sha384Context sha384CtxData = null;
Sha512Context sha512CtxData = null;
SpamSumContext ssctxData = null;
IChecksum adler32CtxData = null;
IChecksum crc16CtxData = null;
IChecksum crc32CtxData = null;
IChecksum crc64CtxData = null;
IChecksum md5CtxData = null;
IChecksum ripemd160CtxData = null;
IChecksum sha1CtxData = null;
IChecksum sha256CtxData = null;
IChecksum sha384CtxData = null;
IChecksum sha512CtxData = null;
IChecksum ssctxData = null;
Thread adlerThreadData = new Thread(UpdateAdler);
Thread crc16ThreadData = new Thread(UpdateCrc16);
Thread crc32ThreadData = new Thread(UpdateCrc32);
Thread crc64ThreadData = new Thread(UpdateCrc64);
Thread md5ThreadData = new Thread(UpdateMd5);
Thread ripemd160ThreadData = new Thread(UpdateRipemd160);
Thread sha1ThreadData = new Thread(UpdateSha1);
Thread sha256ThreadData = new Thread(UpdateSha256);
Thread sha384ThreadData = new Thread(UpdateSha384);
Thread sha512ThreadData = new Thread(UpdateSha512);
Thread spamsumThreadData = new Thread(UpdateSpamSum);
Thread adlerThreadData = new Thread(UpdateHash);
Thread crc16ThreadData = new Thread(UpdateHash);
Thread crc32ThreadData = new Thread(UpdateHash);
Thread crc64ThreadData = new Thread(UpdateHash);
Thread md5ThreadData = new Thread(UpdateHash);
Thread ripemd160ThreadData = new Thread(UpdateHash);
Thread sha1ThreadData = new Thread(UpdateHash);
Thread sha256ThreadData = new Thread(UpdateHash);
Thread sha384ThreadData = new Thread(UpdateHash);
Thread sha512ThreadData = new Thread(UpdateHash);
Thread spamsumThreadData = new Thread(UpdateHash);
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
adler32CtxData = new Adler32Context();
AdlerPacket adlerPktData = new AdlerPacket();
HashPacket adlerPktData = new HashPacket();
adler32CtxData.Init();
adlerPktData.Context = adler32CtxData;
adlerPktData.Data = data;
@@ -396,7 +396,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
Crc16Packet crc16PktData = new Crc16Packet();
HashPacket crc16PktData = new HashPacket();
crc16CtxData = new Crc16Context();
crc16CtxData.Init();
crc16PktData.Context = crc16CtxData;
@@ -406,7 +406,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
Crc32Packet crc32PktData = new Crc32Packet();
HashPacket crc32PktData = new HashPacket();
crc32CtxData = new Crc32Context();
crc32CtxData.Init();
crc32PktData.Context = crc32CtxData;
@@ -416,7 +416,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
Crc64Packet crc64PktData = new Crc64Packet();
HashPacket crc64PktData = new HashPacket();
crc64CtxData = new Crc64Context();
crc64CtxData.Init();
crc64PktData.Context = crc64CtxData;
@@ -426,7 +426,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
Md5Packet md5PktData = new Md5Packet();
HashPacket md5PktData = new HashPacket();
md5CtxData = new Md5Context();
md5CtxData.Init();
md5PktData.Context = md5CtxData;
@@ -436,7 +436,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
Ripemd160Packet ripemd160PktData = new Ripemd160Packet();
HashPacket ripemd160PktData = new HashPacket();
ripemd160CtxData = new Ripemd160Context();
ripemd160CtxData.Init();
ripemd160PktData.Context = ripemd160CtxData;
@@ -446,7 +446,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
Sha1Packet sha1PktData = new Sha1Packet();
HashPacket sha1PktData = new HashPacket();
sha1CtxData = new Sha1Context();
sha1CtxData.Init();
sha1PktData.Context = sha1CtxData;
@@ -456,7 +456,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
Sha256Packet sha256PktData = new Sha256Packet();
HashPacket sha256PktData = new HashPacket();
sha256CtxData = new Sha256Context();
sha256CtxData.Init();
sha256PktData.Context = sha256CtxData;
@@ -466,7 +466,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
Sha384Packet sha384PktData = new Sha384Packet();
HashPacket sha384PktData = new HashPacket();
sha384CtxData = new Sha384Context();
sha384CtxData.Init();
sha384PktData.Context = sha384CtxData;
@@ -476,7 +476,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
Sha512Packet sha512PktData = new Sha512Packet();
HashPacket sha512PktData = new HashPacket();
sha512CtxData = new Sha512Context();
sha512CtxData.Init();
sha512PktData.Context = sha512CtxData;
@@ -486,7 +486,7 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
SpamsumPacket spamsumPktData = new SpamsumPacket();
HashPacket spamsumPktData = new HashPacket();
ssctxData = new SpamSumContext();
ssctxData.Init();
spamsumPktData.Context = ssctxData;
@@ -571,125 +571,15 @@ namespace DiscImageChef.Core
}
#region Threading helpers
struct AdlerPacket
struct HashPacket
{
public Adler32Context Context;
public IChecksum Context;
public byte[] Data;
}
struct Crc16Packet
static void UpdateHash(object packet)
{
public Crc16Context Context;
public byte[] Data;
}
struct Crc32Packet
{
public Crc32Context Context;
public byte[] Data;
}
struct Crc64Packet
{
public Crc64Context Context;
public byte[] Data;
}
struct Md5Packet
{
public Md5Context Context;
public byte[] Data;
}
struct Ripemd160Packet
{
public Ripemd160Context Context;
public byte[] Data;
}
struct Sha1Packet
{
public Sha1Context Context;
public byte[] Data;
}
struct Sha256Packet
{
public Sha256Context Context;
public byte[] Data;
}
struct Sha384Packet
{
public Sha384Context Context;
public byte[] Data;
}
struct Sha512Packet
{
public Sha512Context Context;
public byte[] Data;
}
struct SpamsumPacket
{
public SpamSumContext Context;
public byte[] Data;
}
static void UpdateAdler(object packet)
{
((AdlerPacket)packet).Context.Update(((AdlerPacket)packet).Data);
}
static void UpdateCrc16(object packet)
{
((Crc16Packet)packet).Context.Update(((Crc16Packet)packet).Data);
}
static void UpdateCrc32(object packet)
{
((Crc32Packet)packet).Context.Update(((Crc32Packet)packet).Data);
}
static void UpdateCrc64(object packet)
{
((Crc64Packet)packet).Context.Update(((Crc64Packet)packet).Data);
}
static void UpdateMd5(object packet)
{
((Md5Packet)packet).Context.Update(((Md5Packet)packet).Data);
}
static void UpdateRipemd160(object packet)
{
((Ripemd160Packet)packet).Context.Update(((Ripemd160Packet)packet).Data);
}
static void UpdateSha1(object packet)
{
((Sha1Packet)packet).Context.Update(((Sha1Packet)packet).Data);
}
static void UpdateSha256(object packet)
{
((Sha256Packet)packet).Context.Update(((Sha256Packet)packet).Data);
}
static void UpdateSha384(object packet)
{
((Sha384Packet)packet).Context.Update(((Sha384Packet)packet).Data);
}
static void UpdateSha512(object packet)
{
((Sha512Packet)packet).Context.Update(((Sha512Packet)packet).Data);
}
static void UpdateSpamSum(object packet)
{
((SpamsumPacket)packet).Context.Update(((SpamsumPacket)packet).Data);
((HashPacket)packet).Context.Update(((HashPacket)packet).Data);
}
#endregion Threading helpers
}

View File

@@ -67,7 +67,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Adler32Context ctx = new Adler32Context();
IChecksum ctx = new Adler32Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();
@@ -103,7 +103,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Adler32Context ctx = new Adler32Context();
IChecksum ctx = new Adler32Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();

View File

@@ -67,7 +67,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Crc16Context ctx = new Crc16Context();
IChecksum ctx = new Crc16Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();
@@ -103,7 +103,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Crc16Context ctx = new Crc16Context();
IChecksum ctx = new Crc16Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();

View File

@@ -67,7 +67,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Crc32Context ctx = new Crc32Context();
IChecksum ctx = new Crc32Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();
@@ -103,7 +103,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Crc32Context ctx = new Crc32Context();
IChecksum ctx = new Crc32Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();

View File

@@ -67,7 +67,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Crc64Context ctx = new Crc64Context();
IChecksum ctx = new Crc64Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();
@@ -103,7 +103,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Crc64Context ctx = new Crc64Context();
IChecksum ctx = new Crc64Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();

View File

@@ -73,7 +73,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Md5Context ctx = new Md5Context();
IChecksum ctx = new Md5Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();
@@ -113,7 +113,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Md5Context ctx = new Md5Context();
IChecksum ctx = new Md5Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();

View File

@@ -79,7 +79,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Ripemd160Context ctx = new Ripemd160Context();
IChecksum ctx = new Ripemd160Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();
@@ -119,7 +119,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Ripemd160Context ctx = new Ripemd160Context();
IChecksum ctx = new Ripemd160Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();

View File

@@ -79,7 +79,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Sha1Context ctx = new Sha1Context();
IChecksum ctx = new Sha1Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();
@@ -119,7 +119,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Sha1Context ctx = new Sha1Context();
IChecksum ctx = new Sha1Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();

View File

@@ -79,7 +79,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Sha256Context ctx = new Sha256Context();
IChecksum ctx = new Sha256Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();
@@ -119,7 +119,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Sha256Context ctx = new Sha256Context();
IChecksum ctx = new Sha256Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();

View File

@@ -81,7 +81,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Sha384Context ctx = new Sha384Context();
IChecksum ctx = new Sha384Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();
@@ -121,7 +121,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Sha384Context ctx = new Sha384Context();
IChecksum ctx = new Sha384Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();

View File

@@ -83,7 +83,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Sha512Context ctx = new Sha512Context();
IChecksum ctx = new Sha512Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();
@@ -123,7 +123,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
Sha512Context ctx = new Sha512Context();
IChecksum ctx = new Sha512Context();
ctx.Init();
ctx.Update(data);
byte[] result = ctx.Final();

View File

@@ -60,7 +60,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
SpamSumContext ctx = new SpamSumContext();
IChecksum ctx = new SpamSumContext();
ctx.Init();
ctx.Update(data);
string result = ctx.End();
@@ -89,7 +89,7 @@ namespace DiscImageChef.Tests.Checksums
fs.Read(data, 0, 1048576);
fs.Close();
fs.Dispose();
SpamSumContext ctx = new SpamSumContext();
IChecksum ctx = new SpamSumContext();
ctx.Init();
ctx.Update(data);
string result = ctx.End();