Rights Information Files: Difference between revisions

From PS4 Developer wiki
Jump to navigation Jump to search
mNo edit summary
No edit summary
 
(30 intermediate revisions by 5 users not shown)
Line 1: Line 1:
== rif ==
* See also [https://www.psdevwiki.com/ps3/RIF PSP, PS3 and PS Vita RIF files].
location: [PS4VOLUME]/license/rif


=== Example 1 ===
See also [[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


=== Example 2 ===
== Location ==
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
 
   
The PS4 Rights Information Files and associated files can be found in:
00000000  52 49 46 00 00 01 FF FF 00 00 00 00 00 00 00 00  RIF...ÿÿ........
* <code>/user/license/*.rif</code>, <code>/user/license/*.idx</code>
00000010  00 00 00 00 51 50 61 43 7F FF FF FF FF FF FF FF ....QPaC.ÿÿÿÿÿÿÿ
* <code>/user/home/*/license/*.rif</code>, <code>/user/home/*/license/*.idx</code>
00000020  45 50 39 30 30 30 2D 43 55 53 41 30 30 35 35 36  EP9000-CUSA00556
* <code>/mnt/disc/license/rif</code>
00000030  5F 30 30 2D 54 48 45 4C 41 53 54 4F 46 55 53 30  _00-THELASTOFUS0
* <code>/preinst2/app/CUSA00001/app.rif</code>
00000040  30 30 30 30 00 00 00 00 00 00 00 00 00 00 00 00  0000............
* <code>Sc0/license.dat</code> (in PKG entries)
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  ................
== RIF ==
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  ................
For a RIF file that is paired with an IDX file, see [[#RIFA File|RIFA file]].
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  ................
=== RIF Structure ===
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  ................
Fields are big-endian.
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  ................
{| class="wikitable sortable"
000000F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
! style="width: 25%" | Name
00000100  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
! style="width: 5%" | Offset
00000110  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
! style="width: 5%" | Size
00000120  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
! style="width: 25%" | Example
00000130  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
! style="width: 40%" | Remark
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  ................
| Magic || <code>0x000</code> || 4 || <code>52 49 46 00</code> ('RIF\0') ||
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  ................
| Version || <code>0x004</code> || 2 || <code>00 01</code> || See [[#Type|Type]]
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  ................
| Unknown || <code>0x006</code> || 2 || <code>FF FF</code> ||
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  ................
| NP Account ID || <code>0x008</code> || 8 || <code>AB CD EF 01 02 34 78 91</code> || 0 if not KDS RIF
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  ................
| Start Timestamp || <code>0x010</code> || 8 || <code>00 00 00 00 52 85 64 00</code> || Start timestamp (unix/epoch)
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  ................
| End Timestamp || <code>0x018</code> || 8 || <code>7F FF FF FF FF FF FF FF</code> || End timestamp (unix/epoch), typically INT64_MAX
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  ................
| [[Content ID]] || <code>0x020</code> || 48 || <code>IP9100-CUSA00001_00-PLAYROOM00000000</code> ||
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  ................
| Type || <code>0x050</code> || 2 || <code>01 01</code> || See [[#Type|Type]]
00000240  4F CC 54 C6 C7 B0 50 27 99 7B F7 88 8A 14 BF E6  OÌTÆÇ°P'™{÷ˆŠ.¿æ
|-
00000250  4B EF CF ED 5F AB 91 F5 88 B0 52 21 10 1C 5F BD  KïÏí_«‘õˆ°R!.._½
| DRM Type || <code>0x052</code> || 2 || <code>00 0F</code> || Same as PKG DRM Type. PS5 Uses 00 10.
00000260  33 D2 FA 8E 66 00 7B 67 E1 38 A8 64 8C B7 ED 06  3ÒúŽf.{gá8¨dŒ·í.
|-
00000270  15 1D 4B 7D 0C 2B 00 6D CD 54 D6 BF 41 C2 F3 9F  ..K}.+.mÍTÖ¿AÂóŸ
| Content Type || <code>0x054</code> || 2 || <code>00 1A</code> || Same as PKG Content Type. PS5 Uses 00 20.
00000280  EE D8 C7 6A A7 1D E7 2F D9 60 04 77 6E E0 B6 CA  îØÇj§.ç/Ù`.wnà¶Ê
|-
00000290  90 CD F8 0C A7 31 DC EB C8 75 F3 88 73 6D FE 0C  .Íø.§1ÜëÈuóˆsmþ.
| SKU Flag || <code>0x056</code> || 2 || <code>00 01</code> || Not Bootable: 0, Trial: 1, Full Game: 3
000002A0  A7 21 C5 41 7E C3 94 92 D2 A1 10 DA 30 8C 73 59  §!ÅA~Ô’Ò¡.Ú0ŒsY
|-
000002B0  B0 07 20 C4 01 11 55 49 C5 47 C2 3C 2F 53 83 3C  °. Ä..UIÅGÂ</Sƒ<
| Extra Flags || <code>0x058</code> || 4 || <code>00 00 00 00</code> ||
000002C0  9F CD 72 05 61 13 36 3B 72 53 CA EA 8D BC AF F2  ŸÍr.a.6;rSÊê.¼¯ò
|-
000002D0  50 91 B5 2C 27 BB 8C 95 39 91 A0 E4 C4 F2 64 2F  P‘µ,'»Œ•9‘ äÄòd/
| Unknown || <code>0x060</code> || 4 || <code>00 02 00 00</code> || PS5 Uses 00 00 00 00
000002E0  A1 A0 01 85 43 74 5F 9C 3C 07 42 29 75 6E 03 13  ¡ .…Ct_œ<.B)un..
|-
000002F0  F3 C7 33 A1 52 21 9F 91 20 A7 61 42 7E 8F 53 F6  óÇ3¡R!Ÿ‘ §aB~.Sö
| Unknown || <code>0x064</code> || 4 || <code>00 00 00 01</code> ||
00000300  BD 8E DA 34 83 49 D1 CA C7 48 C3 9A 6B EF E1 FE  ½ŽÚ4ƒIÑÊÇHÚkïáþ
|-
00000310  38 BA C0 96 91 29 3D AA 75 3C CC 46 D6 2B AD 23  8ºÀ–‘)=ªu<ÌFÖ+­#
| Unknown || <code>0x068</code> || 3 || - ||
00000320  C1 49 19 B9 00 59 18 95 03 3B FB 4A E5 49 68 11  ÁI.¹.Y.•.;ûJåIh.
|-
00000330  E5 0D C7 D0 A8 B9 F7 25 4C 01 AE E1 95 87 56 63  å.ÇШ¹÷%L.®á•‡Vc
| Unknown || <code>0x06B</code> || 1 || - || 02 on old RIFs (3.55), 03 on new RIFs (5.00)
00000340  A2 E5 13 19 CE 56 F4 6B D4 92 ED F3 CF 7A 39 95  ¢å..ÎVôkÔ’íóÏz9•
|-
00000350  19 2F A6 4A 99 47 84 B3 D3 CC CD EF 97 03 4A FE  ./¦J™G„³ÓÌÍï—.Jþ
| Unknown || <code>0x06C</code> || 468 || - ||
00000360  DC 3D 41 44 27 D3 54 AA D2 2A D8 00 7A 13 44 B8  Ü=AD'ÓTªÒ*Ø.z.D¸
|-
00000370  84 37 ED 5A 24 5F 91 0A 47 84 A7 F4 83 CA C9 78  „7íZ$_‘.G„§ôƒÊÉx
| Disc Key || <code>0x240</code> || 32 || - ||
00000380  0B 85 34 21 2F C0 ED 7F 7E 5E 5F 55 C9 5C 23 39  .…4!/Àí.~^_UÉ\#9
|-
00000390  30 99 CD 33 F6 F4 CE 9E 8F E7 64 58 97 31 5B DB  0™Í3öôΞ.çdX—1[Û
| 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)
000003A0  25 73 9C 30 3B CD 58 40 01 62 84 A1 5C D8 BC 36  %sœ0;Í[email protected]„¡\ؼ6
|-
000003B0  68 58 4F BB 0B C5 6F 52 62 1A 87 5D CD DD 90 47  hXO».ÅoRb.‡]ÍÝ.G
| 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.
000003C0  F7 C7 E7 9A 8A 63 71 07 CD EB 5B 97 B7 D2 86 78  ÷Ç皊cq.Íë[—·Ò†x
|-
000003D0  2A 77 3D D0 40 30 95 99 AD 77 29 00 72 8B 3F AE  *w=Ð@0•™­w).r‹?®
| Signature || <code>0x300</code> || 256 || - || RSA2048 signature. Verified using public key depending on type
000003E0  EC 27 18 21 55 D8 6B 4A A3 9E 1A 65 0F 05 AF 10  ì'.!UØkJ£ž.e..¯.
|}
000003F0  DC D0 0D 66 55 1A 94 F6 21 5A 71 A5 96 99 C2 28  ÜÐ.fU.”ö!Zq¥–™Â(
 
=== 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>

Latest revision as of 01:36, 17 December 2024

See also Sample RIF files.

Location[edit | edit source]

The PS4 Rights Information Files and associated files 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)

RIF[edit | edit source]

For a RIF file that is paired with an IDX file, see RIFA file.

RIF Structure[edit | edit source]

Fields are big-endian.

Name Offset Size Example Remark
Magic 0x000 4 52 49 46 00 ('RIF\0')
Version 0x004 2 00 01 See Type
Unknown 0x006 2 FF FF
NP 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.
Signature 0x300 256 - RSA2048 signature. 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]

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.

Name Offset Size Example Remark
Content ID Hash 0x00 16 - On debug/fake RIFs, this is the second 16 bytes of the Content ID hash.
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 Structure[edit | edit source]

Fields are big-endian.

Name Offset Size Example Remark
Magic 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 Structure[edit | edit source]

Fields are little-endian.

Name Offset Size Example Remark
Magic 0x00 4 78 64 69 72 ('xdir', meaning RIF index)
Entries Count 0x04 4 code>01 00 00 00, 03 00 00 00
Version 0x08 1 01 1 (current)
Service ID 0x09 19 IP9100-CUSA00001_00
Unknown 0x1C 4 code>01 00 00 00, 00 00 00 00
Entries 0x20 48 * Entries_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 Digest 0x22 8 - First 8 bytes of HMACSHA256 of RIF data using per-console data as key
Unknown 0x2A 6 -