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