Difference between revisions of "SceSblAuthMgr"

From Vita Development Wiki
Jump to navigation Jump to search
m (Use "real" meaning of Sbl)
Line 7: Line 7:
 
! Version !! World !! Privilege
 
! Version !! World !! Privilege
 
|-
 
|-
| 1.69-3.60 || Non-secure || Kernel
+
| 0.931.010-3.740.011 || Non-secure || Kernel
 
|}
 
|}
  
Line 18: Line 18:
 
! Version !! Name !! World !! Visibility !! NID
 
! Version !! Name !! World !! Visibility !! NID
 
|-
 
|-
| 1.69-3.60 || [[SceSblAuthMgr#SceSblAuthMgrForKernel|SceSblAuthMgrForKernel]] || Non-secure || Kernel || 0x7ABF5135
+
| 0.931.010-3.740.011 || [[SceSblAuthMgr#SceSblAuthMgrForKernel|SceSblAuthMgrForKernel]] || Non-secure || Kernel || 0x7ABF5135
 
|-
 
|-
| 1.69-3.60 || [[SceSblAuthMgr#SceSblAuthMgrForDriver|SceSblAuthMgrForDriver]] || Non-secure || Kernel || 0x4EB2B1BB
+
| 0.931.010-3.740.011 || [[SceSblAuthMgr#SceSblAuthMgrForDriver|SceSblAuthMgrForDriver]] || Non-secure || Kernel || 0x4EB2B1BB
 
|}
 
|}
  
Line 31: Line 31:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xA9CD2A09
+
| 0.931.010-3.740.011 || 0xA9CD2A09
 
|}
 
|}
  
Line 45: Line 45:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x026ACBAD
+
| 0.931.010-3.740.011 || 0x026ACBAD
 
|}
 
|}
  
Line 61: Line 61:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0xCAA38DF7
+
| 0.931.010-0.996.090 || 0xCAA38DF7
 +
|-
 +
| 1.000.071-3.740.011 || not present
 
|}
 
|}
  
Line 72: Line 74:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-0.990 || 0x6C1F5048
+
| 0.931.010-0.996.090 || 0x6C1F5048
 +
|-
 +
| 1.000.071-3.740.011 || not present
 
|}
 
|}
  
Line 83: Line 87:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xF3411881
+
| 0.931.010-3.740.011 || 0xF3411881
 
|}
 
|}
  
Line 96: Line 100:
 
<source lang="C">
 
<source lang="C">
 
// handle - obtained with sceSblAuthMgrOpenForKernel
 
// handle - obtained with sceSblAuthMgrOpenForKernel
int sceSblAuthMgrAuthHeaderForKernel(int handle, const void *pSelfHeader, SceSize SelfHeaderSize, SceSblSmCommContext130 *ctx130);
+
int sceSblAuthMgrAuthHeaderForKernel(int handle, const void *self_header_addr, SceSize SelfHeaderSize, SceSblSmCommContext130 *auth_info);
 
</source>
 
</source>
  
Line 103: Line 107:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0x89CCDA2C
+
| 0.931.010-3.740.011 || 0x89CCDA2C
 
|}
 
|}
  
Line 113: Line 117:
 
// handle - obtained with sceSblAuthMgrOpenForKernel
 
// handle - obtained with sceSblAuthMgrOpenForKernel
  
0.931-1.50
+
0.931.010-1.500
 
int sceSblAuthMgrSetupAuthSegmentForKernel(int handle, int segment_number, int segment_size, void *output_buffer, SceSize program_size);
 
int sceSblAuthMgrSetupAuthSegmentForKernel(int handle, int segment_number, int segment_size, void *output_buffer, SceSize program_size);
  
3.60
+
3.600.011-3.740.011
 
int sceSblAuthMgrSetupAuthSegmentForKernel(int handle, int segment_number);
 
int sceSblAuthMgrSetupAuthSegmentForKernel(int handle, int segment_number);
 
</source>
 
</source>
Line 124: Line 128:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.931-3.60 || 0xBC422443
+
| 0.990.000-3.740.011 || 0xBC422443
 
|}
 
|}
  
Line 140: Line 144:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990 || 0x15248FB4
+
| 0.990.000-1.692.000 || 0x15248FB4
 +
|-
 +
| 1.800.071-3.740.011 || not present
 
|}
 
|}
  
Line 152: Line 158:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.05-3.60 || 0x122ACDEA
+
| 0.990.000-3.740.011 || 0x122ACDEA
 
