Rights Information Files: Difference between revisions

From PS4 Developer wiki
Jump to navigation Jump to search
(Created page with "== rif == location: [PS4VOLUME]/license/rif === Example === Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00000000 52 49 46 00 00 01 FF FF 00 00 00 00 00 0...")
 
 
(25 intermediate revisions by 5 users not shown)
Line 1: Line 1:
== rif ==
Can be found in:
location: [PS4VOLUME]/license/rif
* <code>/user/license/*.rif</code>, <code>/user/license/*.idx</code>
* <code>/user/home/*/license/*.rif</code>, <code>/user/home/*/license/*.idx</code>
* <code>/mnt/disc/license/rif</code>
* <code>/preinst2/app/CUSA00001/app.rif</code>
* <code>Sc0/license.dat</code> (in PKG entries)


=== Example ===
[[Rif/samples|Sample rif files]].
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
 
00000000  52 49 46 00 00 01 FF FF 00 00 00 00 00 00 00 00  RIF...ÿÿ........
00000010  00 00 00 00 51 50 61 43 7F FF FF FF FF FF FF FF  ....QPaC.ÿÿÿÿÿÿÿ
00000020  45 50 30 30 38 32 2D 43 55 53 41 30 30 32 35 30  EP0082-CUSA00250
00000030  5F 30 30 2D 54 48 49 45 46 30 30 30 30 45 46 49  _00-THIEF0000EFI
00000040  47 53 50 4C 00 00 00 00 00 00 00 00 00 00 00 00  GSPL............
00000050  01 02 00 0F 00 1A 00 03 00 00 00 00 00 00 00 00  ................
00000060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000090  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000100  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000110  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000120  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000130  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000140  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000150  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000160  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000170  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000180  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000190  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000200  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000210  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000220  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000230  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000240  5A 6E C7 E3 85 84 06 C4 8F 76 3B 18 1C E8 02 90  ZnÇã…„.Ä.v;..è..
00000250  1E 03 85 99 C7 09 7F 5A 4A E2 CE 2E E4 1E 41 A7  ..…™Ç..ZJâÎ.ä.A§
00000260  33 D2 FA 8E 66 00 7B 67 E1 38 A8 64 8C B7 ED 06  3ÒúŽf.{gá8¨dŒ·í.
00000270  D4 F1 7E 82 C6 37 D7 C4 04 2C 88 43 66 83 5E D0  Ôñ~‚Æ7×Ä.,ˆCfƒ^Ð
00000280  F2 0C 83 69 72 A8 B4 3E E3 D3 59 15 B8 8B D0 52  ò.ƒir¨´>ãÓY.¸‹ÐR
00000290  3F 57 6A 45 AF 80 8A 5B D2 F6 69 75 62 B4 EA 95  ?WjE¯€Š[Òöiub´ê•
000002A0  01 AD 93 26 8A E8 2F 22 11 39 88 63 43 F6 3B 4B  .­“&Šè/".9ˆcCö;K
000002B0  20 45 51 7F 5E AF 3E 95 54 CB 01 0C 08 F2 CE 28  EQ.^¯>•TË...òÎ(
000002C0  E1 9B 61 77 E3 6D E4 E0 FA 62 F9 6F 5F 40 DA 0D  á›awãmäàúbùo_@Ú.
000002D0  27 99 65 76 4F 75 A2 06 48 A0 47 95 11 65 04 F0  '™evOu¢.H G•.e.ð
000002E0  21 3B FF 94 DF 80 69 52 6E D7 F8 FF 07 23 BE BC  !;ÿ”߀iRn×øÿ.#¾¼
000002F0  D4 EA 5F 55 D4 67 FD 78 8E 7D A5 42 07 89 AE 19  Ôê_UÔgýxŽ}¥B.‰®.
00000300  15 6A E3 7F 65 33 78 DA 3E C2 BD 40 90 77 BD 61  .jã.e3xÚ>½@.w½a
00000310  FA C8 ED 30 DC 06 1B AE 3F 6C 87 7C F4 DF 61 9C  úÈí0Ü..®?l‡|ôßaœ
00000320  F0 77 32 F7 E7 B4 F7 21 05 F7 9A C6 71 F0 73 2B  ðw2÷ç´÷!.÷šÆqðs+
00000330  CB 50 2F 17 9C E5 E4 D2 7D 75 E6 CE A8 13 68 DB  ËP/.œåäÒ}uæΨ.hÛ
00000340  8B 23 32 2E 55 B0 E1 C5 F2 B5 6D 05 BE 6D 54 F9  ‹#2.U°áÅòµm.¾mTù
00000350  1D A7 8A 2D 53 6A 7B 15 E3 D6 0D 18 5B 25 29 53  .§Š-Sj{.ãÖ..[%)S
00000360  B5 D6 D2 B4 19 B8 19 34 54 DC 8E CA 71 D4 2A BA  µÖÒ´.¸.4TÜŽÊqÔ*º
00000370  06 25 5B 61 83 F8 7C 27 DB F0 F6 A5 BF EF 43 FC  .%[aƒø|'Ûðö¥¿ïCü
00000380  83 85 30 AD C4 1A 33 48 AA 54 DF 8B 0E F4 1D 9E  ƒ…0­Ä.3HªTß‹.ô.ž
00000390  E9 27 75 68 18 C8 E7 7D C4 4E 17 09 EB B5 00 00  é'uh.Èç}ÄN..ëµ..
000003A0  65 69 52 2C EE 9C 5E AE B3 BB C7 44 C4 19 11 2E  eiR,îœ^®³»ÇDÄ...
000003B0  80 CF 45 2C 62 A2 F8 A0 6F 22 7E 6E 0E 3B 8B 66  €ÏE,b¢ø o"~n.;‹f
000003C0  55 A5 A4 7B 75 69 EE 9F 8E DD 82 94 AB 20 B2 DD  U¥¤{ui݂”« ²Ý
000003D0  9F 7B CA 93 39 CB 4E 11 F2 09 F9 4A 9C 16 62 E5  Ÿ{Ê“9ËN.ò.ùJœ.bå
000003E0  DE 61 D5 C6 E8 D1 DC 9D FD BD 23 8F ED 35 F8 B8  ÞaÕÆèÑÜ.ý½#.í5ø¸
000003F0  AD F1 66 F8 C3 FA E5 76 F3 E4 8A DD 45 4B 29 42  ­ñføÃúåvóäŠÝEK)B


== Rights Information Files ==


For a rif file that is paired with an idx file, see [[#RIFA File|RIFA file]].
=== RIF ===
Fields are big-endian.
{| class="wikitable sortable"
! style="width: 25%" | Name
! style="width: 5%" | Offset
! style="width: 5%" | Size
! style="width: 25%" | Example
! style="width: 40%" | Remark
|-
| Signature || <code>0x000</code> || 4 || <code>52 49 46 00</code> ('RIF\0') ||
|-
| Version || <code>0x004</code> || 2 || <code>00 01</code> || See [[#Type|Type]]
|-
| Unknown || <code>0x006</code> || 2 || <code>FF FF</code> ||
|-
| PSN Account ID || <code>0x008</code> || 8 || <code>AB CD EF 01 02 34 78 91</code> || 0 if not KDS RIF
|-
| Start Timestamp || <code>0x010</code> || 8 || <code>00 00 00 00 52 85 64 00</code> || Start timestamp (unix/epoch)
|-
| End Timestamp || <code>0x018</code> || 8 || <code>7F FF FF FF FF FF FF FF</code> || End timestamp (unix/epoch), typically INT64_MAX
|-
| [[Content ID]] || <code>0x020</code> || 48 || <code>IP9100-CUSA00001_00-PLAYROOM00000000</code> ||
|-
| Type || <code>0x050</code> || 2 || <code>01 01</code> || See [[#Type|Type]]
|-
| DRM Type || <code>0x052</code> || 2 || <code>00 0F</code> || Same as PKG DRM Type, PS5 Uses 00 10
|-
| Content Type || <code>0x054</code> || 2 || <code>00 1A</code> || Same as PKG Content Type,  PS5 Uses 00 20
|-
| 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> ||
|-
| Unknown || <code>0x060</code> || 4 || <code>00 02 00 00</code> || PS5 Uses 00 00 00 00
|-
| 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 || - ||
|-
| 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. 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
|}
==== 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
| ?
|
|
|}
=== Secret ===
{| class="wikitable sortable"
! style="width: 25%" | Name
! style="width: 5%" | Offset
! style="width: 5%" | Size
! style="width: 25%" | Example
! style="width: 40%" | Remark
|-
| Unknown || <code>0x00</code> || 16 || - ||
|-
| Unknown || <code>0x10</code> || 16 || - ||
|-
| Unknown || <code>0x20</code> || 16 || - ||
|-
| Content Key Seed || <code>0x30</code> || 16 || - || Used to generate PFS key
|-
| SELF Key Seed || <code>0x40</code> || 16 || - || Used to generate SELF key
|-
| Unknown || <code>0x50</code> || 16 || - ||
|-
| Unknown || <code>0x60</code> || 16 || - ||
|-
| Entitlement Key || <code>0x70</code> || 16 || - ||
|-
| Unknown || <code>0x80</code> || 16 || - ||
|}
== RIFA File ==
See also [[#RIDX Structure|RIDX structure]] for the paired idx file.
When in this form, a [[#RIFA Header|RIFA header is present]], followed by sequential [[#RIF|rifs]].
=== RIFA Header ===
Fields are big-endian.
{| class="wikitable sortable"
! style="width: 25%" | Name
! style="width: 5%" | Offset
! style="width: 5%" | Size
! style="width: 25%" | Example
! style="width: 40%" | Remark
|-
| Signature || <code>0x000</code> || 4 || <code>52 49 46 00</code> ('RIF\0') ||
|-
| [[Service ID]] || <code>0x004</code> || 48 || <code>IP9100-CUSA00001_00</code> || ''Size assumed''
|-
| Unknown || <code>0x034</code> || 972 || - ||
|}
== RIDX File ==
=== RIDX Header ===
Fields are little-endian.
{| class="wikitable sortable"
! style="width: 25%" | Name
! style="width: 5%" | Offset
! style="width: 5%" | Size
! style="width: 25%" | Example
! style="width: 40%" | Remark
|-
| Signature || <code>0x00</code> || 4 || <code>78 64 69 72</code> ('xdir') ||
|-
| RIF Count || <code>0x04</code> || 4 || <code>01 00 00 00</code> ||
|-
| Version || <code>0x08</code> || 1 || <code>01</code> || 1 (current)
|-
| [[Service ID]] || <code>0x09</code> || 19 || <code>IP9100-CUSA00001_00</code> ||
|-
| Unknown || <code>0x1C</code> || 4 || <code>01 00 00 00</code> ||
|-
| Entries || <code>0x20</code> || 48 * RIF Count || - || See [[#RIDX Entry|RIDX entry]]
|}
=== RIDX Entry ===
Fields are little-endian.
{| class="wikitable sortable"
! style="width: 25%" | Name
! style="width: 5%" | Offset
! style="width: 5%" | Size
! style="width: 25%" | Example
! style="width: 40%" | Remark
|-
| [[Entitlement label]] || <code>0x00</code> || 16 || <code>PLAYROOM00000000</code> ||
|-
| RIF Offset || <code>0x10</code> || 8 || <code>00 04 00 00 00 00 00 00</code> || Offset into [[#RIFA File|RIFA file]]
|-
| 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>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 23:21, 18 June 2023

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 -
Unknown 0x10 16 -
Unknown 0x20 16 -
Content Key Seed 0x30 16 - Used to generate PFS key
SELF Key Seed 0x40 16 - Used to generate SELF key
Unknown 0x50 16 -
Unknown 0x60 16 -
Entitlement Key 0x70 16 -
Unknown 0x80 16 -

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 -