namespace BinaryObjectScanner.Models.N3DS { /// /// There are two known specialisations of the NCSD container format: /// - The CTR Cart Image (CCI) format, the 3DS' raw NAND format /// - CCI is the format of game ROM images. /// /// CTR System Update (CSU) is a variant of CCI, where the only difference /// is in the file extension. /// /// public sealed class NCSDHeader { #region Common to all NCSD files /// /// RSA-2048 SHA-256 signature of the NCSD header /// public byte[] RSA2048Signature; /// /// Magic Number 'NCSD' /// public string MagicNumber; /// /// Size of the NCSD image, in media units (1 media unit = 0x200 bytes) /// public uint ImageSizeInMediaUnits; /// /// Media ID /// public byte[] MediaId; /// /// Partitions FS type (0=None, 1=Normal, 3=FIRM, 4=AGB_FIRM save) /// public FilesystemType PartitionsFSType; /// /// Partitions crypt type (each byte corresponds to a partition in the partition table) /// public byte[] PartitionsCryptType; /// /// Offset & Length partition table, in media units /// public PartitionTableEntry[] PartitionsTable; #endregion #region CTR Cart Image (CCI) Specific /// /// Exheader SHA-256 hash /// public byte[] ExheaderHash; /// /// Additional header size /// public uint AdditionalHeaderSize; /// /// Sector zero offset /// public uint SectorZeroOffset; /// /// Partition Flags /// public byte[] PartitionFlags; /// /// Partition ID table /// public ulong[] PartitionIdTable; /// /// Reserved /// public byte[] Reserved1; /// /// Reserved? /// public byte[] Reserved2; /// /// Support for this was implemented with 9.6.0-X FIRM. Bit0=1 enables using bits 1-2, it's unknown /// what these two bits are actually used for(the value of these two bits get compared with some other /// value during NCSD verification/loading). This appears to enable a new, likely hardware-based, /// antipiracy check on cartridges. /// public byte FirmUpdateByte1; /// /// Support for this was implemented with 9.6.0-X FIRM, see below regarding save crypto. /// public byte FirmUpdateByte2; #endregion #region Raw NAND Format Specific /// /// Unknown /// public byte[] Unknown; /// /// Encrypted MBR partition-table, for the TWL partitions(key-data used for this keyslot is console-unique). /// public byte[] EncryptedMBR; #endregion } }