Wire through MD2/MD4

This commit is contained in:
Matt Nadareski
2025-01-09 05:26:36 -05:00
parent 45a5611d20
commit 1dcd457fca
23 changed files with 836 additions and 20 deletions

View File

@@ -6,12 +6,6 @@ namespace SabreTools.Core.Test
{ {
public class DictionaryBaseExtensionsTests public class DictionaryBaseExtensionsTests
{ {
#region Clone
// TODO: Figure out how to test Clone
#endregion
#region ConvertToRom #region ConvertToRom
[Fact] [Fact]
@@ -385,6 +379,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX", [Rom.NameKey] = "XXXXXX",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -398,6 +394,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX", [Rom.NameKey] = "XXXXXX",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -418,6 +416,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX", [Rom.NameKey] = "XXXXXX",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -430,6 +430,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX", [Rom.NameKey] = "XXXXXX",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -449,6 +451,8 @@ namespace SabreTools.Core.Test
{ {
[Rom.NameKey] = "XXXXXX1", [Rom.NameKey] = "XXXXXX1",
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -461,6 +465,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX2", [Rom.NameKey] = "XXXXXX2",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -481,6 +487,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX1", [Rom.NameKey] = "XXXXXX1",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -492,6 +500,8 @@ namespace SabreTools.Core.Test
{ {
[Rom.NameKey] = "XXXXXX2", [Rom.NameKey] = "XXXXXX2",
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -512,6 +522,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX1", [Rom.NameKey] = "XXXXXX1",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -524,6 +536,80 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX2", [Rom.NameKey] = "XXXXXX2",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX",
[Rom.SHA384Key] = "XXXXXX",
[Rom.SHA512Key] = "XXXXXX",
[Rom.SpamSumKey] = "XXXXXX",
};
bool actual = self.EqualTo(other);
Assert.True(actual);
}
[Fact]
public void EqualTo_Rom_PartialMD2_True()
{
DictionaryBase self = new Rom
{
[Rom.NameKey] = "XXXXXX1",
[Rom.SizeKey] = 12345,
[Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty,
[Rom.SHA384Key] = string.Empty,
[Rom.SHA512Key] = string.Empty,
[Rom.SpamSumKey] = string.Empty,
};
DictionaryBase other = new Rom
{
[Rom.NameKey] = "XXXXXX2",
[Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX",
[Rom.SHA384Key] = "XXXXXX",
[Rom.SHA512Key] = "XXXXXX",
[Rom.SpamSumKey] = "XXXXXX",
};
bool actual = self.EqualTo(other);
Assert.True(actual);
}
[Fact]
public void EqualTo_Rom_PartialMD4_True()
{
DictionaryBase self = new Rom
{
[Rom.NameKey] = "XXXXXX1",
[Rom.SizeKey] = 12345,
[Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty,
[Rom.SHA384Key] = string.Empty,
[Rom.SHA512Key] = string.Empty,
[Rom.SpamSumKey] = string.Empty,
};
DictionaryBase other = new Rom
{
[Rom.NameKey] = "XXXXXX2",
[Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -544,6 +630,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX1", [Rom.NameKey] = "XXXXXX1",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -556,6 +644,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX2", [Rom.NameKey] = "XXXXXX2",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -576,6 +666,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX1", [Rom.NameKey] = "XXXXXX1",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -588,6 +680,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX2", [Rom.NameKey] = "XXXXXX2",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -608,6 +702,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX1", [Rom.NameKey] = "XXXXXX1",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -620,6 +716,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX2", [Rom.NameKey] = "XXXXXX2",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -640,6 +738,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX1", [Rom.NameKey] = "XXXXXX1",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -652,6 +752,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX2", [Rom.NameKey] = "XXXXXX2",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -672,6 +774,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX1", [Rom.NameKey] = "XXXXXX1",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -684,6 +788,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX2", [Rom.NameKey] = "XXXXXX2",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -704,6 +810,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX1", [Rom.NameKey] = "XXXXXX1",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -716,6 +824,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX2", [Rom.NameKey] = "XXXXXX2",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -736,6 +846,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX1", [Rom.NameKey] = "XXXXXX1",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -748,6 +860,8 @@ namespace SabreTools.Core.Test
[Rom.NameKey] = "XXXXXX2", [Rom.NameKey] = "XXXXXX2",
[Rom.SizeKey] = 12345, [Rom.SizeKey] = 12345,
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -1049,6 +1163,8 @@ namespace SabreTools.Core.Test
Rom self = new Rom Rom self = new Rom
{ {
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -1059,6 +1175,8 @@ namespace SabreTools.Core.Test
Rom other = new Rom Rom other = new Rom
{ {
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -1077,6 +1195,8 @@ namespace SabreTools.Core.Test
Rom self = new Rom Rom self = new Rom
{ {
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -1087,6 +1207,72 @@ namespace SabreTools.Core.Test
Rom other = new Rom Rom other = new Rom
{ {
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX",
[Rom.SHA384Key] = "XXXXXX",
[Rom.SHA512Key] = "XXXXXX",
[Rom.SpamSumKey] = "XXXXXX",
};
bool actual = self.HashMatch(other);
Assert.True(actual);
}
[Fact]
public void HashMatch_Rom_PartialMD2_True()
{
Rom self = new Rom
{
[Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty,
[Rom.SHA384Key] = string.Empty,
[Rom.SHA512Key] = string.Empty,
[Rom.SpamSumKey] = string.Empty,
};
Rom other = new Rom
{
[Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX",
[Rom.SHA384Key] = "XXXXXX",
[Rom.SHA512Key] = "XXXXXX",
[Rom.SpamSumKey] = "XXXXXX",
};
bool actual = self.HashMatch(other);
Assert.True(actual);
}
[Fact]
public void HashMatch_Rom_PartialMD4_True()
{
Rom self = new Rom
{
[Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty,
[Rom.SHA384Key] = string.Empty,
[Rom.SHA512Key] = string.Empty,
[Rom.SpamSumKey] = string.Empty,
};
Rom other = new Rom
{
[Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -1105,6 +1291,8 @@ namespace SabreTools.Core.Test
Rom self = new Rom Rom self = new Rom
{ {
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -1115,6 +1303,8 @@ namespace SabreTools.Core.Test
Rom other = new Rom Rom other = new Rom
{ {
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -1133,6 +1323,8 @@ namespace SabreTools.Core.Test
Rom self = new Rom Rom self = new Rom
{ {
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -1143,6 +1335,8 @@ namespace SabreTools.Core.Test
Rom other = new Rom Rom other = new Rom
{ {
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -1161,6 +1355,8 @@ namespace SabreTools.Core.Test
Rom self = new Rom Rom self = new Rom
{ {
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -1171,6 +1367,8 @@ namespace SabreTools.Core.Test
Rom other = new Rom Rom other = new Rom
{ {
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -1189,6 +1387,8 @@ namespace SabreTools.Core.Test
Rom self = new Rom Rom self = new Rom
{ {
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -1199,6 +1399,8 @@ namespace SabreTools.Core.Test
Rom other = new Rom Rom other = new Rom
{ {
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -1217,6 +1419,8 @@ namespace SabreTools.Core.Test
Rom self = new Rom Rom self = new Rom
{ {
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -1227,6 +1431,8 @@ namespace SabreTools.Core.Test
Rom other = new Rom Rom other = new Rom
{ {
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -1245,6 +1451,8 @@ namespace SabreTools.Core.Test
Rom self = new Rom Rom self = new Rom
{ {
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -1255,6 +1463,8 @@ namespace SabreTools.Core.Test
Rom other = new Rom Rom other = new Rom
{ {
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -1273,6 +1483,8 @@ namespace SabreTools.Core.Test
Rom self = new Rom Rom self = new Rom
{ {
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -1283,6 +1495,8 @@ namespace SabreTools.Core.Test
Rom other = new Rom Rom other = new Rom
{ {
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -1471,6 +1685,8 @@ namespace SabreTools.Core.Test
DictionaryBase self = new Rom DictionaryBase self = new Rom
{ {
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -1489,6 +1705,48 @@ namespace SabreTools.Core.Test
DictionaryBase self = new Rom DictionaryBase self = new Rom
{ {
[Rom.CRCKey] = ZeroHash.CRC32Str, [Rom.CRCKey] = ZeroHash.CRC32Str,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty,
[Rom.SHA384Key] = string.Empty,
[Rom.SHA512Key] = string.Empty,
[Rom.SpamSumKey] = string.Empty,
};
bool actual = self.HasZeroHash();
Assert.True(actual);
}
[Fact]
public void HasZeroHash_Rom_ZeroMD2_True()
{
DictionaryBase self = new Rom
{
[Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = ZeroHash.GetString(HashType.MD2),
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty,
[Rom.SHA384Key] = string.Empty,
[Rom.SHA512Key] = string.Empty,
[Rom.SpamSumKey] = string.Empty,
};
bool actual = self.HasZeroHash();
Assert.True(actual);
}
[Fact]
public void HasZeroHash_Rom_ZeroMD4_True()
{
DictionaryBase self = new Rom
{
[Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = ZeroHash.GetString(HashType.MD4),
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -1507,6 +1765,8 @@ namespace SabreTools.Core.Test
DictionaryBase self = new Rom DictionaryBase self = new Rom
{ {
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = ZeroHash.MD5Str, [Rom.MD5Key] = ZeroHash.MD5Str,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -1525,6 +1785,8 @@ namespace SabreTools.Core.Test
DictionaryBase self = new Rom DictionaryBase self = new Rom
{ {
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = ZeroHash.SHA1Str, [Rom.SHA1Key] = ZeroHash.SHA1Str,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -1543,6 +1805,8 @@ namespace SabreTools.Core.Test
DictionaryBase self = new Rom DictionaryBase self = new Rom
{ {
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = ZeroHash.SHA256Str, [Rom.SHA256Key] = ZeroHash.SHA256Str,
@@ -1561,6 +1825,8 @@ namespace SabreTools.Core.Test
DictionaryBase self = new Rom DictionaryBase self = new Rom
{ {
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -1579,6 +1845,8 @@ namespace SabreTools.Core.Test
DictionaryBase self = new Rom DictionaryBase self = new Rom
{ {
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -1597,6 +1865,8 @@ namespace SabreTools.Core.Test
DictionaryBase self = new Rom DictionaryBase self = new Rom
{ {
[Rom.CRCKey] = string.Empty, [Rom.CRCKey] = string.Empty,
[Rom.MD2Key] = string.Empty,
[Rom.MD4Key] = string.Empty,
[Rom.MD5Key] = string.Empty, [Rom.MD5Key] = string.Empty,
[Rom.SHA1Key] = string.Empty, [Rom.SHA1Key] = string.Empty,
[Rom.SHA256Key] = string.Empty, [Rom.SHA256Key] = string.Empty,
@@ -1615,6 +1885,8 @@ namespace SabreTools.Core.Test
DictionaryBase self = new Rom DictionaryBase self = new Rom
{ {
[Rom.CRCKey] = ZeroHash.CRC32Str, [Rom.CRCKey] = ZeroHash.CRC32Str,
[Rom.MD2Key] = ZeroHash.GetString(HashType.MD2),
[Rom.MD4Key] = ZeroHash.GetString(HashType.MD4),
[Rom.MD5Key] = ZeroHash.MD5Str, [Rom.MD5Key] = ZeroHash.MD5Str,
[Rom.SHA1Key] = ZeroHash.SHA1Str, [Rom.SHA1Key] = ZeroHash.SHA1Str,
[Rom.SHA256Key] = ZeroHash.SHA256Str, [Rom.SHA256Key] = ZeroHash.SHA256Str,
@@ -1702,6 +1974,8 @@ namespace SabreTools.Core.Test
DictionaryBase other = new Rom DictionaryBase other = new Rom
{ {
[Rom.CRCKey] = "XXXXXX", [Rom.CRCKey] = "XXXXXX",
[Rom.MD2Key] = "XXXXXX",
[Rom.MD4Key] = "XXXXXX",
[Rom.MD5Key] = "XXXXXX", [Rom.MD5Key] = "XXXXXX",
[Rom.SHA1Key] = "XXXXXX", [Rom.SHA1Key] = "XXXXXX",
[Rom.SHA256Key] = "XXXXXX", [Rom.SHA256Key] = "XXXXXX",
@@ -1804,6 +2078,24 @@ namespace SabreTools.Core.Test
Assert.Equal($"_{hash}", actual); Assert.Equal($"_{hash}", actual);
} }
[Fact]
public void GetDuplicateSuffix_Rom_MD2()
{
string hash = "XXXXXX";
DictionaryBase self = new Rom { [Rom.MD2Key] = hash };
string actual = self.GetDuplicateSuffix();
Assert.Equal($"_{hash}", actual);
}
[Fact]
public void GetDuplicateSuffix_Rom_MD4()
{
string hash = "XXXXXX";
DictionaryBase self = new Rom { [Rom.MD4Key] = hash };
string actual = self.GetDuplicateSuffix();
Assert.Equal($"_{hash}", actual);
}
[Fact] [Fact]
public void GetDuplicateSuffix_Rom_MD5() public void GetDuplicateSuffix_Rom_MD5()
{ {

View File

@@ -35,6 +35,54 @@ namespace SabreTools.Core.Test.Tools
#endregion #endregion
#region NormalizeMD2
[Theory]
[InlineData(null, null)]
[InlineData("", "")]
[InlineData("-", "")]
[InlineData("_", "")]
[InlineData("0x", "")]
[InlineData("1234", "00000000000000000000000000001234")]
[InlineData("0x1234", "00000000000000000000000000001234")]
[InlineData("1234ABCD1234ABCD1234ABCD1234ABCDE", "")]
[InlineData("0x1234ABCD1234ABCD1234ABCD1234ABCDE", "")]
[InlineData("1234ABCD1234ABCD1234ABCD1234ABCD", "1234abcd1234abcd1234abcd1234abcd")]
[InlineData("0x1234ABCD1234ABCD1234ABCD1234ABCD", "1234abcd1234abcd1234abcd1234abcd")]
[InlineData("abcdefghabcdefghabcdefghabcdefgh", "")]
[InlineData("0xabcdefghabcdefghabcdefghabcdefgh", "")]
public void NormalizeMD2Test(string? hash, string? expected)
{
string? actual = TextHelper.NormalizeMD2(hash);
Assert.Equal(expected, actual);
}
#endregion
#region NormalizeMD4
[Theory]
[InlineData(null, null)]
[InlineData("", "")]
[InlineData("-", "")]
[InlineData("_", "")]
[InlineData("0x", "")]
[InlineData("1234", "00000000000000000000000000001234")]
[InlineData("0x1234", "00000000000000000000000000001234")]
[InlineData("1234ABCD1234ABCD1234ABCD1234ABCDE", "")]
[InlineData("0x1234ABCD1234ABCD1234ABCD1234ABCDE", "")]
[InlineData("1234ABCD1234ABCD1234ABCD1234ABCD", "1234abcd1234abcd1234abcd1234abcd")]
[InlineData("0x1234ABCD1234ABCD1234ABCD1234ABCD", "1234abcd1234abcd1234abcd1234abcd")]
[InlineData("abcdefghabcdefghabcdefghabcdefgh", "")]
[InlineData("0xabcdefghabcdefghabcdefghabcdefgh", "")]
public void NormalizeMD4Test(string? hash, string? expected)
{
string? actual = TextHelper.NormalizeMD4(hash);
Assert.Equal(expected, actual);
}
#endregion
#region NormalizeMD5 #region NormalizeMD5
[Theory] [Theory]

View File

@@ -319,7 +319,8 @@ namespace SabreTools.Core
string? otherSha1 = other.ReadString(Disk.SHA1Key); string? otherSha1 = other.ReadString(Disk.SHA1Key);
bool conditionalSha1 = Tools.Utilities.ConditionalHashEquals(selfSha1, otherSha1); bool conditionalSha1 = Tools.Utilities.ConditionalHashEquals(selfSha1, otherSha1);
return conditionalMd5 && conditionalSha1; return conditionalMd5
&& conditionalSha1;
} }
/// <summary> /// <summary>
@@ -352,7 +353,10 @@ namespace SabreTools.Core
string? otherSpamSum = other.ReadString(Media.SpamSumKey); string? otherSpamSum = other.ReadString(Media.SpamSumKey);
bool conditionalSpamSum = Tools.Utilities.ConditionalHashEquals(selfSpamSum, otherSpamSum); bool conditionalSpamSum = Tools.Utilities.ConditionalHashEquals(selfSpamSum, otherSpamSum);
return conditionalMd5 && conditionalSha1 && conditionalSha256 && conditionalSpamSum; return conditionalMd5
&& conditionalSha1
&& conditionalSha256
&& conditionalSpamSum;
} }
/// <summary> /// <summary>
@@ -373,6 +377,14 @@ namespace SabreTools.Core
string? otherCrc = other.ReadString(Rom.CRCKey); string? otherCrc = other.ReadString(Rom.CRCKey);
bool conditionalCrc = Tools.Utilities.ConditionalHashEquals(selfCrc, otherCrc); bool conditionalCrc = Tools.Utilities.ConditionalHashEquals(selfCrc, otherCrc);
string? selfMd2 = self.ReadString(Rom.MD2Key);
string? otherMd2 = other.ReadString(Rom.MD2Key);
bool conditionalMd2 = Tools.Utilities.ConditionalHashEquals(selfMd2, otherMd2);
string? selfMd4 = self.ReadString(Rom.MD4Key);
string? otherMd4 = other.ReadString(Rom.MD4Key);
bool conditionalMd4 = Tools.Utilities.ConditionalHashEquals(selfMd4, otherMd4);
string? selfMd5 = self.ReadString(Rom.MD5Key); string? selfMd5 = self.ReadString(Rom.MD5Key);
string? otherMd5 = other.ReadString(Rom.MD5Key); string? otherMd5 = other.ReadString(Rom.MD5Key);
bool conditionalMd5 = Tools.Utilities.ConditionalHashEquals(selfMd5, otherMd5); bool conditionalMd5 = Tools.Utilities.ConditionalHashEquals(selfMd5, otherMd5);
@@ -397,7 +409,15 @@ namespace SabreTools.Core
string? otherSpamSum = other.ReadString(Rom.SpamSumKey); string? otherSpamSum = other.ReadString(Rom.SpamSumKey);
bool conditionalSpamSum = Tools.Utilities.ConditionalHashEquals(selfSpamSum, otherSpamSum); bool conditionalSpamSum = Tools.Utilities.ConditionalHashEquals(selfSpamSum, otherSpamSum);
return conditionalCrc && conditionalMd5 && conditionalSha1 && conditionalSha256 && conditionalSha384 && conditionalSha512 && conditionalSpamSum; return conditionalCrc
&& conditionalMd2
&& conditionalMd4
&& conditionalMd5
&& conditionalSha1
&& conditionalSha256
&& conditionalSha384
&& conditionalSha512
&& conditionalSpamSum;
} }
/// <summary> /// <summary>
@@ -439,7 +459,8 @@ namespace SabreTools.Core
bool sha1Null = string.IsNullOrEmpty(self.ReadString(Disk.SHA1Key)); bool sha1Null = string.IsNullOrEmpty(self.ReadString(Disk.SHA1Key));
sha1Null ^= string.IsNullOrEmpty(other.ReadString(Disk.SHA1Key)); sha1Null ^= string.IsNullOrEmpty(other.ReadString(Disk.SHA1Key));
return !md5Null || !sha1Null; return !md5Null
|| !sha1Null;
} }
/// <summary> /// <summary>
@@ -459,7 +480,10 @@ namespace SabreTools.Core
bool spamsumNull = string.IsNullOrEmpty(self.ReadString(Media.SpamSumKey)); bool spamsumNull = string.IsNullOrEmpty(self.ReadString(Media.SpamSumKey));
spamsumNull ^= string.IsNullOrEmpty(other.ReadString(Media.SpamSumKey)); spamsumNull ^= string.IsNullOrEmpty(other.ReadString(Media.SpamSumKey));
return !md5Null || !sha1Null || !sha256Null || !spamsumNull; return !md5Null
|| !sha1Null
|| !sha256Null
|| !spamsumNull;
} }
/// <summary> /// <summary>
@@ -470,6 +494,12 @@ namespace SabreTools.Core
bool crcNull = string.IsNullOrEmpty(self.ReadString(Rom.CRCKey)); bool crcNull = string.IsNullOrEmpty(self.ReadString(Rom.CRCKey));
crcNull ^= string.IsNullOrEmpty(other.ReadString(Rom.CRCKey)); crcNull ^= string.IsNullOrEmpty(other.ReadString(Rom.CRCKey));
bool md2Null = string.IsNullOrEmpty(self.ReadString(Rom.MD2Key));
md2Null ^= string.IsNullOrEmpty(other.ReadString(Rom.MD2Key));
bool md4Null = string.IsNullOrEmpty(self.ReadString(Rom.MD4Key));
md4Null ^= string.IsNullOrEmpty(other.ReadString(Rom.MD4Key));
bool md5Null = string.IsNullOrEmpty(self.ReadString(Rom.MD5Key)); bool md5Null = string.IsNullOrEmpty(self.ReadString(Rom.MD5Key));
md5Null ^= string.IsNullOrEmpty(other.ReadString(Rom.MD5Key)); md5Null ^= string.IsNullOrEmpty(other.ReadString(Rom.MD5Key));
@@ -488,7 +518,15 @@ namespace SabreTools.Core
bool spamsumNull = string.IsNullOrEmpty(self.ReadString(Rom.SpamSumKey)); bool spamsumNull = string.IsNullOrEmpty(self.ReadString(Rom.SpamSumKey));
spamsumNull ^= string.IsNullOrEmpty(other.ReadString(Rom.SpamSumKey)); spamsumNull ^= string.IsNullOrEmpty(other.ReadString(Rom.SpamSumKey));
return !crcNull || !md5Null || !sha1Null || !sha256Null || !sha384Null || !sha512Null || !spamsumNull; return !crcNull
|| !md2Null
|| !md4Null
|| !md5Null
|| !sha1Null
|| !sha256Null
|| !sha384Null
|| !sha512Null
|| !spamsumNull;
} }
/// <summary> /// <summary>
@@ -499,7 +537,8 @@ namespace SabreTools.Core
bool md5Null = string.IsNullOrEmpty(disk.ReadString(Disk.MD5Key)); bool md5Null = string.IsNullOrEmpty(disk.ReadString(Disk.MD5Key));
bool sha1Null = string.IsNullOrEmpty(disk.ReadString(Disk.SHA1Key)); bool sha1Null = string.IsNullOrEmpty(disk.ReadString(Disk.SHA1Key));
return !md5Null || !sha1Null; return !md5Null
|| !sha1Null;
} }
/// <summary> /// <summary>
@@ -512,7 +551,10 @@ namespace SabreTools.Core
bool sha256Null = string.IsNullOrEmpty(media.ReadString(Media.SHA256Key)); bool sha256Null = string.IsNullOrEmpty(media.ReadString(Media.SHA256Key));
bool spamsumNull = string.IsNullOrEmpty(media.ReadString(Media.SpamSumKey)); bool spamsumNull = string.IsNullOrEmpty(media.ReadString(Media.SpamSumKey));
return !md5Null || !sha1Null || !sha256Null || !spamsumNull; return !md5Null
|| !sha1Null
|| !sha256Null
|| !spamsumNull;
} }
/// <summary> /// <summary>
@@ -521,6 +563,8 @@ namespace SabreTools.Core
private static bool HasHashes(this Rom rom) private static bool HasHashes(this Rom rom)
{ {
bool crcNull = string.IsNullOrEmpty(rom.ReadString(Rom.CRCKey)); bool crcNull = string.IsNullOrEmpty(rom.ReadString(Rom.CRCKey));
bool md2Null = string.IsNullOrEmpty(rom.ReadString(Rom.MD2Key));
bool md4Null = string.IsNullOrEmpty(rom.ReadString(Rom.MD4Key));
bool md5Null = string.IsNullOrEmpty(rom.ReadString(Rom.MD5Key)); bool md5Null = string.IsNullOrEmpty(rom.ReadString(Rom.MD5Key));
bool sha1Null = string.IsNullOrEmpty(rom.ReadString(Rom.SHA1Key)); bool sha1Null = string.IsNullOrEmpty(rom.ReadString(Rom.SHA1Key));
bool sha256Null = string.IsNullOrEmpty(rom.ReadString(Rom.SHA256Key)); bool sha256Null = string.IsNullOrEmpty(rom.ReadString(Rom.SHA256Key));
@@ -528,7 +572,15 @@ namespace SabreTools.Core
bool sha512Null = string.IsNullOrEmpty(rom.ReadString(Rom.SHA512Key)); bool sha512Null = string.IsNullOrEmpty(rom.ReadString(Rom.SHA512Key));
bool spamsumNull = string.IsNullOrEmpty(rom.ReadString(Rom.SpamSumKey)); bool spamsumNull = string.IsNullOrEmpty(rom.ReadString(Rom.SpamSumKey));
return !crcNull || !md5Null || !sha1Null || !sha256Null || !sha384Null || !sha512Null || !spamsumNull; return !crcNull
|| !md2Null
|| !md4Null
|| !md5Null
|| !sha1Null
|| !sha256Null
|| !sha384Null
|| !sha512Null
|| !spamsumNull;
} }
/// <summary> /// <summary>
@@ -542,7 +594,8 @@ namespace SabreTools.Core
string? sha1 = disk.ReadString(Disk.SHA1Key); string? sha1 = disk.ReadString(Disk.SHA1Key);
bool sha1Null = string.IsNullOrEmpty(sha1) || string.Equals(sha1, ZeroHash.SHA1Str, StringComparison.OrdinalIgnoreCase); bool sha1Null = string.IsNullOrEmpty(sha1) || string.Equals(sha1, ZeroHash.SHA1Str, StringComparison.OrdinalIgnoreCase);
return md5Null && sha1Null; return md5Null
&& sha1Null;
} }
/// <summary> /// <summary>
@@ -562,7 +615,10 @@ namespace SabreTools.Core
string? spamsum = media.ReadString(Media.SpamSumKey); string? spamsum = media.ReadString(Media.SpamSumKey);
bool spamsumNull = string.IsNullOrEmpty(spamsum) || string.Equals(spamsum, ZeroHash.SpamSumStr, StringComparison.OrdinalIgnoreCase); bool spamsumNull = string.IsNullOrEmpty(spamsum) || string.Equals(spamsum, ZeroHash.SpamSumStr, StringComparison.OrdinalIgnoreCase);
return md5Null && sha1Null && sha256Null && spamsumNull; return md5Null
&& sha1Null
&& sha256Null
&& spamsumNull;
} }
/// <summary> /// <summary>
@@ -573,6 +629,12 @@ namespace SabreTools.Core
string? crc = rom.ReadString(Rom.CRCKey); string? crc = rom.ReadString(Rom.CRCKey);
bool crcNull = string.IsNullOrEmpty(crc) || string.Equals(crc, ZeroHash.CRC32Str, StringComparison.OrdinalIgnoreCase); bool crcNull = string.IsNullOrEmpty(crc) || string.Equals(crc, ZeroHash.CRC32Str, StringComparison.OrdinalIgnoreCase);
string? md2 = rom.ReadString(Rom.MD2Key);
bool md2Null = string.IsNullOrEmpty(md2) || string.Equals(md2, ZeroHash.GetString(HashType.MD2), StringComparison.OrdinalIgnoreCase);
string? md4 = rom.ReadString(Rom.MD4Key);
bool md4Null = string.IsNullOrEmpty(md4) || string.Equals(md4, ZeroHash.GetString(HashType.MD4), StringComparison.OrdinalIgnoreCase);
string? md5 = rom.ReadString(Rom.MD5Key); string? md5 = rom.ReadString(Rom.MD5Key);
bool md5Null = string.IsNullOrEmpty(md5) || string.Equals(md5, ZeroHash.MD5Str, StringComparison.OrdinalIgnoreCase); bool md5Null = string.IsNullOrEmpty(md5) || string.Equals(md5, ZeroHash.MD5Str, StringComparison.OrdinalIgnoreCase);
@@ -591,7 +653,15 @@ namespace SabreTools.Core
string? spamsum = rom.ReadString(Rom.SpamSumKey); string? spamsum = rom.ReadString(Rom.SpamSumKey);
bool spamsumNull = string.IsNullOrEmpty(spamsum) || string.Equals(spamsum, ZeroHash.SpamSumStr, StringComparison.OrdinalIgnoreCase); bool spamsumNull = string.IsNullOrEmpty(spamsum) || string.Equals(spamsum, ZeroHash.SpamSumStr, StringComparison.OrdinalIgnoreCase);
return crcNull && md5Null && sha1Null && sha256Null && sha384Null && sha512Null && spamsumNull; return crcNull
&& md2Null
&& md4Null
&& md5Null
&& sha1Null
&& sha256Null
&& sha384Null
&& sha512Null
&& spamsumNull;
} }
#endregion #endregion
@@ -686,6 +756,16 @@ namespace SabreTools.Core
if (string.IsNullOrEmpty(selfCrc) && !string.IsNullOrEmpty(otherCrc)) if (string.IsNullOrEmpty(selfCrc) && !string.IsNullOrEmpty(otherCrc))
self[Rom.CRCKey] = otherCrc; self[Rom.CRCKey] = otherCrc;
string? selfMd2 = self.ReadString(Rom.MD2Key);
string? otherMd2 = other.ReadString(Rom.MD2Key);
if (string.IsNullOrEmpty(selfMd2) && !string.IsNullOrEmpty(otherMd2))
self[Rom.MD2Key] = otherMd2;
string? selfMd4 = self.ReadString(Rom.MD4Key);
string? otherMd4 = other.ReadString(Rom.MD4Key);
if (string.IsNullOrEmpty(selfMd4) && !string.IsNullOrEmpty(otherMd4))
self[Rom.MD4Key] = otherMd4;
string? selfMd5 = self.ReadString(Rom.MD5Key); string? selfMd5 = self.ReadString(Rom.MD5Key);
string? otherMd5 = other.ReadString(Rom.MD5Key); string? otherMd5 = other.ReadString(Rom.MD5Key);
if (string.IsNullOrEmpty(selfMd5) && !string.IsNullOrEmpty(otherMd5)) if (string.IsNullOrEmpty(selfMd5) && !string.IsNullOrEmpty(otherMd5))
@@ -787,6 +867,14 @@ namespace SabreTools.Core
if (!string.IsNullOrEmpty(crc)) if (!string.IsNullOrEmpty(crc))
return $"_{crc}"; return $"_{crc}";
string? md2 = self.ReadString(Rom.MD2Key);
if (!string.IsNullOrEmpty(md2))
return $"_{md2}";
string? md4 = self.ReadString(Rom.MD4Key);
if (!string.IsNullOrEmpty(md4))
return $"_{md4}";
string? md5 = self.ReadString(Rom.MD5Key); string? md5 = self.ReadString(Rom.MD5Key);
if (!string.IsNullOrEmpty(md5)) if (!string.IsNullOrEmpty(md5))
return $"_{md5}"; return $"_{md5}";

View File

@@ -185,6 +185,16 @@ Features and Options:
overrides the default hashing behavior of including CRC32, MD5, and overrides the default hashing behavior of including CRC32, MD5, and
SHA-1 hashes. SHA-1 hashes.
-md2, --include-md2 Include MD2 in output
This enables MD2 calculation for each of the files. Adding this flag
overrides the default hashing behavior of including CRC32, MD5, and
SHA-1 hashes.
-md4, --include-md4 Include MD4 in output
This enables MD4 calculation for each of the files. Adding this flag
overrides the default hashing behavior of including CRC32, MD5, and
SHA-1 hashes.
-md5, --include-md5 Include MD5 in output -md5, --include-md5 Include MD5 in output
This enables MD5 calculation for each of the files. Adding this flag This enables MD5 calculation for each of the files. Adding this flag
overrides the default hashing behavior of including CRC32, MD5, and overrides the default hashing behavior of including CRC32, MD5, and
@@ -248,6 +258,8 @@ Features and Options:
lr, listrom - MAME Listrom lr, listrom - MAME Listrom
lx, listxml - MAME Listxml lx, listxml - MAME Listxml
miss, missfile - GoodTools Missfile miss, missfile - GoodTools Missfile
md2 - MD2
md4 - MD4
md5 - MD5 md5 - MD5
msx, openmsx - openMSX Software List msx, openmsx - openMSX Software List
ol, offlinelist - OfflineList XML ol, offlinelist - OfflineList XML
@@ -559,6 +571,8 @@ Features and Options:
lr, listrom - MAME Listrom lr, listrom - MAME Listrom
lx, listxml - MAME Listxml lx, listxml - MAME Listxml
miss, missfile - GoodTools Missfile miss, missfile - GoodTools Missfile
md2 - MD2
md4 - MD4
md5 - MD5 md5 - MD5
msx, openmsx - openMSX Software List msx, openmsx - openMSX Software List
ol, offlinelist - OfflineList XML ol, offlinelist - OfflineList XML
@@ -610,7 +624,7 @@ Features and Options:
For a DAT, or set of DATs, allow for splitting based on the best For a DAT, or set of DATs, allow for splitting based on the best
available hash for each file within. The order of preference for the available hash for each file within. The order of preference for the
outputted DATs is as follows: Nodump, SHA-512, SHA-384, SHA-256, outputted DATs is as follows: Nodump, SHA-512, SHA-384, SHA-256,
SHA-1, MD5, CRC (or worse). SHA-1, MD5, MD4, MD2, CRC (or worse).
-ls, --level Split a SuperDAT or folder by lowest available level -ls, --level Split a SuperDAT or folder by lowest available level
For a DAT, or set of DATs, allow for splitting based on the lowest For a DAT, or set of DATs, allow for splitting based on the lowest
@@ -724,6 +738,8 @@ Features and Options:
lr, listrom - MAME Listrom lr, listrom - MAME Listrom
lx, listxml - MAME Listxml lx, listxml - MAME Listxml
miss, missfile - GoodTools Missfile miss, missfile - GoodTools Missfile
md2 - MD2
md4 - MD4
md5 - MD5 md5 - MD5
msx, openmsx - openMSX Software List msx, openmsx - openMSX Software List
ol, offlinelist - OfflineList XML ol, offlinelist - OfflineList XML
@@ -755,6 +771,8 @@ Features and Options:
- %publisher% - Replaced with game Publisher - %publisher% - Replaced with game Publisher
- %category% - Replaced with game Category - %category% - Replaced with game Category
- %crc% - Replaced with the CRC - %crc% - Replaced with the CRC
- %md2% - Replaced with the MD2
- %md4% - Replaced with the MD4
- %md5% - Replaced with the MD5 - %md5% - Replaced with the MD5
- %sha1% - Replaced with the SHA-1 - %sha1% - Replaced with the SHA-1
- %sha256% - Replaced with the SHA-256 - %sha256% - Replaced with the SHA-256

View File

@@ -33,6 +33,20 @@ namespace SabreTools.Core.Tools
public static string? NormalizeCRC32(string? hash) public static string? NormalizeCRC32(string? hash)
=> NormalizeHashData(hash, Constants.CRCLength); => NormalizeHashData(hash, Constants.CRCLength);
/// <summary>
/// Normalize a MD2 string and pad to the correct size
/// </summary>
/// <remarks>MD2 is the same length as MD5</remarks>
public static string? NormalizeMD2(string? hash)
=> NormalizeHashData(hash, Constants.MD5Length);
/// <summary>
/// Normalize a MD4 string and pad to the correct size
/// </summary>
/// <remarks>MD4 is the same length as MD5</remarks>
public static string? NormalizeMD4(string? hash)
=> NormalizeHashData(hash, Constants.MD5Length);
/// <summary> /// <summary>
/// Normalize a MD5 string and pad to the correct size /// Normalize a MD5 string and pad to the correct size
/// </summary> /// </summary>

View File

@@ -978,6 +978,10 @@ namespace SabreTools.DatFiles
datItem.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, datItem.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString()); datItem.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, datItem.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString());
if (datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null) if (datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey))); datItem.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(datItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD5(datItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key) != null) if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key))); datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) != null) if (datItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) != null)
@@ -1234,6 +1238,10 @@ namespace SabreTools.DatFiles
romItem.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, romItem.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString()); romItem.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, romItem.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString());
if (romItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null) if (romItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null)
romItem.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(romItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey))); romItem.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(romItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey)));
if (romItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key) != null)
romItem.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(romItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key)));
if (romItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key) != null)
romItem.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD4(romItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key)));
if (romItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key) != null) if (romItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key) != null)
romItem.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(romItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key))); romItem.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(romItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key)));
if (romItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) != null) if (romItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) != null)
@@ -1542,6 +1550,10 @@ namespace SabreTools.DatFiles
datItem.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, datItem.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString()); datItem.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, datItem.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString());
if (datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null) if (datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey))); datItem.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, TextHelper.NormalizeCRC32(datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key, TextHelper.NormalizeMD2(datItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key, TextHelper.NormalizeMD4(datItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key) != null) if (datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key) != null)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key))); datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key)));
if (datItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) != null) if (datItem.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) != null)

View File

@@ -219,6 +219,8 @@ namespace SabreTools.DatFiles
category = machine.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty, category = machine.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty,
name = item.GetName() ?? type.AsEnumValue<ItemType>().AsStringValue() ?? string.Empty, name = item.GetName() ?? type.AsEnumValue<ItemType>().AsStringValue() ?? string.Empty,
crc = string.Empty, crc = string.Empty,
md2 = string.Empty,
md4 = string.Empty,
md5 = string.Empty, md5 = string.Empty,
sha1 = string.Empty, sha1 = string.Empty,
sha256 = string.Empty, sha256 = string.Empty,
@@ -260,6 +262,8 @@ namespace SabreTools.DatFiles
else if (item is Rom rom) else if (item is Rom rom)
{ {
crc = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) ?? string.Empty; crc = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) ?? string.Empty;
md2 = rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key) ?? string.Empty;
md4 = rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key) ?? string.Empty;
md5 = rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) ?? string.Empty; md5 = rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) ?? string.Empty;
sha1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty; sha1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty;
sha256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty; sha256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty;
@@ -278,6 +282,8 @@ namespace SabreTools.DatFiles
.Replace("%publisher%", publisher) .Replace("%publisher%", publisher)
.Replace("%category%", category) .Replace("%category%", category)
.Replace("%crc%", crc) .Replace("%crc%", crc)
.Replace("%md2%", md2)
.Replace("%md4%", md4)
.Replace("%md5%", md5) .Replace("%md5%", md5)
.Replace("%sha1%", sha1) .Replace("%sha1%", sha1)
.Replace("%sha256%", sha256) .Replace("%sha256%", sha256)
@@ -311,6 +317,8 @@ namespace SabreTools.DatFiles
category = machine.Value.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty, category = machine.Value.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty,
name = item.Value.GetName() ?? type.AsEnumValue<ItemType>().AsStringValue() ?? string.Empty, name = item.Value.GetName() ?? type.AsEnumValue<ItemType>().AsStringValue() ?? string.Empty,
crc = string.Empty, crc = string.Empty,
md2 = string.Empty,
md4 = string.Empty,
md5 = string.Empty, md5 = string.Empty,
sha1 = string.Empty, sha1 = string.Empty,
sha256 = string.Empty, sha256 = string.Empty,
@@ -352,6 +360,8 @@ namespace SabreTools.DatFiles
else if (item.Value is Rom rom) else if (item.Value is Rom rom)
{ {
crc = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) ?? string.Empty; crc = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) ?? string.Empty;
md2 = rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key) ?? string.Empty;
md4 = rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key) ?? string.Empty;
md5 = rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) ?? string.Empty; md5 = rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) ?? string.Empty;
sha1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty; sha1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty;
sha256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty; sha256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty;
@@ -370,6 +380,8 @@ namespace SabreTools.DatFiles
.Replace("%publisher%", publisher) .Replace("%publisher%", publisher)
.Replace("%category%", category) .Replace("%category%", category)
.Replace("%crc%", crc) .Replace("%crc%", crc)
.Replace("%md2%", md2)
.Replace("%md4%", md4)
.Replace("%md5%", md5) .Replace("%md5%", md5)
.Replace("%sha1%", sha1) .Replace("%sha1%", sha1)
.Replace("%sha256%", sha256) .Replace("%sha256%", sha256)
@@ -615,6 +627,10 @@ namespace SabreTools.DatFiles
rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString()); rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString());
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey,
rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null" ? ZeroHash.CRC32Str : null); rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null" ? ZeroHash.CRC32Str : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key,
rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key) == "null" ? ZeroHash.GetString(HashType.MD2) : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key,
rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key) == "null" ? ZeroHash.GetString(HashType.MD4) : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key,
rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? ZeroHash.MD5Str : null); rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? ZeroHash.MD5Str : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key,
@@ -659,6 +675,10 @@ namespace SabreTools.DatFiles
rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString()); rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString());
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey,
rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null" ? ZeroHash.CRC32Str : null); rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) == "null" ? ZeroHash.CRC32Str : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key,
rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key) == "null" ? ZeroHash.GetString(HashType.MD2) : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key,
rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key) == "null" ? ZeroHash.GetString(HashType.MD4) : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key,
rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? ZeroHash.MD5Str : null); rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? ZeroHash.MD5Str : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key,

