🐛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="CRC64Context.cs" t="Include" />
<e p="DiscImageChef.Checksums.csproj" t="IncludeRecursive" /> <e p="DiscImageChef.Checksums.csproj" t="IncludeRecursive" />
<e p="FletcherContext.cs" t="Include" /> <e p="FletcherContext.cs" t="Include" />
<e p="IChecksum.cs" t="Include" />
<e p="MD5Context.cs" t="Include" /> <e p="MD5Context.cs" t="Include" />
<e p="Properties" t="Include"> <e p="Properties" t="Include">
<e p="AssemblyInfo.cs" t="Include" /> <e p="AssemblyInfo.cs" t="Include" />

View File

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

View File

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

View File

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

View File

@@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums
/// <summary> /// <summary>
/// Implements a CRC64 (ECMA) algorithm /// Implements a CRC64 (ECMA) algorithm
/// </summary> /// </summary>
public class Crc64Context public class Crc64Context : IChecksum
{ {
const ulong CRC64_POLY = 0xC96C5795D7870F42; const ulong CRC64_POLY = 0xC96C5795D7870F42;
const ulong CRC64_SEED = 0xFFFFFFFFFFFFFFFF; 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"> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -34,6 +34,7 @@
<Reference Include="System" /> <Reference Include="System" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="IChecksum.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SpamSumContext.cs" /> <Compile Include="SpamSumContext.cs" />
<Compile Include="Adler32Context.cs" /> <Compile Include="Adler32Context.cs" />

View File

@@ -31,14 +31,14 @@
// ****************************************************************************/ // ****************************************************************************/
// Disabled because the speed is abnormally slow // Disabled because the speed is abnormally slow
/*
using System; using System;
using System.IO; using System.IO;
using System.Text; using System.Text;
namespace DiscImageChef.Checksums namespace DiscImageChef.Checksums
{ {
public class Fletcher32Context public class Fletcher32Context : IChecksum
{ {
bool inodd; bool inodd;
byte oddValue; byte oddValue;
@@ -423,4 +423,4 @@ namespace DiscImageChef.Checksums
return Data(data, (uint)data.Length, out hash); 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> /// <summary>
/// Wraps up .NET MD5 implementation to a Init(), Update(), Final() context. /// Wraps up .NET MD5 implementation to a Init(), Update(), Final() context.
/// </summary> /// </summary>
public class Md5Context public class Md5Context : IChecksum
{ {
MD5 md5Provider; MD5 md5Provider;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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