|}
 
|}
  
Line 166: Line 172:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0xF2BB723E
+
| 0.990.000-3.740.011 || 0xF2BB723E
 
|}
 
|}
  
Line 177: Line 183:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0x2A83A012
+
| 1.800.071-3.740.011 || 0x2A83A012
 
|}
 
|}
  
Returns 0. May be an old function kept for compatibility.
+
Not implemented and returns 0. Maybe implemented in some internal System Software versions.
  
 
<source lang="C">int SceSblAuthMgrForKernel_2A83A012(void);</source>
 
<source lang="C">int SceSblAuthMgrForKernel_2A83A012(void);</source>
Line 188: Line 194:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 3.60 || 0xABAB8466
+
| 0.931.010-0.996.090 || not present
 +
|-
 +
| 1.000.071-3.740.011 || 0xABAB8466
 
|}
 
|}
  
Line 201: Line 209:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 0.990-3.60 || 0x868B9E9A
+
| 0.990.000-3.740.011 || 0x868B9E9A
 
|}
 
|}
  
Line 214: Line 222:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.05-3.60 || 0x41DAEA12
+
| 0.990.000-3.740.011 || 0x41DAEA12
 
|}
 
|}
  
Line 229: Line 237:
 
! Version !! NID
 
! Version !! NID
 
|-
 
|-
| 1.03-3.60 || 0x24C4CE64
+
| 0.931.010-0.990.000 || not present
 +
|-
 +
| 0.996.090-3.740.011 || 0x24C4CE64
 
|}
 
|}
  
Line 253: Line 263:
  
 
<source lang="C">int sceSblAuthMgrVerifySpsfoForDriver(spsfo_ctx *ctx);</source>
 
<source lang="C">int sceSblAuthMgrVerifySpsfoForDriver(spsfo_ctx *ctx);</source>
 +
  
 
[[Category:ARM]]
 
[[Category:ARM]]

Revision as of 23:52, 10 June 2023

Secure Block Authentication Manager

Module

Version World Privilege
0.931.010-3.740.011 Non-secure Kernel

Libraries

Known NIDs

Version Name World Visibility NID
0.931.010-3.740.011 SceSblAuthMgrForKernel Non-secure Kernel 0x7ABF5135
0.931.010-3.740.011 SceSblAuthMgrForDriver Non-secure Kernel 0x4EB2B1BB

SceSblAuthMgrForKernel

These functions are used for SELF decryption.

sceSblAuthMgrOpenForKernel

Version NID
0.931.010-3.740.011 0xA9CD2A09

Temp name was sceSblAuthMgrInvokeSMForKernel, sceSblAuthMgrSmStartForKernel.

// If initialization is successful - pHandle will be initialized to 1
int sceSblAuthMgrOpenForKernel(int *pHandle);

sceSblAuthMgrCloseForKernel

Version NID
0.931.010-3.740.011 0x026ACBAD

Temp name was sceSblAuthMgrStopSMForKernel, sceSblAuthMgrSmStopForKernel.

Issues kprx_auth_sm command -1.

// handle - obtained with sceSblAuthMgrOpenForKernel. handle must equal 1 for successful deinit.
int sceSblAuthMgrCloseForKernel(int handle);

sceSblAuthMgrStartForKernel

Version NID
0.931.010-0.996.090 0xCAA38DF7
1.000.071-3.740.011 not present

Creates SceSblAuthMgrZlibHeap.

int sceSblAuthMgrStartForKernel(void);

sceSblAuthMgrStopForKernel

Version NID
0.931.010-0.996.090 0x6C1F5048
1.000.071-3.740.011 not present

Deletes SceSblAuthMgrZlibHeap.

int sceSblAuthMgrStopForKernel(void);

sceSblAuthMgrAuthHeaderForKernel

Version NID
0.931.010-3.740.011 0xF3411881

Issues kprx_auth_sm command 0x10001

SceSblSmCommContext130 type is defined in SceSblSsSmComm.

?Read caller SELF Info using sceKernelGetSelfAuthInfoForKernel? then writes it to context_130->caller_self_auth_info.

Calls smc_137 and smc_134 that interact with F00D. F00D set context_130->called_self_auth_info.

// handle - obtained with sceSblAuthMgrOpenForKernel
int sceSblAuthMgrAuthHeaderForKernel(int handle, const void *self_header_addr, SceSize SelfHeaderSize, SceSblSmCommContext130 *auth_info);

