In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

Changes

Jump to navigation Jump to search
3,032 bytes added ,  01:20, 19 November 2019
no edit summary
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

Navigation menu