SPL services: Difference between revisions
No edit summary  | 
				No edit summary  | 
				||
| 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 417: | 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]]  | ||