diff --git a/.idea/.idea.DiscImageChef/.idea/contentModel.xml b/.idea/.idea.DiscImageChef/.idea/contentModel.xml index 7aaee6b6..9725543a 100644 --- a/.idea/.idea.DiscImageChef/.idea/contentModel.xml +++ b/.idea/.idea.DiscImageChef/.idea/contentModel.xml @@ -58,6 +58,7 @@ + diff --git a/DiscImageChef.Checksums/Adler32Context.cs b/DiscImageChef.Checksums/Adler32Context.cs index f6fa9db6..083ae310 100644 --- a/DiscImageChef.Checksums/Adler32Context.cs +++ b/DiscImageChef.Checksums/Adler32Context.cs @@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums /// /// Implements the Adler-32 algorithm /// - public class Adler32Context + public class Adler32Context : IChecksum { const ushort ADLER_MODULE = 65521; ushort sum1, sum2; diff --git a/DiscImageChef.Checksums/CRC16Context.cs b/DiscImageChef.Checksums/CRC16Context.cs index 7bcb2155..ec65593b 100644 --- a/DiscImageChef.Checksums/CRC16Context.cs +++ b/DiscImageChef.Checksums/CRC16Context.cs @@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums /// /// Implements a CRC16-CCITT algorithm /// - public class Crc16Context + public class Crc16Context : IChecksum { const ushort CRC16_POLY = 0xA001; const ushort CRC16_SEED = 0x0000; diff --git a/DiscImageChef.Checksums/CRC32Context.cs b/DiscImageChef.Checksums/CRC32Context.cs index 97680b60..e2319969 100644 --- a/DiscImageChef.Checksums/CRC32Context.cs +++ b/DiscImageChef.Checksums/CRC32Context.cs @@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums /// /// Implements a CRC32 algorithm /// - public class Crc32Context + public class Crc32Context : IChecksum { const uint CRC32_POLY = 0xEDB88320; const uint CRC32_SEED = 0xFFFFFFFF; diff --git a/DiscImageChef.Checksums/CRC64Context.cs b/DiscImageChef.Checksums/CRC64Context.cs index 35f3be4c..b1bc62bd 100644 --- a/DiscImageChef.Checksums/CRC64Context.cs +++ b/DiscImageChef.Checksums/CRC64Context.cs @@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums /// /// Implements a CRC64 (ECMA) algorithm /// - public class Crc64Context + public class Crc64Context : IChecksum { const ulong CRC64_POLY = 0xC96C5795D7870F42; const ulong CRC64_SEED = 0xFFFFFFFFFFFFFFFF; diff --git a/DiscImageChef.Checksums/DiscImageChef.Checksums.csproj b/DiscImageChef.Checksums/DiscImageChef.Checksums.csproj index 9a5bfdda..bc35cb3f 100644 --- a/DiscImageChef.Checksums/DiscImageChef.Checksums.csproj +++ b/DiscImageChef.Checksums/DiscImageChef.Checksums.csproj @@ -1,4 +1,4 @@ - + Debug @@ -34,6 +34,7 @@ + diff --git a/DiscImageChef.Checksums/FletcherContext.cs b/DiscImageChef.Checksums/FletcherContext.cs index da63771f..a79c7395 100644 --- a/DiscImageChef.Checksums/FletcherContext.cs +++ b/DiscImageChef.Checksums/FletcherContext.cs @@ -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); } } -}*/ \ No newline at end of file +} \ No newline at end of file diff --git a/DiscImageChef.Checksums/IChecksum.cs b/DiscImageChef.Checksums/IChecksum.cs new file mode 100644 index 00000000..a29a96b1 --- /dev/null +++ b/DiscImageChef.Checksums/IChecksum.cs @@ -0,0 +1,65 @@ +// /*************************************************************************** +// The Disc Image Chef +// ---------------------------------------------------------------------------- +// +// Filename : IChecksum.cs +// Author(s) : Natalia Portillo +// +// 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 . +// +// ---------------------------------------------------------------------------- +// Copyright © 2011-2018 Natalia Portillo +// ****************************************************************************/ + +namespace DiscImageChef.Checksums +{ + public interface IChecksum + { + /// + /// Initializes the algorithm + /// + void Init(); + + /// + /// Updates the hash with data. + /// + /// Data buffer. + /// Length of buffer to hash. + void Update(byte[] data, uint len); + + /// + /// Updates the hash with data. + /// + /// Data buffer. + void Update(byte[] data); + + /// + /// Returns a byte array of the hash value. + /// + byte[] Final(); + + /// + /// Returns a hexadecimal representation of the hash value. + /// + string End(); + } +} \ No newline at end of file diff --git a/DiscImageChef.Checksums/MD5Context.cs b/DiscImageChef.Checksums/MD5Context.cs index 8e3bc3f5..6fd0dc2e 100644 --- a/DiscImageChef.Checksums/MD5Context.cs +++ b/DiscImageChef.Checksums/MD5Context.cs @@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums /// /// Wraps up .NET MD5 implementation to a Init(), Update(), Final() context. /// - public class Md5Context + public class Md5Context : IChecksum { MD5 md5Provider; diff --git a/DiscImageChef.Checksums/RIPEMD160Context.cs b/DiscImageChef.Checksums/RIPEMD160Context.cs index c9bca191..120f2cbd 100644 --- a/DiscImageChef.Checksums/RIPEMD160Context.cs +++ b/DiscImageChef.Checksums/RIPEMD160Context.cs @@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums /// /// Wraps up .NET RIPEMD160 implementation to a Init(), Update(), Final() context. /// - public class Ripemd160Context + public class Ripemd160Context : IChecksum { RIPEMD160 ripemd160Provider; diff --git a/DiscImageChef.Checksums/SHA1Context.cs b/DiscImageChef.Checksums/SHA1Context.cs index 8de3a5d7..f62887a5 100644 --- a/DiscImageChef.Checksums/SHA1Context.cs +++ b/DiscImageChef.Checksums/SHA1Context.cs @@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums /// /// Wraps up .NET SHA1 implementation to a Init(), Update(), Final() context. /// - public class Sha1Context + public class Sha1Context : IChecksum { SHA1 sha1Provider; diff --git a/DiscImageChef.Checksums/SHA256Context.cs b/DiscImageChef.Checksums/SHA256Context.cs index 3a062e32..43e10734 100644 --- a/DiscImageChef.Checksums/SHA256Context.cs +++ b/DiscImageChef.Checksums/SHA256Context.cs @@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums /// /// Wraps up .NET SHA256 implementation to a Init(), Update(), Final() context. /// - public class Sha256Context + public class Sha256Context : IChecksum { SHA256 sha256Provider; diff --git a/DiscImageChef.Checksums/SHA384Context.cs b/DiscImageChef.Checksums/SHA384Context.cs index 225ac75a..1fd534cb 100644 --- a/DiscImageChef.Checksums/SHA384Context.cs +++ b/DiscImageChef.Checksums/SHA384Context.cs @@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums /// /// Wraps up .NET SHA384 implementation to a Init(), Update(), Final() context. /// - public class Sha384Context + public class Sha384Context : IChecksum { SHA384 sha384Provider; diff --git a/DiscImageChef.Checksums/SHA512Context.cs b/DiscImageChef.Checksums/SHA512Context.cs index 94b3bca3..5beb4cce 100644 --- a/DiscImageChef.Checksums/SHA512Context.cs +++ b/DiscImageChef.Checksums/SHA512Context.cs @@ -39,7 +39,7 @@ namespace DiscImageChef.Checksums /// /// Wraps up .NET SHA512 implementation to a Init(), Update(), Final() context. /// - public class Sha512Context + public class Sha512Context : IChecksum { SHA512 sha512Provider; diff --git a/DiscImageChef.Checksums/SpamSumContext.cs b/DiscImageChef.Checksums/SpamSumContext.cs index 30a1c1f5..14878322 100644 --- a/DiscImageChef.Checksums/SpamSumContext.cs +++ b/DiscImageChef.Checksums/SpamSumContext.cs @@ -47,7 +47,7 @@ namespace DiscImageChef.Checksums /// /// Implements the SpamSum fuzzy hashing algorithm. /// - public class SpamSumContext + public class SpamSumContext : IChecksum { const uint ROLLING_WINDOW = 7; const uint MIN_BLOCKSIZE = 3; diff --git a/DiscImageChef.Core/Benchmark.cs b/DiscImageChef.Core/Benchmark.cs index dba83502..05ea105c 100644 --- a/DiscImageChef.Core/Benchmark.cs +++ b/DiscImageChef.Core/Benchmark.cs @@ -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; diff --git a/DiscImageChef.Core/Checksum.cs b/DiscImageChef.Core/Checksum.cs index 2654e3cc..8a91c012 100644 --- a/DiscImageChef.Core/Checksum.cs +++ b/DiscImageChef.Core/Checksum.cs @@ -60,40 +60,40 @@ namespace DiscImageChef.Core /// 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 End() @@ -360,34 +360,34 @@ namespace DiscImageChef.Core internal static List 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 } diff --git a/DiscImageChef.Tests/Checksums/Adler32.cs b/DiscImageChef.Tests/Checksums/Adler32.cs index 9fa85ffe..88101d15 100644 --- a/DiscImageChef.Tests/Checksums/Adler32.cs +++ b/DiscImageChef.Tests/Checksums/Adler32.cs @@ -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(); diff --git a/DiscImageChef.Tests/Checksums/CRC16.cs b/DiscImageChef.Tests/Checksums/CRC16.cs index 9a535a7f..a7a1bda2 100644 --- a/DiscImageChef.Tests/Checksums/CRC16.cs +++ b/DiscImageChef.Tests/Checksums/CRC16.cs @@ -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(); diff --git a/DiscImageChef.Tests/Checksums/CRC32.cs b/DiscImageChef.Tests/Checksums/CRC32.cs index 9c590de6..6c11746c 100644 --- a/DiscImageChef.Tests/Checksums/CRC32.cs +++ b/DiscImageChef.Tests/Checksums/CRC32.cs @@ -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(); diff --git a/DiscImageChef.Tests/Checksums/CRC64.cs b/DiscImageChef.Tests/Checksums/CRC64.cs index 925da823..4c4aab1d 100644 --- a/DiscImageChef.Tests/Checksums/CRC64.cs +++ b/DiscImageChef.Tests/Checksums/CRC64.cs @@ -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(); diff --git a/DiscImageChef.Tests/Checksums/MD5.cs b/DiscImageChef.Tests/Checksums/MD5.cs index 97065b9d..ba9bd6f0 100644 --- a/DiscImageChef.Tests/Checksums/MD5.cs +++ b/DiscImageChef.Tests/Checksums/MD5.cs @@ -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(); diff --git a/DiscImageChef.Tests/Checksums/RIPEMD160.cs b/DiscImageChef.Tests/Checksums/RIPEMD160.cs index e93f7b00..018d645a 100644 --- a/DiscImageChef.Tests/Checksums/RIPEMD160.cs +++ b/DiscImageChef.Tests/Checksums/RIPEMD160.cs @@ -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(); diff --git a/DiscImageChef.Tests/Checksums/SHA1.cs b/DiscImageChef.Tests/Checksums/SHA1.cs index 1bd103d1..8f984261 100644 --- a/DiscImageChef.Tests/Checksums/SHA1.cs +++ b/DiscImageChef.Tests/Checksums/SHA1.cs @@ -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(); diff --git a/DiscImageChef.Tests/Checksums/SHA256.cs b/DiscImageChef.Tests/Checksums/SHA256.cs index 6c75ff53..648e5203 100644 --- a/DiscImageChef.Tests/Checksums/SHA256.cs +++ b/DiscImageChef.Tests/Checksums/SHA256.cs @@ -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(); diff --git a/DiscImageChef.Tests/Checksums/SHA384.cs b/DiscImageChef.Tests/Checksums/SHA384.cs index 35d4c360..c2fbda41 100644 --- a/DiscImageChef.Tests/Checksums/SHA384.cs +++ b/DiscImageChef.Tests/Checksums/SHA384.cs @@ -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(); diff --git a/DiscImageChef.Tests/Checksums/SHA512.cs b/DiscImageChef.Tests/Checksums/SHA512.cs index a6c3839f..835c5501 100644 --- a/DiscImageChef.Tests/Checksums/SHA512.cs +++ b/DiscImageChef.Tests/Checksums/SHA512.cs @@ -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(); diff --git a/DiscImageChef.Tests/Checksums/SpamSum.cs b/DiscImageChef.Tests/Checksums/SpamSum.cs index bc8097bf..eb8ec9bd 100644 --- a/DiscImageChef.Tests/Checksums/SpamSum.cs +++ b/DiscImageChef.Tests/Checksums/SpamSum.cs @@ -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();