View File

@@ -145,6 +145,8 @@ namespace SabreTools.DatFiles
{ {
TotalSize += rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0; TotalSize += rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0;
AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); AddHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1);
AddHashCount(HashType.MD2, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key)) ? 0 : 1);
AddHashCount(HashType.MD4, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key)) ? 0 : 1);
AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1); AddHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1);
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); AddHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1);
AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)) ? 0 : 1); AddHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)) ? 0 : 1);
@@ -345,6 +347,8 @@ namespace SabreTools.DatFiles
{ {
TotalSize -= rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0; TotalSize -= rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0;
RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1); RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)) ? 0 : 1);
RemoveHashCount(HashType.MD2, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key)) ? 0 : 1);
RemoveHashCount(HashType.MD4, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key)) ? 0 : 1);
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1); RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) ? 0 : 1);
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1); RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) ? 0 : 1);
RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)) ? 0 : 1); RemoveHashCount(HashType.SHA256, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)) ? 0 : 1);

View File

@@ -88,6 +88,30 @@ namespace SabreTools.DatFiles.Formats
break; break;
} }
break; break;
case HashType.MD2:
switch (datItem)
{
case Rom rom:
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key)))
missingFields.Add(Models.Metadata.Rom.MD2Key);
break;
default:
missingFields.Add(Models.Metadata.Rom.MD2Key);
break;
}
break;
case HashType.MD4:
switch (datItem)
{
case Rom rom:
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key)))
missingFields.Add(Models.Metadata.Rom.MD4Key);
break;
default:
missingFields.Add(Models.Metadata.Rom.MD4Key);
break;
}
break;
case HashType.MD5: case HashType.MD5:
switch (datItem) switch (datItem)
{ {

View File

@@ -232,6 +232,8 @@ namespace SabreTools.DatFiles
{ {
rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString()); rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString());
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, ZeroHash.CRC32Str); rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, ZeroHash.CRC32Str);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key, null); // ZeroHash.GetString(HashType.MD2)
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key, null); // ZeroHash.GetString(HashType.MD4)
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, ZeroHash.MD5Str); rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, ZeroHash.MD5Str);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, ZeroHash.SHA1Str); rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, ZeroHash.SHA1Str);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, null); // ZeroHash.SHA256Str; rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, null); // ZeroHash.SHA256Str;
@@ -667,6 +669,14 @@ namespace SabreTools.DatFiles
else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.MD5)) else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.MD5))
return ItemKey.MD5; return ItemKey.MD5;
// // If all items are supposed to have a MD4, we bucket by that
// else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.MD4))
// return ItemKey.MD4;
// // If all items are supposed to have a MD2, we bucket by that
// else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.MD2))
// return ItemKey.MD2;
// Otherwise, we bucket by CRC // Otherwise, we bucket by CRC
else else
return ItemKey.CRC; return ItemKey.CRC;

