Use SabreTools.Hashing for hash types

This commit is contained in:
Matt Nadareski
2024-04-03 21:56:21 -04:00
parent ff8dcd30a5
commit 4ed3880bad
5 changed files with 60 additions and 57 deletions

View File

@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using SabreTools.Hashing;
using SabreTools.Models.Hashfile;
using SabreTools.Serialization.Interfaces;
@@ -8,10 +9,10 @@ namespace SabreTools.Serialization.CrossModel
public partial class Hashfile : IModelSerializer<Models.Hashfile.Hashfile, Models.Metadata.MetadataFile>
{
/// <inheritdoc/>
public Models.Hashfile.Hashfile? Deserialize(Models.Metadata.MetadataFile? obj) => Deserialize(obj, Hash.CRC);
public Models.Hashfile.Hashfile? Deserialize(Models.Metadata.MetadataFile? obj) => Deserialize(obj, HashType.CRC32);
/// <inheritdoc/>
public Models.Hashfile.Hashfile? Deserialize(Models.Metadata.MetadataFile? obj, Hash hash)
public Models.Hashfile.Hashfile? Deserialize(Models.Metadata.MetadataFile? obj, HashType hash)
{
if (obj == null)
return null;
@@ -73,7 +74,7 @@ namespace SabreTools.Serialization.CrossModel
/// <summary>
/// Convert from <cref="Models.Metadata.MetadataFile"/> to an array of <cref="Models.Hashfile.Hashfile"/>
/// </summary>
public static Models.Hashfile.Hashfile[]? ConvertArrayFromInternalModel(Models.Metadata.MetadataFile? item, Hash hash)
public static Models.Hashfile.Hashfile[]? ConvertArrayFromInternalModel(Models.Metadata.MetadataFile? item, HashType hash)
{
if (item == null)
return null;
@@ -93,7 +94,7 @@ namespace SabreTools.Serialization.CrossModel
/// <summary>
/// Convert from <cref="Models.Metadata.Machine"/> to <cref="Models.Hashfile.Hashfile"/>
/// </summary>
private static Models.Hashfile.Hashfile ConvertMachineFromInternalModel(Models.Metadata.Machine item, Hash hash)
private static Models.Hashfile.Hashfile ConvertMachineFromInternalModel(Models.Metadata.Machine item, HashType hash)
{
var roms = item.Read<Models.Metadata.Rom[]>(Models.Metadata.Machine.RomKey);
if (roms == null)
@@ -101,43 +102,43 @@ namespace SabreTools.Serialization.CrossModel
return new Models.Hashfile.Hashfile
{
SFV = hash == Hash.CRC
SFV = hash == HashType.CRC32 || hash == HashType.CRC32_ISO || hash == HashType.CRC32_Naive || hash == HashType.CRC32_Optimized || hash == HashType.CRC32_Parallel
? roms
.Where(r => r != null)
.Select(ConvertToSFV)
.ToArray()
: null,
MD5 = hash == Hash.MD5
MD5 = hash == HashType.MD5
? roms
.Where(r => r != null)
.Select(ConvertToMD5)
.ToArray()
: null,
SHA1 = hash == Hash.SHA1
SHA1 = hash == HashType.SHA1
? roms
.Where(r => r != null)
.Select(ConvertToSHA1)
.ToArray()
: null,
SHA256 = hash == Hash.SHA256
SHA256 = hash == HashType.SHA256
? roms
.Where(r => r != null)
.Select(ConvertToSHA256)
.ToArray()
: null,
SHA384 = hash == Hash.SHA384
SHA384 = hash == HashType.SHA384
? roms
.Where(r => r != null)
.Select(ConvertToSHA384)
.ToArray()
: null,
SHA512 = hash == Hash.SHA512
SHA512 = hash == HashType.SHA512
? roms
.Where(r => r != null)
.Select(ConvertToSHA512)
.ToArray()
: null,
SpamSum = hash == Hash.SpamSum
SpamSum = hash == HashType.SpamSum
? roms
.Where(r => r != null)
.Select(ConvertToSpamSum)

View File

@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using SabreTools.Hashing;
using SabreTools.Models.Hashfile;
using SabreTools.Serialization.Interfaces;
@@ -15,7 +16,7 @@ namespace SabreTools.Serialization.Deserializers
#region IFileDeserializer
/// <inheritdoc cref="IFileDeserializer.Deserialize(string?)"/>
public static Models.Hashfile.Hashfile? DeserializeFile(string? path, Hash hash = Hash.CRC)
public static Models.Hashfile.Hashfile? DeserializeFile(string? path, HashType hash = HashType.CRC32)
{
var deserializer = new Hashfile();
return deserializer.Deserialize(path, hash);
@@ -23,10 +24,10 @@ namespace SabreTools.Serialization.Deserializers
/// <inheritdoc/>
public Models.Hashfile.Hashfile? Deserialize(string? path)
=> Deserialize(path, Hash.CRC);
=> Deserialize(path, HashType.CRC32);
/// <inheritdoc/>
public Models.Hashfile.Hashfile? Deserialize(string? path, Hash hash)
public Models.Hashfile.Hashfile? Deserialize(string? path, HashType hash)
{
using var stream = PathProcessor.OpenStream(path);
return DeserializeStream(stream, hash);
@@ -37,7 +38,7 @@ namespace SabreTools.Serialization.Deserializers
#region IStreamDeserializer
/// <inheritdoc cref="IStreamDeserializer.Deserialize(Stream?)"/>
public static Models.Hashfile.Hashfile? DeserializeStream(Stream? data, Hash hash = Hash.CRC)
public static Models.Hashfile.Hashfile? DeserializeStream(Stream? data, HashType hash = HashType.CRC32)
{
var deserializer = new Hashfile();
return deserializer.Deserialize(data, hash);
@@ -45,10 +46,10 @@ namespace SabreTools.Serialization.Deserializers
/// <inheritdoc/>
public Models.Hashfile.Hashfile? Deserialize(Stream? data)
=> Deserialize(data, Hash.CRC);
=> Deserialize(data, HashType.CRC32);
/// <inheritdoc cref="Deserialize(Stream)"/>
public Models.Hashfile.Hashfile? Deserialize(Stream? data, Hash hash)
public Models.Hashfile.Hashfile? Deserialize(Stream? data, HashType hash)
{
// If the stream is null
if (data == null)
@@ -76,7 +77,11 @@ namespace SabreTools.Serialization.Deserializers
// Parse the line into a hash
switch (hash)
{
case Hash.CRC:
case HashType.CRC32:
case HashType.CRC32_ISO:
case HashType.CRC32_Naive:
case HashType.CRC32_Optimized:
case HashType.CRC32_Parallel:
var sfv = new SFV
{
#if NETFRAMEWORK
@@ -89,7 +94,7 @@ namespace SabreTools.Serialization.Deserializers
};
hashes.Add(sfv);
break;
case Hash.MD5:
case HashType.MD5:
var md5 = new MD5
{
Hash = lineParts[0],
@@ -101,7 +106,7 @@ namespace SabreTools.Serialization.Deserializers
};
hashes.Add(md5);
break;
case Hash.SHA1:
case HashType.SHA1:
var sha1 = new SHA1
{
Hash = lineParts[0],
@@ -113,7 +118,7 @@ namespace SabreTools.Serialization.Deserializers
};
hashes.Add(sha1);
break;
case Hash.SHA256:
case HashType.SHA256:
var sha256 = new SHA256
{
Hash = lineParts[0],
@@ -125,7 +130,7 @@ namespace SabreTools.Serialization.Deserializers
};
hashes.Add(sha256);
break;
case Hash.SHA384:
case HashType.SHA384:
var sha384 = new SHA384
{
Hash = lineParts[0],
@@ -137,7 +142,7 @@ namespace SabreTools.Serialization.Deserializers
};
hashes.Add(sha384);
break;
case Hash.SHA512:
case HashType.SHA512:
var sha512 = new SHA512
{
Hash = lineParts[0],
@@ -149,7 +154,7 @@ namespace SabreTools.Serialization.Deserializers
};
hashes.Add(sha512);
break;
case Hash.SpamSum:
case HashType.SpamSum:
var spamSum = new SpamSum
{
Hash = lineParts[0],
@@ -167,25 +172,29 @@ namespace SabreTools.Serialization.Deserializers
// Assign the hashes to the hashfile and return
switch (hash)
{
case Hash.CRC:
case HashType.CRC32:
case HashType.CRC32_ISO:
case HashType.CRC32_Naive:
case HashType.CRC32_Optimized:
case HashType.CRC32_Parallel:
dat.SFV = hashes.Cast<SFV>().ToArray();
break;
case Hash.MD5:
case HashType.MD5:
dat.MD5 = hashes.Cast<MD5>().ToArray();
break;
case Hash.SHA1:
case HashType.SHA1:
dat.SHA1 = hashes.Cast<SHA1>().ToArray();
break;
case Hash.SHA256:
case HashType.SHA256:
dat.SHA256 = hashes.Cast<SHA256>().ToArray();
break;
case Hash.SHA384:
case HashType.SHA384:
dat.SHA384 = hashes.Cast<SHA384>().ToArray();
break;
case Hash.SHA512:
case HashType.SHA512:
dat.SHA512 = hashes.Cast<SHA512>().ToArray();
break;
case Hash.SpamSum:
case HashType.SpamSum:
dat.SpamSum = hashes.Cast<SpamSum>().ToArray();
break;
}

View File

@@ -1,13 +0,0 @@
namespace SabreTools.Serialization
{
public enum Hash
{
CRC,
MD5,
SHA1,
SHA256,
SHA384,
SHA512,
SpamSum,
}
}

View File

@@ -28,6 +28,7 @@
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="SabreTools.Hashing" Version="1.2.0" />
<PackageReference Include="SabreTools.IO" Version="1.3.3" />
<PackageReference Include="SabreTools.Models" Version="1.4.1" />
</ItemGroup>

View File

@@ -2,6 +2,7 @@ using System;
using System.IO;
using System.Linq;
using System.Text;
using SabreTools.Hashing;
using SabreTools.IO.Writers;
using SabreTools.Models.Hashfile;
using SabreTools.Serialization.Interfaces;
@@ -16,7 +17,7 @@ namespace SabreTools.Serialization.Serializers
#region IFileSerializer
/// <inheritdoc cref="IFileSerializer.Serialize(T?, string?)"/>
public static bool SerializeFile(Models.Hashfile.Hashfile? obj, string? path, Hash hash = Hash.CRC)
public static bool SerializeFile(Models.Hashfile.Hashfile? obj, string? path, HashType hash = HashType.CRC32)
{
var serializer = new Hashfile();
return serializer.Serialize(obj, path, hash);
@@ -24,10 +25,10 @@ namespace SabreTools.Serialization.Serializers
/// <inheritdoc/>
public bool Serialize(Models.Hashfile.Hashfile? obj, string? path)
=> Serialize(obj, path, Hash.CRC);
=> Serialize(obj, path, HashType.CRC32);
/// <inheritdoc/>
public bool Serialize(Models.Hashfile.Hashfile? obj, string? path, Hash hash)
public bool Serialize(Models.Hashfile.Hashfile? obj, string? path, HashType hash)
{
if (string.IsNullOrEmpty(path))
return false;
@@ -46,7 +47,7 @@ namespace SabreTools.Serialization.Serializers
#region IStreamSerializer
/// <inheritdoc cref="IStreamSerializer.Serialize(T?)"/>
public static Stream? SerializeStream(Models.Hashfile.Hashfile? obj, Hash hash = Hash.CRC)
public static Stream? SerializeStream(Models.Hashfile.Hashfile? obj, HashType hash = HashType.CRC32)
{
var serializer = new Hashfile();
return serializer.Serialize(obj, hash);
@@ -54,10 +55,10 @@ namespace SabreTools.Serialization.Serializers
/// <inheritdoc/>
public Stream? Serialize(Models.Hashfile.Hashfile? obj)
=> Serialize(obj, Hash.CRC);
=> Serialize(obj, HashType.CRC32);
/// <inheritdoc/>
public Stream? Serialize(Models.Hashfile.Hashfile? obj, Hash hash)
public Stream? Serialize(Models.Hashfile.Hashfile? obj, HashType hash)
{
// If the metadata file is null
if (obj == null)
@@ -75,25 +76,29 @@ namespace SabreTools.Serialization.Serializers
// Write out the items, if they exist
switch (hash)
{
case Hash.CRC:
case HashType.CRC32:
case HashType.CRC32_ISO:
case HashType.CRC32_Naive:
case HashType.CRC32_Optimized:
case HashType.CRC32_Parallel:
WriteSFV(obj.SFV, writer);
break;
case Hash.MD5:
case HashType.MD5:
WriteMD5(obj.MD5, writer);
break;
case Hash.SHA1:
case HashType.SHA1:
WriteSHA1(obj.SHA1, writer);
break;
case Hash.SHA256:
case HashType.SHA256:
WriteSHA256(obj.SHA256, writer);
break;
case Hash.SHA384:
case HashType.SHA384:
WriteSHA384(obj.SHA384, writer);
break;
case Hash.SHA512:
case HashType.SHA512:
WriteSHA512(obj.SHA512, writer);
break;
case Hash.SpamSum:
case HashType.SpamSum:
WriteSpamSum(obj.SpamSum, writer);
break;
default: