1 // SPDX-License-Identifier: BSD-2-Clause
2 /*
3 * Copyright (C) 2018, ARM Limited
4 * Copyright (C) 2019, Linaro Limited
5 */
6
7 #include <assert.h>
8 #include <compiler.h>
9 #include <crypto/crypto_accel.h>
10 #include <crypto/crypto.h>
11 #include <kernel/panic.h>
12 #include <mbedtls/aes.h>
13 #include <mbedtls/platform_util.h>
14 #include <string.h>
15
16 #if defined(MBEDTLS_AES_ALT)
mbedtls_aes_init(mbedtls_aes_context * ctx)17 void mbedtls_aes_init(mbedtls_aes_context *ctx)
18 {
19 assert(ctx);
20 memset(ctx, 0, sizeof(*ctx));
21 }
22
mbedtls_aes_free(mbedtls_aes_context * ctx)23 void mbedtls_aes_free( mbedtls_aes_context *ctx )
24 {
25 if (ctx)
26 mbedtls_platform_zeroize(ctx, sizeof(*ctx));
27 }
28
mbedtls_aes_setkey_enc(mbedtls_aes_context * ctx,const unsigned char * key,unsigned int keybits)29 int mbedtls_aes_setkey_enc(mbedtls_aes_context *ctx, const unsigned char *key,
30 unsigned int keybits)
31 {
32 assert(ctx && key);
33
34 if (keybits != 128 && keybits != 192 && keybits != 256)
35 return MBEDTLS_ERR_AES_INVALID_KEY_LENGTH;
36
37 if (crypto_accel_aes_expand_keys(key, keybits / 8, ctx->key, NULL,
38 sizeof(ctx->key), &ctx->round_count))
39 return MBEDTLS_ERR_AES_BAD_INPUT_DATA;
40
41 return 0;
42 }
43
mbedtls_aes_setkey_dec(mbedtls_aes_context * ctx,const unsigned char * key,unsigned int keybits)44 int mbedtls_aes_setkey_dec(mbedtls_aes_context *ctx, const unsigned char *key,
45 unsigned int keybits)
46 {
47 uint32_t enc_key[sizeof(ctx->key)] = { 0 };
48
49 assert(ctx && key);
50
51 if (keybits != 128 && keybits != 192 && keybits != 256)
52 return MBEDTLS_ERR_AES_INVALID_KEY_LENGTH;
53
54 if (crypto_accel_aes_expand_keys(key, keybits / 8, enc_key, ctx->key,
55 sizeof(ctx->key), &ctx->round_count))
56 return MBEDTLS_ERR_AES_BAD_INPUT_DATA;
57
58 return 0;
59 }
60 #endif /*MBEDTLS_AES_ALT*/
61