1 // SPDX-License-Identifier: BSD-2-Clause 2 /* 3 * Copyright (c) 2014-2019, Linaro Limited 4 */ 5 6 #include <crypto/crypto_accel.h> 7 #include <crypto/crypto.h> 8 #include <kernel/panic.h> 9 #include <tee_api_defines.h> 10 #include <tee_api_types.h> 11 #include <tomcrypt_private.h> 12 13 TEE_Result crypto_aes_expand_enc_key(const void *key, size_t key_len, 14 void *enc_key, size_t enc_keylen, 15 unsigned int *rounds) 16 { 17 #ifdef _CFG_CORE_LTC_AES_ACCEL 18 return crypto_accel_aes_expand_keys(key, key_len, enc_key, NULL, 19 enc_keylen, rounds); 20 #else 21 symmetric_key skey; 22 23 if (enc_keylen < sizeof(skey.rijndael.eK)) 24 return TEE_ERROR_BAD_PARAMETERS; 25 26 if (aes_setup(key, key_len, 0, &skey)) 27 return TEE_ERROR_BAD_PARAMETERS; 28 29 memcpy(enc_key, skey.rijndael.eK, sizeof(skey.rijndael.eK)); 30 *rounds = skey.rijndael.Nr; 31 #endif 32 return TEE_SUCCESS; 33 } 34 35 void crypto_aes_enc_block(const void *enc_key, size_t enc_keylen __maybe_unused, 36 unsigned int rounds, const void *src, void *dst) 37 { 38 #ifdef _CFG_CORE_LTC_AES_ACCEL 39 crypto_accel_aes_ecb_enc(dst, src, enc_key, rounds, 1); 40 #else 41 symmetric_key skey; 42 43 assert(enc_keylen >= sizeof(skey.rijndael.eK)); 44 memcpy(skey.rijndael.eK, enc_key, sizeof(skey.rijndael.eK)); 45 skey.rijndael.Nr = rounds; 46 if (aes_ecb_encrypt(src, dst, &skey)) 47 panic(); 48 #endif 49 } 50