🐛Move checksum initializers to instance constructors.

This commit is contained in:
2018-02-03 17:39:49 +00:00
parent 4b4671b4ef
commit b50b6c29ca
61 changed files with 1429 additions and 1599 deletions

View File

@@ -33,26 +33,25 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using DiscImageChef.Checksums;
namespace DiscImageChef.Core
{
public struct BenchmarkResults
{
public double FillTime;
public double FillSpeed;
public double ReadTime;
public double ReadSpeed;
public double EntropyTime;
public double EntropySpeed;
public double FillTime;
public double FillSpeed;
public double ReadTime;
public double ReadSpeed;
public double EntropyTime;
public double EntropySpeed;
public Dictionary<string, BenchmarkEntry> Entries;
public long MinMemory;
public long MaxMemory;
public double SeparateTime;
public double SeparateSpeed;
public double TotalTime;
public double TotalSpeed;
public long MinMemory;
public long MaxMemory;
public double SeparateTime;
public double SeparateSpeed;
public double TotalTime;
public double TotalSpeed;
}
public struct BenchmarkEntry
@@ -66,9 +65,9 @@ namespace DiscImageChef.Core
/// </summary>
public static class Benchmark
{
public static event InitProgressHandler InitProgressEvent;
public static event InitProgressHandler InitProgressEvent;
public static event UpdateProgressHandler UpdateProgressEvent;
public static event EndProgressHandler EndProgressEvent;
public static event EndProgressHandler EndProgressEvent;
static void InitProgress()
{
@@ -89,16 +88,16 @@ namespace DiscImageChef.Core
{
BenchmarkResults results = new BenchmarkResults
{
Entries = new Dictionary<string, BenchmarkEntry>(),
MinMemory = long.MaxValue,
MaxMemory = 0,
Entries = new Dictionary<string, BenchmarkEntry>(),
MinMemory = long.MaxValue,
MaxMemory = 0,
SeparateTime = 0
};
MemoryStream ms = new MemoryStream(bufferSize);
Random rnd = new Random();
DateTime start;
DateTime end;
long mem;
MemoryStream ms = new MemoryStream(bufferSize);
Random rnd = new Random();
DateTime start;
DateTime end;
long mem;
start = DateTime.Now;
InitProgress();
@@ -113,14 +112,14 @@ namespace DiscImageChef.Core
EndProgress();
end = DateTime.Now;
results.FillTime = (end - start).TotalSeconds;
results.FillTime = (end - start).TotalSeconds;
results.FillSpeed = bufferSize / 1048576.0 / (end - start).TotalSeconds;
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
start = DateTime.Now;
start = DateTime.Now;
InitProgress();
for(int i = 0; i < bufferSize / blockSize; i++)
{
@@ -130,22 +129,21 @@ namespace DiscImageChef.Core
}
EndProgress();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
results.ReadTime = (end - start).TotalSeconds;
results.ReadTime = (end - start).TotalSeconds;
results.ReadSpeed = bufferSize / 1048576.0 / (end - start).TotalSeconds;
#region Adler32
IChecksum ctx = new Adler32Context();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
start = DateTime.Now;
start = DateTime.Now;
InitProgress();
for(int i = 0; i < bufferSize / blockSize; i++)
{
@@ -157,28 +155,27 @@ namespace DiscImageChef.Core
EndProgress();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
results.Entries.Add("Adler32",
new BenchmarkEntry
{
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
});
results.SeparateTime += (end - start).TotalSeconds;
#endregion Adler32
#region CRC16
ctx = new Crc16Context();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
start = DateTime.Now;
start = DateTime.Now;
InitProgress();
for(int i = 0; i < bufferSize / blockSize; i++)
{
@@ -190,28 +187,27 @@ namespace DiscImageChef.Core
EndProgress();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
results.Entries.Add("CRC16",
new BenchmarkEntry
{
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
});
results.SeparateTime += (end - start).TotalSeconds;
#endregion CRC16
#region CRC32
ctx = new Crc32Context();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
start = DateTime.Now;
start = DateTime.Now;
InitProgress();
for(int i = 0; i < bufferSize / blockSize; i++)
{
@@ -223,28 +219,27 @@ namespace DiscImageChef.Core
EndProgress();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
results.Entries.Add("CRC32",
new BenchmarkEntry
{
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
});
results.SeparateTime += (end - start).TotalSeconds;
#endregion CRC32
#region CRC64
ctx = new Crc64Context();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
start = DateTime.Now;
start = DateTime.Now;
InitProgress();
for(int i = 0; i < bufferSize / blockSize; i++)
{
@@ -256,28 +251,27 @@ namespace DiscImageChef.Core
EndProgress();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
results.Entries.Add("CRC64",
new BenchmarkEntry
{
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
});
results.SeparateTime += (end - start).TotalSeconds;
#endregion CRC64
#region MD5
ctx = new Md5Context();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
start = DateTime.Now;
start = DateTime.Now;
InitProgress();
for(int i = 0; i < bufferSize / blockSize; i++)
{
@@ -289,28 +283,27 @@ namespace DiscImageChef.Core
EndProgress();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
results.Entries.Add("MD5",
new BenchmarkEntry
{
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
});
results.SeparateTime += (end - start).TotalSeconds;
#endregion MD5
#region RIPEMD160
ctx = new Ripemd160Context();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
start = DateTime.Now;
start = DateTime.Now;
InitProgress();
for(int i = 0; i < bufferSize / blockSize; i++)
{
@@ -322,28 +315,27 @@ namespace DiscImageChef.Core
EndProgress();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
results.Entries.Add("RIPEMD160",
new BenchmarkEntry
{
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
});
results.SeparateTime += (end - start).TotalSeconds;
#endregion RIPEMD160
#region SHA1
ctx = new Sha1Context();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
start = DateTime.Now;
start = DateTime.Now;
InitProgress();
for(int i = 0; i < bufferSize / blockSize; i++)
{
@@ -355,28 +347,27 @@ namespace DiscImageChef.Core
EndProgress();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
results.Entries.Add("SHA1",
new BenchmarkEntry
{
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
});
results.SeparateTime += (end - start).TotalSeconds;
#endregion SHA1
#region SHA256
ctx = new Sha256Context();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
start = DateTime.Now;
start = DateTime.Now;
InitProgress();
for(int i = 0; i < bufferSize / blockSize; i++)
{
@@ -388,28 +379,27 @@ namespace DiscImageChef.Core
EndProgress();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
results.Entries.Add("SHA256",
new BenchmarkEntry
{
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
});
results.SeparateTime += (end - start).TotalSeconds;
#endregion SHA256
#region SHA384
ctx = new Sha384Context();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
start = DateTime.Now;
start = DateTime.Now;
InitProgress();
for(int i = 0; i < bufferSize / blockSize; i++)
{
@@ -421,28 +411,27 @@ namespace DiscImageChef.Core
EndProgress();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
results.Entries.Add("SHA384",
new BenchmarkEntry
{
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
});
results.SeparateTime += (end - start).TotalSeconds;
#endregion SHA384
#region SHA512
ctx = new Sha512Context();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
start = DateTime.Now;
start = DateTime.Now;
InitProgress();
for(int i = 0; i < bufferSize / blockSize; i++)
{
@@ -454,28 +443,27 @@ namespace DiscImageChef.Core
EndProgress();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
results.Entries.Add("SHA512",
new BenchmarkEntry
{
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
});
results.SeparateTime += (end - start).TotalSeconds;
#endregion SHA512
#region SpamSum
ctx = new SpamSumContext();
ctx.Init();
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
start = DateTime.Now;
start = DateTime.Now;
InitProgress();
for(int i = 0; i < bufferSize / blockSize; i++)
{
@@ -487,16 +475,16 @@ namespace DiscImageChef.Core
EndProgress();
ctx.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
results.Entries.Add("SpamSum",
new BenchmarkEntry
{
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
TimeSpan = (end - start).TotalSeconds,
Speed = bufferSize / 1048576.0 / (end - start).TotalSeconds
});
results.SeparateTime += (end - start).TotalSeconds;
#endregion SpamSum
@@ -504,10 +492,10 @@ namespace DiscImageChef.Core
#region Entropy
ulong[] entTable = new ulong[256];
ms.Seek(0, SeekOrigin.Begin);
mem = GC.GetTotalMemory(false);
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
start = DateTime.Now;
start = DateTime.Now;
InitProgress();
for(int i = 0; i < bufferSize / blockSize; i++)
{
@@ -518,20 +506,18 @@ namespace DiscImageChef.Core
}
EndProgress();
double entropy = entTable.Select(l => (double)l / (double)bufferSize)
.Select(frequency => -(frequency * Math.Log(frequency, 2))).Sum();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
results.EntropyTime = (end - start).TotalSeconds;
results.EntropyTime = (end - start).TotalSeconds;
results.EntropySpeed = bufferSize / 1048576.0 / (end - start).TotalSeconds;
#endregion Entropy
#region Multitasking
start = DateTime.Now;
start = DateTime.Now;
Checksum allChecksums = new Checksum();
InitProgress();
for(int i = 0; i < bufferSize / blockSize; i++)
@@ -547,12 +533,12 @@ namespace DiscImageChef.Core
EndProgress();
allChecksums.End();
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
end = DateTime.Now;
mem = GC.GetTotalMemory(false);
if(mem > results.MaxMemory) results.MaxMemory = mem;
if(mem < results.MinMemory) results.MinMemory = mem;
results.TotalTime = (end - start).TotalSeconds;
results.TotalTime = (end - start).TotalSeconds;
results.TotalSpeed = bufferSize / 1048576.0 / results.TotalTime;
#endregion

View File

@@ -41,18 +41,18 @@ namespace DiscImageChef.Core
[Flags]
public enum EnableChecksum
{
Adler32 = 1,
Crc16 = 2,
Crc32 = 4,
Crc64 = 8,
Md5 = 16,
Adler32 = 1,
Crc16 = 2,
Crc32 = 4,
Crc64 = 8,
Md5 = 16,
Ripemd160 = 32,
Sha1 = 64,
Sha256 = 128,
Sha384 = 256,
Sha512 = 512,
SpamSum = 1024,
All = Adler32 | Crc16 | Crc32 | Crc64 | Md5 | Ripemd160 | Sha1 | Sha256 | Sha384 | Sha512 | SpamSum
Sha1 = 64,
Sha256 = 128,
Sha384 = 256,
Sha512 = 512,
SpamSum = 1024,
All = Adler32 | Crc16 | Crc32 | Crc64 | Md5 | Ripemd160 | Sha1 | Sha256 | Sha384 | Sha512 | SpamSum
}
/// <summary>
@@ -60,40 +60,40 @@ namespace DiscImageChef.Core
/// </summary>
public class Checksum
{
IChecksum adler32Ctx;
HashPacket adlerPkt;
Thread adlerThread;
IChecksum crc16Ctx;
HashPacket crc16Pkt;
Thread crc16Thread;
IChecksum crc32Ctx;
HashPacket crc32Pkt;
Thread crc32Thread;
IChecksum crc64Ctx;
HashPacket crc64Pkt;
Thread crc64Thread;
IChecksum adler32Ctx;
HashPacket adlerPkt;
Thread adlerThread;
IChecksum crc16Ctx;
HashPacket crc16Pkt;
Thread crc16Thread;
IChecksum crc32Ctx;
HashPacket crc32Pkt;
Thread crc32Thread;
IChecksum crc64Ctx;
HashPacket crc64Pkt;
Thread crc64Thread;
EnableChecksum enabled;
IChecksum md5Ctx;
HashPacket md5Pkt;
Thread md5Thread;
IChecksum ripemd160Ctx;
HashPacket ripemd160Pkt;
Thread ripemd160Thread;
IChecksum sha1Ctx;
HashPacket sha1Pkt;
Thread sha1Thread;
IChecksum sha256Ctx;
HashPacket sha256Pkt;
Thread sha256Thread;
IChecksum sha384Ctx;
HashPacket sha384Pkt;
Thread sha384Thread;
IChecksum sha512Ctx;
HashPacket sha512Pkt;
Thread sha512Thread;
HashPacket spamsumPkt;
Thread spamsumThread;
IChecksum ssctx;
IChecksum md5Ctx;
HashPacket md5Pkt;
Thread md5Thread;
IChecksum ripemd160Ctx;
HashPacket ripemd160Pkt;
Thread ripemd160Thread;
IChecksum sha1Ctx;
HashPacket sha1Pkt;
Thread sha1Thread;
IChecksum sha256Ctx;
HashPacket sha256Pkt;
Thread sha256Thread;
IChecksum sha384Ctx;
HashPacket sha384Pkt;
Thread sha384Thread;
IChecksum sha512Ctx;
HashPacket sha512Pkt;
Thread sha512Thread;
HashPacket spamsumPkt;
Thread spamsumThread;
IChecksum ssctx;
public Checksum(EnableChecksum enabled = EnableChecksum.All)
{
@@ -102,102 +102,80 @@ namespace DiscImageChef.Core
if(enabled.HasFlag(EnableChecksum.Adler32))
{
adler32Ctx = new Adler32Context();
adlerPkt = new HashPacket();
adler32Ctx.Init();
adlerPkt.Context = adler32Ctx;
adlerPkt = new HashPacket {Context = adler32Ctx};
}
if(enabled.HasFlag(EnableChecksum.Crc16))
{
crc16Ctx = new Crc16Context();
crc16Pkt = new HashPacket();
crc16Ctx.Init();
crc16Pkt.Context = crc16Ctx;
crc16Pkt = new HashPacket {Context = crc16Ctx};
}
if(enabled.HasFlag(EnableChecksum.Crc32))
{
crc32Ctx = new Crc32Context();
crc32Pkt = new HashPacket();
crc32Ctx.Init();
crc32Pkt.Context = crc32Ctx;
crc32Pkt = new HashPacket {Context = crc32Ctx};
}
if(enabled.HasFlag(EnableChecksum.Crc64))
{
crc64Ctx = new Crc64Context();
crc64Pkt = new HashPacket();
crc64Ctx.Init();
crc64Pkt.Context = crc64Ctx;
crc64Pkt = new HashPacket {Context = crc64Ctx};
}
if(enabled.HasFlag(EnableChecksum.Md5))
{
md5Ctx = new Md5Context();
md5Pkt = new HashPacket();
md5Ctx.Init();
md5Pkt.Context = md5Ctx;
md5Pkt = new HashPacket {Context = md5Ctx};
}
if(enabled.HasFlag(EnableChecksum.Ripemd160))
{
ripemd160Ctx = new Ripemd160Context();
ripemd160Pkt = new HashPacket();
ripemd160Ctx.Init();
ripemd160Pkt.Context = ripemd160Ctx;
ripemd160Pkt = new HashPacket {Context = ripemd160Ctx};
}
if(enabled.HasFlag(EnableChecksum.Sha1))
{
sha1Ctx = new Sha1Context();
sha1Pkt = new HashPacket();
sha1Ctx.Init();
sha1Pkt.Context = sha1Ctx;
sha1Pkt = new HashPacket {Context = sha1Ctx};
}
if(enabled.HasFlag(EnableChecksum.Sha256))
{
sha256Ctx = new Sha256Context();
sha256Pkt = new HashPacket();
sha256Ctx.Init();
sha256Pkt.Context = sha256Ctx;
sha256Pkt = new HashPacket {Context = sha256Ctx};
}
if(enabled.HasFlag(EnableChecksum.Sha384))
{
sha384Ctx = new Sha384Context();
sha384Pkt = new HashPacket();
sha384Ctx.Init();
sha384Pkt.Context = sha384Ctx;
sha384Pkt = new HashPacket {Context = sha384Ctx};
}
if(enabled.HasFlag(EnableChecksum.Sha512))
{
sha512Ctx = new Sha512Context();
sha512Pkt = new HashPacket();
sha512Ctx.Init();
sha512Pkt.Context = sha512Ctx;
sha512Pkt = new HashPacket {Context = sha512Ctx};
}
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
ssctx = new SpamSumContext();
spamsumPkt = new HashPacket();
ssctx.Init();
spamsumPkt.Context = ssctx;
ssctx = new SpamSumContext();
spamsumPkt = new HashPacket {Context = ssctx};
}
adlerThread = new Thread(UpdateHash);
crc16Thread = new Thread(UpdateHash);
crc32Thread = new Thread(UpdateHash);
crc64Thread = new Thread(UpdateHash);
md5Thread = new Thread(UpdateHash);
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);
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)
@@ -213,6 +191,7 @@ namespace DiscImageChef.Core
crc16Pkt.Data = data;
crc16Thread.Start(crc16Pkt);
}
if(enabled.HasFlag(EnableChecksum.Crc32))
{
crc32Pkt.Data = data;
@@ -267,21 +246,21 @@ namespace DiscImageChef.Core
spamsumThread.Start(spamsumPkt);
}
while(adlerThread.IsAlive || crc16Thread.IsAlive || crc32Thread.IsAlive || crc64Thread.IsAlive ||
md5Thread.IsAlive || ripemd160Thread.IsAlive || sha1Thread.IsAlive || sha256Thread.IsAlive ||
sha384Thread.IsAlive || sha512Thread.IsAlive || spamsumThread.IsAlive) { }
while(adlerThread.IsAlive || crc16Thread.IsAlive || crc32Thread.IsAlive || crc64Thread.IsAlive ||
md5Thread.IsAlive || ripemd160Thread.IsAlive || sha1Thread.IsAlive || sha256Thread.IsAlive ||
sha384Thread.IsAlive || sha512Thread.IsAlive || spamsumThread.IsAlive) { }
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)) 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);
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,147 +339,114 @@ namespace DiscImageChef.Core
internal static List<ChecksumType> GetChecksums(byte[] data, EnableChecksum enabled = EnableChecksum.All)
{
IChecksum adler32CtxData = null;
IChecksum crc16CtxData = null;
IChecksum crc32CtxData = null;
IChecksum crc64CtxData = null;
IChecksum md5CtxData = 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;
IChecksum sha1CtxData = null;
IChecksum sha256CtxData = null;
IChecksum sha384CtxData = null;
IChecksum sha512CtxData = null;
IChecksum ssctxData = null;
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 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);
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();
HashPacket adlerPktData = new HashPacket();
adler32CtxData.Init();
adlerPktData.Context = adler32CtxData;
adlerPktData.Data = data;
adler32CtxData = new Adler32Context();
HashPacket adlerPktData = new HashPacket {Context = adler32CtxData, Data = data};
adlerThreadData.Start(adlerPktData);
}
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
HashPacket crc16PktData = new HashPacket();
crc16CtxData = new Crc16Context();
crc16CtxData.Init();
crc16PktData.Context = crc16CtxData;
crc16PktData.Data = data;
crc16CtxData = new Crc16Context();
HashPacket crc16PktData = new HashPacket {Context = crc16CtxData, Data = data};
crc16ThreadData.Start(crc16PktData);
}
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
HashPacket crc32PktData = new HashPacket();
crc32CtxData = new Crc32Context();
crc32CtxData.Init();
crc32PktData.Context = crc32CtxData;
crc32PktData.Data = data;
crc32CtxData = new Crc32Context();
HashPacket crc32PktData = new HashPacket {Context = crc32CtxData, Data = data};
crc32ThreadData.Start(crc32PktData);
}
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
HashPacket crc64PktData = new HashPacket();
crc64CtxData = new Crc64Context();
crc64CtxData.Init();
crc64PktData.Context = crc64CtxData;
crc64PktData.Data = data;
crc64CtxData = new Crc64Context();
HashPacket crc64PktData = new HashPacket {Context = crc64CtxData, Data = data};
crc64ThreadData.Start(crc64PktData);
}
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
HashPacket md5PktData = new HashPacket();
md5CtxData = new Md5Context();
md5CtxData.Init();
md5PktData.Context = md5CtxData;
md5PktData.Data = data;
md5CtxData = new Md5Context();
HashPacket md5PktData = new HashPacket {Context = md5CtxData, Data = data};
md5ThreadData.Start(md5PktData);
}
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
HashPacket ripemd160PktData = new HashPacket();
ripemd160CtxData = new Ripemd160Context();
ripemd160CtxData.Init();
ripemd160PktData.Context = ripemd160CtxData;
ripemd160PktData.Data = data;
ripemd160CtxData = new Ripemd160Context();
HashPacket ripemd160PktData = new HashPacket {Context = ripemd160CtxData, Data = data};
ripemd160ThreadData.Start(ripemd160PktData);
}
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
HashPacket sha1PktData = new HashPacket();
sha1CtxData = new Sha1Context();
sha1CtxData.Init();
sha1PktData.Context = sha1CtxData;
sha1PktData.Data = data;
sha1CtxData = new Sha1Context();
HashPacket sha1PktData = new HashPacket {Context = sha1CtxData, Data = data};
sha1ThreadData.Start(sha1PktData);
}
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
HashPacket sha256PktData = new HashPacket();
sha256CtxData = new Sha256Context();
sha256CtxData.Init();
sha256PktData.Context = sha256CtxData;
sha256PktData.Data = data;
sha256CtxData = new Sha256Context();
HashPacket sha256PktData = new HashPacket {Context = sha256CtxData, Data = data};
sha256ThreadData.Start(sha256PktData);
}
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
HashPacket sha384PktData = new HashPacket();
sha384CtxData = new Sha384Context();
sha384CtxData.Init();
sha384PktData.Context = sha384CtxData;
sha384PktData.Data = data;
sha384CtxData = new Sha384Context();
HashPacket sha384PktData = new HashPacket {Context = sha384CtxData, Data = data};
sha384ThreadData.Start(sha384PktData);
}
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
HashPacket sha512PktData = new HashPacket();
sha512CtxData = new Sha512Context();
sha512CtxData.Init();
sha512PktData.Context = sha512CtxData;
sha512PktData.Data = data;
sha512CtxData = new Sha512Context();
HashPacket sha512PktData = new HashPacket {Context = sha512CtxData, Data = data};
sha512ThreadData.Start(sha512PktData);
}
if(enabled.HasFlag(EnableChecksum.SpamSum))
{
HashPacket spamsumPktData = new HashPacket();
ssctxData = new SpamSumContext();
ssctxData.Init();
spamsumPktData.Context = ssctxData;
spamsumPktData.Data = data;
ssctxData = new SpamSumContext();
HashPacket spamsumPktData = new HashPacket {Context = ssctxData, Data = data};
spamsumThreadData.Start(spamsumPktData);
}
while(adlerThreadData.IsAlive || crc16ThreadData.IsAlive || crc32ThreadData.IsAlive ||
crc64ThreadData.IsAlive || md5ThreadData.IsAlive || ripemd160ThreadData.IsAlive ||
sha1ThreadData.IsAlive || sha256ThreadData.IsAlive || sha384ThreadData.IsAlive ||
while(adlerThreadData.IsAlive || crc16ThreadData.IsAlive || crc32ThreadData.IsAlive ||
crc64ThreadData.IsAlive || md5ThreadData.IsAlive || ripemd160ThreadData.IsAlive ||
sha1ThreadData.IsAlive || sha256ThreadData.IsAlive || sha384ThreadData.IsAlive ||
sha512ThreadData.IsAlive || spamsumThreadData.IsAlive) { }
List<ChecksumType> dataChecksums = new List<ChecksumType>();
ChecksumType chk;
ChecksumType chk;
if(enabled.HasFlag(EnableChecksum.Adler32))
{
@@ -574,7 +520,7 @@ namespace DiscImageChef.Core
struct HashPacket
{
public IChecksum Context;
public byte[] Data;
public byte[] Data;
}
static void UpdateHash(object packet)