// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (c) 2019, softathome */ #ifndef USE_HOSTCC #include #include #endif #include #include int image_aes_decrypt(struct image_cipher_info *info, const void *cipher, size_t cipher_len, void **data, size_t *size) { #ifndef USE_HOSTCC unsigned char key_exp[AES256_EXPAND_KEY_LENGTH]; unsigned int aes_blocks, key_len = info->cipher->key_len; *data = malloc(cipher_len); if (!*data) { printf("Can't allocate memory to decrypt\n"); return -ENOMEM; } *size = info->size_unciphered; memcpy(&key_exp[0], info->key, key_len); /* First we expand the key. */ aes_expand_key((u8 *)info->key, key_len, key_exp); /* Calculate the number of AES blocks to encrypt. */ aes_blocks = DIV_ROUND_UP(cipher_len, AES_BLOCK_LENGTH); aes_cbc_decrypt_blocks(key_len, key_exp, (u8 *)info->iv, (u8 *)cipher, *data, aes_blocks); #endif return 0; }