public int kirk_CMD7(byte *outbuff, byte *inbuff, int size) { if (!is_kirk_initialized) { return(KIRK_NOT_INITIALIZED); } KIRK_AES128CBC_HEADER *header = (KIRK_AES128CBC_HEADER *)inbuff; if (header->Mode != KIRK_MODE_DECRYPT_CBC) { return(KIRK_INVALID_MODE); } if (header->Datasize == 0) { return(KIRK_DATA_SIZE_ZERO); } byte *key = kirk_4_7_get_key(header->KeySeed); if (key == (byte *)KIRK_INVALID_SIZE) { return(KIRK_INVALID_SIZE); } //Set the key Crypto.AES_ctx aesKey; Crypto.AES_set_key(&aesKey, key, 128); Crypto.AES_cbc_decrypt(&aesKey, inbuff + sizeof(KIRK_AES128CBC_HEADER), outbuff, size); return(KIRK_OPERATION_SUCCESS); }
/// <summary> /// /// </summary> /// <param name="outbuff"></param> /// <param name="inbuff"></param> /// <param name="size"></param> /// <returns></returns> public void kirk_CMD4(byte *outbuff, byte *inbuff, int size) { check_initialized(); KIRK_AES128CBC_HEADER *header = (KIRK_AES128CBC_HEADER *)inbuff; if (header->Mode != KirkMode.EncryptCbc) { throw (new KirkException(ResultEnum.PSP_KIRK_INVALID_MODE)); } if (header->Datasize == 0) { throw (new KirkException(ResultEnum.PSP_KIRK_DATA_SIZE_IS_ZERO)); } kirk_4_7_get_key(header->KeySeed, (key) => { // Set the key Crypto.AES_ctx aesKey; Crypto.AES_set_key(&aesKey, key, 128); Crypto.AES_cbc_encrypt(&aesKey, inbuff + sizeof(KIRK_AES128CBC_HEADER), outbuff, size); }); }