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

View File

@@ -35,6 +35,54 @@ namespace SabreTools.Core.Test.Tools
#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
[Theory]

View File

@@ -319,7 +319,8 @@ namespace SabreTools.Core
string? otherSha1 = other.ReadString(Disk.SHA1Key);
bool conditionalSha1 = Tools.Utilities.ConditionalHashEquals(selfSha1, otherSha1);
return conditionalMd5 && conditionalSha1;
return conditionalMd5
&& conditionalSha1;
}
/// <summary>
@@ -352,7 +353,10 @@ namespace SabreTools.Core
string? otherSpamSum = other.ReadString(Media.SpamSumKey);
bool conditionalSpamSum = Tools.Utilities.ConditionalHashEquals(selfSpamSum, otherSpamSum);
return conditionalMd5 && conditionalSha1 && conditionalSha256 && conditionalSpamSum;
return conditionalMd5
&& conditionalSha1
&& conditionalSha256
&& conditionalSpamSum;
}
/// <summary>
@@ -373,6 +377,14 @@ namespace SabreTools.Core
string? otherCrc = other.ReadString(Rom.CRCKey);
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? otherMd5 = other.ReadString(Rom.MD5Key);
bool conditionalMd5 = Tools.Utilities.ConditionalHashEquals(selfMd5, otherMd5);
@@ -397,7 +409,15 @@ namespace SabreTools.Core
string? otherSpamSum = other.ReadString(Rom.SpamSumKey);
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>
@@ -439,7 +459,8 @@ namespace SabreTools.Core
bool sha1Null = string.IsNullOrEmpty(self.ReadString(Disk.SHA1Key));
sha1Null ^= string.IsNullOrEmpty(other.ReadString(Disk.SHA1Key));
return !md5Null || !sha1Null;
return !md5Null
|| !sha1Null;
}
/// <summary>
@@ -459,7 +480,10 @@ namespace SabreTools.Core
bool spamsumNull = string.IsNullOrEmpty(self.ReadString(Media.SpamSumKey));
spamsumNull ^= string.IsNullOrEmpty(other.ReadString(Media.SpamSumKey));
return !md5Null || !sha1Null || !sha256Null || !spamsumNull;
return !md5Null
|| !sha1Null
|| !sha256Null
|| !spamsumNull;
}
/// <summary>
@@ -470,6 +494,12 @@ namespace SabreTools.Core
bool crcNull = string.IsNullOrEmpty(self.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));
md5Null ^= string.IsNullOrEmpty(other.ReadString(Rom.MD5Key));
@@ -488,7 +518,15 @@ namespace SabreTools.Core
bool spamsumNull = string.IsNullOrEmpty(self.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>
@@ -499,7 +537,8 @@ namespace SabreTools.Core
bool md5Null = string.IsNullOrEmpty(disk.ReadString(Disk.MD5Key));
bool sha1Null = string.IsNullOrEmpty(disk.ReadString(Disk.SHA1Key));
return !md5Null || !sha1Null;
return !md5Null
|| !sha1Null;
}
/// <summary>
@@ -512,7 +551,10 @@ namespace SabreTools.Core
bool sha256Null = string.IsNullOrEmpty(media.ReadString(Media.SHA256Key));
bool spamsumNull = string.IsNullOrEmpty(media.ReadString(Media.SpamSumKey));
return !md5Null || !sha1Null || !sha256Null || !spamsumNull;
return !md5Null
|| !sha1Null
|| !sha256Null
|| !spamsumNull;
}
/// <summary>
@@ -521,6 +563,8 @@ namespace SabreTools.Core
private static bool HasHashes(this Rom rom)
{
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 sha1Null = string.IsNullOrEmpty(rom.ReadString(Rom.SHA1Key));
bool sha256Null = string.IsNullOrEmpty(rom.ReadString(Rom.SHA256Key));
@@ -528,7 +572,15 @@ namespace SabreTools.Core
bool sha512Null = string.IsNullOrEmpty(rom.ReadString(Rom.SHA512Key));
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>
@@ -542,7 +594,8 @@ namespace SabreTools.Core
string? sha1 = disk.ReadString(Disk.SHA1Key);
bool sha1Null = string.IsNullOrEmpty(sha1) || string.Equals(sha1, ZeroHash.SHA1Str, StringComparison.OrdinalIgnoreCase);
return md5Null && sha1Null;
return md5Null
&& sha1Null;
}
/// <summary>
@@ -562,7 +615,10 @@ namespace SabreTools.Core
string? spamsum = media.ReadString(Media.SpamSumKey);
bool spamsumNull = string.IsNullOrEmpty(spamsum) || string.Equals(spamsum, ZeroHash.SpamSumStr, StringComparison.OrdinalIgnoreCase);
return md5Null && sha1Null && sha256Null && spamsumNull;
return md5Null
&& sha1Null
&& sha256Null
&& spamsumNull;
}
/// <summary>
@@ -573,6 +629,12 @@ namespace SabreTools.Core
string? crc = rom.ReadString(Rom.CRCKey);
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);
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);
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
@@ -686,6 +756,16 @@ namespace SabreTools.Core
if (string.IsNullOrEmpty(selfCrc) && !string.IsNullOrEmpty(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? otherMd5 = other.ReadString(Rom.MD5Key);
if (string.IsNullOrEmpty(selfMd5) && !string.IsNullOrEmpty(otherMd5))
@@ -787,6 +867,14 @@ namespace SabreTools.Core
if (!string.IsNullOrEmpty(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);
if (!string.IsNullOrEmpty(md5))
return $"_{md5}";

View File

@@ -185,6 +185,16 @@ Features and Options:
overrides the default hashing behavior of including CRC32, MD5, and
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
This enables MD5 calculation for each of the files. Adding this flag
overrides the default hashing behavior of including CRC32, MD5, and
@@ -248,6 +258,8 @@ Features and Options:
lr, listrom - MAME Listrom
lx, listxml - MAME Listxml
miss, missfile - GoodTools Missfile
md2 - MD2
md4 - MD4
md5 - MD5
msx, openmsx - openMSX Software List
ol, offlinelist - OfflineList XML
@@ -559,6 +571,8 @@ Features and Options:
lr, listrom - MAME Listrom
lx, listxml - MAME Listxml
miss, missfile - GoodTools Missfile
md2 - MD2
md4 - MD4
md5 - MD5
msx, openmsx - openMSX Software List
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
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).
SHA-1, MD5, MD4, MD2, CRC (or worse).
-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
@@ -724,6 +738,8 @@ Features and Options:
lr, listrom - MAME Listrom
lx, listxml - MAME Listxml
miss, missfile - GoodTools Missfile
md2 - MD2
md4 - MD4
md5 - MD5
msx, openmsx - openMSX Software List
ol, offlinelist - OfflineList XML
@@ -755,6 +771,8 @@ Features and Options:
- %publisher% - Replaced with game Publisher
- %category% - Replaced with game Category
- %crc% - Replaced with the CRC
- %md2% - Replaced with the MD2
- %md4% - Replaced with the MD4
- %md5% - Replaced with the MD5
- %sha1% - Replaced with the SHA-1
- %sha256% - Replaced with the SHA-256

View File

@@ -33,6 +33,20 @@ namespace SabreTools.Core.Tools
public static string? NormalizeCRC32(string? hash)
=> 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>
/// Normalize a MD5 string and pad to the correct size
/// </summary>

View File

@@ -978,6 +978,10 @@ namespace SabreTools.DatFiles
datItem.SetFieldValue<string?>(Models.Metadata.Rom.SizeKey, datItem.GetInt64FieldValue(Models.Metadata.Rom.SizeKey).ToString());
if (datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null)
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)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key)));
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());
if (romItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null)
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)
romItem.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(romItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key)));
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());
if (datItem.GetStringFieldValue(Models.Metadata.Rom.CRCKey) != null)
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)
datItem.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.NormalizeMD5(datItem.GetStringFieldValue(Models.Metadata.Rom.MD5Key)));
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,
name = item.GetName() ?? type.AsEnumValue<ItemType>().AsStringValue() ?? string.Empty,
crc = string.Empty,
md2 = string.Empty,
md4 = string.Empty,
md5 = string.Empty,
sha1 = string.Empty,
sha256 = string.Empty,
@@ -260,6 +262,8 @@ namespace SabreTools.DatFiles
else if (item is Rom rom)
{
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;
sha1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty;
sha256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty;
@@ -278,6 +282,8 @@ namespace SabreTools.DatFiles
.Replace("%publisher%", publisher)
.Replace("%category%", category)
.Replace("%crc%", crc)
.Replace("%md2%", md2)
.Replace("%md4%", md4)
.Replace("%md5%", md5)
.Replace("%sha1%", sha1)
.Replace("%sha256%", sha256)
@@ -311,6 +317,8 @@ namespace SabreTools.DatFiles
category = machine.Value.GetStringFieldValue(Models.Metadata.Machine.CategoryKey) ?? string.Empty,
name = item.Value.GetName() ?? type.AsEnumValue<ItemType>().AsStringValue() ?? string.Empty,
crc = string.Empty,
md2 = string.Empty,
md4 = string.Empty,
md5 = string.Empty,
sha1 = string.Empty,
sha256 = string.Empty,
@@ -352,6 +360,8 @@ namespace SabreTools.DatFiles
else if (item.Value is Rom rom)
{
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;
sha1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty;
sha256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty;
@@ -370,6 +380,8 @@ namespace SabreTools.DatFiles
.Replace("%publisher%", publisher)
.Replace("%category%", category)
.Replace("%crc%", crc)
.Replace("%md2%", md2)
.Replace("%md4%", md4)
.Replace("%md5%", md5)
.Replace("%sha1%", sha1)
.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.CRCKey,
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.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? ZeroHash.MD5Str : null);
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.CRCKey,
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.GetStringFieldValue(Models.Metadata.Rom.MD5Key) == "null" ? ZeroHash.MD5Str : null);
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key,

