Code: Select all
int enc (char *in, char **out, int size, const char *aes, const char *cmac, char *****, int ****_sz)
{
char *buf, *k1, *p;
printf("enc\n");
buf = calloc(1, sizeof(KIRK_CMD1_HEADER) + size + ****_sz);
k1 = calloc(1, 0x40 + sizeof(KIRK_CMD1_HEADER) + size + ****_sz);
((KIRK_CMD1_HEADER*)buf)->mode = KIRK_MODE_CMD1;
((KIRK_CMD1_HEADER*)buf)->data_offset = ****_sz;
((KIRK_CMD1_HEADER*)buf)->data_size = size;
memcpy(((KIRK_CMD1_HEADER*)buf)->AES_key, aes, 0x10);
memcpy(((KIRK_CMD1_HEADER*)buf)->CMAC_key, cmac, 0x10);
memcpy(buf + sizeof(KIRK_CMD1_HEADER), ****, ****_sz);
memcpy(buf + sizeof(KIRK_CMD1_HEADER) + ****_sz, in, size);
printf("before zero\n");
int ret = kirk_CMD0(k1 + 0x40, buf, size, 0);
printf("cmd0 %i\n", ret);
const char data_cmac [] = {
0x31, 0x5c, 0xf7, 0x20, 0xd0, 0x39, 0xb9, 0x09, 0xfe, 0x09, 0xa9, 0xde, 0x7a, 0xdd, 0x97, 0xa9
};
memcpy(((KIRK_CMD1_HEADER*)(k1 + 0x40))->CMAC_data_hash, data_cmac, 0x10);
ret = kirk_forge(k1 + 0x40, size);
dump_header(k1 + 0x40);
*out = k1;
return size;
}