// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (C) 2018, ARM Limited * Copyright (C) 2019, Linaro Limited */ #include #include #include #include TEE_Result crypto_aes_expand_enc_key(const void *key, size_t key_len, void *enc_key, size_t enc_keylen, unsigned int *rounds) { mbedtls_aes_context ctx; memset(&ctx, 0, sizeof(ctx)); mbedtls_aes_init(&ctx); if (mbedtls_aes_setkey_enc(&ctx, key, key_len * 8) != 0) return TEE_ERROR_BAD_PARAMETERS; if (enc_keylen > sizeof(ctx.buf)) return TEE_ERROR_BAD_PARAMETERS; memcpy(enc_key, ctx.buf, enc_keylen); *rounds = ctx.nr; mbedtls_aes_free(&ctx); return TEE_SUCCESS; } void crypto_aes_enc_block(const void *enc_key, size_t enc_keylen, unsigned int rounds, const void *src, void *dst) { mbedtls_aes_context ctx; memset(&ctx, 0, sizeof(ctx)); mbedtls_aes_init(&ctx); if (enc_keylen > sizeof(ctx.buf)) panic(); memcpy(ctx.buf, enc_key, enc_keylen); ctx.rk = ctx.buf; ctx.nr = rounds; mbedtls_aes_encrypt(&ctx, src, dst); mbedtls_aes_free(&ctx); }