View File

@@ -222,6 +222,8 @@ namespace SabreTools.DatFiles
{ {
rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString()); rom.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, Constants.SizeZero.ToString());
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, ZeroHash.CRC32Str); rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, ZeroHash.CRC32Str);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key, null); // ZeroHash.GetString(HashType.MD2)
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key, null); // ZeroHash.GetString(HashType.MD4)
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, ZeroHash.MD5Str); rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, ZeroHash.MD5Str);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, ZeroHash.SHA1Str); rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, ZeroHash.SHA1Str);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, null); // ZeroHash.SHA256Str; rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, null); // ZeroHash.SHA256Str;
@@ -865,6 +867,14 @@ namespace SabreTools.DatFiles
else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.MD5)) else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.MD5))
return ItemKey.MD5; return ItemKey.MD5;
// // If all items are supposed to have a MD4, we bucket by that
// else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.MD4))
// return ItemKey.MD4;
// // If all items are supposed to have a MD2, we bucket by that
// else if (diskCount + mediaCount + romCount - nodumpCount == DatStatistics.GetHashCount(HashType.MD2))
// return ItemKey.MD2;
// Otherwise, we bucket by CRC // Otherwise, we bucket by CRC
else else
return ItemKey.CRC; return ItemKey.CRC;
@@ -917,6 +927,8 @@ namespace SabreTools.DatFiles
Disk disk => bucketBy switch Disk disk => bucketBy switch
{ {
ItemKey.CRC => ZeroHash.CRC32Str, ItemKey.CRC => ZeroHash.CRC32Str,
// ItemKey.MD2 => ZeroHash.GetString(HashType.MD2),
// ItemKey.MD4 => ZeroHash.GetString(HashType.MD4),
ItemKey.MD5 => disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key) ?? string.Empty, ItemKey.MD5 => disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key) ?? string.Empty,
ItemKey.SHA1 => disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key) ?? string.Empty, ItemKey.SHA1 => disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key) ?? string.Empty,
ItemKey.SHA256 => ZeroHash.SHA256Str, ItemKey.SHA256 => ZeroHash.SHA256Str,
@@ -928,6 +940,8 @@ namespace SabreTools.DatFiles
Media media => bucketBy switch Media media => bucketBy switch
{ {
ItemKey.CRC => ZeroHash.CRC32Str, ItemKey.CRC => ZeroHash.CRC32Str,
// ItemKey.MD2 => ZeroHash.GetString(HashType.MD2),
// ItemKey.MD4 => ZeroHash.GetString(HashType.MD4),
ItemKey.MD5 => media.GetStringFieldValue(Models.Metadata.Media.MD5Key) ?? string.Empty, ItemKey.MD5 => media.GetStringFieldValue(Models.Metadata.Media.MD5Key) ?? string.Empty,
ItemKey.SHA1 => media.GetStringFieldValue(Models.Metadata.Media.SHA1Key) ?? string.Empty, ItemKey.SHA1 => media.GetStringFieldValue(Models.Metadata.Media.SHA1Key) ?? string.Empty,
ItemKey.SHA256 => media.GetStringFieldValue(Models.Metadata.Media.SHA256Key) ?? string.Empty, ItemKey.SHA256 => media.GetStringFieldValue(Models.Metadata.Media.SHA256Key) ?? string.Empty,
@@ -939,6 +953,8 @@ namespace SabreTools.DatFiles
Rom rom => bucketBy switch Rom rom => bucketBy switch
{ {
ItemKey.CRC => rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) ?? string.Empty, ItemKey.CRC => rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey) ?? string.Empty,
// ItemKey.MD2 => rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key) ?? string.Empty,
// ItemKey.MD4 => rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key) ?? string.Empty,
ItemKey.MD5 => rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) ?? string.Empty, ItemKey.MD5 => rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key) ?? string.Empty,
ItemKey.SHA1 => rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty, ItemKey.SHA1 => rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty,
ItemKey.SHA256 => rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty, ItemKey.SHA256 => rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty,
@@ -950,6 +966,8 @@ namespace SabreTools.DatFiles
_ => bucketBy switch _ => bucketBy switch
{ {
ItemKey.CRC => ZeroHash.CRC32Str, ItemKey.CRC => ZeroHash.CRC32Str,
// ItemKey.MD2 => ZeroHash.GetString(HashType.MD2),
// ItemKey.MD4 => ZeroHash.GetString(HashType.MD4),
ItemKey.MD5 => ZeroHash.MD5Str, ItemKey.MD5 => ZeroHash.MD5Str,
ItemKey.SHA1 => ZeroHash.SHA1Str, ItemKey.SHA1 => ZeroHash.SHA1Str,
ItemKey.SHA256 => ZeroHash.SHA256Str, ItemKey.SHA256 => ZeroHash.SHA256Str,

View File

@@ -162,6 +162,18 @@ namespace SabreTools.DatFiles
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, newItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey)); rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, newItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey));
} }
if (datItemFields.Contains(Models.Metadata.Rom.MD2Key))
{
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key)))
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key, newItem.GetStringFieldValue(Models.Metadata.Rom.MD2Key));
}
if (datItemFields.Contains(Models.Metadata.Rom.MD4Key))
{
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key)))
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key, newItem.GetStringFieldValue(Models.Metadata.Rom.MD4Key));
}
if (datItemFields.Contains(Models.Metadata.Rom.MD5Key)) if (datItemFields.Contains(Models.Metadata.Rom.MD5Key))
{ {
if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key))) if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)) && !string.IsNullOrEmpty(newItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key)))

