namespace SabreTools.Data.Models.IRD
{
///
///
public class File
{
///
/// "3IRD"
///
public byte[] Magic { get; set; } = new byte[4];
///
/// Version
///
/// Versions 6 - 9 are accepted
public byte Version { get; set; }
///
/// The same value stored in PARAM.SFO / TITLE_ID
///
/// 9 bytes, ASCII, stored without dashes
public string TitleID { get; set; } = string.Empty;
///
/// Number of bytes that follow containing the title
///
public byte TitleLength { get; set; }
///
/// The same value stored in PARAM.SFO / TITLE
///
/// bytes, ASCII
public string Title { get; set; } = string.Empty;
///
/// The same value stored in PARAM.SFO / PS3_SYSTEM_VER
///
/// 4 bytes, ASCII, missing uses "0000"
public string SystemVersion { get; set; } = string.Empty;
///
/// The same value stored in PARAM.SFO / VERSION
///
/// 5 bytes, ASCII
public string GameVersion { get; set; } = string.Empty;
///
/// The same value stored in PARAM.SFO / APP_VER
///
/// 5 bytes, ASCII
public string AppVersion { get; set; } = string.Empty;
///
/// Length of the gzip-compressed header data
///
public uint HeaderLength { get; set; }
///
/// Gzip-compressed header data
///
public byte[] Header { get; set; } = [];
///
/// Length of the gzip-compressed footer data
///
public uint FooterLength { get; set; }
///
/// Gzip-compressed footer data
///
public byte[] Footer { get; set; } = [];
///
/// Number of complete regions in the image
///
public byte RegionCount { get; set; }
///
/// MD5 hashes for all complete regions in the image
///
/// regions, 16-bytes per hash
public byte[][] RegionHashes { get; set; } = [];
///
/// Number of decrypted files in the image
///
public uint FileCount { get; set; }
///
/// Starting sector for each decrypted file
///
/// files, alternating with each entry
public ulong[] FileKeys { get; set; } = [];
///
/// MD5 hashes for all decrypted files in the image
///
/// files, 16-bytes per hash, alternating with each entry
public byte[][] FileHashes { get; set; } = [];
///
/// Extra Config, usually 0x0000
///
public ushort ExtraConfig { get; set; }
///
/// Attachments, usually 0x0000
///
public ushort Attachments { get; set; }
///
/// D1 key
///
/// 16 bytes
public byte[] Data1Key { get; set; } = new byte[16];
///
/// D2 key
///
/// 16 bytes
public byte[] Data2Key { get; set; } = new byte[16];
///
/// Uncompressed PIC data
///
/// 115 bytes, before D1/D2 keys on version 9
public byte[] PIC { get; set; } = new byte[115];
///
/// Unique Identifier
///
/// Not present on version 6 and prior, after AppVersion on version 7
public uint UID { get; set; }
///
/// IRD content CRC
///
public uint CRC { get; set; }
}
}