xref: /optee_os/core/lib/libtomcrypt/aes.c (revision 25cc72e017f4914b3b4ab7d5f5c40067d97f0e1b)
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