Files
AnyPS5/docs/dev/debt/libSceNpEntitlementAccess.md
T
Dean 73f65fba8e Merge pull request #11529 from milescoviello/docs/entitlement-key-call-sites
docs(libSceNpEntitlementAccess): note how two titles call sceNpEntitlementAccessGetEntitlementKey
2026-10-29 07:20:41 +13:00

4.0 KiB

libSceNpEntitlementAccess technical debt

Silent stubs

  • sceNpEntitlementAccessInitialize (libSceNpEntitlementAccess) - returns 0 without reading the init parameter or writing the boot parameter, so the boot parameter keeps what the caller put there. Both are 32 reserved bytes here, and PPSA01494 (at both of its calls), PPSA02225, PPSA03984, PPSA30839, PPSA31162 and PPSA34502 zero exactly 32 bytes of each right before the call. PPSA03984 and PPSA31162 test the result for a negative value. What the console writes into the boot parameter is unknown

Unknown function info

  • sceNpEntitlementAccessGetAddcontEntitlementInfoIndividual, sceNpEntitlementAccessPollConsumableEntitlementInfo, sceNpEntitlementAccessRequestConsumableEntitlementInfo, sceNpEntitlementAccessRequestConsumeEntitlement (libSceNpEntitlementAccess) - their names and NIDs are in the PS5 3.20 export inventory, but no credible prototypes were found. They are declared without parameters solely to resolve known imports; this is not an ABI claim
  • sceNpEntitlementAccessGetEntitlementKey - the three-argument signature, 16-byte key and errors 0x817D0002/0x817D0007 follow KytyPS5; PPSA01521 passes a service label, entitlement label and output pointer. Only the no-key path is implemented: local entitlement labels carry no keys, and the output is untouched on failure. Console error precedence and key provisioning are unverified. PPSA03984 01.020.000 (at 0x5949837) and PPSA30839 01.003.000 (0x4505EC5), disassembled for this entry, pass service label 0, a pointer into an array of their own with 28-byte elements and a stack output, one call per element in a loop; after a failure (a negative result in PPSA03984, any nonzero one in PPSA30839) they go on with the next element, and on success PPSA03984 reads 16 bytes of the output
  • Entitlement requests and polls: native argument lists are restored for single-item, list and consume operations, plus abort/delete. Request IDs are 64-bit, labels occupy 20 bytes and transaction IDs occupy 72 bytes. List options occupy 32 bytes and results have a 64-byte stride; their field semantics and three list-result scalars remain unresolved. The existing signed-out responses do not reproduce native initialization, validation or asynchronous request handling; abort and delete go through NotImplemented_nid_no_patch until request tracking is implemented, as the library keeps no request table.

Functional

  • sceNpEntitlementAccessGetGameTrialsFlag, sceNpEntitlementAccessGetPftFlag (libSceNpEntitlementAccess) - reports a full game, not a game trial or Play First Trial: writes 0 to the uint32_t output and returns 0, and a null pointer returns 0x817D0002. The single-pointer signature, the value, the one-word write and the error of sceNpEntitlementAccessGetGameTrialsFlag follow sharpemu, which has no sceNpEntitlementAccessGetPftFlag; those of sceNpEntitlementAccessGetPftFlag follow dlc_emu, which takes the same SceNpEntitlementAccessGameTrialsFlag* as the trials flag, writes the OFF value 0 and returns the parameter error for null; 0x817D0002 is the parameter error of KytyPS5, prosper and sceNpEntitlementAccessGetEntitlementKey, while sceNpEntitlementAccessGetSkuFlag here returns 0x80558003. None of this is a console measurement, and PRAGMATA (PPSA02530) shows four live registers at the call, so further arguments are not ruled out