SceKrm: Difference between revisions

From Vita Development Wiki
Jump to navigation Jump to search
(Created page with "Key ring manager module. It does almost same operations as dmac and Magic Gate Key Manager (sha256 of opensid + seed). Its syscalls requires the calling app to have a SELF ca...")
 
No edit summary
 
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Key ring manager module.
Key ring manager module.


It does almost same operations as dmac and Magic Gate Key Manager (sha256 of opensid + seed). Its syscalls requires the calling app to have a SELF capability. It might be the equivalent of Magic Gate Key Manager for Play Ready. See [[SceAppMgr#sceAppMgrSetSystemDataFilePlayReady]].
It works a bit like DMAC Manager and Magic Gate Key Manager (for example it uses OpenPsId and sha256). Its syscalls requires the calling app to have an appropriate SELF capability. It might be the equivalent of Magic Gate Key Manager for Play Ready. It is imported in sceplayready.suprx in some usermode applications, usually online TV streaming applications. See [[SceAppMgr#sceAppMgrSetSystemDataFilePlayReady]].
 
That might work with a file of size 0x40 bytes, magic "SDPR" for SceSystemDataFilePlayReady.


== Module ==
== Module ==
This module is present since FW 3.00.


{| class="wikitable"
{| class="wikitable"
|-
|-
! Version !! Name !! World !! Privilege
! Version !! World !! Privilege
|-
|-
| 3.60 || SceKrm || Non-secure || Kernel
| 3.00-3.60 || Non-secure || Kernel
|}
|}


Line 47: Line 51:
</pre>
</pre>


== Subroutines ==
=== sceKrmBignumMulAdd ===
{| class="wikitable"
|-
! Version !! Offset !! Mode
|-
| 3.60 || 0x61F4 || Thumb
|}
<source lang="C">
// dst += (s1 * s2)
void sceKrmBignumMulAdd(void *s1, uint32_t s2, void *dst, int words);
</source>
=== sceKrmBignumNMul ===
{| class="wikitable"
|-
! Version !! Offset !! Mode
|-
| 3.60 || 0x63BC || Thumb
|}
<source lang="C">
// dst = (0 - dst) - (s1 * s2)
int sceKrmBignumNMul(void *s1, uint32_t s2, void *dst, int words);
</source>


=== sceKrmBignumMod ===
{| class="wikitable"
|-
! Version !! Offset !! Mode
|-
| 3.60 || 0x6F28 || Thumb
|}
<source lang="C">
// dst = s1 % s2
int sceKrmBignumMod(const void *s1, int s1_words, const void *s2, int s2_words, void *a5, int a6, void *dst);
</source>
=== sceKrmEcdsaVerifyCore ===
{| class="wikitable"
|-
! Version !! Offset !! Mode
|-
| 3.60 || 0x5ACC || Thumb
|}
<source lang="C">int sceKrmEcdsaVerifyCore(const void *hash, const void *pubkey, const void *sign, void *ctx);</source>
=== ecdsa_ctx ===
{| class="wikitable"
|-
! Version !! Segment !! Offset
|-
| 3.60 || data || 0x55C
|}
This is just variable.
[[Category:ARM]]
[[Category:Kernel]]
[[Category:Modules]]
[[Category:Modules]]
[[Category:Kernel]]
[[Category:Library]]

Latest revision as of 21:07, 1 May 2023

Key ring manager module.

It works a bit like DMAC Manager and Magic Gate Key Manager (for example it uses OpenPsId and sha256). Its syscalls requires the calling app to have an appropriate SELF capability. It might be the equivalent of Magic Gate Key Manager for Play Ready. It is imported in sceplayready.suprx in some usermode applications, usually online TV streaming applications. See SceAppMgr#sceAppMgrSetSystemDataFilePlayReady.

That might work with a file of size 0x40 bytes, magic "SDPR" for SceSystemDataFilePlayReady.

Module

This module is present since FW 3.00.

Version World Privilege
3.00-3.60 Non-secure Kernel

Libraries

Known NIDs

Version Name World Visibility NID
3.60 SceKrm Non-secure User 0x17EDC66B

SceKrm

0x10202EB4, SceKrm_10202EB4, addr: 0x81001C24
0x18DE25C6, SceKrm_18DE25C6, addr: 0x810022C0
0x2528D613, SceKrm_2528D613, addr: 0x81002018
0x3257BD35, SceKrm_3257BD35, addr: 0x81002EB4
0x350C8251, SceKrm_350C8251, addr: 0x81001F04
0x41547BE1, SceKrm_41547BE1, addr: 0x81002AC0
0x5296A954, SceKrm_5296A954, addr: 0x81002430
0x7251237D, SceKrm_7251237D, addr: 0x81002548
0x7401B932, SceKrm_7401B932, addr: 0x81002BD4
0x820B45C6, SceKrm_820B45C6, addr: 0x81001758
0x949506DC, SceKrm_949506DC, addr: 0x81002150
0x98EEB7F3, SceKrm_98EEB7F3, addr: 0x81001D94
0xA100E9C3, SceKrm_A100E9C3, addr: 0x81001A98
0xA9201DA3, SceKrm_A9201DA3, addr: 0x81002660
0xD7B35BE6, SceKrm_D7B35BE6, addr: 0x81002D48
0xE0AEAE3B, SceKrm_E0AEAE3B, addr: 0x81001864
0xECE6B5F4, SceKrm_ECE6B5F4, addr: 0x810015B4
0xECF53237, SceKrm_ECF53237, addr: 0x81002F2C
0xF0B626E7, SceKrm_F0B626E7, addr: 0x810028A0

Subroutines

sceKrmBignumMulAdd

Version Offset Mode
3.60 0x61F4 Thumb
// dst += (s1 * s2)
void sceKrmBignumMulAdd(void *s1, uint32_t s2, void *dst, int words);

sceKrmBignumNMul

Version Offset Mode
3.60 0x63BC Thumb
// dst = (0 - dst) - (s1 * s2)
int sceKrmBignumNMul(void *s1, uint32_t s2, void *dst, int words);

sceKrmBignumMod

Version Offset Mode
3.60 0x6F28 Thumb
// dst = s1 % s2
int sceKrmBignumMod(const void *s1, int s1_words, const void *s2, int s2_words, void *a5, int a6, void *dst);

sceKrmEcdsaVerifyCore

Version Offset Mode
3.60 0x5ACC Thumb
int sceKrmEcdsaVerifyCore(const void *hash, const void *pubkey, const void *sign, void *ctx);

ecdsa_ctx

Version Segment Offset
3.60 data 0x55C

This is just variable.