namespace SabreTools.Data.Models.XboxExecutable
{
///
/// XBox Executable certificate
///
///
///
public class Certificate
{
///
/// Number of bytes that should be reserved for this certificate.
///
public uint SizeOfCertificate { get; set; }
///
/// Time and Date when this certificate was created. Standard windows format.
///
public uint TimeDate { get; set; }
///
/// Title ID for this application. This field doesn't appear to matter with
/// unsigned code, so it can be set to zero.
///
public uint TitleID { get; set; }
///
/// Title name for this application (i.e. L"The Simpsons Road Rage").
/// This buffer contains enough room for 40 Unicode characters.
///
public byte[] TitleName { get; set; } = new byte[0x50];
///
/// Alternate Title IDs (16 4-byte DWORDs) for this certificate. These do not appear
/// to matter with unsigned code (or signed code, for that matter), so they can all
/// be set to zero.
///
public uint[] AlternativeTitleIDs { get; set; } = new uint[16];
///
/// Allowed media types for this .XBE.
///
public AllowedMediaTypes AllowedMediaTypes { get; set; }
///
/// Game region for this .XBE.
///
public GameRegion GameRegion { get; set; }
///
/// Game ratings for this .XBE. It is typically safe to set this to 0xFFFFFFFF.
///
public uint GameRatings { get; set; }
///
/// Disk Number. Typically zero.
///
public uint DiskNumber { get; set; }
///
/// Certificate Version.
///
public uint Version { get; set; }
///
/// 16-byte LAN Key. An unsigned .XBE can just zero these out.
///
public byte[] LANKey { get; set; } = new byte[16];
///
/// 16-byte Signature Key. An unsigned .XBE can just zero these out.
///
public byte[] SignatureKey { get; set; } = new byte[16];
///
/// 16 x 16-byte Signature Keys. An unsigned .XBE can just zero these out.
///
public byte[][] AlternateSignatureKeys { get; set; } = new byte[16][];
///
/// Original Certificate Size?
///
public uint OriginalCertificateSize { get; set; }
///
/// Online Service ID
///
public uint OnlineService { get; set; }
///
/// Extra Security Flags
///
public uint SecurityFlags { get; set; }
///
/// Code Encryption Key?
///
public byte[] CodeEncKey { get; set; } = new byte[16];
}
}