using System;
namespace SabreTools.Data.Models.Xbox
{
///
/// XGD2 security sector data
///
///
public class SecuritySectorXGD3 : SecuritySector
{
// Common PFI data in base class
///
/// Reserved
///
/// 10 bytes, all 0x00
public byte[] Reserved0011 { get; set; } = new byte[10];
///
/// Unknown
///
/// Should be 0x06
public byte Unknown001B { get; set; }
///
/// Reserved
///
/// 4 bytes, all 0x00
public byte[] Reserved001C { get; set; } = new byte[4];
///
/// 23 Challege Response data (9 bytes each), usually only 8
///
public ChallengeResponseDataXGD23[] ChallengeResponses { get; set; } = new ChallengeResponseDataXGD23[23];
///
/// Reserved
///
/// Should be 0x00
public byte Reserved00EF { get; set; }
///
/// CPR_MAI key
///
/// Unknown endianness
public uint CprMaiKey { get; set; }
///
/// Unknown
///
public byte[] Unknown0100 { get; set; } = new byte[4];
///
/// Unknown
///
/// Should be 0x00, 0x00, 0x06, 0xE0
public byte[] Unknown0104 { get; set; } = new byte[4];
///
/// Unknown
///
/// 506 bytes
public byte[] Unknown0108 { get; set; } = new byte[506];
///
/// Encrypted challenge response table - version
///
/// Should be 0x02
public byte EncryptedChallengeResponseTableVersion { get; set; }
///
/// Encrypted challenge response table - entries
///
/// Should be 0x15
public byte EncryptedChallengeResponseTableEntryCount { get; set; }
///
/// Reserved
///
/// 2 bytes, all 0x00
public byte[] Reserved0302 { get; set; } = new byte[2];
///
/// Encrypted challenge responses
///
/// 21 entries
public EncryptedChallengeResponseXGD23[] EncryptedChallengeResponses { get; set; } = new EncryptedChallengeResponseXGD23[21];
///
/// Reserved
///
/// 96 bytes, all 0x00
public byte[] Reserved0400 { get; set; } = new byte[96];
///
/// Media ID
///
/// 16 bytes
public byte[] MediaID { get; set; } = new byte[16];
///
/// Reserved
///
/// 46 bytes, all 0x00
public byte[] Reserved0470 { get; set; } = new byte[46];
///
/// Unknown
///
/// Should be 0x04
public byte Unknown049E { get; set; }
///
/// FILETIME - Authoring Timestamp
///
public ulong AuthoringTimestamp { get; set; }
///
/// Reserved
///
/// 19 bytes, all 0x00
public byte[] Reserved04A7 { get; set; } = new byte[19];
///
/// Version?
///
/// Should be 0x02
public byte Version { get; set; }
///
/// Unknown 16 bytes (ISO Mastering GUID?)
///
public Guid ISOMasteringGuid { get; set; }
///
/// SHA-1 hash A
///
/// 20 bytes
public byte[] SHA1HashA { get; set; } = new byte[20];
///
/// Signature A
///
/// 256 bytes
public byte[] SignatureA { get; set; } = new byte[256];
///
/// FILETIME - Disc Mastering Timestamp
///
public ulong DiscMasteringTimestamp { get; set; }
///
/// Reserved
///
/// 4 bytes, all 0x00; meant to be a time_t?
public byte[] Reserved05E7 { get; set; } = new byte[4];
///
/// Reserved
///
/// 15 bytes, all 0x00
public byte[] Reserved05EB { get; set; } = new byte[15];
///
/// Unknown
///
/// Should be 0x02
public byte Unknown05FA { get; set; }
///
/// Unknown 16 bytes (Disc Mastering GUID?)
///
public Guid DiscMasteringGuid { get; set; }
///
/// SHA-1 hash B
///
/// 20 bytes
public byte[] SHA1HashB { get; set; } = new byte[20];
///
/// Signature B
///
/// 256 bytes
public byte[] SignatureB { get; set; } = new byte[256];
///
/// SS Version
///
/// Should be 0x02
public byte SSVersion { get; set; }
///
/// Number of security sector ranges
///
/// Should be 0x15
public byte NumberOfSecuritySectorRanges { get; set; }
///
/// 21 Security Sector Ranges (9 bytes each)
///
/// Actually 23 entries
public DriveEntryData[] DriveEntries { get; set; } = new DriveEntryData[23];
///
/// Duplicated 21 Security Sector Ranges (9 bytes each)
///
/// Actually 23 entries
public DriveEntryData[] DuplicatedDriveEntries { get; set; } = new DriveEntryData[23];
///
/// Reserved
///
/// Should be 0x00
public byte Reserved07FF { get; set; }
}
}