View File

@@ -675,6 +675,8 @@ namespace SabreTools.DatItems.Test
datItem.SetFieldValue(DatItem.SourceKey, new Source(0)); datItem.SetFieldValue(DatItem.SourceKey, new Source(0));
datItem.SetFieldValue(DatItem.MachineKey, machine); datItem.SetFieldValue(DatItem.MachineKey, machine);
datItem.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.MD2Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.MD4Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.MD5Key, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.MD5Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.SHA1Key, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.SHA1Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.SHA256Key, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.SHA256Key, "DEADBEEF");
@@ -789,6 +791,8 @@ namespace SabreTools.DatItems.Test
DatItem datItem = new Rom(); DatItem datItem = new Rom();
datItem.SetFieldValue(DatItem.MachineKey, machine); datItem.SetFieldValue(DatItem.MachineKey, machine);
datItem.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.MD2Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.MD4Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.MD5Key, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.MD5Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.SHA1Key, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.SHA1Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.SHA256Key, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.SHA256Key, "DEADBEEF");

View File

@@ -198,6 +198,8 @@ namespace SabreTools.DatItems.Test
string filename = "XXXXXX"; string filename = "XXXXXX";
string date = "XXXXXX"; string date = "XXXXXX";
string crc = TextHelper.NormalizeCRC32("1234abcd")!; string crc = TextHelper.NormalizeCRC32("1234abcd")!;
string md2 = TextHelper.NormalizeMD2("1234abcd")!;
string md4 = TextHelper.NormalizeMD4("1234abcd")!;
string md5 = TextHelper.NormalizeMD5("1234abcd")!; string md5 = TextHelper.NormalizeMD5("1234abcd")!;
string sha1 = TextHelper.NormalizeSHA1("1234abcd")!; string sha1 = TextHelper.NormalizeSHA1("1234abcd")!;
string sha256 = TextHelper.NormalizeSHA256("1234abcd")!; string sha256 = TextHelper.NormalizeSHA256("1234abcd")!;
@@ -210,6 +212,8 @@ namespace SabreTools.DatItems.Test
Filename = filename, Filename = filename,
Date = date, Date = date,
CRC = crc.FromHexString(), CRC = crc.FromHexString(),
MD2 = md2.FromHexString(),
MD4 = md4.FromHexString(),
MD5 = md5.FromHexString(), MD5 = md5.FromHexString(),
SHA1 = sha1.FromHexString(), SHA1 = sha1.FromHexString(),
SHA256 = sha256.FromHexString(), SHA256 = sha256.FromHexString(),
@@ -224,6 +228,8 @@ namespace SabreTools.DatItems.Test
Assert.Equal(filename, actual.GetStringFieldValue(Models.Metadata.Rom.NameKey)); Assert.Equal(filename, actual.GetStringFieldValue(Models.Metadata.Rom.NameKey));
Assert.Equal(date, actual.GetStringFieldValue(Models.Metadata.Rom.DateKey)); Assert.Equal(date, actual.GetStringFieldValue(Models.Metadata.Rom.DateKey));
Assert.Equal(crc, actual.GetStringFieldValue(Models.Metadata.Rom.CRCKey)); Assert.Equal(crc, actual.GetStringFieldValue(Models.Metadata.Rom.CRCKey));
Assert.Equal(md2, actual.GetStringFieldValue(Models.Metadata.Rom.MD2Key));
Assert.Equal(md4, actual.GetStringFieldValue(Models.Metadata.Rom.MD4Key));
Assert.Equal(md5, actual.GetStringFieldValue(Models.Metadata.Rom.MD5Key)); Assert.Equal(md5, actual.GetStringFieldValue(Models.Metadata.Rom.MD5Key));
Assert.Equal(sha1, actual.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)); Assert.Equal(sha1, actual.GetStringFieldValue(Models.Metadata.Rom.SHA1Key));
Assert.Equal(sha256, actual.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)); Assert.Equal(sha256, actual.GetStringFieldValue(Models.Metadata.Rom.SHA256Key));
@@ -324,6 +330,8 @@ namespace SabreTools.DatItems.Test
string filename = "XXXXXX"; string filename = "XXXXXX";
string date = "XXXXXX"; string date = "XXXXXX";
string crc = TextHelper.NormalizeCRC32("1234abcd")!; string crc = TextHelper.NormalizeCRC32("1234abcd")!;
string md2 = TextHelper.NormalizeMD2("1234abcd")!;
string md4 = TextHelper.NormalizeMD4("1234abcd")!;
string md5 = TextHelper.NormalizeMD5("1234abcd")!; string md5 = TextHelper.NormalizeMD5("1234abcd")!;
string sha1 = TextHelper.NormalizeSHA1("1234abcd")!; string sha1 = TextHelper.NormalizeSHA1("1234abcd")!;
string sha256 = TextHelper.NormalizeSHA256("1234abcd")!; string sha256 = TextHelper.NormalizeSHA256("1234abcd")!;
@@ -336,6 +344,8 @@ namespace SabreTools.DatItems.Test
rom.SetFieldValue<string?>(Models.Metadata.Rom.NameKey, filename); rom.SetFieldValue<string?>(Models.Metadata.Rom.NameKey, filename);
rom.SetFieldValue<string?>(Models.Metadata.Rom.DateKey, date); rom.SetFieldValue<string?>(Models.Metadata.Rom.DateKey, date);
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, crc); rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, crc);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key, md2);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key, md4);
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, md5); rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, md5);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, sha1); rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, sha1);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, sha256); rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, sha256);
@@ -349,6 +359,8 @@ namespace SabreTools.DatItems.Test
Assert.Equal(filename, actual.Filename); Assert.Equal(filename, actual.Filename);
Assert.Equal(date, actual.Date); Assert.Equal(date, actual.Date);
Assert.Equal(crc, actual.CRC.ToHexString()); Assert.Equal(crc, actual.CRC.ToHexString());
Assert.Equal(md2, actual.MD2.ToHexString());
Assert.Equal(md4, actual.MD4.ToHexString());
Assert.Equal(md5, actual.MD5.ToHexString()); Assert.Equal(md5, actual.MD5.ToHexString());
Assert.Equal(sha1, actual.SHA1.ToHexString()); Assert.Equal(sha1, actual.SHA1.ToHexString());
Assert.Equal(sha256, actual.SHA256.ToHexString()); Assert.Equal(sha256, actual.SHA256.ToHexString());