View File

@@ -145,6 +145,8 @@ namespace SabreTools.DatFiles
{
TotalSize += rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) ?? 0;
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.SHA1, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) ? 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;
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.SHA1, string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)) ? 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;
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:
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.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.SHA1Key, ZeroHash.SHA1Str);
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))
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
else
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.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.SHA1Key, ZeroHash.SHA1Str);
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))
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
else
return ItemKey.CRC;
@@ -917,6 +927,8 @@ namespace SabreTools.DatFiles
Disk disk => bucketBy switch
{
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.SHA1 => disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key) ?? string.Empty,
ItemKey.SHA256 => ZeroHash.SHA256Str,
@@ -928,6 +940,8 @@ namespace SabreTools.DatFiles
Media media => bucketBy switch
{
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.SHA1 => media.GetStringFieldValue(Models.Metadata.Media.SHA1Key) ?? string.Empty,
ItemKey.SHA256 => media.GetStringFieldValue(Models.Metadata.Media.SHA256Key) ?? string.Empty,
@@ -939,6 +953,8 @@ namespace SabreTools.DatFiles
Rom rom => bucketBy switch
{
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.SHA1 => rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key) ?? string.Empty,
ItemKey.SHA256 => rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key) ?? string.Empty,
@@ -950,6 +966,8 @@ namespace SabreTools.DatFiles
_ => bucketBy switch
{
ItemKey.CRC => ZeroHash.CRC32Str,
// ItemKey.MD2 => ZeroHash.GetString(HashType.MD2),
// ItemKey.MD4 => ZeroHash.GetString(HashType.MD4),
ItemKey.MD5 => ZeroHash.MD5Str,
ItemKey.SHA1 => ZeroHash.SHA1Str,
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));
}
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 (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.MachineKey, machine);
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.SHA1Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.SHA256Key, "DEADBEEF");
@@ -789,6 +791,8 @@ namespace SabreTools.DatItems.Test
DatItem datItem = new Rom();
datItem.SetFieldValue(DatItem.MachineKey, machine);
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.SHA1Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.SHA256Key, "DEADBEEF");

