Changes

Jump to navigation Jump to search
No change in size ,  19:19, 5 May 2020
no edit summary
Line 39: Line 39:  
| 25 || [3.0.0+] [[#GetBootReason]]
 
| 25 || [3.0.0+] [[#GetBootReason]]
 
|}
 
|}
 +
 +
== GetConfig ==
 +
Wrapper for [[SMC#GetConfig|GetConfig SMC]].
 +
 +
Takes an input u32 '''ConfigItem'''. Returns one or more output u64s '''ConfigValue'''.
 +
 +
== ExpMod ==
 +
Wrapper for [[SMC#ExpMod|ExpMod SMC]].
 +
 +
Takes an output type-0xA buffer '''DataOut''' and 3 input type-0x9 buffers '''DataIn''', '''ExpIn''' and '''ModIn'''.
 +
 +
Performs asymmetric crypto with user supplied modulus and exponent.
 +
 +
== GenerateAesKek ==
 +
Wrapper for [[SMC#GenerateAesKek|GenerateAesKek SMC]].
 +
 +
Takes an input 16-byte '''KeySource''' and two input u32s '''Generation''' and '''Option'''. Returns an output 16-byte '''AccessKey'''.
 +
 +
== LoadAesKey ==
 +
Wrapper for [[SMC#LoadAesKey|LoadAesKey SMC]].
 +
 +
Takes an input u32 '''Keyslot''' , an input 16-byte '''AccessKey''' and an input 16-byte '''KeySource'''.
 +
 +
Sets the specified '''Keyslot''' with a key generated from '''AccessKey''' and '''KeySource'''.
 +
 +
[2.0.0+] Now verifies that the keyslot in use (0..3) is allocated by the current spl session, otherwise errors with 0xD21A. Previously, keyslot was hardcoded to 0.
 +
 +
== GenerateAesKey ==
 +
Takes an input 16-byte '''AccessKey''' and an input 16-byte '''KeySource'''. Returns an output 16-byte '''AesKey'''.
 +
 +
Generates a new key by decrypting (AES-ECB) '''KeySource''' with a key generated from the supplied '''AccessKey''' and the key set with [[SMC#LoadAesKey|LoadAesKey SMC]].
 +
 +
[2.0.0+] Previously, it always used keyslot 0. Now it tries to allocate a keyslot to be used and returns 0xD01A if they're all busy. When the command is done, the keyslot is released.
 +
 +
== SetConfig ==
 +
Wrapper for [[SMC#SetConfig|SetConfig SMC]].
 +
 +
Takes an input u32 '''ConfigItem''' and an input u64 '''ConfigValue'''.
 +
 +
Only '''ConfigItem''' 13 (IsChargerHiZModeEnabled) can be set.
 +
 +
== ImportLotusKey ==
 +
Wrapper for [[SMC#ImportLotusKey|ImportLotusKey SMC]].
 +
 +
Takes an input type-0x9 buffer '''DataIn''', an input 16-byte '''AccessKey''', an input 16-byte '''KeySource''' and an input u32 '''Version''' (0 for normal keys or 1 for extended keys).
 +
 +
Decrypts '''DataIn''' with a key generated from '''AccessKey''' and '''KeySource''' and imports it for later usage.
 +
 +
[5.0.0+] The '''Version''' argument was removed and this now calls the [[SMC#ReEncryptRsaPrivateKey|ReEncryptRsaPrivateKey SMC]] instead.
 +
 +
== DecryptLotusMessage ==
 +
Takes 3 input type-0x9 buffers '''DataIn''', '''ModIn''' and '''LabelHashIn'''.
 +
 +
Uses the [[SMC#SecureExpMod|SecureExpMod SMC]] to decrypt '''DataIn''' using the private key imported with [[#ImportLotusKey]] and the supplied '''ModIn''' and '''LabelHashIn'''.
 +
 +
== IsDevelopment ==
 +
No input. Returns an output u8 bool.
 +
 +
Uses [[#GetConfig]] internally.
 +
 +
== GenerateSpecificAesKey ==
 +
Wrapper for [[SMC#GenerateSpecificAesKey|GenerateSpecificAesKey SMC]].
 +
 +
Takes an input 16-byte '''KeySource''' and two input u32s '''Generation''' and '''Option'''. Returns an output 16-byte '''AesKey'''.
 +
 +
== DecryptRsaPrivateKey ==
 +
Wrapper for [[SMC#DecryptRsaPrivateKey|DecryptRsaPrivateKey SMC]].
 +
 +
Takes an output type-0xA buffer '''DataOut''', an input type-0x9 '''DataIn''', an input 16-byte '''AccessKey''', an input 16-byte '''KeySource''' and an input u32 '''Version''' (0 for normal keys or 1 for extended keys).
 +
 +
Decrypts '''DataIn''' into '''DataOut''' with a key generated from '''AccessKey''' and '''KeySource'''.
 +
 +
Used by [[SSL_services|SSL]] for TLS client-privk.
 +
 +
[5.0.0+] The '''Version''' argument was removed and this now calls [[SMC#DecryptOrImportRsaPrivateKey|DecryptOrImportRsaPrivateKey SMC]] instead.
 +
 +
== DecryptAesKey ==
 +
Takes an input 16-byte '''KeySource''' and two input u32s '''Generation''' and '''Option'''. Returns an output 16-byte '''AesKey'''.
 +
 +
Decrypts (AES-ECB) '''KeySource''' with a key set with [[SMC#LoadAesKey|LoadAesKey SMC]].
 +
 +
[2.0.0+] Introduced same keyslot allocation code as for [[#GenerateAesKey]].
 +
 +
== CryptAesCtr ==
 +
Takes an output type-0x46 buffer '''DataOut''', an input u32 '''Keyslot''', an input type-0x45 buffer '''DataIn''' and an input 16-byte '''IvCtr'''.
 +
 +
Uses [[SMC#ComputeAes|ComputeAes SMC]] to decrypt '''DataIn''' into '''DataOut''' using the key set in the specified '''Keyslot'''.
 +
 +
[2.0.0+] Verifies the keyslot was allocated by the current session.
 +
 +
== ComputeCmac ==
 +
Wrapper for [[SMC#ComputeCmac|ComputeCmac SMC]].
 +
 +
Takes an input type-0x9 buffer '''DataIn''' and an input u32 '''Keyslot'''. Returns an output 16-byte '''Cmac'''.
 +
 +
[2.0.0+] Verifies the keyslot was allocated by the current session.
 +
 +
== ImportEsKey ==
 +
Wrapper for [[SMC#ImportEsKey|ImportEsKey SMC]].
 +
 +
Takes an input type-0x9 buffer '''DataIn''', an input 16-byte '''AccessKey''', an input 16-byte '''KeySource''' and an input u32 '''Version''' (0 for normal keys or 1 for extended keys).
 +
 +
Decrypts '''DataIn''' with a key generated from '''AccessKey''' and '''KeySource''' and imports it for later usage.
 +
 +
[5.0.0+] The '''Version''' argument was removed and this now calls the [[SMC#ReEncryptRsaPrivateKey|ReEncryptRsaPrivateKey SMC]] instead.
 +
 +
== UnwrapTitleKey ==
 +
Wrapper for [[SMC#UnwrapTitleKey|UnwrapTitleKey SMC]].
 +
 +
Takes an output type-0xA buffer '''DataOut''' and 3 input type-0x9 buffers '''DataIn''', '''ModIn''' and '''LabelHashIn'''. Returns an output u32 '''DataOutSize'''.
 +
 +
[3.0.0+] Now takes an input u32 '''Generation'''.
 +
 +
Decrypts '''DataIn''' into '''DataOut''' using the private key imported with [[#ImportEsKey]] and the supplied '''ModIn'''. Afterwards, verifies RSA-OAEP encoding using '''LabelHashIn'''.
 +
 +
== LoadTitleKey ==
 +
Wrapper for [[SMC#LoadTitleKey|LoadTitleKey SMC]].
 +
 +
Takes an input u32 '''Keyslot''' and an input 16-byte '''AccessKey'''.
 +
 +
[2.0.0+] Verifies the keyslot was allocated in the current session.
 +
 +
== UnwrapCommonTitleKey ==
 +
Wrapper for [[SMC#UnwrapCommonTitleKey|UnwrapCommonTitleKey SMC]].
 +
 +
Takes an input 16-byte '''KeySource'''. Returns an output 16-byte '''AccessKey'''.
 +
 +
[3.0.0+] Now takes an input u32 '''Generation'''.
 +
 +
== AllocateAesKeyslot ==
 +
Returns an output u32 '''Keyslot'''.
 +
 +
Returns error 0xD01A if all keyslots are taken.
 +
 +
== FreeAesKeyslot ==
 +
Takes an input u32 '''Keyslot'''.
 +
 +
Returns error 0xD21A if the keyslot wasn't allocated by current session.
 +
 +
== GetAesKeyslotAvailableEvent ==
 +
Returns an output event handle for synchronizing with the AES keyslots.
 +
 +
== SetBootReason ==
 +
Takes an input u32 '''BootReason'''.
 +
 +
[4.0.0+] Returns 0xD41A if a value has been previously set without being [[#GetBootReason|gotten]].
 +
 +
== GetBootReason ==
 +
Returns an output u32 '''BootReason'''.
 +
 +
[4.0.0+] Returns 0xD61A if a value has not previously been set and unsets the value after getting it.
 +
 +
== LoadElicenseKey ==
 +
Same as [[#LoadTitleKey|LoadTitleKey]].
    
= spl:mig =
 
= spl:mig =
Line 275: Line 429:  
| 30 || [5.0.0+] ReEncryptRsaPrivateKey
 
| 30 || [5.0.0+] ReEncryptRsaPrivateKey
 
|}
 
|}
  −
== GetConfig ==
  −
Wrapper for [[SMC#GetConfig|GetConfig SMC]].
  −
  −
Takes an input u32 '''ConfigItem'''. Returns one or more output u64s '''ConfigValue'''.
  −
  −
== ExpMod ==
  −
Wrapper for [[SMC#ExpMod|ExpMod SMC]].
  −
  −
Takes an output type-0xA buffer '''DataOut''' and 3 input type-0x9 buffers '''DataIn''', '''ExpIn''' and '''ModIn'''.
  −
  −
Performs asymmetric crypto with user supplied modulus and exponent.
  −
  −
== GenerateAesKek ==
  −
Wrapper for [[SMC#GenerateAesKek|GenerateAesKek SMC]].
  −
  −
Takes an input 16-byte '''KeySource''' and two input u32s '''Generation''' and '''Option'''. Returns an output 16-byte '''AccessKey'''.
  −
  −
== LoadAesKey ==
  −
Wrapper for [[SMC#LoadAesKey|LoadAesKey SMC]].
  −
  −
Takes an input u32 '''Keyslot''' , an input 16-byte '''AccessKey''' and an input 16-byte '''KeySource'''.
  −
  −
Sets the specified '''Keyslot''' with a key generated from '''AccessKey''' and '''KeySource'''.
  −
  −
[2.0.0+] Now verifies that the keyslot in use (0..3) is allocated by the current spl session, otherwise errors with 0xD21A. Previously, keyslot was hardcoded to 0.
  −
  −
== GenerateAesKey ==
  −
Takes an input 16-byte '''AccessKey''' and an input 16-byte '''KeySource'''. Returns an output 16-byte '''AesKey'''.
  −
  −
Generates a new key by decrypting (AES-ECB) '''KeySource''' with a key generated from the supplied '''AccessKey''' and the key set with [[SMC#LoadAesKey|LoadAesKey SMC]].
  −
  −
[2.0.0+] Previously, it always used keyslot 0. Now it tries to allocate a keyslot to be used and returns 0xD01A if they're all busy. When the command is done, the keyslot is released.
  −
  −
== SetConfig ==
  −
Wrapper for [[SMC#SetConfig|SetConfig SMC]].
  −
  −
Takes an input u32 '''ConfigItem''' and an input u64 '''ConfigValue'''.
  −
  −
Only '''ConfigItem''' 13 (IsChargerHiZModeEnabled) can be set.
  −
  −
== ImportLotusKey ==
  −
Wrapper for [[SMC#ImportLotusKey|ImportLotusKey SMC]].
  −
  −
Takes an input type-0x9 buffer '''DataIn''', an input 16-byte '''AccessKey''', an input 16-byte '''KeySource''' and an input u32 '''Version''' (0 for normal keys or 1 for extended keys).
  −
  −
Decrypts '''DataIn''' with a key generated from '''AccessKey''' and '''KeySource''' and imports it for later usage.
  −
  −
[5.0.0+] The '''Version''' argument was removed and this now calls the [[SMC#ReEncryptRsaPrivateKey|ReEncryptRsaPrivateKey SMC]] instead.
  −
  −
== DecryptLotusMessage ==
  −
Takes 3 input type-0x9 buffers '''DataIn''', '''ModIn''' and '''LabelHashIn'''.
  −
  −
Uses the [[SMC#SecureExpMod|SecureExpMod SMC]] to decrypt '''DataIn''' using the private key imported with [[#ImportLotusKey]] and the supplied '''ModIn''' and '''LabelHashIn'''.
  −
  −
== IsDevelopment ==
  −
No input. Returns an output u8 bool.
  −
  −
Uses [[#GetConfig]] internally.
  −
  −
== GenerateSpecificAesKey ==
  −
Wrapper for [[SMC#GenerateSpecificAesKey|GenerateSpecificAesKey SMC]].
  −
  −
Takes an input 16-byte '''KeySource''' and two input u32s '''Generation''' and '''Option'''. Returns an output 16-byte '''AesKey'''.
  −
  −
== DecryptRsaPrivateKey ==
  −
Wrapper for [[SMC#DecryptRsaPrivateKey|DecryptRsaPrivateKey SMC]].
  −
  −
Takes an output type-0xA buffer '''DataOut''', an input type-0x9 '''DataIn''', an input 16-byte '''AccessKey''', an input 16-byte '''KeySource''' and an input u32 '''Version''' (0 for normal keys or 1 for extended keys).
  −
  −
Decrypts '''DataIn''' into '''DataOut''' with a key generated from '''AccessKey''' and '''KeySource'''.
  −
  −
Used by [[SSL_services|SSL]] for TLS client-privk.
  −
  −
[5.0.0+] The '''Version''' argument was removed and this now calls [[SMC#DecryptOrImportRsaPrivateKey|DecryptOrImportRsaPrivateKey SMC]] instead.
  −
  −
== DecryptAesKey ==
  −
Takes an input 16-byte '''KeySource''' and two input u32s '''Generation''' and '''Option'''. Returns an output 16-byte '''AesKey'''.
  −
  −
Decrypts (AES-ECB) '''KeySource''' with a key set with [[SMC#LoadAesKey|LoadAesKey SMC]].
  −
  −
[2.0.0+] Introduced same keyslot allocation code as for [[#GenerateAesKey]].
  −
  −
== CryptAesCtr ==
  −
Takes an output type-0x46 buffer '''DataOut''', an input u32 '''Keyslot''', an input type-0x45 buffer '''DataIn''' and an input 16-byte '''IvCtr'''.
  −
  −
Uses [[SMC#ComputeAes|ComputeAes SMC]] to decrypt '''DataIn''' into '''DataOut''' using the key set in the specified '''Keyslot'''.
  −
  −
[2.0.0+] Verifies the keyslot was allocated by the current session.
  −
  −
== ComputeCmac ==
  −
Wrapper for [[SMC#ComputeCmac|ComputeCmac SMC]].
  −
  −
Takes an input type-0x9 buffer '''DataIn''' and an input u32 '''Keyslot'''. Returns an output 16-byte '''Cmac'''.
  −
  −
[2.0.0+] Verifies the keyslot was allocated by the current session.
  −
  −
== ImportEsKey ==
  −
Wrapper for [[SMC#ImportEsKey|ImportEsKey SMC]].
  −
  −
Takes an input type-0x9 buffer '''DataIn''', an input 16-byte '''AccessKey''', an input 16-byte '''KeySource''' and an input u32 '''Version''' (0 for normal keys or 1 for extended keys).
  −
  −
Decrypts '''DataIn''' with a key generated from '''AccessKey''' and '''KeySource''' and imports it for later usage.
  −
  −
[5.0.0+] The '''Version''' argument was removed and this now calls the [[SMC#ReEncryptRsaPrivateKey|ReEncryptRsaPrivateKey SMC]] instead.
  −
  −
== UnwrapTitleKey ==
  −
Wrapper for [[SMC#UnwrapTitleKey|UnwrapTitleKey SMC]].
  −
  −
Takes an output type-0xA buffer '''DataOut''' and 3 input type-0x9 buffers '''DataIn''', '''ModIn''' and '''LabelHashIn'''. Returns an output u32 '''DataOutSize'''.
  −
  −
[3.0.0+] Now takes an input u32 '''Generation'''.
  −
  −
Decrypts '''DataIn''' into '''DataOut''' using the private key imported with [[#ImportEsKey]] and the supplied '''ModIn'''. Afterwards, verifies RSA-OAEP encoding using '''LabelHashIn'''.
  −
  −
== LoadTitleKey ==
  −
Wrapper for [[SMC#LoadTitleKey|LoadTitleKey SMC]].
  −
  −
Takes an input u32 '''Keyslot''' and an input 16-byte '''AccessKey'''.
  −
  −
[2.0.0+] Verifies the keyslot was allocated in the current session.
  −
  −
== UnwrapCommonTitleKey ==
  −
Wrapper for [[SMC#UnwrapCommonTitleKey|UnwrapCommonTitleKey SMC]].
  −
  −
Takes an input 16-byte '''KeySource'''. Returns an output 16-byte '''AccessKey'''.
  −
  −
[3.0.0+] Now takes an input u32 '''Generation'''.
  −
  −
== AllocateAesKeyslot ==
  −
Returns an output u32 '''Keyslot'''.
  −
  −
Returns error 0xD01A if all keyslots are taken.
  −
  −
== FreeAesKeyslot ==
  −
Takes an input u32 '''Keyslot'''.
  −
  −
Returns error 0xD21A if the keyslot wasn't allocated by current session.
  −
  −
== GetAesKeyslotAvailableEvent ==
  −
Returns an output event handle for synchronizing with the AES keyslots.
  −
  −
== SetBootReason ==
  −
Takes an input u32 '''BootReason'''.
  −
  −
[4.0.0+] Returns 0xD41A if a value has been previously set without being [[#GetBootReason|gotten]].
  −
  −
== GetBootReason ==
  −
Returns an output u32 '''BootReason'''.
  −
  −
[4.0.0+] Returns 0xD61A if a value has not previously been set and unsets the value after getting it.
  −
  −
== LoadElicenseKey ==
  −
Same as [[#LoadTitleKey|LoadTitleKey]].
      
[[Category:Services]]
 
[[Category:Services]]

Navigation menu