125cc72e0SJens Wiklander // SPDX-License-Identifier: BSD-2-Clause 225cc72e0SJens Wiklander /* 325cc72e0SJens Wiklander * Copyright (c) 2014-2019, Linaro Limited 425cc72e0SJens Wiklander */ 525cc72e0SJens Wiklander 625cc72e0SJens Wiklander #include <crypto/crypto.h> 725cc72e0SJens Wiklander #include <kernel/panic.h> 825cc72e0SJens Wiklander #include <tee_api_defines.h> 925cc72e0SJens Wiklander #include <tee_api_types.h> 10*5a913ee7SJerome Forissier #include <tomcrypt_private.h> 1125cc72e0SJens Wiklander 1225cc72e0SJens Wiklander TEE_Result crypto_aes_expand_enc_key(const void *key, size_t key_len, 1325cc72e0SJens Wiklander void *enc_key, size_t enc_keylen, 1425cc72e0SJens Wiklander unsigned int *rounds) 1525cc72e0SJens Wiklander { 1625cc72e0SJens Wiklander symmetric_key skey; 1725cc72e0SJens Wiklander 1825cc72e0SJens Wiklander if (enc_keylen < sizeof(skey.rijndael.eK)) 1925cc72e0SJens Wiklander return TEE_ERROR_BAD_PARAMETERS; 2025cc72e0SJens Wiklander 2125cc72e0SJens Wiklander if (aes_setup(key, key_len, 0, &skey)) 2225cc72e0SJens Wiklander return TEE_ERROR_BAD_PARAMETERS; 2325cc72e0SJens Wiklander 2425cc72e0SJens Wiklander memcpy(enc_key, skey.rijndael.eK, sizeof(skey.rijndael.eK)); 2525cc72e0SJens Wiklander *rounds = skey.rijndael.Nr; 2625cc72e0SJens Wiklander return TEE_SUCCESS; 2725cc72e0SJens Wiklander } 2825cc72e0SJens Wiklander 2925cc72e0SJens Wiklander void crypto_aes_enc_block(const void *enc_key, size_t enc_keylen __maybe_unused, 3025cc72e0SJens Wiklander unsigned int rounds, const void *src, void *dst) 3125cc72e0SJens Wiklander { 3225cc72e0SJens Wiklander symmetric_key skey; 3325cc72e0SJens Wiklander 3425cc72e0SJens Wiklander assert(enc_keylen >= sizeof(skey.rijndael.eK)); 3525cc72e0SJens Wiklander memcpy(skey.rijndael.eK, enc_key, sizeof(skey.rijndael.eK)); 3625cc72e0SJens Wiklander skey.rijndael.Nr = rounds; 3725cc72e0SJens Wiklander if (aes_ecb_encrypt(src, dst, &skey)) 3825cc72e0SJens Wiklander panic(); 3925cc72e0SJens Wiklander } 40