Line 17:
Line 17:
| Gamecard
| Gamecard
| DISA
| DISA
−
| [[#CTR-SAV0|CTR-SAV0]]
+
| [[#CTR-NOR0|CTR-NOR0]]
−
| 0x19
+
| 0x19 / 0x33
|-
|-
| [[Savegames]]
| [[Savegames]]
Line 87:
Line 87:
The data being authenticated by the AES CMAC is a 0x20-byte SHA-256 hash of a data block. The data block has different content formats among CMAC types. All types of data block contain a copy or a hash of the header, which is the start of the the rest of the verification chain, so the AES CMAC effectively authenticates the whole save image. Each type of data block is explained below.
The data being authenticated by the AES CMAC is a 0x20-byte SHA-256 hash of a data block. The data block has different content formats among CMAC types. All types of data block contain a copy or a hash of the header, which is the start of the the rest of the verification chain, so the AES CMAC effectively authenticates the whole save image. Each type of data block is explained below.
−
=== CTR-SAV0 ===
+
=== CTR-NOR0 ===
This CMAC type is used for gamecard savegames. It is 0x28-byte long.
This CMAC type is used for gamecard savegames. It is 0x28-byte long.
Line 98:
Line 98:
| 0x00
| 0x00
| 8
| 8
−
| Magic "CTR-SAV0"
+
| Magic "CTR-NOR0"
|-
|-
| 0x8
| 0x8
| 0x20
| 0x20
| SHA-256 of the following 0x108-byte block
| SHA-256 of the following 0x108-byte block
−
|-
+
{| class="wikitable" border="1"
−
|
+
! Offset
−
+
! Length
−
|
+
! Description
−
−
|
−
|-
|-
| 0x00
| 0x00
| 8
| 8
−
| Magic "CTR-NOR0"
+
| Magic "CTR-SAV0"
|-
|-
| 0x08
| 0x08
| 0x100
| 0x100
| Copy of the DISA header
| Copy of the DISA header
+
|}
|}
|}
Line 140:
Line 138:
| 0x20
| 0x20
| SHA-256 of the following 0x108-byte block
| SHA-256 of the following 0x108-byte block
−
|-
+
{| class="wikitable" border="1"
−
|
+
! Offset
−
+
! Length
−
|
+
! Description
−
−
|
−
|-
|-
| 0x00
| 0x00
Line 155:
Line 150:
| 0x100
| 0x100
| Copy of the DISA header
| Copy of the DISA header
+
|}
|}
|}
+
=== CTR-SYS0 ===
=== CTR-SYS0 ===
Line 394:
Line 391:
* DPFS descriptor
* DPFS descriptor
* Partition master hash
* Partition master hash
−
* A four-byte padding
=== DIFI header ===
=== DIFI header ===
Line 536:
Line 532:
|-
|-
| 0x68
| 0x68
−
| 8
+
| 4
| IVFC level 4 block size in log2
| IVFC level 4 block size in log2
+
|-
+
| 0x6C
+
| 4
+
| Padding
|-
|-
| 0x70
| 0x70
Line 685:
Line 685:
* In the partition table, each descriptor verifies level 1 of its IVFC tree via the master hash.
* In the partition table, each descriptor verifies level 1 of its IVFC tree via the master hash.
* Each IVFC level verifies the next level, until the level 4, which is the inner content.
* Each IVFC level verifies the next level, until the level 4, which is the inner content.
+
+
== Summary diagram ==
+
+
[[File:Disa-diff.png]]