XCI: Difference between revisions

No edit summary
 
(7 intermediate revisions by 2 users not shown)
Line 17: Line 17:
|-
|-
| 0x1200
| 0x1200
| 0x6E00
| 0x200
| ReservedArea
| [11.0.0+] [[#CardHeaderT2]]
|-
| 0x1400
| 0x400
| [11.0.0+] [[#CardHeaderT2CertArea]]
|-
| 0x1800
| 0x100
| [11.0.0+] CardHeaderT2CertAreaModulus
|-
| 0x1900
| 0x6700
| Reserved
|-
|-
| 0x8000
| 0x8000
Line 76: Line 88:
| 0x8
| 0x8
| 0x8
| 0x8
| Empty
| Reserved
|-
|-
| 0x10
| 0x10
Line 130: Line 142:
| 0x100
| 0x100
| 0x4
| 0x4
| MagicCode ("HEAD")
| Magic ("HEAD")
|-
|-
| 0x104
| 0x104
Line 150: Line 162:
| 0x10E
| 0x10E
| 0x1
| 0x1
| CardHeaderVersion
| [[#Version]]
|-
|-
| 0x10F
| 0x10F
Line 206: Line 218:
| 0x190
| 0x190
| 0x70
| 0x70
| [[#CardInfo]]
| [[#CardHeaderEncryptedData]]
|}
|}


Line 234: Line 246:
| 0xE2
| 0xE2
| 32GB
| 32GB
|}
=== Version ===
{| class="wikitable" border="1"
|-
! Value
! Description
|-
| 0
| Default
|-
| 1
|
|-
| 2
|
|-
| 3
| [20.0.0+] T2Supported
|}
|}


Line 258: Line 289:
| 4
| 4
| [9.0.0+] DifferentRegionCupToGlobalDevice
| [9.0.0+] DifferentRegionCupToGlobalDevice
|-
| 7
| [11.0.0+] CardHeaderSignKey
|}
|}


Line 273: Line 307:
|}
|}


=== CardInfo ===
=== CardHeaderEncryptedData ===
This region is stored encrypted (AES-128-CBC).
This region is stored encrypted (AES-128-CBC).


Line 320: Line 354:
| 0x25
| 0x25
| 0x3
| 0x3
| Empty
| Reserved
|-
|-
| 0x28
| 0x28
Line 332: Line 366:
| 0x38
| 0x38
| 0x38
| 0x38
| Empty
| Reserved
|}
|}


