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; } } }