diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/lib/libtomcrypt/aes.c | 39 | ||||
-rw-r--r-- | core/lib/libtomcrypt/src/tee_ltc_provider.c | 29 | ||||
-rw-r--r-- | core/lib/libtomcrypt/sub.mk | 1 |
3 files changed, 40 insertions, 29 deletions
diff --git a/core/lib/libtomcrypt/aes.c b/core/lib/libtomcrypt/aes.c new file mode 100644 index 00000000..027a2f76 --- /dev/null +++ b/core/lib/libtomcrypt/aes.c @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: BSD-2-Clause +/* + * Copyright (c) 2014-2019, Linaro Limited + */ + +#include <crypto/crypto.h> +#include <kernel/panic.h> +#include <tee_api_defines.h> +#include <tee_api_types.h> +#include <tomcrypt.h> + +TEE_Result crypto_aes_expand_enc_key(const void *key, size_t key_len, + void *enc_key, size_t enc_keylen, + unsigned int *rounds) +{ + symmetric_key skey; + + if (enc_keylen < sizeof(skey.rijndael.eK)) + return TEE_ERROR_BAD_PARAMETERS; + + if (aes_setup(key, key_len, 0, &skey)) + return TEE_ERROR_BAD_PARAMETERS; + + memcpy(enc_key, skey.rijndael.eK, sizeof(skey.rijndael.eK)); + *rounds = skey.rijndael.Nr; + return TEE_SUCCESS; +} + +void crypto_aes_enc_block(const void *enc_key, size_t enc_keylen __maybe_unused, + unsigned int rounds, const void *src, void *dst) +{ + symmetric_key skey; + + assert(enc_keylen >= sizeof(skey.rijndael.eK)); + memcpy(skey.rijndael.eK, enc_key, sizeof(skey.rijndael.eK)); + skey.rijndael.Nr = rounds; + if (aes_ecb_encrypt(src, dst, &skey)) + panic(); +} diff --git a/core/lib/libtomcrypt/src/tee_ltc_provider.c b/core/lib/libtomcrypt/src/tee_ltc_provider.c index 2fa3d662..2663e774 100644 --- a/core/lib/libtomcrypt/src/tee_ltc_provider.c +++ b/core/lib/libtomcrypt/src/tee_ltc_provider.c @@ -144,32 +144,3 @@ void tomcrypt_arm_neon_disable(struct tomcrypt_arm_neon_state *state) thread_kernel_disable_vfp(state->state); } #endif - -TEE_Result crypto_aes_expand_enc_key(const void *key, size_t key_len, - void *enc_key, size_t enc_keylen, - unsigned int *rounds) -{ - symmetric_key skey; - - if (enc_keylen < sizeof(skey.rijndael.eK)) - return TEE_ERROR_BAD_PARAMETERS; - - if (aes_setup(key, key_len, 0, &skey)) - return TEE_ERROR_BAD_PARAMETERS; - - memcpy(enc_key, skey.rijndael.eK, sizeof(skey.rijndael.eK)); - *rounds = skey.rijndael.Nr; - return TEE_SUCCESS; -} - -void crypto_aes_enc_block(const void *enc_key, size_t enc_keylen __maybe_unused, - unsigned int rounds, const void *src, void *dst) -{ - symmetric_key skey; - - assert(enc_keylen >= sizeof(skey.rijndael.eK)); - memcpy(skey.rijndael.eK, enc_key, sizeof(skey.rijndael.eK)); - skey.rijndael.Nr = rounds; - if (aes_ecb_encrypt(src, dst, &skey)) - panic(); -} diff --git a/core/lib/libtomcrypt/sub.mk b/core/lib/libtomcrypt/sub.mk index 50333ac1..31fbcd41 100644 --- a/core/lib/libtomcrypt/sub.mk +++ b/core/lib/libtomcrypt/sub.mk @@ -19,3 +19,4 @@ srcs-$(CFG_CRYPTO_DSA) += dsa.c srcs-$(CFG_CRYPTO_ECC) += ecc.c srcs-$(CFG_CRYPTO_RSA) += rsa.c srcs-$(CFG_CRYPTO_DH) += dh.c +srcs-$(CFG_CRYPTO_AES) += aes.c |