<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=WB3000</id>
	<title>3dbrew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=WB3000"/>
	<link rel="alternate" type="text/html" href="https://www.3dbrew.org/wiki/Special:Contributions/WB3000"/>
	<updated>2026-04-14T20:07:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Title_metadata&amp;diff=96</id>
		<title>Title metadata</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Title_metadata&amp;diff=96"/>
		<updated>2011-03-30T01:08:27Z</updated>

		<summary type="html">&lt;p&gt;WB3000: Multi-column entries for offsets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Title metadata&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
[http://git.daifukkat.su/?p=3dshax.git Code is available] by trap15 to parse the available information from the 3DS format of TMDs.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
=== Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039;Start&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039;Length&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;RSA 2048&#039;&#039;||&#039;&#039;RSA 4096&#039;&#039;||||&lt;br /&gt;
|-&lt;br /&gt;
| 0x000||0x000||4||Signature type&lt;br /&gt;
|-&lt;br /&gt;
| 0x004||0x004||256 / 512||Signature&lt;br /&gt;
|-&lt;br /&gt;
| 0x104||0x204||60||Padding modulo 64&lt;br /&gt;
|-&lt;br /&gt;
| 0x140||0x240||64||Issuer&lt;br /&gt;
|-&lt;br /&gt;
| 0x180||0x280||1||Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x181||0x281||1||ca_crl_version&lt;br /&gt;
|-&lt;br /&gt;
| 0x182||0x282||1||signer_crl_version&lt;br /&gt;
|-&lt;br /&gt;
| 0x183||0x283||1||Padding modulo 64&lt;br /&gt;
|-&lt;br /&gt;
| 0x184||0x284||8||System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18C||0x28C||8||Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x194||0x294||4||Title type&lt;br /&gt;
|-&lt;br /&gt;
| 0x198||0x298||2||Group ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x19A||0x29A||62||reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D8||0x2D8||4||Access rights&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DC||0x2DC||2||Title version&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DE||0x2DE||2||Number of contents&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E0||0x2E0||64||Content Records&lt;br /&gt;
|-&lt;br /&gt;
| 0x220||0x320||40||Padding modulo 64&lt;br /&gt;
|-&lt;br /&gt;
| 0x248||0x348||4||Boot content&lt;br /&gt;
|-&lt;br /&gt;
| 0x252||0x352||4||Banner content&lt;br /&gt;
|-&lt;br /&gt;
| 0x256||0x356||4||Banner size&lt;br /&gt;
|-&lt;br /&gt;
| 0x260||0x360||32||Hash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Content Records ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 32&lt;br /&gt;
| SHA-256 Hash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Certificates ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000&lt;br /&gt;
| 4&lt;br /&gt;
| Signature type&lt;br /&gt;
|-&lt;br /&gt;
| 0x004&lt;br /&gt;
| *&lt;br /&gt;
| Signature&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 64&lt;br /&gt;
| Issuer&lt;br /&gt;
|-&lt;br /&gt;
| 0x124&lt;br /&gt;
| 4&lt;br /&gt;
| Tag&lt;br /&gt;
|-&lt;br /&gt;
| 0x128&lt;br /&gt;
| 64&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x168&lt;br /&gt;
| &lt;br /&gt;
| Key&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Example code application ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 typedef struct {&lt;br /&gt;
         u32 cid;         // content id&lt;br /&gt;
         u8  hash[0x20];  // SHA-256 hash&lt;br /&gt;
 } content_record;        // size: 0x24 bytes&lt;br /&gt;
 &lt;br /&gt;
 enum sig_type {&lt;br /&gt;
         RSA_2048_SHA256 = 0x00010004,&lt;br /&gt;
         RSA_4096_SHA256 = 0x00010003,&lt;br /&gt;
         RSA_2048_SHA1   = 0x00010001,&lt;br /&gt;
         RSA_4096_SHA1   = 0x00010000&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 typedef struct {&lt;br /&gt;
         u32 sig_type; &lt;br /&gt;
         u8 sig[*];     // * Signature size&lt;br /&gt;
         u8 fill1[60];&lt;br /&gt;
         u8 issuer[64]; // Root-CA%08x-CP%08x&lt;br /&gt;
         u8 version;&lt;br /&gt;
         u8 ca_crl_version;&lt;br /&gt;
         u8 signer_crl_version;&lt;br /&gt;
         u8 fill2;&lt;br /&gt;
         u64 sys_version;&lt;br /&gt;
         u64 title_id;&lt;br /&gt;
         u32 title_type;&lt;br /&gt;
         u16 group_id; // publisher&lt;br /&gt;
         u8 reserved[62];&lt;br /&gt;
         u32 access_rights;&lt;br /&gt;
         u16 title_version;&lt;br /&gt;
         u16 num_contents;&lt;br /&gt;
         content_record contents[0x40];&lt;br /&gt;
         u8 padding[0x28];&lt;br /&gt;
         u32 boot_content;&lt;br /&gt;
         u32 banner_content;&lt;br /&gt;
         u32 banner_size;&lt;br /&gt;
         u8 hash[0x20]; /* Huh? */&lt;br /&gt;
 } tmd;&lt;br /&gt;
&lt;br /&gt;
 //The tmd is then followed by a chain of certificates, where each certificate is of the general form&lt;br /&gt;
 typedef struct {&lt;br /&gt;
         u32 sig_type;&lt;br /&gt;
         u8 sig[*];        // * Signature size&lt;br /&gt;
         u8 issuer[64];&lt;br /&gt;
         u32 tag;          // identifies what is being signed&lt;br /&gt;
         u8 name[64];      // name of thing being signed&lt;br /&gt;
         u8 key[...];&lt;br /&gt;
 } certificate;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>WB3000</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Title_list&amp;diff=95</id>
		<title>Title list</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Title_list&amp;diff=95"/>
		<updated>2011-03-29T21:41:16Z</updated>

		<summary type="html">&lt;p&gt;WB3000: Started page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo 3DS utilizes a similar title-based organization as seen in the Wii and DSi platforms. The same [http://nus.cdn.t.shop.nintendowifi.net/ccs/download/ update server] is being used as was with the DSi, however a new common key has been introduced.&lt;br /&gt;
&lt;br /&gt;
The organization of Title IDs has not been documented fully yet.&lt;br /&gt;
&lt;br /&gt;
Here are some confirmed Title IDs (from the first update):&amp;lt;br /&amp;gt;&lt;br /&gt;
0004001000025000 (Promotional video?)&amp;lt;br /&amp;gt;&lt;br /&gt;
000400DB00016102&amp;lt;br /&amp;gt;&lt;br /&gt;
000400DB00017102&amp;lt;br /&amp;gt;&lt;br /&gt;
0004013000001C02&amp;lt;br /&amp;gt;&lt;br /&gt;
0004013000002402&amp;lt;br /&amp;gt;&lt;br /&gt;
0004013000002D02&amp;lt;br /&amp;gt;&lt;br /&gt;
0004013000002E02&amp;lt;br /&amp;gt;&lt;br /&gt;
0004013000003402&amp;lt;br /&amp;gt;&lt;br /&gt;
0004013800000002 (&amp;quot;System Menu&amp;quot;?)&lt;/div&gt;</summary>
		<author><name>WB3000</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Title_metadata&amp;diff=94</id>
		<title>Title metadata</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Title_metadata&amp;diff=94"/>
		<updated>2011-03-29T21:33:05Z</updated>

		<summary type="html">&lt;p&gt;WB3000: Added table with offsets similar to WiiBrew, DSiBrew, entries. Signature throws off values?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Title metadata&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
[http://git.daifukkat.su/?p=3dshax.git Code is available] by trap15 to parse the available information from the 3DS format of TMDs.&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
=== Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color: #ddd;&amp;quot;&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000&lt;br /&gt;
| 4&lt;br /&gt;
| Signature type&lt;br /&gt;
|-&lt;br /&gt;
| 0x004&lt;br /&gt;
| *&lt;br /&gt;
| Signature&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 60&lt;br /&gt;
| Padding modulo 64&lt;br /&gt;
|-&lt;br /&gt;
| 0x140&lt;br /&gt;
| 64&lt;br /&gt;
| Issuer&lt;br /&gt;
|-&lt;br /&gt;
| 0x180&lt;br /&gt;
| 1&lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x181&lt;br /&gt;
| 1&lt;br /&gt;
| ca_crl_version&lt;br /&gt;
|-&lt;br /&gt;
| 0x182&lt;br /&gt;
| 1&lt;br /&gt;
| signer_crl_version&lt;br /&gt;
|-&lt;br /&gt;
| 0x183&lt;br /&gt;
| 1&lt;br /&gt;
| Padding modulo 64&lt;br /&gt;
|-&lt;br /&gt;
| 0x184&lt;br /&gt;
| 8&lt;br /&gt;
| System Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x18C&lt;br /&gt;
| 8&lt;br /&gt;
| Title ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x194&lt;br /&gt;
| 4&lt;br /&gt;
| Title type&lt;br /&gt;
|-&lt;br /&gt;
| 0x198&lt;br /&gt;
| 2&lt;br /&gt;
| Group ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x19A&lt;br /&gt;
| 62&lt;br /&gt;
| reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D8&lt;br /&gt;
| 4&lt;br /&gt;
| Access rights&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DC&lt;br /&gt;
| 2&lt;br /&gt;
| Title version&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DE&lt;br /&gt;
| 2&lt;br /&gt;
| Number of contents&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E0&lt;br /&gt;
| 64&lt;br /&gt;
| Content Records&lt;br /&gt;
|-&lt;br /&gt;
| 0x220&lt;br /&gt;
| 40&lt;br /&gt;
| Padding modulo 64&lt;br /&gt;
|-&lt;br /&gt;
| 0x248&lt;br /&gt;
| 4&lt;br /&gt;
| Boot content&lt;br /&gt;
|-&lt;br /&gt;
| 0x252&lt;br /&gt;
| 4&lt;br /&gt;
| Banner content&lt;br /&gt;
|-&lt;br /&gt;
| 0x256&lt;br /&gt;
| 4&lt;br /&gt;
| Banner size&lt;br /&gt;
|-&lt;br /&gt;
| 0x260&lt;br /&gt;
| 32&lt;br /&gt;
| Hash&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Content Records ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Content ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 32&lt;br /&gt;
| SHA-256 Hash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Certificates ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000&lt;br /&gt;
| 4&lt;br /&gt;
| Signature type&lt;br /&gt;
|-&lt;br /&gt;
| 0x004&lt;br /&gt;
| *&lt;br /&gt;
| Signature&lt;br /&gt;
|-&lt;br /&gt;
| 0x104&lt;br /&gt;
| 64&lt;br /&gt;
| Issuer&lt;br /&gt;
|-&lt;br /&gt;
| 0x124&lt;br /&gt;
| 4&lt;br /&gt;
| Tag&lt;br /&gt;
|-&lt;br /&gt;
| 0x128&lt;br /&gt;
| 64&lt;br /&gt;
| Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x168&lt;br /&gt;
| &lt;br /&gt;
| Key&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Example code application ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 typedef struct {&lt;br /&gt;
         u32 cid;         // content id&lt;br /&gt;
         u8  hash[0x20];  // SHA-256 hash&lt;br /&gt;
 } content_record;        // size: 0x24 bytes&lt;br /&gt;
 &lt;br /&gt;
 enum sig_type {&lt;br /&gt;
         RSA_2048_SHA256 = 0x00010004,&lt;br /&gt;
         RSA_4096_SHA256 = 0x00010003,&lt;br /&gt;
         RSA_2048_SHA1   = 0x00010001,&lt;br /&gt;
         RSA_4096_SHA1   = 0x00010000&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 typedef struct {&lt;br /&gt;
         u32 sig_type; &lt;br /&gt;
         u8 sig[*];     // * Signature size&lt;br /&gt;
         u8 fill1[60];&lt;br /&gt;
         u8 issuer[64]; // Root-CA%08x-CP%08x&lt;br /&gt;
         u8 version;&lt;br /&gt;
         u8 ca_crl_version;&lt;br /&gt;
         u8 signer_crl_version;&lt;br /&gt;
         u8 fill2;&lt;br /&gt;
         u64 sys_version;&lt;br /&gt;
         u64 title_id;&lt;br /&gt;
         u32 title_type;&lt;br /&gt;
         u16 group_id; // publisher&lt;br /&gt;
         u8 reserved[62];&lt;br /&gt;
         u32 access_rights;&lt;br /&gt;
         u16 title_version;&lt;br /&gt;
         u16 num_contents;&lt;br /&gt;
         content_record contents[0x40];&lt;br /&gt;
         u8 padding[0x28];&lt;br /&gt;
         u32 boot_content;&lt;br /&gt;
         u32 banner_content;&lt;br /&gt;
         u32 banner_size;&lt;br /&gt;
         u8 hash[0x20]; /* Huh? */&lt;br /&gt;
 } tmd;&lt;br /&gt;
&lt;br /&gt;
 //The tmd is then followed by a chain of certificates, where each certificate is of the general form&lt;br /&gt;
 typedef struct {&lt;br /&gt;
         u32 sig_type;&lt;br /&gt;
         u8 sig[*];        // * Signature size&lt;br /&gt;
         u8 issuer[64];&lt;br /&gt;
         u32 tag;          // identifies what is being signed&lt;br /&gt;
         u8 name[64];      // name of thing being signed&lt;br /&gt;
         u8 key[...];&lt;br /&gt;
 } certificate;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>WB3000</name></author>
	</entry>
</feed>