SPL services: Difference between revisions
No edit summary |
No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 60: | Line 60: | ||
Wrapper for [[SMC#LoadAesKey|LoadAesKey SMC]]. | Wrapper for [[SMC#LoadAesKey|LoadAesKey SMC]]. | ||
Takes an input u32 ''' | Takes an input u32 '''KeySlot''' , an input 16-byte '''AccessKey''' and an input 16-byte '''KeySource'''. | ||
Sets the specified ''' | 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. | [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. | ||
Line 80: | Line 80: | ||
Only '''ConfigItem''' 13 (IsChargerHiZModeEnabled) can be set. | Only '''ConfigItem''' 13 (IsChargerHiZModeEnabled) can be set. | ||
== | == DecryptAndStoreGcKey == | ||
Wrapper for [[SMC#DecryptAndImportLotusKey|DecryptAndImportLotusKey SMC]]. | Wrapper for [[SMC#DecryptAndImportLotusKey|DecryptAndImportLotusKey SMC]]. | ||
Line 89: | Line 89: | ||
[5.0.0+] The '''Version''' argument was removed and this now calls the [[SMC#ReencryptDeviceUniqueData|ReencryptDeviceUniqueData SMC]] instead. | [5.0.0+] The '''Version''' argument was removed and this now calls the [[SMC#ReencryptDeviceUniqueData|ReencryptDeviceUniqueData SMC]] instead. | ||
== | == DecryptGcMessage == | ||
Takes 3 input type-0x9 buffers '''DataIn''', '''ModIn''' and '''LabelHashIn'''. | Takes 3 input type-0x9 buffers '''DataIn''', '''ModIn''' and '''LabelHashIn'''. | ||
Uses the [[SMC#ModularExponentiateByStorageKey|ModularExponentiateByStorageKey SMC]] to decrypt '''DataIn''' using the private key imported with [[# | Uses the [[SMC#ModularExponentiateByStorageKey|ModularExponentiateByStorageKey SMC]] to decrypt '''DataIn''' using the private key imported with [[#DecryptAndStoreGcKey]] and the supplied '''ModIn''' and '''LabelHashIn'''. | ||
== IsDevelopment == | == IsDevelopment == | ||
Line 122: | Line 122: | ||
[2.0.0+] Introduced same keyslot allocation code as for [[#GenerateAesKey]]. | [2.0.0+] Introduced same keyslot allocation code as for [[#GenerateAesKey]]. | ||
== | == ComputeCtr == | ||
Takes an output type-0x46 buffer '''DataOut''', an input u32 ''' | 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 ''' | 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. | [2.0.0+] Verifies the keyslot was allocated by the current session. | ||
Line 132: | Line 132: | ||
Wrapper for [[SMC#ComputeCmac|ComputeCmac SMC]]. | Wrapper for [[SMC#ComputeCmac|ComputeCmac SMC]]. | ||
Takes an input type-0x9 buffer '''DataIn''' and an input u32 ''' | 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. | [2.0.0+] Verifies the keyslot was allocated by the current session. | ||
== | == LoadEsDeviceKey == | ||
Wrapper for [[SMC#DecryptAndImportEsDeviceKey|DecryptAndImportEsDeviceKey SMC]]. | Wrapper for [[SMC#DecryptAndImportEsDeviceKey|DecryptAndImportEsDeviceKey SMC]]. | ||
Line 145: | Line 145: | ||
[5.0.0+] The '''Version''' argument was removed and this now calls the [[SMC#ReencryptDeviceUniqueData|ReencryptDeviceUniqueData SMC]] instead. | [5.0.0+] The '''Version''' argument was removed and this now calls the [[SMC#ReencryptDeviceUniqueData|ReencryptDeviceUniqueData SMC]] instead. | ||
== | == PrepareEsTitleKey == | ||
Wrapper for [[SMC#PrepareEsDeviceUniqueKey|PrepareEsDeviceUniqueKey SMC]]. | Wrapper for [[SMC#PrepareEsDeviceUniqueKey|PrepareEsDeviceUniqueKey SMC]]. | ||
Line 152: | Line 152: | ||
[3.0.0+] Now takes an input u32 '''Generation'''. | [3.0.0+] Now takes an input u32 '''Generation'''. | ||
Decrypts '''DataIn''' into '''DataOut''' using the private key imported with [[# | Decrypts '''DataIn''' into '''DataOut''' using the private key imported with [[#LoadEsDeviceKey]] and the supplied '''ModIn'''. Afterwards, verifies RSA-OAEP encoding using '''LabelHashIn'''. | ||
== | == LoadPreparedAesKey == | ||
Wrapper for [[SMC#LoadPreparedAesKey|LoadPreparedAesKey SMC]]. | Wrapper for [[SMC#LoadPreparedAesKey|LoadPreparedAesKey SMC]]. | ||
Takes an input u32 ''' | Takes an input u32 '''KeySlot''' and an input 16-byte '''AccessKey'''. | ||
[2.0.0+] Verifies the keyslot was allocated in the current session. | [2.0.0+] Verifies the keyslot was allocated in the current session. | ||
== | == PrepareCommonEsTitleKey == | ||
Wrapper for [[SMC#PrepareEsCommonKey|PrepareEsCommonKey SMC]]. | Wrapper for [[SMC#PrepareEsCommonKey|PrepareEsCommonKey SMC]]. | ||
Line 168: | Line 168: | ||
[3.0.0+] Now takes an input u32 '''Generation'''. | [3.0.0+] Now takes an input u32 '''Generation'''. | ||
== | == AllocateAesKeySlot == | ||
Returns an output u32 ''' | Returns an output u32 '''KeySlot'''. | ||
Returns error 0xD01A if all keyslots are taken. | Returns error 0xD01A if all keyslots are taken. | ||
== DeallocateAesKeySlot == | == DeallocateAesKeySlot == | ||
Takes an input u32 ''' | Takes an input u32 '''KeySlot'''. | ||
Returns error 0xD21A if the keyslot wasn't allocated by current session. | Returns error 0xD21A if the keyslot wasn't allocated by current session. | ||
== | == GetAesKeySlotAvailableEvent == | ||
Returns an output event handle for synchronizing with the AES keyslots. | Returns an output event handle for synchronizing with the AES keyslots. | ||
Line 190: | Line 190: | ||
[4.0.0+] Returns 0xD61A if a value has not previously been set and unsets the value after getting it. | [4.0.0+] Returns 0xD61A if a value has not previously been set and unsets the value after getting it. | ||
= spl:mig = | = spl:mig = | ||
Line 223: | Line 220: | ||
| 14 || [[#DecryptAesKey]] | | 14 || [[#DecryptAesKey]] | ||
|- | |- | ||
| 15 || [[# | | 15 || [[#ComputeCtr]] | ||
|- | |- | ||
| 16 || [[#ComputeCmac]] | | 16 || [[#ComputeCmac]] | ||
|- | |- | ||
| 21 || [2.0.0+] [[# | | 21 || [2.0.0+] [[#AllocateAesKeySlot]] | ||
|- | |- | ||
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]] | | 22 || [2.0.0+] [[#DeallocateAesKeySlot]] | ||
|- | |- | ||
| 23 || [2.0.0+] [[# | | 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]] | ||
|} | |} | ||
Line 263: | Line 260: | ||
| 14 || [[#DecryptAesKey]] | | 14 || [[#DecryptAesKey]] | ||
|- | |- | ||
| 15 || [[# | | 15 || [[#ComputeCtr]] | ||
|- | |- | ||
| 16 || [[#ComputeCmac]] | | 16 || [[#ComputeCmac]] | ||
|- | |- | ||
| 21 || [2.0.0+] [[# | | 21 || [2.0.0+] [[#AllocateAesKeySlot]] | ||
|- | |- | ||
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]] | | 22 || [2.0.0+] [[#DeallocateAesKeySlot]] | ||
|- | |- | ||
| 23 || [2.0.0+] [[# | | 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]] | ||
|- | |- | ||
| 9 || [[# | | 9 || [[#DecryptAndStoreGcKey]] | ||
|- | |- | ||
| 10 || [[# | | 10 || [[#DecryptGcMessage]] | ||
|- | |- | ||
| 12 || [[#GenerateSpecificAesKey]] | | 12 || [[#GenerateSpecificAesKey]] | ||
|- | |- | ||
| 19 || [[# | | 19 || [[#LoadPreparedAesKey]] | ||
|- | |- | ||
| 31 || [5.0.0+] GetPackage2Hash | | 31 || [5.0.0+] GetPackage2Hash | ||
Line 313: | Line 310: | ||
| 14 || [[#DecryptAesKey]] | | 14 || [[#DecryptAesKey]] | ||
|- | |- | ||
| 15 || [[# | | 15 || [[#ComputeCtr]] | ||
|- | |- | ||
| 16 || [[#ComputeCmac]] | | 16 || [[#ComputeCmac]] | ||
|- | |- | ||
| 21 || [2.0.0+] [[# | | 21 || [2.0.0+] [[#AllocateAesKeySlot]] | ||
|- | |- | ||
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]] | | 22 || [2.0.0+] [[#DeallocateAesKeySlot]] | ||
|- | |- | ||
| 23 || [2.0.0+] [[# | | 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]] | ||
|- | |- | ||
| 13 || [[#DecryptDeviceUniqueData]] | | 13 || [[#DecryptDeviceUniqueData]] | ||
Line 359: | Line 356: | ||
| 14 || [[#DecryptAesKey]] | | 14 || [[#DecryptAesKey]] | ||
|- | |- | ||
| 15 || [[# | | 15 || [[#ComputeCtr]] | ||
|- | |- | ||
| 16 || [[#ComputeCmac]] | | 16 || [[#ComputeCmac]] | ||
|- | |- | ||
| 21 || [2.0.0+] [[# | | 21 || [2.0.0+] [[#AllocateAesKeySlot]] | ||
|- | |- | ||
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]] | | 22 || [2.0.0+] [[#DeallocateAesKeySlot]] | ||
|- | |- | ||
| 23 || [2.0.0+] [[# | | 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]] | ||
|- | |- | ||
| 13 || [[#DecryptDeviceUniqueData]] | | 13 || [[#DecryptDeviceUniqueData]] | ||
|- | |- | ||
| 17 || [[# | | 17 || [[#LoadEsDeviceKey]] | ||
|- | |- | ||
| 18 || [[# | | 18 || [[#PrepareEsTitleKey]] | ||
|- | |- | ||
| 20 || [2.0.0+] [[# | | 20 || [2.0.0+] [[#PrepareCommonEsTitleKey]] | ||
|- | |- | ||
| 28 || [5.0.0+] DecryptAndStoreDrmDeviceCertKey | | 28 || [5.0.0+] DecryptAndStoreDrmDeviceCertKey | ||
Line 384: | Line 381: | ||
|- | |- | ||
| 32 || [6.0.0+] [[#LoadPreparedAesKey]] | | 32 || [6.0.0+] [[#LoadPreparedAesKey]] | ||
|- | |||
| 33 || [18.0.0+] | |||
|} | |} | ||
Line 415: | Line 414: | ||
| 14 || [[#DecryptAesKey]] | | 14 || [[#DecryptAesKey]] | ||
|- | |- | ||
| 15 || [[# | | 15 || [[#ComputeCtr]] | ||
|- | |- | ||
| 16 || [[#ComputeCmac]] | | 16 || [[#ComputeCmac]] | ||
|- | |- | ||
| 21 || [2.0.0+] [[# | | 21 || [2.0.0+] [[#AllocateAesKeySlot]] | ||
|- | |- | ||
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]] | | 22 || [2.0.0+] [[#DeallocateAesKeySlot]] | ||
|- | |- | ||
| 23 || [2.0.0+] [[# | | 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]] | ||
|- | |- | ||
| 13 || [[#DecryptDeviceUniqueData]] | | 13 || [[#DecryptDeviceUniqueData]] |