1 /** 2 * \file mbedtls/build_info.h 3 * 4 * \brief Build-time configuration info 5 * 6 * Include this file if you need to depend on the 7 * configuration options defined in mbedtls_config.h or MBEDTLS_CONFIG_FILE 8 */ 9 /* 10 * Copyright The Mbed TLS Contributors 11 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 12 */ 13 14 #ifndef MBEDTLS_BUILD_INFO_H 15 #define MBEDTLS_BUILD_INFO_H 16 17 /* 18 * This set of compile-time defines can be used to determine the version number 19 * of the Mbed TLS library used. Run-time variables for the same can be found in 20 * version.h 21 */ 22 23 /** 24 * The version number x.y.z is split into three parts. 25 * Major, Minor, Patchlevel 26 */ 27 #define MBEDTLS_VERSION_MAJOR 3 28 #define MBEDTLS_VERSION_MINOR 6 29 #define MBEDTLS_VERSION_PATCH 2 30 31 /** 32 * The single version number has the following structure: 33 * MMNNPP00 34 * Major version | Minor version | Patch version 35 */ 36 #define MBEDTLS_VERSION_NUMBER 0x03060200 37 #define MBEDTLS_VERSION_STRING "3.6.2" 38 #define MBEDTLS_VERSION_STRING_FULL "Mbed TLS 3.6.2" 39 40 /* Macros for build-time platform detection */ 41 42 #if !defined(MBEDTLS_ARCH_IS_ARM64) && \ 43 (defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) 44 #define MBEDTLS_ARCH_IS_ARM64 45 #endif 46 47 #if !defined(MBEDTLS_ARCH_IS_ARM32) && \ 48 (defined(__arm__) || defined(_M_ARM) || \ 49 defined(_M_ARMT) || defined(__thumb__) || defined(__thumb2__)) 50 #define MBEDTLS_ARCH_IS_ARM32 51 #endif 52 53 #if !defined(MBEDTLS_ARCH_IS_X64) && \ 54 (defined(__amd64__) || defined(__x86_64__) || \ 55 ((defined(_M_X64) || defined(_M_AMD64)) && !defined(_M_ARM64EC))) 56 #define MBEDTLS_ARCH_IS_X64 57 #endif 58 59 #if !defined(MBEDTLS_ARCH_IS_X86) && \ 60 (defined(__i386__) || defined(_X86_) || \ 61 (defined(_M_IX86) && !defined(_M_I86))) 62 #define MBEDTLS_ARCH_IS_X86 63 #endif 64 65 #if !defined(MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64) && \ 66 (defined(_M_ARM64) || defined(_M_ARM64EC)) 67 #define MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64 68 #endif 69 70 /* This is defined if the architecture is Armv8-A, or higher */ 71 #if !defined(MBEDTLS_ARCH_IS_ARMV8_A) 72 #if defined(__ARM_ARCH) && defined(__ARM_ARCH_PROFILE) 73 #if (__ARM_ARCH >= 8) && (__ARM_ARCH_PROFILE == 'A') 74 /* GCC, clang, armclang and IAR */ 75 #define MBEDTLS_ARCH_IS_ARMV8_A 76 #endif 77 #elif defined(__ARM_ARCH_8A) 78 /* Alternative defined by clang */ 79 #define MBEDTLS_ARCH_IS_ARMV8_A 80 #elif defined(_M_ARM64) || defined(_M_ARM64EC) 81 /* MSVC ARM64 is at least Armv8.0-A */ 82 #define MBEDTLS_ARCH_IS_ARMV8_A 83 #endif 84 #endif 85 86 #if defined(__GNUC__) && !defined(__ARMCC_VERSION) && !defined(__clang__) \ 87 && !defined(__llvm__) && !defined(__INTEL_COMPILER) 88 /* Defined if the compiler really is gcc and not clang, etc */ 89 #define MBEDTLS_COMPILER_IS_GCC 90 #define MBEDTLS_GCC_VERSION \ 91 (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) 92 #endif 93 94 #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) 95 #define _CRT_SECURE_NO_DEPRECATE 1 96 #endif 97 98 /* Define `inline` on some non-C99-compliant compilers. */ 99 #if (defined(__ARMCC_VERSION) || defined(_MSC_VER)) && \ 100 !defined(inline) && !defined(__cplusplus) 101 #define inline __inline 102 #endif 103 104 #if defined(MBEDTLS_CONFIG_FILES_READ) 105 #error "Something went wrong: MBEDTLS_CONFIG_FILES_READ defined before reading the config files!" 106 #endif 107 #if defined(MBEDTLS_CONFIG_IS_FINALIZED) 108 #error "Something went wrong: MBEDTLS_CONFIG_IS_FINALIZED defined before reading the config files!" 109 #endif 110 111 /* X.509, TLS and non-PSA crypto configuration */ 112 #if !defined(MBEDTLS_CONFIG_FILE) 113 #include "mbedtls/mbedtls_config.h" 114 #else 115 #include MBEDTLS_CONFIG_FILE 116 #endif 117 118 #if defined(MBEDTLS_CONFIG_VERSION) && ( \ 119 MBEDTLS_CONFIG_VERSION < 0x03000000 || \ 120 MBEDTLS_CONFIG_VERSION > MBEDTLS_VERSION_NUMBER) 121 #error "Invalid config version, defined value of MBEDTLS_CONFIG_VERSION is unsupported" 122 #endif 123 124 /* Target and application specific configurations 125 * 126 * Allow user to override any previous default. 127 * 128 */ 129 #if defined(MBEDTLS_USER_CONFIG_FILE) 130 #include MBEDTLS_USER_CONFIG_FILE 131 #endif 132 133 /* PSA crypto configuration */ 134 #if defined(MBEDTLS_PSA_CRYPTO_CONFIG) 135 #if defined(MBEDTLS_PSA_CRYPTO_CONFIG_FILE) 136 #include MBEDTLS_PSA_CRYPTO_CONFIG_FILE 137 #else 138 #include "psa/crypto_config.h" 139 #endif 140 #if defined(MBEDTLS_PSA_CRYPTO_USER_CONFIG_FILE) 141 #include MBEDTLS_PSA_CRYPTO_USER_CONFIG_FILE 142 #endif 143 #endif /* defined(MBEDTLS_PSA_CRYPTO_CONFIG) */ 144 145 /* Indicate that all configuration files have been read. 146 * It is now time to adjust the configuration (follow through on dependencies, 147 * make PSA and legacy crypto consistent, etc.). 148 */ 149 #define MBEDTLS_CONFIG_FILES_READ 150 151 /* Auto-enable MBEDTLS_CTR_DRBG_USE_128_BIT_KEY if 152 * MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH and MBEDTLS_CTR_DRBG_C defined 153 * to ensure a 128-bit key size in CTR_DRBG. 154 */ 155 #if defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH) && defined(MBEDTLS_CTR_DRBG_C) 156 #define MBEDTLS_CTR_DRBG_USE_128_BIT_KEY 157 #endif 158 159 /* Auto-enable MBEDTLS_MD_C if needed by a module that didn't require it 160 * in a previous release, to ensure backwards compatibility. 161 */ 162 #if defined(MBEDTLS_PKCS5_C) 163 #define MBEDTLS_MD_C 164 #endif 165 166 /* PSA crypto specific configuration options 167 * - If config_psa.h reads a configuration option in preprocessor directive, 168 * this symbol should be set before its inclusion. (e.g. MBEDTLS_MD_C) 169 * - If config_psa.h writes a configuration option in conditional directive, 170 * this symbol should be consulted after its inclusion. 171 * (e.g. MBEDTLS_MD_LIGHT) 172 */ 173 #if defined(MBEDTLS_PSA_CRYPTO_CONFIG) /* PSA_WANT_xxx influences MBEDTLS_xxx */ || \ 174 defined(MBEDTLS_PSA_CRYPTO_C) /* MBEDTLS_xxx influences PSA_WANT_xxx */ || \ 175 defined(MBEDTLS_PSA_CRYPTO_CLIENT) /* The same as the previous, but with separation only */ 176 #include "mbedtls/config_psa.h" 177 #endif 178 179 #include "mbedtls/config_adjust_legacy_crypto.h" 180 181 #include "mbedtls/config_adjust_x509.h" 182 183 #include "mbedtls/config_adjust_ssl.h" 184 185 /* Indicate that all configuration symbols are set, 186 * even the ones that are calculated programmatically. 187 * It is now safe to query the configuration (to check it, to size buffers, 188 * etc.). 189 */ 190 #define MBEDTLS_CONFIG_IS_FINALIZED 191 192 #include "mbedtls/check_config.h" 193 194 #endif /* MBEDTLS_BUILD_INFO_H */ 195