blob: 4d317f0fecc52a740016cfdcc7818c233aa396e4 [file] [log] [blame]
// SPDX-License-Identifier: BSD-2-Clause
/*
* Copyright (C) 2018, ARM Limited
* Copyright (C) 2019, Linaro Limited
*/
#include <crypto/crypto.h>
#include <kernel/panic.h>
#include <mbedtls/aes.h>
#include <string.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)
{
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);
}