View File

@@ -17,6 +17,8 @@ namespace SabreTools.DatItems.Test.Formats
self.FillMissingInformation(other); self.FillMissingInformation(other);
Assert.Null(self.GetStringFieldValue(Models.Metadata.Rom.CRCKey)); Assert.Null(self.GetStringFieldValue(Models.Metadata.Rom.CRCKey));
Assert.Null(self.GetStringFieldValue(Models.Metadata.Rom.MD2Key));
Assert.Null(self.GetStringFieldValue(Models.Metadata.Rom.MD4Key));
Assert.Null(self.GetStringFieldValue(Models.Metadata.Rom.MD5Key)); Assert.Null(self.GetStringFieldValue(Models.Metadata.Rom.MD5Key));
Assert.Null(self.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)); Assert.Null(self.GetStringFieldValue(Models.Metadata.Rom.SHA1Key));
Assert.Null(self.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)); Assert.Null(self.GetStringFieldValue(Models.Metadata.Rom.SHA256Key));
@@ -32,6 +34,8 @@ namespace SabreTools.DatItems.Test.Formats
Rom other = new Rom(); Rom other = new Rom();
other.SetFieldValue(Models.Metadata.Rom.CRCKey, "XXXXXX"); other.SetFieldValue(Models.Metadata.Rom.CRCKey, "XXXXXX");
other.SetFieldValue(Models.Metadata.Rom.MD2Key, "XXXXXX");
other.SetFieldValue(Models.Metadata.Rom.MD4Key, "XXXXXX");
other.SetFieldValue(Models.Metadata.Rom.MD5Key, "XXXXXX"); other.SetFieldValue(Models.Metadata.Rom.MD5Key, "XXXXXX");
other.SetFieldValue(Models.Metadata.Rom.SHA1Key, "XXXXXX"); other.SetFieldValue(Models.Metadata.Rom.SHA1Key, "XXXXXX");
other.SetFieldValue(Models.Metadata.Rom.SHA256Key, "XXXXXX"); other.SetFieldValue(Models.Metadata.Rom.SHA256Key, "XXXXXX");
@@ -42,6 +46,8 @@ namespace SabreTools.DatItems.Test.Formats
self.FillMissingInformation(other); self.FillMissingInformation(other);
Assert.Equal("XXXXXX", self.GetStringFieldValue(Models.Metadata.Rom.CRCKey)); Assert.Equal("XXXXXX", self.GetStringFieldValue(Models.Metadata.Rom.CRCKey));
Assert.Equal("XXXXXX", self.GetStringFieldValue(Models.Metadata.Rom.MD2Key));
Assert.Equal("XXXXXX", self.GetStringFieldValue(Models.Metadata.Rom.MD4Key));
Assert.Equal("XXXXXX", self.GetStringFieldValue(Models.Metadata.Rom.MD5Key)); Assert.Equal("XXXXXX", self.GetStringFieldValue(Models.Metadata.Rom.MD5Key));
Assert.Equal("XXXXXX", self.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)); Assert.Equal("XXXXXX", self.GetStringFieldValue(Models.Metadata.Rom.SHA1Key));
Assert.Equal("XXXXXX", self.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)); Assert.Equal("XXXXXX", self.GetStringFieldValue(Models.Metadata.Rom.SHA256Key));
@@ -73,6 +79,28 @@ namespace SabreTools.DatItems.Test.Formats
Assert.Equal($"_{hash}", actual); Assert.Equal($"_{hash}", actual);
} }
[Fact]
public void GetDuplicateSuffix_MD2()
{
string hash = "XXXXXX";
Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.MD2Key, hash);
string actual = self.GetDuplicateSuffix();
Assert.Equal($"_{hash}", actual);
}
[Fact]
public void GetDuplicateSuffix_MD4()
{
string hash = "XXXXXX";
Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.MD4Key, hash);
string actual = self.GetDuplicateSuffix();
Assert.Equal($"_{hash}", actual);
}
[Fact] [Fact]
public void GetDuplicateSuffix_MD5() public void GetDuplicateSuffix_MD5()
{ {
@@ -156,6 +184,44 @@ namespace SabreTools.DatItems.Test.Formats
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, "XXXXXX"); self.SetFieldValue(Models.Metadata.Rom.CRCKey, "XXXXXX");
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA384Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA512Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SpamSumKey, string.Empty);
bool actual = self.HasHashes();
Assert.True(actual);
}
[Fact]
public void HasHashes_MD2_True()
{
Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, "XXXXXX");
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA384Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA512Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SpamSumKey, string.Empty);
bool actual = self.HasHashes();
Assert.True(actual);
}
[Fact]
public void HasHashes_MD4_True()
{
Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, "XXXXXX");
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -172,6 +238,8 @@ namespace SabreTools.DatItems.Test.Formats
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty); self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, "XXXXXX"); self.SetFieldValue(Models.Metadata.Rom.MD5Key, "XXXXXX");
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -188,6 +256,8 @@ namespace SabreTools.DatItems.Test.Formats
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty); self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, "XXXXXX"); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, "XXXXXX");
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -204,6 +274,8 @@ namespace SabreTools.DatItems.Test.Formats
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty); self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, "XXXXXX"); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, "XXXXXX");
@@ -220,6 +292,8 @@ namespace SabreTools.DatItems.Test.Formats
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty); self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -236,6 +310,8 @@ namespace SabreTools.DatItems.Test.Formats
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty); self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -252,6 +328,8 @@ namespace SabreTools.DatItems.Test.Formats
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty); self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -268,6 +346,8 @@ namespace SabreTools.DatItems.Test.Formats
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, "XXXXXX"); self.SetFieldValue(Models.Metadata.Rom.CRCKey, "XXXXXX");
self.SetFieldValue(Models.Metadata.Rom.MD2Key, "XXXXXX");
self.SetFieldValue(Models.Metadata.Rom.MD4Key, "XXXXXX");
self.SetFieldValue(Models.Metadata.Rom.MD5Key, "XXXXXX"); self.SetFieldValue(Models.Metadata.Rom.MD5Key, "XXXXXX");
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, "XXXXXX"); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, "XXXXXX");
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, "XXXXXX"); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, "XXXXXX");
@@ -323,11 +403,49 @@ namespace SabreTools.DatItems.Test.Formats
Assert.True(actual); Assert.True(actual);
} }
[Fact]
public void HasZeroHash_ZeroMD2_True()
{
Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, ZeroHash.GetString(HashType.MD2));
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA384Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA512Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SpamSumKey, string.Empty);
bool actual = self.HasZeroHash();
Assert.True(actual);
}
[Fact]
public void HasZeroHash_ZeroMD4_True()
{
Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, ZeroHash.GetString(HashType.MD4));
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA384Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA512Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SpamSumKey, string.Empty);
bool actual = self.HasZeroHash();
Assert.True(actual);
}
[Fact] [Fact]
public void HasZeroHash_ZeroMD5_True() public void HasZeroHash_ZeroMD5_True()
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty); self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, ZeroHash.MD5Str); self.SetFieldValue(Models.Metadata.Rom.MD5Key, ZeroHash.MD5Str);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -344,6 +462,8 @@ namespace SabreTools.DatItems.Test.Formats
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty); self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, ZeroHash.SHA1Str); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, ZeroHash.SHA1Str);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -360,6 +480,8 @@ namespace SabreTools.DatItems.Test.Formats
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty); self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, ZeroHash.SHA256Str); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, ZeroHash.SHA256Str);
@@ -376,6 +498,8 @@ namespace SabreTools.DatItems.Test.Formats
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty); self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -392,6 +516,8 @@ namespace SabreTools.DatItems.Test.Formats
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty); self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -408,6 +534,8 @@ namespace SabreTools.DatItems.Test.Formats
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty); self.SetFieldValue(Models.Metadata.Rom.CRCKey, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD4Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -424,6 +552,8 @@ namespace SabreTools.DatItems.Test.Formats
{ {
Rom self = new Rom(); Rom self = new Rom();
self.SetFieldValue(Models.Metadata.Rom.CRCKey, ZeroHash.CRC32Str); self.SetFieldValue(Models.Metadata.Rom.CRCKey, ZeroHash.CRC32Str);
self.SetFieldValue(Models.Metadata.Rom.MD2Key, ZeroHash.GetString(HashType.MD2));
self.SetFieldValue(Models.Metadata.Rom.MD4Key, ZeroHash.GetString(HashType.MD4));
self.SetFieldValue(Models.Metadata.Rom.MD5Key, ZeroHash.MD5Str); self.SetFieldValue(Models.Metadata.Rom.MD5Key, ZeroHash.MD5Str);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, ZeroHash.SHA1Str); self.SetFieldValue(Models.Metadata.Rom.SHA1Key, ZeroHash.SHA1Str);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, ZeroHash.SHA256Str); self.SetFieldValue(Models.Metadata.Rom.SHA256Key, ZeroHash.SHA256Str);
@@ -483,6 +613,8 @@ namespace SabreTools.DatItems.Test.Formats
DatItem datItem = new Rom(); DatItem datItem = new Rom();
datItem.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.MD2Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.MD4Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.MD5Key, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.MD5Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.SHA1Key, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.SHA1Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.SHA256Key, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.SHA256Key, "DEADBEEF");
@@ -547,6 +679,8 @@ namespace SabreTools.DatItems.Test.Formats
DatItem datItem = new Rom(); DatItem datItem = new Rom();
datItem.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.MD2Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.MD4Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.MD5Key, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.MD5Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.SHA1Key, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.SHA1Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.SHA256Key, "DEADBEEF"); datItem.SetFieldValue(Models.Metadata.Rom.SHA256Key, "DEADBEEF");

