CNMT

Revision as of 15:51, 22 May 2019 by Liam (talk | contribs) (Update all of Patch Extended Data and add SystemUpdate extended data)

This is the metadata file that ends in ".cnmt{.nca}" or "meta0.ncd". This seems to replace the TMD format.

There's at least 9 different filenames used for ".cnmt":

  • "Application_{lower-case hex titleID}.cnmt"
  • "Patch_{lower-case hex titleID}.cnmt"
  • "AddOnContent_{lower-case hex titleID}.cnmt"
  • "SystemUpdate_{hex titleID}.cnmt"
  • "SystemData_{lower-case hex titleID}.cnmt"
  • "SystemProgram_{lower-case hex titleID}.cnmt"
  • "BootImagePackage_{lower-case hex titleID}.cnmt"
  • "BootImagePackageSafe_{lower-case hex titleID}.cnmt"
  • "Delta_{lower-case hex titleID}.cnmt"

Header

Offset Size Description
0x0 0x8 Title ID
0x8 0x4 Version
0xC 0x1 Meta Type
0xD 0x1 Unused
0xE 0x2 Extended Header Size
0x10 0x2 Content Count
0x12 0x2 Content Meta Count
0x14 0x1 Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)
0x15 0x3 Unused
0x18 0x4 Required Download System Version
0x1C 0x4 Unused

SystemUpdate Extended Header

Offset Size Description
0x0 0x4 Extended Data Size

Application Extended Header

Offset Size Description
0x0 0x8 Patch ID
0x8 0x4 Required System Version

Patch Extended Header

Offset Size Description
0x0 0x8 Application ID
0x8 0x4 Required System Version
0xC 0x4 Extended Data Size
0x10 0x8 Unused

AddOnContent Extended Header

Offset Size Description
0x0 0x8 Application ID
0x8 0x4 Required Application Version
0xC 0x4 Unused

Delta Extended Header

Offset Size Description
0x0 0x8 Application ID
0x8 0x4 Extended Data Size
0xC 0x4 Unused

Content Records

Offset Size Description
0x0 0x20 Hash
0x20 0x10 Content ID
0x30 0x6 Size
0x36 0x1 Title Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=HtmlDocument, 5=LegalInformation, 6=DeltaFragment)
0x37 0x1 Id Offset

Content Meta Records

Offset Size Description
0x0 0x8 Title ID
0x8 0x4 Version
0xC 0x1 Meta Type
0xD 0x1 Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)
0xE 0x2 Unused

This is used for SystemUpdate, see here: NCM_services#ReadEntryMetaRecords.

SystemUpdate Extended Data

Offset Size Description
0x0 0x4 Version
0x4 0x4 Variation Count
0x8 0x4 Firmware Variation
0xC 0x1C * Variation Count Unused

Patch Extended Data

Offset Size Description
0x0 0x4 History Count
0x4 0x4 Delta History Count
0x8 0x4 Delta Count
0xC 0x4 Fragment Set Count
0x10 0x4 History Content Count
0x14 0x4 Delta Content Count
0x18 0x4 Unused
0x1C 0x38 * History Count History Headers
0x28 * Delta History Count Delta Histories
0x28 * Delta Count Delta Headers
0x34 * Fragment Set Count Fragment Sets
0x18 * History Content Count History Content Records (Content Records without the Hash entry)
0x38 * Delta Content Count Delta Content Records

History Header

Offset Size Description
0x0 0x8 Title ID
0x8 0x4 Version
0xC 0x1 Title Types
0xD 0x1 Attributes
0xE 0x2 Unused
0x10 0x20 Digest
0x30 0x2 Content Info Count
0x32 0x6 Unused

Delta History

Offset Size Description
0x0 0x8 Source Title ID
0x8 0x8 Destination Title ID
0x10 0x4 Source Version
0x14 0x4 Destination Version
0x18 0x8 Download Size
0x20 0x8 Unused

Delta Header

Offset Size Description
0x0 0x8 Source Title ID
0x8 8 Destination Title ID
0x10 0x4 Source Version
0x14 0x4 Destination Version
0x18 0x2 Fragment Set Count
0x1A 0x6 Unused
0x20 0x2 Content Info Count
0x22 0x6 Unused

Fragment Set

Offset Size Description
0x0 0x10 Source Content ID
0x10 0x10 Destination Content ID
0x20 0x6 Source Size
0x26 0x6 Destination Size
0x2C 0x2 Fragment Indicator Count
0x2E 0x1 Title Types
0x2F 0x1 Update Type (0=ApplyAsDelta, 1=Overwrite, 2=Create)
0x30 0x4 Unused

Fragment Indicator

Offset Size Description
0x0 0x2 Content Info Index
0x2 0x2 Fragment Index