From 2f85b7e994639a18707cb2d09c10cd48480308da Mon Sep 17 00:00:00 2001 From: Antonio de Angelis Date: Mon, 27 Mar 2023 13:42:29 +0100 Subject: [PATCH] bootutil/crypto: Fix the common.h header The crypto/common.h header checks for MBEDTLS_VERSION_NUMBER value but it needs to include mbedtls/version.h first otherwise it won't return a reliable check. Signed-off-by: Antonio de Angelis Change-Id: Ice12fe26bb24fd98c09c4adfe001b5274cee555c --- .../bootutil/include/bootutil/crypto/common.h | 5 +- ext/mbedtls-asn1/include/mbedtls/version.h | 90 +++++++++++++++++++ 2 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 ext/mbedtls-asn1/include/mbedtls/version.h diff --git a/boot/bootutil/include/bootutil/crypto/common.h b/boot/bootutil/include/bootutil/crypto/common.h index ef0f3261..c765fe1f 100644 --- a/boot/bootutil/include/bootutil/crypto/common.h +++ b/boot/bootutil/include/bootutil/crypto/common.h @@ -7,9 +7,10 @@ #ifndef __BOOTUTIL_CRYPTO_COMMON_H__ #define __BOOTUTIL_CRYPTO_COMMON_H__ -/* TODO May need to update this in a future 3.x version of Mbed TLS. - * Extract a member of the mbedtls context structure. +/* The check below can be performed even for those cases + * where MCUBOOT_USE_MBED_TLS has not been defined */ +#include "mbedtls/version.h" #if MBEDTLS_VERSION_NUMBER >= 0x03000000 #define MBEDTLS_CONTEXT_MEMBER(X) MBEDTLS_PRIVATE(X) #else diff --git a/ext/mbedtls-asn1/include/mbedtls/version.h b/ext/mbedtls-asn1/include/mbedtls/version.h new file mode 100644 index 00000000..773da4a6 --- /dev/null +++ b/ext/mbedtls-asn1/include/mbedtls/version.h @@ -0,0 +1,90 @@ +/** + * \file version.h + * + * \brief Run-time version information + */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* + * This set of run-time variables can be used to determine the version number of + * the Mbed TLS library used. Compile-time version defines for the same can be + * found in build_info.h + */ +#ifndef MBEDTLS_VERSION_H +#define MBEDTLS_VERSION_H + +#include "mbedtls/build_info.h" + +#if defined(MBEDTLS_VERSION_C) + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get the version number. + * + * \return The constructed version number in the format + * MMNNPP00 (Major, Minor, Patch). + */ +unsigned int mbedtls_version_get_number( void ); + +/** + * Get the version string ("x.y.z"). + * + * \param string The string that will receive the value. + * (Should be at least 9 bytes in size) + */ +void mbedtls_version_get_string( char *string ); + +/** + * Get the full version string ("mbed TLS x.y.z"). + * + * \param string The string that will receive the value. The mbed TLS version + * string will use 18 bytes AT MOST including a terminating + * null byte. + * (So the buffer should be at least 18 bytes to receive this + * version string). + */ +void mbedtls_version_get_string_full( char *string ); + +/** + * \brief Check if support for a feature was compiled into this + * mbed TLS binary. This allows you to see at runtime if the + * library was for instance compiled with or without + * Multi-threading support. + * + * \note only checks against defines in the sections "System + * support", "mbed TLS modules" and "mbed TLS feature + * support" in mbedtls_config.h + * + * \param feature The string for the define to check (e.g. "MBEDTLS_AES_C") + * + * \return 0 if the feature is present, + * -1 if the feature is not present and + * -2 if support for feature checking as a whole was not + * compiled in. + */ +int mbedtls_version_check_feature( const char *feature ); + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_VERSION_C */ + +#endif /* version.h */