View File

@@ -396,6 +396,14 @@ namespace SabreTools.DatItems
key = $"{sourceString}{machineString}"; key = $"{sourceString}{machineString}";
break; break;
// case ItemKey.MD2:
// key = ZeroHash.GetString(HashType.MD2);
// break;
// case ItemKey.MD4:
// key = ZeroHash.GetString(HashType.MD4);
// break;
case ItemKey.MD5: case ItemKey.MD5:
key = ZeroHash.MD5Str; key = ZeroHash.MD5Str;
break; break;
@@ -466,6 +474,14 @@ namespace SabreTools.DatItems
key = $"{sourceString}{machineString}"; key = $"{sourceString}{machineString}";
break; break;
// case ItemKey.MD2:
// key = ZeroHash.GetString(HashType.MD2);
// break;
// case ItemKey.MD4:
// key = ZeroHash.GetString(HashType.MD4);
// break;
case ItemKey.MD5: case ItemKey.MD5:
key = ZeroHash.MD5Str; key = ZeroHash.MD5Str;
break; break;

View File

@@ -137,6 +137,8 @@ namespace SabreTools.DatItems
rom.SetName(baseFile.Filename); rom.SetName(baseFile.Filename);
rom.SetFieldValue<string?>(Models.Metadata.Rom.DateKey, baseFile.Date); rom.SetFieldValue<string?>(Models.Metadata.Rom.DateKey, baseFile.Date);
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, baseFile.CRC.ToHexString()); rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, baseFile.CRC.ToHexString());
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD2Key, baseFile.MD2.ToHexString());
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD4Key, baseFile.MD4.ToHexString());
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, baseFile.MD5.ToHexString()); rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, baseFile.MD5.ToHexString());
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, baseFile.SHA1.ToHexString()); rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, baseFile.SHA1.ToHexString());
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, baseFile.SHA256.ToHexString()); rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, baseFile.SHA256.ToHexString());
@@ -243,6 +245,8 @@ namespace SabreTools.DatItems
Date = rom.GetStringFieldValue(Models.Metadata.Rom.DateKey), Date = rom.GetStringFieldValue(Models.Metadata.Rom.DateKey),
Size = NumberHelper.ConvertToInt64(rom.GetStringFieldValue(Models.Metadata.Rom.SizeKey)), Size = NumberHelper.ConvertToInt64(rom.GetStringFieldValue(Models.Metadata.Rom.SizeKey)),
CRC = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey).FromHexString(), CRC = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey).FromHexString(),
MD2 = rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key).FromHexString(),
MD4 = rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key).FromHexString(),
MD5 = rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key).FromHexString(), MD5 = rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key).FromHexString(),
SHA1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key).FromHexString(), SHA1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key).FromHexString(),
SHA256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key).FromHexString(), SHA256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key).FromHexString(),

