Editing Rights Information Files

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 1: Line 1:
* See also [https://www.psdevwiki.com/ps3/RIF PSP, PS3 and PS Vita RIF files].
== rif ==
location: [PS4VOLUME]/license/rif


See also [[Rif/samples|Sample RIF files]].
=== 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 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


== Location ==


The PS4 Rights Information Files and associated files can be found in:
* <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)
== RIF ==
For a RIF file that is paired with an IDX file, see [[#RIFA File|RIFA file]].
=== RIF Structure ===
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
|-
| Magic || <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> ||
|-
| NP 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.
|-
| Signature || <code>0x300</code> || 256 || - || RSA2048 signature. 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 ===
* See also [https://psdevwiki.com/ps3/SELF_-_SPRX#Supplemental_Header_Table PS Vita shared secret on PS3 Dev Wiki] contained in some PS Vita SELF headers.
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.
{| class="wikitable sortable"
! style="width: 25%" | Name
! style="width: 5%" | Offset
! style="width: 5%" | Size
! style="width: 25%" | Example
! style="width: 40%" | Remark
|-
| Content ID Hash || <code>0x00</code> || 16 || - || On debug/fake RIFs, this is the second 16 bytes of the Content ID hash.
|-
| Padding || <code>0x10</code> || 32 || - || Zero byte padding (32 bytes)
|-
| 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 || - || Random 16 bytes of unknown purpose
|-
| Unknown || <code>0x60</code> || 16 || - || Random 16 bytes of unknown purpose
|-
| Entitlement Key || <code>0x70</code> || 16 || - || Usually all zeroes. Used on Additional Content
|-
| Padding || <code>0x80</code> || 16 || - || Zero byte padding (16 bytes)
|}
== 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 Structure ===
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
|-
| Magic || <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 Structure ===
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
|-
| Magic || <code>0x00</code> || 4 || <code>78 64 69 72</code> ('xdir', meaning RIF index) ||
|-
| Entries Count || <code>0x04</code> || 4 || code>01 00 00 00</code>, <code>03 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>, <code>00 00 00 00</code> ||
|-
| Entries || <code>0x20</code> || 48 * Entries_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 Digest || <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>
Please note that all contributions to PS4 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS4 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)