The DSiWare exported from a 3DS is located at "sdmc:/Nintendo 3DS/<ID0>/<ID1>/Nintendo DSiWare". Filenames are same format as DSi: "<TitleID-Low>.bin". The below sizes include the 0x20-byte block metadata.
DSiWare exported from 3DS use keyslots initialized by movable.sed. Each section is encrypted with AES-CBC.
Block Metadata
Offset
|
Size
|
Description
|
0x0
|
0x10
|
AES MAC over a SHA-256 hash
|
0x10
|
0x10
|
IV, generated by the RNG.
|
Each section begins with the payload encrypted data, followed by this block metadata. The hash used for the MAC is calculated over the the cleartext payload, this hash is calculated the same way as the section hashes stored in the footer.
File Structure v1
Offset
|
Size
|
Description
|
0x0
|
0x4020
|
Banner section
|
0x4020
|
0xC0
|
Header section
|
0x40E0
|
0x420
|
Footer section
|
0x4500
|
|
Data for the 4 content sections are stored here.
|
Offset
|
Size
|
Description
|
0x0
|
0x4
|
Magic number 0x54444633, "3FDT".
|
0x4
|
0x4
|
Normally zero?
|
0x8
|
0x30
|
Unknown
|
0x38
|
0x8
|
TWL TitleID for the exported title.
|
0x40
|
0x60
|
?
|
Offset
|
Size
|
Description
|
0x0
|
0xC0
|
SHA-256 hashes over each section, it's unknown how these are calculated.
|
0xC0
|
0x3C
|
ECDSA signature over the previous data, signed by the AP cert?
|
0xFC
|
0x180
|
ECDSA "APXXXXXXXXXXXXXXXX" cert signed by the CTCert, where X is random lowercase ASCII hex data.
|
0x27C
|
0x180
|
ECDSA CTCert
|
0x3FC
|
0x4
|
Uninitialized padding.
|
File Structure v2
Offset
|
Size
|
Description
|
0x0
|
0x4020
|
Banner section
|
0x4020
|
0xC0
|
Header section
|
0x40E0
|
?
|
Footer section
|
|
|
Data for the 4 content sections are stored here.
|
Offset
|
Size
|
Description
|
0x0
|
0x4
|
Magic number possibly?
|
0x4
|
0x4
|
?
|
0x8
|
0x38
|
Unknown
|
0x38
|
0x8
|
TWL TitleID for the exported title.
|
0x40
|
0x60
|
?
|
Offset
|
Size
|
Description
|
0x0
|
0xD0
|
?
|
0xD0
|
0xE0
|
Normally all-zero?
|
0x1B0
|
0x20
|
SHA256 hash?
|
0x1D0
|
0x20
|
Normally all-zero?
|
0x1F0
|
0x3C
|
ECDSA signature over the previous data, signed by the AP cert?
|
0x22C
|
0x180
|
ECDSA "APXXXXXXXXXXXXXXXX" cert signed by the CTCert, where X is random lowercase ASCII hex data.
|
0x3AC
|
0x54
|
ECDSA certificate, the last 0x14-bytes here are all-zero.
|