Line 48:
Line 48:
|-
|-
| 0x01
| 0x01
−
| IOSC_CreateObject()
+
| IOSCError IOSC_CreateObject(u32* key_handle, IOSCObjectType type, IOSCObjectSubType subtype);
| IOS_Ioctl(FD, 0x01, in_buf, 0x10, out_buf, 4);
| IOS_Ioctl(FD, 0x01, in_buf, 0x10, out_buf, 4);
| Creates a new crypto object and returns a handle for it.
| Creates a new crypto object and returns a handle for it.
Line 54:
Line 54:
|-
|-
| 0x02
| 0x02
−
| IOSC_DeleteObject()
+
| IOSCError IOSC_DeleteObject(u32 key_handle);
| IOS_Ioctl(FD, 0x02, in_buf, 4, 0, 0);
| IOS_Ioctl(FD, 0x02, in_buf, 4, 0, 0);
| Deletes a crypto object.
| Deletes a crypto object.
Line 60:
Line 60:
|-
|-
| 0x03
| 0x03
−
| IOSC_ImportSecretKey()
+
| IOSCError IOSC_ImportSecretKey(IOSCSecretKeyHandle importedHandle, IOSCSecretKeyHandle verifyHandle, IOSCSecretKeyHandle decryptHandle, IOSCSecretKeySecurity flag, u8 * signbuffer, u8 * ivData, u8 * keybuffer);
| IOS_Ioctlv(FD, 0x03, 4, 0, vector);
| IOS_Ioctlv(FD, 0x03, 4, 0, vector);
|
|
Line 66:
Line 66:
|-
|-
| 0x04
| 0x04
−
| keyring_deallocate_entry()
+
| IOSCError IOSC_ExportSecretKey(IOSCSecretKeyHandle exportedHandle, IOSCSecretKeyHandle signHandle, IOSCSecretKeyHandle encryptHandle, IOSCSecretKeySecurity security_flag, u8 * signbuffer, u8 * ivData, u8 * keybuffer);
| IOS_Ioctlv(FD, 0x04, 1, 3, vector);
| IOS_Ioctlv(FD, 0x04, 1, 3, vector);
|
|
Line 72:
Line 72:
|-
|-
| 0x05
| 0x05
−
| import_pub_key()
+
| IOSCError IOSC_ImportPublicKey(u8 * publicKeyData, u8 * exponent, IOSCPublicKeyHandle publicKeyHandle);
| IOS_Ioctlv(FD, 0x05, 3, 0, vector);
| IOS_Ioctlv(FD, 0x05, 3, 0, vector);
|
|
Line 78:
Line 78:
|-
|-
| 0x06
| 0x06
−
| export_root()
+
| IOSCError IOSC_ExportPublicKey(u8 * publicKeyData, u8 * exponent, IOSCPublicKeyHandle publicKeyHandle);
| IOS_Ioctlv(FD, 0x06, 1, 3, vector);
| IOS_Ioctlv(FD, 0x06, 1, 3, vector);
|
|
Line 84:
Line 84:
|-
|-
| 0x07
| 0x07
−
| compute_shared_key()
+
| IOSCError IOSC_ComputeSharedKey(IOSCSecretKeyHandle privateHandle, IOSCPublicKeyHandle publicHandle, IOSCSecretKeyHandle sharedHandle);
| IOS_Ioctl(FD, 0x07, in_buf, 0x10, 0, 0);
| IOS_Ioctl(FD, 0x07, in_buf, 0x10, 0, 0);
|
|
Line 90:
Line 90:
|-
|-
| 0x08
| 0x08
−
| set_device_id()
+
| IOSCError IOSC_SetData(IOSCDataHandle dataHandle, u32 value);
| IOS_Ioctlv(FD, 0x08, 2, 0, vector);
| IOS_Ioctlv(FD, 0x08, 2, 0, vector);
|
|
Line 96:
Line 96:
|-
|-
| 0x09
| 0x09
−
| get_device_id()
+
| IOSCError IOSC_GetData(IOSCDataHandle dataHandle, u32 * value);
| IOS_Ioctlv(FD, 0x09, 1, 1, vector);
| IOS_Ioctlv(FD, 0x09, 1, 1, vector);
|
|
Line 102:
Line 102:
|-
|-
| 0x0A
| 0x0A
−
| get_key_size()
+
| IOSCError IOSC_GetKeySize(u32 * keySize, IOSCKeyHandle handle);
| IOS_Ioctl(FD, 0x0A, in_buf, 4, out_buf, 4);
| IOS_Ioctl(FD, 0x0A, in_buf, 4, out_buf, 4);
|
|
Line 108:
Line 108:
|-
|-
| 0x0B
| 0x0B
−
| get_key_userdata_size()
+
| IOSCError IOSC_GetSignatureSize(u32 * signSize, int handle);
| IOS_Ioctl(FD, 0x0B, in_buf, 4, out_buf, 4);
| IOS_Ioctl(FD, 0x0B, in_buf, 4, out_buf, 4);
|
|
Line 114:
Line 114:
|-
|-
| 0x0C
| 0x0C
−
| IOSC_GenerateHash() / IOSC_GenerateHashAsync();
+
| IOSCError IOSC_GenerateHash(u8 * context, u8 * inputData, u32 inputSize, u32 chainingFlag, u8 * hashData); / int IOSC_GenerateHashAsync(u8 * context, u8 * inputData, u32 inputSize, u32 chainingFlag, u8 * hashData, int message_queue_id, IOSRequest* reply);
| IOS_Ioctlv(FD, 0x0C, 3, 1, vector); / IOS_IoctlvAsync(FD, 0x0C, 3, 1, vector, queueid, message);
| IOS_Ioctlv(FD, 0x0C, 3, 1, vector); / IOS_IoctlvAsync(FD, 0x0C, 3, 1, vector, queueid, message);
|
|
Line 120:
Line 120:
|-
|-
| 0x0D
| 0x0D
−
| IOSC_Encrypt() / IOSC_EncryptAsync()
+
| IOSCError IOSC_Encrypt(IOSCSecretKeyHandle encryptHandle, u8 * ivData, u8 * inputData, u32 inputSize, u8 * outputData); / int IOSC_EncryptAsync(IOSCSecretKeyHandle encryptHandle, u8 * ivData, u8 * inputData, u32 inputSize, u8 * outputData, int message_queue_id, IOSRequest* reply);
| IOS_Ioctlv(FD, 0x0D, 3, 1, vector); / IOS_IoctlvAsync(FD, 0x0D, 3, 1, vector, queueid, message);
| IOS_Ioctlv(FD, 0x0D, 3, 1, vector); / IOS_IoctlvAsync(FD, 0x0D, 3, 1, vector, queueid, message);
|
|
Line 126:
Line 126:
|-
|-
| 0x0E
| 0x0E
−
| IOSC_Decrypt() / IOSC_DecryptAsync()
+
| IOSCError IOSC_Decrypt(IOSCSecretKeyHandle decryptHandle, u8 * ivData, u8 * inputData, u32 inputSize, u8 * outputData); / int IOSC_DecryptAsync((IOSCSecretKeyHandle decryptHandle, u8 * ivData, u8 * inputData, u32 inputSize, u8 * outputData, int message_queue_id, IOSRequest* request);
| IOS_Ioctlv(FD, 0x0E, 3, 1, vector); / IOS_IoctlvAsync(FD, 0x0E, 3, 1, vector, queueid, message);
| IOS_Ioctlv(FD, 0x0E, 3, 1, vector); / IOS_IoctlvAsync(FD, 0x0E, 3, 1, vector, queueid, message);
|
|
Line 132:
Line 132:
|-
|-
| 0x0F
| 0x0F
−
| verify_public_key_sign()
+
| IOSCError IOSC_VerifyPublicKeySign(u8 * inputData, u32 inputSize, IOSCPublicKeyHandle publicHandle, u8 * signData);
| IOS_Ioctlv(FD, 0x0F, 3, 0, vector);
| IOS_Ioctlv(FD, 0x0F, 3, 0, vector);
|
|
Line 138:
Line 138:
|-
|-
| 0x10
| 0x10
−
| IOSC_GenerateBlockMAC() / IOSC_GenerateBlockMACAsync()
+
| IOSCError IOSC_GenerateBlockMAC(u8 * context, u8 * inputData, u32 inputSize, u8 * customData, u32 customDataSize, IOSCSecretKeyHandle signerHandle, u32 chainingFlag, u8 * signData); / IOSCError IOSC_GenerateBlockMACAsync(u8 * context, u8 * inputData, u32 inputSize, u8 * customData, u32 customDataSize, IOSCSecretKeyHandle signerHandle, u32 chainingFlag, u8 * signData, int message_queue_id, IOSRequest* reply);
| IOS_Ioctlv(FD, 0x10, 4, 1, vector); / IOS_IoctlvAsync(FD, 0x10, 4, 1, vector, queueid, message);
| IOS_Ioctlv(FD, 0x10, 4, 1, vector); / IOS_IoctlvAsync(FD, 0x10, 4, 1, vector, queueid, message);
|
|
Line 144:
Line 144:
|-
|-
| 0x11
| 0x11
−
| verify_cert()
+
| IOSCError IOSC_ImportCertificate(u8 * certData, IOSCPublicKeyHandle signerHandle, IOSCPublicKeyHandle publicKeyHandle);
| IOS_Ioctlv(FD, 0x11, 2, 0, vector);
| IOS_Ioctlv(FD, 0x11, 2, 0, vector);
|
|
Line 150:
Line 150:
|-
|-
| 0x12
| 0x12
−
| get_device_cert()
+
| IOSCError IOSC_GetDeviceCertificate(IOSCEccSignedCert * certificate);
| IOS_Ioctl(FD, 0x12, 0, 0, out_buf, 0x180);
| IOS_Ioctl(FD, 0x12, 0, 0, out_buf, 0x180);
|
|
Line 156:
Line 156:
|-
|-
| 0x13
| 0x13
−
| set_title_key_ownership()
+
| IOSCError IOSC_SetOwnership(u32 handle, u32 users);
| IOS_Ioctlv(FD, 0x13, 2, 0, vector);
| IOS_Ioctlv(FD, 0x13, 2, 0, vector);
|
|
Line 162:
Line 162:
|-
|-
| 0x14
| 0x14
−
| get_title_key_ownership()
+
| IOSCError IOSC_GetOwnership(u32 handle, u32 * users);
| IOS_Ioctlv(FD, 0x14, 1, 1, vector);
| IOS_Ioctlv(FD, 0x14, 1, 1, vector);
|
|
Line 168:
Line 168:
|-
|-
| 0x15
| 0x15
−
| IOSC_GenerateRand()
+
| IOSCError IOSC_GenerateRand(u8 * randBytes, u32 numBytes);
| IOS_Ioctl(FD, 0x15, 0, 0, out_buf, out_size);
| IOS_Ioctl(FD, 0x15, 0, 0, out_buf, out_size);
| Generate random data of an arbitrary size.
| Generate random data of an arbitrary size.
Line 174:
Line 174:
|-
|-
| 0x16
| 0x16
−
| generate_secret_key()
+
| IOSCError IOSC_GenerateKey(IOSCKeyHandle handle);
| IOS_Ioctl(FD, 0x16, in_buf, 4, 0, 0);
| IOS_Ioctl(FD, 0x16, in_buf, 4, 0, 0);
|
|
Line 180:
Line 180:
|-
|-
| 0x17
| 0x17
−
| sign()
+
| IOSCError IOSC_GeneratePublicKeySign(u8 * hash, u32 hashLength, IOSCSecretKeyHandle signerHandle, u8 * eccSignature);
| IOS_Ioctlv(FD, 0x17, 2, 1, vector);
| IOS_Ioctlv(FD, 0x17, 2, 1, vector);
|
|
Line 186:
Line 186:
|-
|-
| 0x18
| 0x18
−
| IOSC_GenerateCertificate()
+
| IOSCError IOSC_GenerateCertificate(IOSCSecretKeyHandle privateHandle, IOSCCertName certname, IOSCEccSignedCert * certificate);
| IOS_Ioctlv(FD, 0x18, 2, 1, vector);
| IOS_Ioctlv(FD, 0x18, 2, 1, vector);
|
|
Line 192:
Line 192:
|-
|-
| 0x19
| 0x19
−
| Unknown
+
| IOSCError IOSC_CheckDiHashes(u8 * destAddr, u8 * diskRdBuf, u32 h1Index, u32 h2Index, u8 * h3Ptr);
| IOS_Ioctl(FD, 0x19, ???, ???, ???, ???);
| IOS_Ioctl(FD, 0x19, ???, ???, ???, ???);
|
|
Line 216:
Line 216:
|-
|-
| 0x1D
| 0x1D
−
| cryptoReadHashedBlock()
+
| IOSCError IOSC_ReadHashedBlock(u8 * destAddr, u8 * diskRdBuf, u32 h1Index, u32 h2Index, u8 * h3Ptr);
| IOS_Ioctlv(FD, 0x1D, 5, 1, vector);
| IOS_Ioctlv(FD, 0x1D, 5, 1, vector);
|
|
Line 271:
Line 271:
| 0x00
| 0x00
| ECC-233
| ECC-233
−
| Wii U NG private key
+
| IOSC_DEV_SIGNING_KEY_HANDLE (Wii U NG private key)
|-
|-
| 0x01
| 0x01
| NONE
| NONE
−
| Wii U NG ID
+
| IOSC_DEV_ID_HANDLE (Wii U NG ID)
|-
|-
| 0x02
| 0x02
| AES-128
| AES-128
−
| Wii U SLC (NAND) key
+
| IOSC_FS_ENC_HANDLE (Wii U SLC key)
|-
|-
| 0x03
| 0x03
| HMAC SHA-1
| HMAC SHA-1
−
| Wii U SLC (NAND) HMAC
+
| IOSC_FS_MAC_HANDLE (Wii U SLC HMAC)
|-
|-
| 0x04
| 0x04
| AES-128
| AES-128
−
| Wii common key
+
| IOSC_COMMON_ENC_HANDLE (Wii common key)
|-
|-
| 0x05
| 0x05
| AES-128
| AES-128
−
| Wii U RNG key
+
| IOSC_BACKUP_ENC_HANDLE (Wii U RNG key)
Used by commands 0x15, 0x16, 0x17 and 0x18.
Used by commands 0x15, 0x16, 0x17 and 0x18.
|-
|-
| 0x06
| 0x06
| AES-128
| AES-128
−
| Wii SD key
+
| IOSC_APP_ENC_HANDLE (Wii SD key)
|-
|-
| 0x07
| 0x07
| AES-128
| AES-128
−
| Wii U SEEPROM key
+
| IOSC_BOOTOSVER_ENC_HANDLE (Wii U SEEPROM key)
|-
|-
| 0x08
| 0x08
| NONE
| NONE
−
| Unused
+
| IOSC_CACRLVER_HANDLE (Unused)
|-
|-
| 0x09
| 0x09
| NONE
| NONE
−
| Unused
+
| IOSC_SIGNERCRLVER_HANDLE (Unused)
|-
|-
| 0x0A
| 0x0A
| NONE
| NONE
−
| Unused
+
| IOSC_FSVER_HANDLE (Unused)
|-
|-
| 0x0B
| 0x0B
| AES-128
| AES-128
−
| Wii Korean key
+
| IOSC_COMMON2_ENC_HANDLE (Wii Korean key)
|-
|-
| 0x0C
| 0x0C