Editing NPD

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 15: Line 15:
| 0x04 || Version || 4 || uint32_t || ex: 1, 2, 3, 4. See [[EDAT_files#Footer]] for the precise NPD packager version.
| 0x04 || Version || 4 || uint32_t || ex: 1, 2, 3, 4. See [[EDAT_files#Footer]] for the precise NPD packager version.
|-
|-
| 0x08 || [[NPDRM#DRM Type|DRM Type]] || 4 || uint32_t || For PS2 EDAT, PS3 OS requires it to be with activation (i.e. Local DRM). For [[PKG_files#Misc.2FNote|PS1 PKG]], PS3 System Software version 4.00 introduced some changes for installing them with regard to the EDAT DRM type.
| 0x08 || [[NPDRM#DRM Type|DRM Type]] || 4 || uint32_t || For PS2 EDAT, PS3 OS requires it to be with activation (i.e. Local DRM). For [[PKG_files#Misc.2FNote|PS1 PKG]], PS3 System Software version 4.00 introduced some changes for installing them with regard to the EDAT DRM type.
|-
|-
| 0x0C || [[App Types|Application Type]] || 4 || uint32_t ||
| 0x0C || [[App Types|Application Type]] || 4 || uint32_t ||
|-
|-
| 0x10 || [[PARAM.SFO#CONTENT_ID|Content ID]] || 0x30 || uint8_t[0x30] || Content ID (with padding to fit 48 bytes)
| 0x10 || [[PARAM.SFO#CONTENT_ID|Content ID]] || 0x30 || uint8_t[0x30] || Content ID (with padding to fit 48 bytes)
|-
|-
| 0x40 || Digest || 0x10 || uint8[0x10] || QA digest. It seems to be a SHA-1 hash of the non-finalized file (debug SELF/SPRX created with make_fself_npdrm) or of the original EDAT data. Original data are unknown until the whole file is read, so it cannot be used as a check, however it can be used as watermark or zeroed on forged file.
| 0x40 || Digest || 0x10 || uint8[0x10] || QA digest. It seems to be a SHA-1 hash of the non-finalized file (debug SELF/SPRX created with make_fself_npdrm) or of the original EDAT data. Original data are unknown until the whole file is read, so it cannot be used as a check, however it can be used as watermark or zeroed on forged file.
|-
|-
| 0x50 || CID-FN Hash || 0x10 || uint8_t[0x10] || CID-FN hash. AES-CMAC hash of concatenation of Content ID (48 bytes) and EDAT/SELF filename (eg "MINIS.EDAT", "EBOOT.BIN") using the [[Keys#NPD_CID-FN_Hash_AES-CMAC_Key|npd_cid_fn_hash_aes_cmac_key]]. Example: aes_cmac(55 50 30 35 37 36 2D 4E 50 55 5A 30 30 31 34 39 5F 30 30 2D 56 41 4E 47 55 41 52 44 32 30 30 30 30 30 30 31 00 00 00 00 00 00 00 00 00 00 00 00 4D 49 4E 49 53 2E 45 44 41 54, npd_cid_fn_hash_aes_cmac_key).
| 0x50 || CID-FN Hash || 0x10 || uint8_t[0x10] || CID-FN hash. AES-CMAC hash of concatenation of Content ID (48 bytes) and EDAT/SELF filename (eg "MINIS.EDAT", "EBOOT.BIN") using the [[Keys#NPDRM_Keys|CID-FN hash AES-CMAC key]]. Example: aes_cmac(55 50 30 35 37 36 2D 4E 50 55 5A 30 30 31 34 39 5F 30 30 2D 56 41 4E 47 55 41 52 44 32 30 30 30 30 30 30 31 00 00 00 00 00 00 00 00 00 00 00 00 4D 49 4E 49 53 2E 45 44 41 54, npd_cid_fn_hash_aes_cmac_key).
|-
|-
| 0x60 || Header Hash || 0x10 || uint8_t[0x10] || Header hash. AES CMAC hash of the 0x60 bytes from the beginning of the file using (klicensee XOR [[Keys#NPD_Header_Hash_XOR_Key|npd_header_hash_xor_key]]) as AES-CMAC key.
| 0x60 || Header hash || 0x10 || uint8_t[0x10] || Header hash. AES CMAC hash of the 0x60 bytes from the beginning of the file using (klicensee XOR [[Keys#NPD_Header_Hash_XOR_Key|npd_header_hash_xor_key]]) as AES-CMAC key.
|-
|-
| 0x70 || Limited Time Start || 8 || uint64_t milliseconds || Start of the validity period, filled with 00 if not used.
| 0x70 || Limited Time Start || 8 || ?64-bit time or with 32-bit padding? || Start of the validity period, filled with 00 if not used.
|-
|-
| 0x78 || Limited Time End || 8 || uint64_t milliseconds || End of the validity period, filled with 00 if not used.
| 0x78 || Limited Time End || 8 || ?64-bit time or with 32-bit padding? || End of the validity period, filled with 00 if not used.
|}
|}


<syntaxhighlight lang="C">
<source lang="C">
typedef struct PS3_NPD { //size is 0x80 bytes
typedef struct PS3_NPD { //size is 0x80 bytes
   uint32_t magic; // 4E 50 44 00 ("NPD.")
   uint32_t magic; // 4E 50 44 00 ("NPD.")
Line 45: Line 45:
   uint64_t limited_time_end;
   uint64_t limited_time_end;
} PS3_NPD;
} PS3_NPD;
</syntaxhighlight>
</source>


= Tools =
= Tools =
Please note that all contributions to PS3 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS3 Developer wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)