Rights Information Files: Difference between revisions

From PS4 Developer wiki
Jump to navigation Jump to search
mNo edit summary
 
(22 intermediate revisions by 4 users not shown)
Line 4: Line 4:
* <code>/mnt/disc/license/rif</code>
* <code>/mnt/disc/license/rif</code>
* <code>/preinst2/app/CUSA00001/app.rif</code>
* <code>/preinst2/app/CUSA00001/app.rif</code>
* <code>Sc0/license.dat</code> (in PKG entries)


[[Rif/samples|Sample rif files]].
[[Rif/samples|Sample rif files]].


== RIF File ==
== Rights Information Files ==


For a rif file that is paired with a idx file, see [[#RIFA File|RIFA file]].
For a rif file that is paired with an idx file, see [[#RIFA File|RIFA file]].


=== RIF ===
=== RIF ===
Line 24: Line 25:
| Signature || <code>0x000</code> || 4 || <code>52 49 46 00</code> ('RIF\0') ||  
| Signature || <code>0x000</code> || 4 || <code>52 49 46 00</code> ('RIF\0') ||  
|-
|-
| Version || <code>0x004</code> || 2 || <code>00 01</code> || 1 (current)
| Version || <code>0x004</code> || 2 || <code>00 01</code> || See [[#Type|Type]]
|-
|-
| Unknown || <code>0x006</code> || 2 || <code>FF FF</code> ||  
| Unknown || <code>0x006</code> || 2 || <code>FF FF</code> ||  
Line 36: Line 37:
| [[Content ID]] || <code>0x020</code> || 48 || <code>IP9100-CUSA00001_00-PLAYROOM00000000</code> ||  
| [[Content ID]] || <code>0x020</code> || 48 || <code>IP9100-CUSA00001_00-PLAYROOM00000000</code> ||  
|-
|-
| Type || <code>0x050</code> || 2 || <code>01 01</code> ||  
| Type || <code>0x050</code> || 2 || <code>01 01</code> || See [[#Type|Type]]
* <code>0x000</code> KDS RIF
* <code>0x101,0x302</code> Isolated RIF
* <code>0x102</code> Disc RIF
* <code>0x200-0x202</code> Fake/Debug RIF
|-
|-
| Unknown || <code>0x052</code> || 2 || <code>00 0F</code> ||  
| DRM Type || <code>0x052</code> || 2 || <code>00 0F</code> || Same as PKG DRM Type, PS5 Uses 00 10
|-
|-
| Unknown || <code>0x054</code> || 2 || <code>00 1A</code> ||  
| Content Type || <code>0x054</code> || 2 || <code>00 1A</code> || Same as PKG Content Type,  PS5 Uses 00 20
|-
|-
| SKU Flags || <code>0x056</code> || 2 || <code>00 01</code> ||  
| SKU Flag || <code>0x056</code> || 2 || <code>00 01</code> || Not Bootable 0 Trial 1 Full Game 3
|-
|-
| Extra Flags || <code>0x058</code> || 4 || <code>00 00 00 00</code> ||  
| Extra Flags || <code>0x058</code> || 4 || <code>00 00 00 00</code> ||  
|-
|-
| Unknown || <code>0x060</code> || 4 || <code>00 02 00 00</code> ||  
| Unknown || <code>0x060</code> || 4 || <code>00 02 00 00</code> || PS5 Uses 00 00 00 00
|-
|-
| Unknown || <code>0x064</code> || 476 || - ||  
| Unknown || <code>0x064</code> || 4 || <code>00 00 00 01</code> ||
|-
| Unknown || <code>0x068</code> || 3 || - ||
|-
| Unknown || <code>0x06B</code> || 1 || - || 02 on old rifs (3.55), 03 on new rifs (5.00)
|-
| Unknown || <code>0x06C</code> || 468 || - ||  
|-
|-
| Disc Key || <code>0x240</code> || 32 || - ||  
| Disc Key || <code>0x240</code> || 32 || - ||  
|-
|-
| Secret Encryption IV || <code>0x260</code> || 16 || - ||  
| Secret Encryption IV || <code>0x260</code> || 16 || - || At least on debug/fake RIFs, this is the first 16 bytes of the SHA-256 hash of the Content ID (all 48 bytes including nulls)
|-
|-
| Encrypted Secret || <code>0x270</code> || 144 || - || See [[#Secret|Secret]] for when decrypted
| Encrypted Secret || <code>0x270</code> || 144 || - || See [[#Secret|Secret]] for when decrypted. On debug/fake rifs, the decrypted secret is empty except the first 16 bytes, which are the second 16 bytes of the Content ID hash.
|-
|-
| RSA Signature || <code>0x300</code> || 256 || - || Verified using public key depending on type
| RSA Signature || <code>0x300</code> || 256 || - || Verified using public key depending on type
|}
==== Type ====
{| class="wikitable sortable"
! style="width: 5%" | Type
! style="width: 10%" | <abbr title="Firmware Type">FW Type</abbr>
! style="width: 5%" | <abbr title="Minimum Version">Min Ver</abbr>
! style="width: 5%" | <abbr title="Maximum Version">Max Ver</abbr>
! style="width: 15%" | Name
! style="width: 30%" | Description
! style="width: 30%" | Remarks
|-
| <code>0x000</code>
| All
| 1
| 1
| rowspan="3" | KDS (NPDRM)
| rowspan="3" | Used for digital content
| Revoked in at least 4.05
|-
| <code>0x001</code>
| All
| 2
| 2
| rowspan="2" |
|-
| <code>0x002</code>
| All
| 3
| 3
|-
| <code>0x101</code>
| rowspan="2" | All
| rowspan="2" | 1
| rowspan="2" | 1
| rowspan="2" | Isolated (Free,Kiosk)
| rowspan="2" | Used for truly free content (Playroom, Vue, Spotify)
| rowspan="2" |
|-
| <code>0x302</code>
|-
| <code>0x102</code>
| All
| 1
| 1
| Disc
| Used for Blu-ray content
|
|-
| <code>0x200</code>
| rowspan="3" | DEX/TEST
| rowspan="3" | 1
| rowspan="3" | 1
| rowspan="3" | Fake/Debug
| rowspan="3" | Used for testing/debugging
| rowspan="3" |
|-
| <code>0x201</code>
|-
| <code>0x202</code>
|-
| <code>0x303</code>
| CEX
| 1
| 1
| ?
|
|
|-
| <code>0x304</code>
| ? (not CEX)
| 1
| 1
| ?
|
|
|-
| <code>0x305</code>
| DEX/TEST
| 1
| 1
| ?
|
|
|}
|}


Line 72: Line 160:
! style="width: 40%" | Remark
! style="width: 40%" | Remark
|-
|-
| Unknown || <code>0x00</code> || 16 || - ||  
| Unknown || <code>0x00</code> || 16 || - || Random 16 bytes of unknown purpose
|-
|-
| Unknown || <code>0x10</code> || 16 || - ||
| Padding || <code>0x10</code> || 32 || - || Zero byte padding (32 bytes)
|-
| Unknown || <code>0x20</code> || 16 || - ||  
|-
|-
| Content Key Seed || <code>0x30</code> || 16 || - || Used to generate PFS key
| Content Key Seed || <code>0x30</code> || 16 || - || Used to generate PFS key
Line 82: Line 168:
| SELF Key Seed || <code>0x40</code> || 16 || - || Used to generate SELF key
| SELF Key Seed || <code>0x40</code> || 16 || - || Used to generate SELF key
|-
|-
| Unknown || <code>0x50</code> || 16 || - ||  
| Unknown || <code>0x50</code> || 16 || - || Random 16 bytes of unknown purpose
|-
|-
| Unknown || <code>0x60</code> || 16 || - ||  
| Unknown || <code>0x60</code> || 16 || - || Random 16 bytes of unknown purpose
|-
|-
| Entitlement Key || <code>0x70</code> || 16 || - ||  
| Entitlement Key || <code>0x70</code> || 16 || - || Usually all zeroes. Used on Additional Content
|-
|-
| Unknown || <code>0x80</code> || 16 || - ||  
| Padding || <code>0x80</code> || 16 || - || Zero byte padding (16 bytes)
|}
|}


Line 154: Line 240:
| [[Entitlement label]] || <code>0x00</code> || 16 || <code>PLAYROOM00000000</code> ||  
| [[Entitlement label]] || <code>0x00</code> || 16 || <code>PLAYROOM00000000</code> ||  
|-
|-
| Offset || <code>0x10</code> || 8 || <code>00 04 00 00 00 00 00 00</code> || Offset into [[#RIFA File|RIFA file]]
| RIF Offset || <code>0x10</code> || 8 || <code>00 04 00 00 00 00 00 00</code> || Offset into [[#RIFA File|RIFA file]]
|-
|-
| Size || <code>0x18</code> || 8 || <code>00 04 00 00 00 00 00 00</code> ||
| RIF Size || <code>0x18</code> || 8 || <code>00 04 00 00 00 00 00 00</code> ||
|-
|-
| Unknown || <code>0x20</code> || 1 || <code>01</code> ||
| Unknown || <code>0x20</code> || 1 || <code>01</code> ||
|-
|-
| Unknown || <code>0x21</code> || 15 || - ||  
| Unknown || <code>0x21</code> || 1 || <code>00</code> ||
|-
| RIF HMAC || <code>0x22</code> || 8 || - || First 8 bytes of HMACSHA256 of RIF data using per-console data as key
|-
| Unknown || <code>0x2A</code> || 6 || - ||  
|}
|}


{{File Formats}}
{{File Formats}}
<noinclude>[[Category:Main]]</noinclude>
<noinclude>[[Category:Main]]</noinclude>

Latest revision as of 03:21, 7 June 2024

Can be found in:

  • /user/license/*.rif, /user/license/*.idx
  • /user/home/*/license/*.rif, /user/home/*/license/*.idx
  • /mnt/disc/license/rif
  • /preinst2/app/CUSA00001/app.rif
  • Sc0/license.dat (in PKG entries)

Sample rif files.

Rights Information Files[edit | edit source]

For a rif file that is paired with an idx file, see RIFA file.

RIF[edit | edit source]

Fields are big-endian.

Name Offset Size Example Remark
Signature 0x000 4 52 49 46 00 ('RIF\0')
Version 0x004 2 00 01 See Type
Unknown 0x006 2 FF FF
PSN Account ID 0x008 8 AB CD EF 01 02 34 78 91 0 if not KDS RIF
Start Timestamp 0x010 8 00 00 00 00 52 85 64 00 Start timestamp (unix/epoch)
End Timestamp 0x018 8 7F FF FF FF FF FF FF FF End timestamp (unix/epoch), typically INT64_MAX
Content ID 0x020 48 IP9100-CUSA00001_00-PLAYROOM00000000
Type 0x050 2 01 01 See Type
DRM Type 0x052 2 00 0F Same as PKG DRM Type, PS5 Uses 00 10
Content Type 0x054 2 00 1A Same as PKG Content Type, PS5 Uses 00 20
SKU Flag 0x056 2 00 01 Not Bootable 0 Trial 1 Full Game 3
Extra Flags 0x058 4 00 00 00 00
Unknown 0x060 4 00 02 00 00 PS5 Uses 00 00 00 00
Unknown 0x064 4 00 00 00 01
Unknown 0x068 3 -
Unknown 0x06B 1 - 02 on old rifs (3.55), 03 on new rifs (5.00)
Unknown 0x06C 468 -
Disc Key 0x240 32 -
Secret Encryption IV 0x260 16 - At least on debug/fake RIFs, this is the first 16 bytes of the SHA-256 hash of the Content ID (all 48 bytes including nulls)
Encrypted Secret 0x270 144 - See Secret for when decrypted. On debug/fake rifs, the decrypted secret is empty except the first 16 bytes, which are the second 16 bytes of the Content ID hash.
RSA Signature 0x300 256 - Verified using public key depending on type

Type[edit | edit source]

Type FW Type Min Ver Max Ver Name Description Remarks
0x000 All 1 1 KDS (NPDRM) Used for digital content Revoked in at least 4.05
0x001 All 2 2
0x002 All 3 3
0x101 All 1 1 Isolated (Free,Kiosk) Used for truly free content (Playroom, Vue, Spotify)
0x302
0x102 All 1 1 Disc Used for Blu-ray content
0x200 DEX/TEST 1 1 Fake/Debug Used for testing/debugging
0x201
0x202
0x303 CEX 1 1 ?
0x304 ? (not CEX) 1 1 ?
0x305 DEX/TEST 1 1 ?

Secret[edit | edit source]

Name Offset Size Example Remark
Unknown 0x00 16 - Random 16 bytes of unknown purpose
Padding 0x10 32 - Zero byte padding (32 bytes)
Content Key Seed 0x30 16 - Used to generate PFS key
SELF Key Seed 0x40 16 - Used to generate SELF key
Unknown 0x50 16 - Random 16 bytes of unknown purpose
Unknown 0x60 16 - Random 16 bytes of unknown purpose
Entitlement Key 0x70 16 - Usually all zeroes. Used on Additional Content
Padding 0x80 16 - Zero byte padding (16 bytes)

RIFA File[edit | edit source]

See also RIDX structure for the paired idx file.

When in this form, a RIFA header is present, followed by sequential rifs.

RIFA Header[edit | edit source]

Fields are big-endian.

Name Offset Size Example Remark
Signature 0x000 4 52 49 46 00 ('RIF\0')
Service ID 0x004 48 IP9100-CUSA00001_00 Size assumed
Unknown 0x034 972 -

RIDX File[edit | edit source]

RIDX Header[edit | edit source]

Fields are little-endian.

Name Offset Size Example Remark
Signature 0x00 4 78 64 69 72 ('xdir')
RIF Count 0x04 4 01 00 00 00
Version 0x08 1 01 1 (current)
Service ID 0x09 19 IP9100-CUSA00001_00
Unknown 0x1C 4 01 00 00 00
Entries 0x20 48 * RIF Count - See RIDX entry

RIDX Entry[edit | edit source]

Fields are little-endian.

Name Offset Size Example Remark
Entitlement label 0x00 16 PLAYROOM00000000
RIF Offset 0x10 8 00 04 00 00 00 00 00 00 Offset into RIFA file
RIF Size 0x18 8 00 04 00 00 00 00 00 00
Unknown 0x20 1 01
Unknown 0x21 1 00
RIF HMAC 0x22 8 - First 8 bytes of HMACSHA256 of RIF data using per-console data as key
Unknown 0x2A 6 -