[ALL] Add infrastructure for SHA384, SHA512

This commit is contained in:
Matt Nadareski
2017-02-26 23:12:20 -08:00
parent 2da7171951
commit d3111add08
5 changed files with 44 additions and 2 deletions

View File

@@ -252,6 +252,10 @@ namespace SabreTools.Helper.Data
SHA256 = 0x0008, SHA256 = 0x0008,
SHA384 = 0x0010, SHA384 = 0x0010,
SHA512 = 0x0020, SHA512 = 0x0020,
// Special combinations
Standard = CRC & MD5 & SHA1,
DeepHashes = MD5 & SHA1 & SHA256 & SHA384 & SHA512,
} }
#endregion #endregion

View File

@@ -466,7 +466,15 @@ namespace SabreTools.Helper.Dats
{ {
rom.SHA256 = null; rom.SHA256 = null;
} }
if ((StripHash & Hash.SHA384) != 0)
{
rom.SHA384 = null;
}
if ((StripHash & Hash.SHA512) != 0)
{
rom.SHA512 = null;
}
items[j] = rom; items[j] = rom;
} }
else if (item.Type == ItemType.Disk) else if (item.Type == ItemType.Disk)

View File

@@ -226,7 +226,7 @@ namespace SabreTools.Helper.Dats
} }
// If all deep hash skip flags are set, do a quickscan // If all deep hash skip flags are set, do a quickscan
if (omitFromScan == (Hash.MD5 & Hash.SHA1 & Hash.SHA256 & Hash.SHA384 & Hash.SHA512)) if (omitFromScan == Hash.DeepHashes)
{ {
ArchiveType? type = ArchiveTools.GetCurrentArchiveType(newItem, logger); ArchiveType? type = ArchiveTools.GetCurrentArchiveType(newItem, logger);

View File

@@ -531,6 +531,8 @@ namespace SabreTools.Helper.Tools
MD5 md5 = MD5.Create(); MD5 md5 = MD5.Create();
SHA1 sha1 = SHA1.Create(); SHA1 sha1 = SHA1.Create();
SHA256 sha256 = SHA256.Create(); SHA256 sha256 = SHA256.Create();
SHA384 sha384 = SHA384.Create();
SHA512 sha512 = SHA512.Create();
// Seek to the starting position, if one is set // Seek to the starting position, if one is set
if (offset < 0) if (offset < 0)
@@ -559,6 +561,14 @@ namespace SabreTools.Helper.Tools
{ {
sha256.TransformBlock(buffer, 0, read, buffer, 0); sha256.TransformBlock(buffer, 0, read, buffer, 0);
} }
if ((omitFromScan & Hash.SHA384) == 0)
{
sha384.TransformBlock(buffer, 0, read, buffer, 0);
}
if ((omitFromScan & Hash.SHA512) == 0)
{
sha512.TransformBlock(buffer, 0, read, buffer, 0);
}
} }
crc.Update(buffer, 0, 0); crc.Update(buffer, 0, 0);
@@ -579,12 +589,24 @@ namespace SabreTools.Helper.Tools
sha256.TransformFinalBlock(buffer, 0, 0); sha256.TransformFinalBlock(buffer, 0, 0);
rom.SHA256 = BitConverter.ToString(sha256.Hash).Replace("-", "").ToLowerInvariant(); rom.SHA256 = BitConverter.ToString(sha256.Hash).Replace("-", "").ToLowerInvariant();
} }
if ((omitFromScan & Hash.SHA384) == 0)
{
sha384.TransformFinalBlock(buffer, 0, 0);
rom.SHA384 = BitConverter.ToString(sha384.Hash).Replace("-", "").ToLowerInvariant();
}
if ((omitFromScan & Hash.SHA512) == 0)
{
sha512.TransformFinalBlock(buffer, 0, 0);
rom.SHA512 = BitConverter.ToString(sha512.Hash).Replace("-", "").ToLowerInvariant();
}
// Dispose of the hashers // Dispose of the hashers
crc.Dispose(); crc.Dispose();
md5.Dispose(); md5.Dispose();
sha1.Dispose(); sha1.Dispose();
sha256.Dispose(); sha256.Dispose();
sha384.Dispose();
sha512.Dispose();
} }
catch (IOException) catch (IOException)
{ {

View File

@@ -514,6 +514,14 @@ namespace SabreTools
case "--rem-sha256": case "--rem-sha256":
stripHash |= Hash.SHA256; stripHash |= Hash.SHA256;
break; break;
case "-rsha384":
case "--rem-sha384":
stripHash |= Hash.SHA384;
break;
case "-rsha512":
case "--rem-sha512":
stripHash |= Hash.SHA512;
break;
case "-run": case "-run":
case "--runnable": case "--runnable":
filter.Runnable = true; filter.Runnable = true;