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