Current code:
- Code: Select all
int kirk_CMD1_decrypt(void* outbuff, void* inbuff, int size)
{
KIRK_CMD1_HEADER* header = (KIRK_CMD1_HEADER*)inbuff;
if(header->mode != KIRK_MODE_CMD1) return KIRK_INVALID_MODE;
if(header->data_size == 0) return KIRK_DATA_SIZE_ZERO;
u8 decrypted_keys[32]; //0-15 AES key, 16-31 CMAC key
AES_KEY a;
AES_set_decrypt_key(kirk1_key, 128, &a);
u8 ivec[16];
memset(ivec, 0, sizeof(ivec));
AES_cbc_encrypt(inbuff, decrypted_keys, 16*2, &a, ivec, AES_DECRYPT); //decrypt AES & CMAC key to temp buffer
memcpy(inbuff, decrypted_keys, 32); //copy back decrypted keys to header
AES_KEY k1;
AES_set_decrypt_key(header->AES_key, 128, &k1);
AES_cbc_encrypt(inbuff+sizeof(KIRK_CMD1_HEADER)+header->sth_size, outbuff, header->data_size, &k1, ivec, AES_DECRYPT);
return KIRK_OPERATION_SUCCESS;
}
And BTW. OpenSSL lib can generate CMAC hashes?