Difference between revisions of "Title metadata"
Jump to navigation
Jump to search
Matyapiro31 (talk | contribs) |
|||
Line 43: | Line 43: | ||
| 0x1DC||0x2DC||2||Title version | | 0x1DC||0x2DC||2||Title version | ||
|- | |- | ||
− | | 0x1DE||0x2DE||2||Number of contents | + | | 0x1DE||0x2DE||2||Number of contents (contcount) |
|- | |- | ||
− | | 0x1E0||0x2E0|| | + | | 0x1E0||0x2E0||2||Boot content |
|- | |- | ||
− | | | + | | 0x204||0x204||36*64||Content info records |
|- | |- | ||
− | | | + | | 0xB04||0xC04||48*contcount|| Content chunk records |
+ | |} | ||
+ | |||
+ | === Content info records === | ||
+ | {| class="wikitable" | ||
|- | |- | ||
− | + | ! Start | |
+ | ! Length | ||
+ | ! Description | ||
|- | |- | ||
− | | | + | | 0x00 |
+ | | 2 | ||
+ | | Content index offset | ||
|- | |- | ||
− | | | + | | 0x02 |
+ | | 2 | ||
+ | | Content command count | ||
+ | |- | ||
+ | | 0x04 | ||
+ | | 32 | ||
+ | | SHA-256 hash? Commands? | ||
|} | |} | ||
− | === Content | + | === Content chunk records === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 67: | Line 81: | ||
| 0x00 | | 0x00 | ||
| 4 | | 4 | ||
− | | Content | + | | Content id |
|- | |- | ||
| 0x04 | | 0x04 | ||
+ | | 2 | ||
+ | | Content index | ||
+ | |- | ||
+ | | 0x06 | ||
+ | | 2 | ||
+ | | Content type | ||
+ | |- | ||
+ | | 0x08 | ||
+ | | 8 | ||
+ | | Content size | ||
+ | |- | ||
+ | | 0x10 | ||
| 32 | | 32 | ||
− | | SHA-256 | + | | SHA-256 hash |
|} | |} | ||
Line 108: | Line 134: | ||
== Example code application == | == Example code application == | ||
<source lang="c"> | <source lang="c"> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
enum sig_type { | enum sig_type { | ||
RSA_2048_SHA256 = 0x00010004, | RSA_2048_SHA256 = 0x00010004, | ||
Line 119: | Line 140: | ||
RSA_4096_SHA1 = 0x00010000 | RSA_4096_SHA1 = 0x00010000 | ||
}; | }; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | // Sorry I removed the example struct because it is wrong. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</source> | </source> |
Revision as of 15:42, 12 July 2011
Title metadata is a format used to store information about a title (a single standalone game, channel, etc.) and all its installed contents, including which contents they consist of and their SHA1 hashes.
Code is available by trap15 to parse the available information from the 3DS format of TMDs.
Structure
Header
Start | Length | Description | |
RSA 2048 | RSA 4096 | ||
0x000 | 0x000 | 4 | Signature type |
0x004 | 0x004 | 256 / 512 | Signature |
0x104 | 0x204 | 60 | Padding modulo 64 |
0x140 | 0x240 | 64 | Issuer |
0x180 | 0x280 | 1 | Version |
0x181 | 0x281 | 1 | ca_crl_version |
0x182 | 0x282 | 1 | signer_crl_version |
0x183 | 0x283 | 1 | Padding modulo 64 |
0x184 | 0x284 | 8 | System Version |
0x18C | 0x28C | 8 | Title ID |
0x194 | 0x294 | 4 | Title type |
0x198 | 0x298 | 2 | Group ID |
0x19A | 0x29A | 62 | reserved |
0x1D8 | 0x2D8 | 4 | Access rights |
0x1DC | 0x2DC | 2 | Title version |
0x1DE | 0x2DE | 2 | Number of contents (contcount) |
0x1E0 | 0x2E0 | 2 | Boot content |
0x204 | 0x204 | 36*64 | Content info records |
0xB04 | 0xC04 | 48*contcount | Content chunk records |
Content info records
Start | Length | Description |
---|---|---|
0x00 | 2 | Content index offset |
0x02 | 2 | Content command count |
0x04 | 32 | SHA-256 hash? Commands? |
Content chunk records
Start | Length | Description |
---|---|---|
0x00 | 4 | Content id |
0x04 | 2 | Content index |
0x06 | 2 | Content type |
0x08 | 8 | Content size |
0x10 | 32 | SHA-256 hash |
Certificates
Start | Length | Description |
---|---|---|
0x000 | 4 | Signature type |
0x004 | * | Signature |
0x104 | 64 | Issuer |
0x124 | 4 | Tag |
0x128 | 64 | Name |
0x168 | Key |
Example code application
enum sig_type {
RSA_2048_SHA256 = 0x00010004,
RSA_4096_SHA256 = 0x00010003,
RSA_2048_SHA1 = 0x00010001,
RSA_4096_SHA1 = 0x00010000
};
// Sorry I removed the example struct because it is wrong.