diff options
| author | Govindraj Raja <govindraj.raja@arm.com> | 2023-01-12 15:34:12 +0000 |
|---|---|---|
| committer | Govindraj Raja <govindraj.raja@arm.com> | 2023-02-21 11:09:47 +0000 |
| commit | 51e061591bbf13af2486c3bb5f37ed609578d145 (patch) | |
| tree | e68b79e2544ca7078970c0b072553d542a9268e3 /drivers | |
| parent | 47c7171348d70c2d369363c247d74f954e3b778d (diff) | |
| download | arm-trusted-firmware-51e061591bbf13af2486c3bb5f37ed609578d145.tar.gz | |
feat(mbedtls): add support for mbedtls-3.3
TF-A support for mbedtls3.x has been overdue by number of releases.
As per mbedtls support it was advised to use latest and greatest
mbedtls-3.3. But mbedtls-3.x breaks API compatibility with
mbedtls-2.x
To maintain comptability for mbedtls-2.x and enable mbedtls-3.x
support add a functionality into makefile to determine the major version
of mbedtls and use that to selective include or compile files
that are present.
With mbedtls-3.x numerous other config changes have been done.
Some of the config options deprecated or enabled by default.
Thus we decided to introduce a new 3.x config file part of this
change for building TF-A with mbedtls-3.3.
For futher information on migrating to mbedtls 3.x refer to:
https://github.com/Mbed-TLS/mbedtls/blob/development/docs/3.0-migration-guide.md
Change-Id: Ia8106d6f526809df927d608db27fe149623258ed
Signed-off-by: Govindraj Raja <govindraj.raja@arm.com>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/auth/mbedtls/mbedtls_common.mk | 86 | ||||
| -rw-r--r-- | drivers/auth/mbedtls/mbedtls_crypto.c | 15 |
2 files changed, 71 insertions, 30 deletions
diff --git a/drivers/auth/mbedtls/mbedtls_common.mk b/drivers/auth/mbedtls/mbedtls_common.mk index ae4b0676b..79c45126a 100644 --- a/drivers/auth/mbedtls/mbedtls_common.mk +++ b/drivers/auth/mbedtls/mbedtls_common.mk @@ -1,5 +1,5 @@ # -# Copyright (c) 2015-2022, Arm Limited. All rights reserved. +# Copyright (c) 2015-2023, Arm Limited. All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause # @@ -15,42 +15,68 @@ endif MBEDTLS_INC = -I${MBEDTLS_DIR}/include +MBEDTLS_MAJOR=$(shell grep -hP "define MBEDTLS_VERSION_MAJOR" ${MBEDTLS_DIR}/include/mbedtls/*.h | grep -oe '\([0-9.]*\)') +MBEDTLS_MINOR=$(shell grep -hP "define MBEDTLS_VERSION_MINOR" ${MBEDTLS_DIR}/include/mbedtls/*.h | grep -oe '\([0-9.]*\)') +$(info MBEDTLS_VERSION_MAJOR is [${MBEDTLS_MAJOR}] MBEDTLS_VERSION_MINOR is [${MBEDTLS_MINOR}]) + # Specify mbed TLS configuration file -MBEDTLS_CONFIG_FILE ?= "<drivers/auth/mbedtls/mbedtls_config.h>" +ifeq (${MBEDTLS_MAJOR}, 2) + MBEDTLS_CONFIG_FILE ?= "<drivers/auth/mbedtls/mbedtls_config-2.h>" +else ifeq (${MBEDTLS_MAJOR}, 3) + MBEDTLS_CONFIG_FILE ?= "<drivers/auth/mbedtls/mbedtls_config-3.h>" +endif + $(eval $(call add_define,MBEDTLS_CONFIG_FILE)) MBEDTLS_SOURCES += drivers/auth/mbedtls/mbedtls_common.c - -LIBMBEDTLS_SRCS += $(addprefix ${MBEDTLS_DIR}/library/, \ - aes.c \ - asn1parse.c \ - asn1write.c \ - cipher.c \ - cipher_wrap.c \ - memory_buffer_alloc.c \ - oid.c \ - platform.c \ - platform_util.c \ - bignum.c \ - gcm.c \ - md.c \ - pk.c \ - pk_wrap.c \ - pkparse.c \ - pkwrite.c \ - sha256.c \ - sha512.c \ - ecdsa.c \ - ecp_curves.c \ - ecp.c \ - rsa.c \ - rsa_internal.c \ - x509.c \ - x509_crt.c \ - constant_time.c \ +LIBMBEDTLS_SRCS += $(addprefix ${MBEDTLS_DIR}/library/, \ + aes.c \ + asn1parse.c \ + asn1write.c \ + cipher.c \ + cipher_wrap.c \ + constant_time.c \ + memory_buffer_alloc.c \ + oid.c \ + platform.c \ + platform_util.c \ + bignum.c \ + gcm.c \ + md.c \ + pk.c \ + pk_wrap.c \ + pkparse.c \ + pkwrite.c \ + sha256.c \ + sha512.c \ + ecdsa.c \ + ecp_curves.c \ + ecp.c \ + rsa.c \ + x509.c \ + x509_crt.c \ ) +ifeq (${MBEDTLS_MAJOR}, 2) + LIBMBEDTLS_SRCS += $(addprefix ${MBEDTLS_DIR}/library/, \ + rsa_internal.c \ + ) +else ifeq (${MBEDTLS_MAJOR}, 3) + LIBMBEDTLS_SRCS += $(addprefix ${MBEDTLS_DIR}/library/, \ + bignum_core.c \ + rsa_alt_helpers.c \ + hash_info.c \ + ) + + # Currently on Mbedtls-3 there is outstanding bug due to usage + # of redundant declaration[1], So disable redundant-decls + # compilation flag to avoid compilation error when compiling with + # Mbedtls-3. + # [1]: https://github.com/Mbed-TLS/mbedtls/issues/6910 + LIBMBEDTLS_CFLAGS += -Wno-error=redundant-decls +endif + # The platform may define the variable 'TF_MBEDTLS_KEY_ALG' to select the key # algorithm to use. If the variable is not defined, select it based on # algorithm used for key generation `KEY_ALG`. If `KEY_ALG` is not defined, diff --git a/drivers/auth/mbedtls/mbedtls_crypto.c b/drivers/auth/mbedtls/mbedtls_crypto.c index b13a460b4..4241d2161 100644 --- a/drivers/auth/mbedtls/mbedtls_crypto.c +++ b/drivers/auth/mbedtls/mbedtls_crypto.c @@ -295,6 +295,7 @@ static int aes_gcm_decrypt(void *data_ptr, size_t len, const void *key, unsigned char *pt = data_ptr; size_t dec_len; int diff, i, rc; + size_t output_length __unused; mbedtls_gcm_init(&ctx); @@ -304,7 +305,11 @@ static int aes_gcm_decrypt(void *data_ptr, size_t len, const void *key, goto exit_gcm; } +#if (MBEDTLS_VERSION_MAJOR < 3) rc = mbedtls_gcm_starts(&ctx, MBEDTLS_GCM_DECRYPT, iv, iv_len, NULL, 0); +#else + rc = mbedtls_gcm_starts(&ctx, MBEDTLS_GCM_DECRYPT, iv, iv_len); +#endif if (rc != 0) { rc = CRYPTO_ERR_DECRYPTION; goto exit_gcm; @@ -313,7 +318,12 @@ static int aes_gcm_decrypt(void *data_ptr, size_t len, const void *key, while (len > 0) { dec_len = MIN(sizeof(buf), len); +#if (MBEDTLS_VERSION_MAJOR < 3) rc = mbedtls_gcm_update(&ctx, dec_len, pt, buf); +#else + rc = mbedtls_gcm_update(&ctx, pt, dec_len, buf, sizeof(buf), &output_length); +#endif + if (rc != 0) { rc = CRYPTO_ERR_DECRYPTION; goto exit_gcm; @@ -324,7 +334,12 @@ static int aes_gcm_decrypt(void *data_ptr, size_t len, const void *key, len -= dec_len; } +#if (MBEDTLS_VERSION_MAJOR < 3) rc = mbedtls_gcm_finish(&ctx, tag_buf, sizeof(tag_buf)); +#else + rc = mbedtls_gcm_finish(&ctx, NULL, 0, &output_length, tag_buf, sizeof(tag_buf)); +#endif + if (rc != 0) { rc = CRYPTO_ERR_DECRYPTION; goto exit_gcm; |