View File

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

View File

@@ -17,6 +17,8 @@ namespace SabreTools.DatItems.Test.Formats
self.FillMissingInformation(other);
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.SHA1Key));
Assert.Null(self.GetStringFieldValue(Models.Metadata.Rom.SHA256Key));
@@ -32,6 +34,8 @@ namespace SabreTools.DatItems.Test.Formats
Rom other = new Rom();
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.SHA1Key, "XXXXXX");
other.SetFieldValue(Models.Metadata.Rom.SHA256Key, "XXXXXX");
@@ -42,6 +46,8 @@ namespace SabreTools.DatItems.Test.Formats
self.FillMissingInformation(other);
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.SHA1Key));
Assert.Equal("XXXXXX", self.GetStringFieldValue(Models.Metadata.Rom.SHA256Key));
@@ -73,6 +79,28 @@ namespace SabreTools.DatItems.Test.Formats
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]
public void GetDuplicateSuffix_MD5()
{
@@ -156,6 +184,44 @@ namespace SabreTools.DatItems.Test.Formats
{
Rom self = new Rom();
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.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -172,6 +238,8 @@ namespace SabreTools.DatItems.Test.Formats
{
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, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, "XXXXXX");
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -188,6 +256,8 @@ namespace SabreTools.DatItems.Test.Formats
{
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, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, "XXXXXX");
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -204,6 +274,8 @@ namespace SabreTools.DatItems.Test.Formats
{
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, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, "XXXXXX");
@@ -220,6 +292,8 @@ namespace SabreTools.DatItems.Test.Formats
{
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, 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);
@@ -236,6 +310,8 @@ namespace SabreTools.DatItems.Test.Formats
{
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, 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);
@@ -252,6 +328,8 @@ namespace SabreTools.DatItems.Test.Formats
{
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, 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);
@@ -268,6 +346,8 @@ namespace SabreTools.DatItems.Test.Formats
{
Rom self = new Rom();
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.SHA1Key, "XXXXXX");
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, "XXXXXX");
@@ -323,11 +403,49 @@ namespace SabreTools.DatItems.Test.Formats
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]
public void HasZeroHash_ZeroMD5_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, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, ZeroHash.MD5Str);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -344,6 +462,8 @@ namespace SabreTools.DatItems.Test.Formats
{
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, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, ZeroHash.SHA1Str);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, string.Empty);
@@ -360,6 +480,8 @@ namespace SabreTools.DatItems.Test.Formats
{
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, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.MD5Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA1Key, string.Empty);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, ZeroHash.SHA256Str);
@@ -376,6 +498,8 @@ namespace SabreTools.DatItems.Test.Formats
{
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, 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);
@@ -392,6 +516,8 @@ namespace SabreTools.DatItems.Test.Formats
{
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, 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);
@@ -408,6 +534,8 @@ namespace SabreTools.DatItems.Test.Formats
{
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, 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);
@@ -424,6 +552,8 @@ namespace SabreTools.DatItems.Test.Formats
{
Rom self = new Rom();
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.SHA1Key, ZeroHash.SHA1Str);
self.SetFieldValue(Models.Metadata.Rom.SHA256Key, ZeroHash.SHA256Str);
@@ -483,6 +613,8 @@ namespace SabreTools.DatItems.Test.Formats
DatItem datItem = new Rom();
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.SHA1Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.SHA256Key, "DEADBEEF");
@@ -547,6 +679,8 @@ namespace SabreTools.DatItems.Test.Formats
DatItem datItem = new Rom();
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.SHA1Key, "DEADBEEF");
datItem.SetFieldValue(Models.Metadata.Rom.SHA256Key, "DEADBEEF");

View File

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

View File

@@ -137,6 +137,8 @@ namespace SabreTools.DatItems
rom.SetName(baseFile.Filename);
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.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.SHA1Key, baseFile.SHA1.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),
Size = NumberHelper.ConvertToInt64(rom.GetStringFieldValue(Models.Metadata.Rom.SizeKey)),
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(),
SHA1 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key).FromHexString(),
SHA256 = rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key).FromHexString(),

View File

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

View File

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

View File

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

View File

@@ -29,6 +29,16 @@
/// </summary>
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>
/// MD5 hash of the file
/// </summary>

View File

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

View File

@@ -471,7 +471,7 @@ namespace SabreTools.Features
new List<string>() { "-hs", "--hash" },
"Split DAT(s) or folder by best-available hashes",
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 static Feature IncludeMd5Flag
{
@@ -1312,6 +1340,8 @@ Possible values are:
lr, listrom - MAME Listrom
lx, listxml - MAME Listxml
miss, missfile - GoodTools Missfile
md2 - MD2
md4 - MD4
md5 - MD5
msx, openmsx - openMSX Software List
ol, offlinelist - OfflineList XML
@@ -1634,6 +1664,8 @@ Some special strings that can be used:
- %publisher% - Replaced with game Publisher
- %category% - Replaced with game Category
- %crc% - Replaced with the CRC
- %md2% - Replaced with the MD2
- %md4% - Replaced with the MD4
- %md5% - Replaced with the MD5
- %sha1% - Replaced with the SHA-1
- %sha256% - Replaced with the SHA-256
@@ -1662,6 +1694,8 @@ Some special strings that can be used:
- %publisher% - Replaced with game Publisher
- %category% - Replaced with game Category
- %crc% - Replaced with the CRC
- %md2% - Replaced with the MD2
- %md4% - Replaced with the MD4
- %md5% - Replaced with the MD5
- %sha1% - Replaced with the SHA-1
- %sha256% - Replaced with the SHA-256
@@ -1903,6 +1937,10 @@ Some special strings that can be used:
if (GetBoolean(features, IncludeCrcValue))
includeInScan.Add(HashType.CRC32);
if (GetBoolean(features, IncludeMd2Value))
includeInScan.Add(HashType.MD2);
if (GetBoolean(features, IncludeMd4Value))
includeInScan.Add(HashType.MD4);
if (GetBoolean(features, IncludeMd5Value))
includeInScan.Add(HashType.MD5);
if (GetBoolean(features, IncludeSha1Value))