sceSblAuthMgrSetupAuthSegmentForKernel

Version NID
0.931.010-3.740.011 0x89CCDA2C

Temp name was sceSblAuthMgrLoadSelfSegmentForKernel, sceSblAuthMgrLoadSegmentForKernel.

Issues kprx_auth_sm command 0x20001.

// handle - obtained with sceSblAuthMgrOpenForKernel

0.931.010-1.500
int sceSblAuthMgrSetupAuthSegmentForKernel(int handle, int segment_number, int segment_size, void *output_buffer, SceSize program_size);

3.600.011-3.740.011
int sceSblAuthMgrSetupAuthSegmentForKernel(int handle, int segment_number);

sceSblAuthMgrAuthSegmentForKernel

Version NID
0.990.000-3.740.011 0xBC422443

Temp name was sceSblAuthMgrLoadSelfBlockForKernel, sceSblAuthMgrLoadBlockForKernel.

Issues kprx_auth_sm command 0x30001

// handle - obtained with sceSblAuthMgrOpenForKernel
int sceSblAuthMgrAuthSegmentForKernel(int handle, void *buffer, SceSize len);

sceSblAuthMgrLoadSegmentInternalForKernel

Version NID
0.990.000-1.692.000 0x15248FB4
1.800.071-3.740.011 not present
// handle - obtained with sceSblAuthMgrOpenForKernel
int sceSblAuthMgrLoadSegmentInternalForKernel(int handle, int a2, unsigned int a3);

sceSblAuthMgrSetDmac5KeyForKernel

Version NID
0.990.000-3.740.011 0x122ACDEA

Issues kprx_auth_sm command 0x50001.

// key_size - in bytes
int sceSblAuthMgrSetDmac5KeyForKernel(const void *key, SceSize key_size, int slot_id, int key_id);

sceSblAuthMgrClearDmac5KeyForKernel

Version NID
0.990.000-3.740.011 0xF2BB723E

Issues kprx_auth_sm command 0x60001.

int sceSblAuthMgrClearDmac5KeyForKernel(int unk0, int unk1);

SceSblAuthMgrForKernel_2A83A012

Version NID
1.800.071-3.740.011 0x2A83A012

Not implemented and returns 0. Maybe implemented in some internal System Software versions.

int SceSblAuthMgrForKernel_2A83A012(void);

sceSblAuthMgrCompareSwVersionForKernel

Version NID
0.931.010-0.996.090 not present
1.000.071-3.740.011 0xABAB8466

Aligns version on 12 bits then compares to the hardcoded current firmware version (example: 0x03600000 on FW 3.60).

int sceSblAuthMgrCompareSwVersionForKernel(int version);

SceSblAuthMgrForDriver

sceSblAuthMgrGetEKcForDriver

Version NID
0.990.000-3.740.011 0x868B9E9A

EKc might mean Encrypted Klicensee.

Issues kprx_auth_sm command 0x40001.

int sceSblAuthMgrGetEKcForDriver(void *data, SceSize size, int key_id);

sceSblAuthMgrDecBindDataForDriver

Version NID
0.990.000-3.740.011 0x41DAEA12

Issues kprx_auth_sm command 0x70001.

// request should contain pair of keys and rif data

int sceSblAuthMgrDecBindDataForDriver(char* klicensee, int klicensee_len, char* request, int request_len, int zero);

sceSblAuthMgrVerifySpsfoForDriver

Version NID
0.931.010-0.990.000 not present
0.996.090-3.740.011 0x24C4CE64

Used by sceSblSpsfoMgrVerifyForDriver.

Issues kprx_auth_sm command 0x80001.

Spsfo (signed param.sfo) file is located in game cartridge at path gro0:gc/param.sfo. It can also be loaded from host0: on DevKit. It has 3 parts: CF header and certification, plain SceSpsfoHeader and plain SFO (maybe reduced).

typedef struct SceSpsfoHeader { // size is 0x200 usually
    int version;                  // ex: 1
    SceSize size;                 // header size
    uint64_t system_version;      // ex: 0x0330000000000110
    char titleid[0x20];
    uint64_t parent_authority_id; // ex: 0x2800000000000030
    uint64_t process_authority_id;
    char reserved[0x1C0];
} SceSpsfoHeader;

Note : SceSpsfoHeader and spsfo_ctx may be different
int sceSblAuthMgrVerifySpsfoForDriver(spsfo_ctx *ctx);