Line 384: Line 418:
| 1
| 1
| Terra
| Terra
|}
== CardHeaderT2 ==
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x100
| RSA-2048 PKCS #1 signature over the header (data from 0x100 to 0x200)
|-
| 0x100
| 0x4
| Magic ("HEAD")
|-
| 0x104
| 0x4
| RomAreaStartPageAddress (in Gamecard page units, which are 0x200 bytes)
|-
| 0x108
| 0x4
| BackupAreaStartPageAddress (always 0xFFFFFFFF)
|-
| 0x10C
| 0x1
| TitleKeyDecIndex (high nibble) and KekIndex (low nibble)
|-
| 0x10D
| 0x1
| [[#RomSize]]
|-
| 0x10E
| 0x1
| [[#Version]]
|-
| 0x10F
| 0x1
| [[#Flags]]
|-
| 0x110
| 0x8
| PackageId (used for challenge–response authentication)
|-
| 0x118
| 0x4
| ValidDataEndAddress (in Gamecard page units, which are 0x200 bytes)
|-
| 0x11C
| 0x1
| [20.0.0+] CardHeaderSignKeyIndex ([1.0.0-19.0.1] Reserved)
|-
| 0x11D
| 0x1
| [18.0.0+] [[#Flags2]] ([1.0.0-17.0.1] Reserved)
|-
| 0x11E
| 0x2
| [19.0.0+] [[#NumberOfApplicationIds]] ([1.0.0-18.1.0] Reserved)
|-
| 0x120
| 0x10
| Iv (reversed)
|-
| 0x130
| 0x8
| PartitionFsHeaderAddress
|-
| 0x138
| 0x8
| PartitionFsHeaderSize
|-
| 0x140
| 0x20
| PartitionFsHeaderHash (SHA-256 hash of the [[#PartitionFsHeader]])
|-
| 0x160
| 0x20
| InitialDataHash (SHA-256 hash of the [[#InitialData]])
|-
| 0x180
| 0x4
| [[#SelSec]]
|-
| 0x184
| 0x4
| SelT1Key (always 2)
|-
| 0x188
| 0x4
| SelKey (always 0)
|-
| 0x18C
| 0x4
| LimArea (in Gamecard page units, which are 0x200 bytes)
|-
| 0x190
| 0x70
| [[#CardHeaderT2EncryptedData]]
|}
=== Flags2 ===
[[Filesystem_services|FS]] retrieves this data as [[Filesystem_services#GameCardAttribute2|GameCardAttribute2]].
{| class="wikitable" border="1"
|-
! Bits
! Description
|-
| 0
| IsSecondCardHeader
|-
| 1
| HasSecureContent
|}
=== NumberOfApplicationIds ===
This is the number of entries in the ApplicationIdList located right before ValidDataEndAddress.
=== CardHeaderT2EncryptedData ===
This region is stored encrypted (AES-128-CBC).
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x8
| [[#FwVersion]]
|-
| 0x8
| 0x4
| [[#AccCtrl1]]
|-
| 0xC
| 0x4
| Wait1TimeRead (always 0x1388)
|-
| 0x10
| 0x4
| Wait2TimeRead (always 0)
|-
| 0x14
| 0x4
| Wait1TimeWrite (always 0)
|-
| 0x18
| 0x4
| Wait2TimeWrite (always 0)
|-
| 0x1C
| 0x4
| FwMode (the current SdkAddonVersion)
|-
| 0x20
| 0x4
| UppVersion
|-
| 0x24
| 0x1
| [[#CompatibilityType]]
|-
| 0x25
| 0x3
| Reserved
|-
| 0x28
| 0x8
| UppHash (SHA-256 hash of the [[#UpdatePartition]])
|-
| 0x30
| 0x8
| UppId (always 0x0100000000000816)
|-
| 0x38
| 0x8
| Reserved
|-
| 0x40
| 0x20
| RelatedCardHeaderHash (SHA-256 hash of [[#CardHeader]])
|-
| 0x60
| 0x10
| Reserved
|}
== CardHeaderT2CertArea ==
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0
| 0x100
| RSA-2048 PKCS #1 signature over the data from 0x100 to 0x400
|-
| 0x100
| 0x4
| Magic
|-
| 0x104
| 0x4
| Version
|-
| 0x108
| 0x8
|
|-
| 0x110
| 0x1
| CardHeaderSignKeyIndex
|-
| 0x111
| 0x1F
| Reserved
|-
| 0x130
| 0x100
| Modulus
|-
| 0x230
| 0x3
| PublicExponent
|-
| 0x233
| 0x1CD
| Reserved
|}
|}


Line 403: Line 669:
| 0x100
| 0x100
| 0x4
| 0x4
| MagicCode ("CERT")
| Magic ("CERT")
|-
|-
| 0x104
| 0x104
Line 419: Line 685:
| 0x110
| 0x110
| 0x10
| 0x10
| DeviceId
| T1CardDeviceId
|-
|-
| 0x120
| 0x120
Line 426: Line 692:
|-
|-
| 0x130
| 0x130
| 0xD0
| 0x10
| Data (encrypted)
| HwKey (encrypted)
|-
| 0x140
| 0xC0
| Reserved (encrypted)
|-
|-
| 0x200
| 0x200
Line 520: Line 790:
| 0x0
| 0x0
| 0x4
| 0x4
| MagicCode ("HFS0")
| Magic ("HFS0")
|-
|-
| 0x4
| 0x4