Line 6:
Line 6:
Many operations are done in terms of 64-byte blocks, which means you will often see padding out to the nearest 64-byte boundary at the end of a field.
Many operations are done in terms of 64-byte blocks, which means you will often see padding out to the nearest 64-byte boundary at the end of a field.
+
+
=== TMD file structure ===
+
==== Header ====
+
{| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em;"
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #cdc;" | '''Start'''
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ccc;" | '''Length'''
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #dcc;" | '''Description'''
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x000
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Signature type
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x004
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 256
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Signature
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x104
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 60
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Padding MOD64
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x140
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 64
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Issuer
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x180
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 1
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Version
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x181
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 1
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | ca_crl_version
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x182
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 1
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | signer_crl_version
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x183
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 1
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | fill2
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x184
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 8
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | System Version
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x18C
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 8
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Title ID
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x194
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Title type
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x198
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 2
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Group ID
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x19A
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 62
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | reserved
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x1D8
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Access rights
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x1DC
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 2
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Title version
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x1DE
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 2
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Number of contents (nbr_cont)
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x1E0
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 2
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | boot index
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x1E2
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 2
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | fill3
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x1E4
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 36*nbr_cont
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Contents
+
|}
+
==== Content ====
+
{| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em;"
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #cdc;" | '''Start'''
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ccc;" | '''Length'''
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #dcc;" | '''Description'''
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x00
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Content ID
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x04
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 2
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Index
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x06
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 2
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Type
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x08
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 8
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Size
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x10
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 20
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | SHA1 hash
+
|}
+
==== Certificates ====
+
{| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em;"
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #cdc;" | '''Start'''
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ccc;" | '''Length'''
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #dcc;" | '''Description'''
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x000
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Signature type
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x004
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 256
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Siganture
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x104
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 32
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Issuer
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x124
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Tag
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x128
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 64
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Name
+
|- style="background-color: #ddd;"
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x168
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" |
+
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Key
+
|}
+
=== C code application ===
<source lang="c">
<source lang="c">
typedef unsigned char u8;
typedef unsigned char u8;