View File

@@ -310,6 +310,8 @@ namespace SabreTools.DatItems
Machine, Machine,
CRC, CRC,
// MD2,
// MD4,
MD5, MD5,
SHA1, SHA1,
SHA256, SHA256,

View File

@@ -140,6 +140,14 @@ namespace SabreTools.DatItems.Formats
key = GetStringFieldValue(Models.Metadata.Rom.CRCKey); key = GetStringFieldValue(Models.Metadata.Rom.CRCKey);
break; break;
// case ItemKey.MD2:
// key = GetStringFieldValue(Models.Metadata.Rom.MD2Key);
// break;
// case ItemKey.MD4:
// key = GetStringFieldValue(Models.Metadata.Rom.MD4Key);
// break;
case ItemKey.MD5: case ItemKey.MD5:
key = GetStringFieldValue(Models.Metadata.Rom.MD5Key); key = GetStringFieldValue(Models.Metadata.Rom.MD5Key);
break; break;
@@ -190,6 +198,14 @@ namespace SabreTools.DatItems.Formats
key = GetStringFieldValue(Models.Metadata.Rom.CRCKey); key = GetStringFieldValue(Models.Metadata.Rom.CRCKey);
break; break;
// case ItemKey.MD2:
// key = GetStringFieldValue(Models.Metadata.Rom.MD2Key);
// break;
// case ItemKey.MD4:
// key = GetStringFieldValue(Models.Metadata.Rom.MD4Key);
// break;
case ItemKey.MD5: case ItemKey.MD5:
key = GetStringFieldValue(Models.Metadata.Rom.MD5Key); key = GetStringFieldValue(Models.Metadata.Rom.MD5Key);
break; break;

View File

