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