Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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);
            });
        }