@@ -224,6 +224,8 @@ namespace SabreTools.DatTools
[Models.Metadata.Rom.SHA256Key] = " (SHA-256)", [Models.Metadata.Rom.SHA256Key] = " (SHA-256)",
[Models.Metadata.Rom.SHA1Key] = " (SHA-1)", [Models.Metadata.Rom.SHA1Key] = " (SHA-1)",
[Models.Metadata.Rom.MD5Key] = " (MD5)", [Models.Metadata.Rom.MD5Key] = " (MD5)",
[Models.Metadata.Rom.MD4Key] = " (MD4)",
[Models.Metadata.Rom.MD2Key] = " (MD2)",
[Models.Metadata.Rom.CRCKey] = " (CRC)", [Models.Metadata.Rom.CRCKey] = " (CRC)",
["null"] = " (Other)", ["null"] = " (Other)",
}; };
@@ -296,6 +298,10 @@ namespace SabreTools.DatTools
fieldDats[Models.Metadata.Rom.SHA1Key].Items.Add(key, item); fieldDats[Models.Metadata.Rom.SHA1Key].Items.Add(key, item);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key))) else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)))
fieldDats[Models.Metadata.Rom.MD5Key].Items.Add(key, item); fieldDats[Models.Metadata.Rom.MD5Key].Items.Add(key, item);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key)))
fieldDats[Models.Metadata.Rom.MD4Key].Items.Add(key, item);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key)))
fieldDats[Models.Metadata.Rom.MD2Key].Items.Add(key, item);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey))) else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)))
fieldDats[Models.Metadata.Rom.CRCKey].Items.Add(key, item); fieldDats[Models.Metadata.Rom.CRCKey].Items.Add(key, item);
else else
@@ -335,6 +341,8 @@ namespace SabreTools.DatTools
[Models.Metadata.Rom.SHA256Key] = " (SHA-256)", [Models.Metadata.Rom.SHA256Key] = " (SHA-256)",
[Models.Metadata.Rom.SHA1Key] = " (SHA-1)", [Models.Metadata.Rom.SHA1Key] = " (SHA-1)",
[Models.Metadata.Rom.MD5Key] = " (MD5)", [Models.Metadata.Rom.MD5Key] = " (MD5)",
[Models.Metadata.Rom.MD4Key] = " (MD4)",
[Models.Metadata.Rom.MD2Key] = " (MD2)",
[Models.Metadata.Rom.CRCKey] = " (CRC)", [Models.Metadata.Rom.CRCKey] = " (CRC)",
["null"] = " (Other)", ["null"] = " (Other)",
}; };
@@ -370,6 +378,8 @@ namespace SabreTools.DatTools
_ = fieldDats[Models.Metadata.Rom.SHA256Key].ItemsDB.AddSource(source.Value); _ = fieldDats[Models.Metadata.Rom.SHA256Key].ItemsDB.AddSource(source.Value);
_ = fieldDats[Models.Metadata.Rom.SHA1Key].ItemsDB.AddSource(source.Value); _ = fieldDats[Models.Metadata.Rom.SHA1Key].ItemsDB.AddSource(source.Value);
_ = fieldDats[Models.Metadata.Rom.MD5Key].ItemsDB.AddSource(source.Value); _ = fieldDats[Models.Metadata.Rom.MD5Key].ItemsDB.AddSource(source.Value);
_ = fieldDats[Models.Metadata.Rom.MD4Key].ItemsDB.AddSource(source.Value);
_ = fieldDats[Models.Metadata.Rom.MD2Key].ItemsDB.AddSource(source.Value);
_ = fieldDats[Models.Metadata.Rom.CRCKey].ItemsDB.AddSource(source.Value); _ = fieldDats[Models.Metadata.Rom.CRCKey].ItemsDB.AddSource(source.Value);
_ = fieldDats["null"].ItemsDB.AddSource(source.Value); _ = fieldDats["null"].ItemsDB.AddSource(source.Value);
} }
@@ -383,6 +393,8 @@ namespace SabreTools.DatTools
_ = fieldDats[Models.Metadata.Rom.SHA256Key].ItemsDB.AddMachine(machine.Value); _ = fieldDats[Models.Metadata.Rom.SHA256Key].ItemsDB.AddMachine(machine.Value);
_ = fieldDats[Models.Metadata.Rom.SHA1Key].ItemsDB.AddMachine(machine.Value); _ = fieldDats[Models.Metadata.Rom.SHA1Key].ItemsDB.AddMachine(machine.Value);
_ = fieldDats[Models.Metadata.Rom.MD5Key].ItemsDB.AddMachine(machine.Value); _ = fieldDats[Models.Metadata.Rom.MD5Key].ItemsDB.AddMachine(machine.Value);
_ = fieldDats[Models.Metadata.Rom.MD4Key].ItemsDB.AddMachine(machine.Value);
_ = fieldDats[Models.Metadata.Rom.MD2Key].ItemsDB.AddMachine(machine.Value);
_ = fieldDats[Models.Metadata.Rom.CRCKey].ItemsDB.AddMachine(machine.Value); _ = fieldDats[Models.Metadata.Rom.CRCKey].ItemsDB.AddMachine(machine.Value);
_ = fieldDats["null"].ItemsDB.AddMachine(machine.Value); _ = fieldDats["null"].ItemsDB.AddMachine(machine.Value);
machineRemapping[machine.Key] = newMachineIndex; machineRemapping[machine.Key] = newMachineIndex;
@@ -441,6 +453,10 @@ namespace SabreTools.DatTools
fieldDats[Models.Metadata.Rom.SHA1Key].ItemsDB.AddItem(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false); fieldDats[Models.Metadata.Rom.SHA1Key].ItemsDB.AddItem(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key))) else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)))
fieldDats[Models.Metadata.Rom.MD5Key].ItemsDB.AddItem(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false); fieldDats[Models.Metadata.Rom.MD5Key].ItemsDB.AddItem(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key)))
fieldDats[Models.Metadata.Rom.MD4Key].ItemsDB.AddItem(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key)))
fieldDats[Models.Metadata.Rom.MD2Key].ItemsDB.AddItem(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false);
else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey))) else if (!string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)))
fieldDats[Models.Metadata.Rom.CRCKey].ItemsDB.AddItem(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false); fieldDats[Models.Metadata.Rom.CRCKey].ItemsDB.AddItem(item.Value, machineRemapping[machineIndex], sourceRemapping[sourceIndex], statsOnly: false);
else else

View File

@@ -29,6 +29,16 @@
/// </summary> /// </summary>
public byte[]? CRC { get; set; } public byte[]? CRC { get; set; }
/// <summary>
/// MD2 hash of the file
/// </summary>
public byte[]? MD2 { get; set; }
/// <summary>
/// MD4 hash of the file
/// </summary>
public byte[]? MD4 { get; set; }
/// <summary> /// <summary>
/// MD5 hash of the file /// MD5 hash of the file
/// </summary> /// </summary>

View File

@@ -96,6 +96,8 @@ namespace SabreTools.FileTypes
{ {
Size = size, Size = size,
CRC = hashDict.ContainsKey(HashType.CRC32) ? hashDict[HashType.CRC32].FromHexString() : null, CRC = hashDict.ContainsKey(HashType.CRC32) ? hashDict[HashType.CRC32].FromHexString() : null,
MD2 = hashDict.ContainsKey(HashType.MD2) ? hashDict[HashType.MD2].FromHexString() : null,
MD4 = hashDict.ContainsKey(HashType.MD4) ? hashDict[HashType.MD4].FromHexString() : null,
MD5 = hashDict.ContainsKey(HashType.MD5) ? hashDict[HashType.MD5].FromHexString() : null, MD5 = hashDict.ContainsKey(HashType.MD5) ? hashDict[HashType.MD5].FromHexString() : null,
SHA1 = hashDict.ContainsKey(HashType.SHA1) ? hashDict[HashType.SHA1].FromHexString() : null, SHA1 = hashDict.ContainsKey(HashType.SHA1) ? hashDict[HashType.SHA1].FromHexString() : null,
SHA256 = hashDict.ContainsKey(HashType.SHA256) ? hashDict[HashType.SHA256].FromHexString() : null, SHA256 = hashDict.ContainsKey(HashType.SHA256) ? hashDict[HashType.SHA256].FromHexString() : null,
@@ -125,6 +127,8 @@ namespace SabreTools.FileTypes
to.Date ??= from.Date; to.Date ??= from.Date;
to.Size ??= from.Size; to.Size ??= from.Size;
to.CRC ??= from.CRC; to.CRC ??= from.CRC;
to.MD2 ??= from.MD2;
to.MD4 ??= from.MD4;
to.MD5 ??= from.MD5; to.MD5 ??= from.MD5;
to.SHA1 ??= from.SHA1; to.SHA1 ??= from.SHA1;
to.SHA256 ??= from.SHA256; to.SHA256 ??= from.SHA256;

View File

@@ -471,7 +471,7 @@ namespace SabreTools.Features
new List<string>() { "-hs", "--hash" }, new List<string>() { "-hs", "--hash" },
"Split DAT(s) or folder by best-available hashes", "Split DAT(s) or folder by best-available hashes",
ParameterType.Flag, ParameterType.Flag,
longDescription: "For a DAT, or set of DATs, allow for splitting based on the best available hash for each file within. The order of preference for the outputted DATs is as follows: Nodump, SHA-512, SHA-384, SHA-256, SHA-1, MD5, CRC (or worse)."); longDescription: "For a DAT, or set of DATs, allow for splitting based on the best available hash for each file within. The order of preference for the outputted DATs is as follows: Nodump, SHA-512, SHA-384, SHA-256, SHA-1, MD5, MD4, MD2, CRC (or worse).");
} }
} }
@@ -503,6 +503,34 @@ namespace SabreTools.Features
} }
} }
internal const string IncludeMd2Value = "include-md2";
internal static Feature IncludeMd2Flag
{
get
{
return new Feature(
IncludeMd2Value,
new List<string>() { "-md2", "--include-md2" },
"Include MD2 in output",
ParameterType.Flag,
longDescription: "This enables MD2 calculation for each of the files. Adding this flag overrides the default hashing behavior of including CRC32, MD5, and SHA-1 hashes.");
}
}
internal const string IncludeMd4Value = "include-md4";
internal static Feature IncludeMd4Flag
{
get
{
return new Feature(
IncludeMd4Value,
new List<string>() { "-md4", "--include-md4" },
"Include MD4 in output",
ParameterType.Flag,
longDescription: "This enables MD4 calculation for each of the files. Adding this flag overrides the default hashing behavior of including CRC32, MD5, and SHA-1 hashes.");
}
}
internal const string IncludeMd5Value = "include-md5"; internal const string IncludeMd5Value = "include-md5";
internal static Feature IncludeMd5Flag internal static Feature IncludeMd5Flag
{ {
@@ -1312,6 +1340,8 @@ Possible values are:
lr, listrom - MAME Listrom lr, listrom - MAME Listrom
lx, listxml - MAME Listxml lx, listxml - MAME Listxml
miss, missfile - GoodTools Missfile miss, missfile - GoodTools Missfile
md2 - MD2
md4 - MD4
md5 - MD5 md5 - MD5
msx, openmsx - openMSX Software List msx, openmsx - openMSX Software List
ol, offlinelist - OfflineList XML ol, offlinelist - OfflineList XML
@@ -1634,6 +1664,8 @@ Some special strings that can be used:
- %publisher% - Replaced with game Publisher - %publisher% - Replaced with game Publisher
- %category% - Replaced with game Category - %category% - Replaced with game Category
- %crc% - Replaced with the CRC - %crc% - Replaced with the CRC
- %md2% - Replaced with the MD2
- %md4% - Replaced with the MD4
- %md5% - Replaced with the MD5 - %md5% - Replaced with the MD5
- %sha1% - Replaced with the SHA-1 - %sha1% - Replaced with the SHA-1
- %sha256% - Replaced with the SHA-256 - %sha256% - Replaced with the SHA-256
@@ -1662,6 +1694,8 @@ Some special strings that can be used:
- %publisher% - Replaced with game Publisher - %publisher% - Replaced with game Publisher
- %category% - Replaced with game Category - %category% - Replaced with game Category
- %crc% - Replaced with the CRC - %crc% - Replaced with the CRC
- %md2% - Replaced with the MD2
- %md4% - Replaced with the MD4
- %md5% - Replaced with the MD5 - %md5% - Replaced with the MD5
- %sha1% - Replaced with the SHA-1 - %sha1% - Replaced with the SHA-1
- %sha256% - Replaced with the SHA-256 - %sha256% - Replaced with the SHA-256
@@ -1903,6 +1937,10 @@ Some special strings that can be used:
if (GetBoolean(features, IncludeCrcValue)) if (GetBoolean(features, IncludeCrcValue))
includeInScan.Add(HashType.CRC32); includeInScan.Add(HashType.CRC32);
if (GetBoolean(features, IncludeMd2Value))
includeInScan.Add(HashType.MD2);
if (GetBoolean(features, IncludeMd4Value))
includeInScan.Add(HashType.MD4);
if (GetBoolean(features, IncludeMd5Value)) if (GetBoolean(features, IncludeMd5Value))
includeInScan.Add(HashType.MD5); includeInScan.Add(HashType.MD5);
if (GetBoolean(features, IncludeSha1Value)) if (GetBoolean(features, IncludeSha1Value))