Reuse ISO hash if searching redump

This commit is contained in:
Deterous
2024-02-16 11:11:51 +09:00
parent b862057123
commit 6e529f0050
3 changed files with 7 additions and 4 deletions
+3 -1
View File
@@ -843,11 +843,13 @@ namespace IRDKit
// Compute CRC32 hash // Compute CRC32 hash
byte[] crc32; byte[] crc32;
uint crc32UInt;
using (FileStream fs = File.OpenRead(isoPath)) using (FileStream fs = File.OpenRead(isoPath))
{ {
Crc32 hasher = new(); Crc32 hasher = new();
hasher.Append(fs); hasher.Append(fs);
crc32 = hasher.GetCurrentHash(); crc32 = hasher.GetCurrentHash();
crc32UInt = BitConverter.ToUInt32(crc32);
// Change endianness // Change endianness
Array.Reverse(crc32); Array.Reverse(crc32);
} }
@@ -905,7 +907,7 @@ namespace IRDKit
Console.WriteLine($"Creating {irdPath} with Key from redump.org: {Convert.ToHexString(key)}"); Console.WriteLine($"Creating {irdPath} with Key from redump.org: {Convert.ToHexString(key)}");
try try
{ {
IRD ird = new ReIRD(isoPath, key, layerbreak); IRD ird = new ReIRD(isoPath, key, layerbreak, crc32UInt);
ird.Write(irdPath); ird.Write(irdPath);
if (verbose) if (verbose)
ird.Print(); ird.Print();
+1 -1
View File
@@ -270,7 +270,7 @@ namespace LibIRD
/// <summary> /// <summary>
/// MD5 hashes for all decrypted files in the image /// MD5 hashes for all decrypted files in the image
/// </summary> /// </summary>
/// <remarks><see cref="FileHashes"/> files, 16-bytes per hash, alternating with each <see cref="FileHashes"/> entry</remarks> /// <remarks><see cref="FileCount"/> files, 16-bytes per hash, alternating with each <see cref="FileHashes"/> entry</remarks>
public byte[][] FileHashes { get; private set; } public byte[][] FileHashes { get; private set; }
/// <summary> /// <summary>
+3 -2
View File
@@ -71,11 +71,12 @@ namespace LibIRD
/// <param name="isoPath">Path to the ISO</param> /// <param name="isoPath">Path to the ISO</param>
/// <param name="key">Disc Key, redump-style (AES encrypted Data 1)</param> /// <param name="key">Disc Key, redump-style (AES encrypted Data 1)</param>
/// <param name="layerbreak">Layerbreak value, in sectors</param> /// <param name="layerbreak">Layerbreak value, in sectors</param>
/// <param name="uid">Unique ID, crc32 hash of ISO</param>
/// <param name="region">Disc Region</param> /// <param name="region">Disc Region</param>
public ReIRD(string isoPath, byte[] key, long? layerbreak = null, Region region = Region.NONE) : base() public ReIRD(string isoPath, byte[] key, long? layerbreak = null, uint? uid = null, Region region = Region.NONE) : base()
{ {
// Generate Unique Identifier using ISO CRC32 // Generate Unique Identifier using ISO CRC32
UID = GenerateUID(isoPath); UID = uid == null ? GenerateUID(isoPath) : (uint)uid;
// Determine ISO file size // Determine ISO file size
long size = CalculateSize(isoPath); long size = CalculateSize(isoPath);