mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Add nullable context to SabreTools.Core
This commit is contained in:
@@ -12,7 +12,7 @@ namespace SabreTools.Core.Tools
|
||||
public class Hasher
|
||||
{
|
||||
public Hash HashType { get; private set; }
|
||||
private IDisposable _hasher;
|
||||
private IDisposable? _hasher;
|
||||
|
||||
public Hasher(Hash hashType)
|
||||
{
|
||||
@@ -59,7 +59,7 @@ namespace SabreTools.Core.Tools
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_hasher.Dispose();
|
||||
_hasher?.Dispose();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -67,22 +67,37 @@ namespace SabreTools.Core.Tools
|
||||
/// </summary>
|
||||
public void Process(byte[] buffer, int size)
|
||||
{
|
||||
switch (HashType)
|
||||
if (_hasher == null)
|
||||
return;
|
||||
|
||||
switch (_hasher)
|
||||
{
|
||||
case Hash.CRC:
|
||||
(_hasher as OptimizedCRC.OptimizedCRC).Update(buffer, 0, size);
|
||||
case OptimizedCRC.OptimizedCRC crc:
|
||||
crc.Update(buffer, 0, size);
|
||||
break;
|
||||
|
||||
case Hash.MD5:
|
||||
case Hash.SHA1:
|
||||
case Hash.SHA256:
|
||||
case Hash.SHA384:
|
||||
case Hash.SHA512:
|
||||
(_hasher as HashAlgorithm).TransformBlock(buffer, 0, size, null, 0);
|
||||
case MD5 md5:
|
||||
md5.TransformBlock(buffer, 0, size, null, 0);
|
||||
break;
|
||||
|
||||
case Hash.SpamSum:
|
||||
(_hasher as SpamSumContext).Update(buffer);
|
||||
case SHA1 sha1:
|
||||
sha1.TransformBlock(buffer, 0, size, null, 0);
|
||||
break;
|
||||
|
||||
case SHA256 sha256:
|
||||
sha256.TransformBlock(buffer, 0, size, null, 0);
|
||||
break;
|
||||
|
||||
case SHA384 sha384:
|
||||
sha384.TransformBlock(buffer, 0, size, null, 0);
|
||||
break;
|
||||
|
||||
case SHA512 sha512:
|
||||
sha512.TransformBlock(buffer, 0, size, null, 0);
|
||||
break;
|
||||
|
||||
case SpamSumContext spamSum:
|
||||
spamSum.Update(buffer);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -92,22 +107,37 @@ namespace SabreTools.Core.Tools
|
||||
/// </summary>
|
||||
public void Terminate()
|
||||
{
|
||||
if (_hasher == null)
|
||||
return;
|
||||
|
||||
byte[] emptyBuffer = Array.Empty<byte>();
|
||||
switch (HashType)
|
||||
switch (_hasher)
|
||||
{
|
||||
case Hash.CRC:
|
||||
(_hasher as OptimizedCRC.OptimizedCRC).Update(emptyBuffer, 0, 0);
|
||||
case OptimizedCRC.OptimizedCRC crc:
|
||||
crc.Update(emptyBuffer, 0, 0);
|
||||
break;
|
||||
|
||||
case Hash.MD5:
|
||||
case Hash.SHA1:
|
||||
case Hash.SHA256:
|
||||
case Hash.SHA384:
|
||||
case Hash.SHA512:
|
||||
(_hasher as HashAlgorithm).TransformFinalBlock(emptyBuffer, 0, 0);
|
||||
case MD5 md5:
|
||||
md5.TransformFinalBlock(emptyBuffer, 0, 0);
|
||||
break;
|
||||
|
||||
case Hash.SpamSum:
|
||||
case SHA1 sha1:
|
||||
sha1.TransformFinalBlock(emptyBuffer, 0, 0);
|
||||
break;
|
||||
|
||||
case SHA256 sha256:
|
||||
sha256.TransformFinalBlock(emptyBuffer, 0, 0);
|
||||
break;
|
||||
|
||||
case SHA384 sha384:
|
||||
sha384.TransformFinalBlock(emptyBuffer, 0, 0);
|
||||
break;
|
||||
|
||||
case SHA512 sha512:
|
||||
sha512.TransformFinalBlock(emptyBuffer, 0, 0);
|
||||
break;
|
||||
|
||||
case SpamSumContext:
|
||||
// No finalization step needed
|
||||
break;
|
||||
}
|
||||
@@ -116,17 +146,17 @@ namespace SabreTools.Core.Tools
|
||||
/// <summary>
|
||||
/// Get internal hash as a byte array
|
||||
/// </summary>
|
||||
public byte[] GetHash()
|
||||
public byte[]? GetHash()
|
||||
{
|
||||
return HashType switch
|
||||
return _hasher switch
|
||||
{
|
||||
Hash.CRC => BitConverter.GetBytes((_hasher as OptimizedCRC.OptimizedCRC).Value).Reverse().ToArray(),
|
||||
Hash.MD5 => (_hasher as HashAlgorithm).Hash,
|
||||
Hash.SHA1 => (_hasher as HashAlgorithm).Hash,
|
||||
Hash.SHA256 => (_hasher as HashAlgorithm).Hash,
|
||||
Hash.SHA384 => (_hasher as HashAlgorithm).Hash,
|
||||
Hash.SHA512 => (_hasher as HashAlgorithm).Hash,
|
||||
Hash.SpamSum => (_hasher as SpamSumContext).Final(),
|
||||
OptimizedCRC.OptimizedCRC crc => BitConverter.GetBytes(crc.Value).Reverse().ToArray(),
|
||||
MD5 md5 => md5.Hash,
|
||||
SHA1 sha1 => sha1.Hash,
|
||||
SHA256 sha256 => sha256.Hash,
|
||||
SHA384 sha384 => sha384.Hash,
|
||||
SHA512 sha512 => sha512.Hash,
|
||||
SpamSumContext spamSum => spamSum.Final(),
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user