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