mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-07-29 11:41:15 +03:00
Merge pull request #8164 from yanrayw/adjust_tfm_configs
Adjust how we handle TF-M config files
This commit is contained in:
40
configs/config-tfm.h
Normal file
40
configs/config-tfm.h
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/**
|
||||||
|
* \file config-tfm.h
|
||||||
|
*
|
||||||
|
* \brief TF-M medium profile, adapted to work on other platforms.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright The Mbed TLS Contributors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* TF-M medium profile: mbedtls legacy configuration */
|
||||||
|
#include "../configs/ext/tfm_mbedcrypto_config_profile_medium.h"
|
||||||
|
|
||||||
|
/* TF-M medium profile: PSA crypto configuration */
|
||||||
|
#define MBEDTLS_PSA_CRYPTO_CONFIG_FILE "../configs/ext/crypto_config_profile_medium.h"
|
||||||
|
|
||||||
|
/***********************************************************/
|
||||||
|
/* Tweak the configuration to remove dependencies on TF-M. */
|
||||||
|
/***********************************************************/
|
||||||
|
|
||||||
|
/* MBEDTLS_PSA_CRYPTO_SPM needs third-party files, so disable it. */
|
||||||
|
#undef MBEDTLS_PSA_CRYPTO_SPM
|
||||||
|
|
||||||
|
/* TF-M provides its own dummy implementations to save code size.
|
||||||
|
* We don't have any way to disable the tests that need these feature,
|
||||||
|
* so we just keep AES decryption enabled. We will resolve this through
|
||||||
|
* an official way to disable AES decryption, then this deviation
|
||||||
|
* will no longer be needed:
|
||||||
|
* https://github.com/Mbed-TLS/mbedtls/issues/7368
|
||||||
|
*/
|
||||||
|
#undef MBEDTLS_AES_SETKEY_DEC_ALT
|
||||||
|
#undef MBEDTLS_AES_DECRYPT_ALT
|
||||||
|
|
||||||
|
/* Use built-in platform entropy functions (TF-M provides its own). */
|
||||||
|
#undef MBEDTLS_NO_PLATFORM_ENTROPY
|
||||||
|
|
||||||
|
/* Disable buffer-based memory allocator. This isn't strictly required,
|
||||||
|
* but using the native allocator is faster and works better with
|
||||||
|
* memory management analysis frameworks such as ASan. */
|
||||||
|
#undef MBEDTLS_MEMORY_BUFFER_ALLOC_C
|
@ -193,6 +193,15 @@
|
|||||||
#error "MBEDTLS_ECDSA_C defined, but not all prerequisites"
|
#error "MBEDTLS_ECDSA_C defined, but not all prerequisites"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_USE_PSA_CRYPTO)
|
||||||
|
#if defined(MBEDTLS_PK_CAN_ECDSA_SIGN) && !defined(MBEDTLS_ASN1_WRITE_C)
|
||||||
|
#error "MBEDTLS_PK_C with MBEDTLS_USE_PSA_CRYPTO needs MBEDTLS_ASN1_WRITE_C for ECDSA signature"
|
||||||
|
#endif
|
||||||
|
#if defined(MBEDTLS_PK_CAN_ECDSA_VERIFY) && !defined(MBEDTLS_ASN1_PARSE_C)
|
||||||
|
#error "MBEDTLS_PK_C with MBEDTLS_USE_PSA_CRYPTO needs MBEDTLS_ASN1_PARSE_C for ECDSA verification"
|
||||||
|
#endif
|
||||||
|
#endif /* MBEDTLS_PK_C && MBEDTLS_USE_PSA_CRYPTO */
|
||||||
|
|
||||||
#if defined(MBEDTLS_ECJPAKE_C) && \
|
#if defined(MBEDTLS_ECJPAKE_C) && \
|
||||||
( !defined(MBEDTLS_ECP_C) || \
|
( !defined(MBEDTLS_ECP_C) || \
|
||||||
!( defined(MBEDTLS_MD_C) || defined(MBEDTLS_PSA_CRYPTO_C) ) )
|
!( defined(MBEDTLS_MD_C) || defined(MBEDTLS_PSA_CRYPTO_C) ) )
|
||||||
|
@ -144,8 +144,8 @@ def detect_arch() -> str:
|
|||||||
print("Unknown host architecture, cannot auto-detect arch.")
|
print("Unknown host architecture, cannot auto-detect arch.")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
TFM_MEDIUM_CONFIG_H = 'configs/tfm_mbedcrypto_config_profile_medium.h'
|
TFM_MEDIUM_CONFIG_H = 'configs/ext/tfm_mbedcrypto_config_profile_medium.h'
|
||||||
TFM_MEDIUM_CRYPTO_CONFIG_H = 'configs/crypto_config_profile_medium.h'
|
TFM_MEDIUM_CRYPTO_CONFIG_H = 'configs/ext/crypto_config_profile_medium.h'
|
||||||
|
|
||||||
CONFIG_H = 'include/mbedtls/mbedtls_config.h'
|
CONFIG_H = 'include/mbedtls/mbedtls_config.h'
|
||||||
CRYPTO_CONFIG_H = 'include/psa/crypto_config.h'
|
CRYPTO_CONFIG_H = 'include/psa/crypto_config.h'
|
||||||
|
@ -3173,49 +3173,29 @@ component_test_psa_crypto_config_reference_ecc_ffdh_no_bignum () {
|
|||||||
# - component_test_tfm_config()
|
# - component_test_tfm_config()
|
||||||
common_tfm_config () {
|
common_tfm_config () {
|
||||||
# Enable TF-M config
|
# Enable TF-M config
|
||||||
cp configs/tfm_mbedcrypto_config_profile_medium.h "$CONFIG_H"
|
cp configs/config-tfm.h "$CONFIG_H"
|
||||||
cp configs/crypto_config_profile_medium.h "$CRYPTO_CONFIG_H"
|
echo "#undef MBEDTLS_PSA_CRYPTO_CONFIG_FILE" >> "$CONFIG_H"
|
||||||
|
cp configs/ext/crypto_config_profile_medium.h "$CRYPTO_CONFIG_H"
|
||||||
|
|
||||||
# Adjust for the fact that we're building outside the TF-M environment.
|
# Other config adjustment to make the tests pass.
|
||||||
#
|
# This should probably be adopted upstream.
|
||||||
# TF-M has separation, our build doesn't
|
|
||||||
scripts/config.py unset MBEDTLS_PSA_CRYPTO_SPM
|
|
||||||
scripts/config.py unset MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER
|
|
||||||
# TF-M provdes its own (dummy) implemenation, from their tree
|
|
||||||
scripts/config.py unset MBEDTLS_AES_DECRYPT_ALT
|
|
||||||
scripts/config.py unset MBEDTLS_AES_SETKEY_DEC_ALT
|
|
||||||
# We have an OS that provides entropy, use it
|
|
||||||
scripts/config.py unset MBEDTLS_NO_PLATFORM_ENTROPY
|
|
||||||
|
|
||||||
# Other config adjustments to make the tests pass.
|
|
||||||
# Those should probably be adopted upstream.
|
|
||||||
#
|
#
|
||||||
# - USE_PSA_CRYPTO for PK_HAVE_ECC_KEYS
|
# - USE_PSA_CRYPTO for PK_HAVE_ECC_KEYS
|
||||||
echo "#define MBEDTLS_USE_PSA_CRYPTO" >> "$CONFIG_H"
|
echo "#define MBEDTLS_USE_PSA_CRYPTO" >> "$CONFIG_H"
|
||||||
# pkparse.c and pkwrite.c fail to link without this
|
|
||||||
echo "#define MBEDTLS_OID_C" >> "$CONFIG_H"
|
|
||||||
# - ASN1_[PARSE/WRITE]_C found by check_config.h for pkparse/pkwrite
|
|
||||||
echo "#define MBEDTLS_ASN1_PARSE_C" >> "$CONFIG_H"
|
|
||||||
echo "#define MBEDTLS_ASN1_WRITE_C" >> "$CONFIG_H"
|
|
||||||
# - MD_C for HKDF_C
|
|
||||||
echo "#define MBEDTLS_MD_C" >> "$CONFIG_H"
|
|
||||||
|
|
||||||
# Config adjustments for better test coverage in our environment.
|
# Config adjustment for better test coverage in our environment.
|
||||||
# These are not needed just to build and pass tests.
|
# This is not needed just to build and pass tests.
|
||||||
#
|
#
|
||||||
# Enable filesystem I/O for the benefit of PK parse/write tests.
|
# Enable filesystem I/O for the benefit of PK parse/write tests.
|
||||||
echo "#define MBEDTLS_FS_IO" >> "$CONFIG_H"
|
echo "#define MBEDTLS_FS_IO" >> "$CONFIG_H"
|
||||||
# Disable this for maximal ASan efficiency
|
|
||||||
scripts/config.py unset MBEDTLS_MEMORY_BUFFER_ALLOC_C
|
|
||||||
|
|
||||||
# Config adjustments for features that are not supported
|
# Config adjustments for features that are not supported
|
||||||
# when using only drivers / by p256-m
|
# when using only drivers / by p256-m
|
||||||
#
|
#
|
||||||
# Disable all the features that auto-enable ECP_LIGHT (see build_info.h)
|
# Disable all the features that auto-enable ECP_LIGHT (see config_adjust_legacy_crypto.h)
|
||||||
scripts/config.py -f "$CRYPTO_CONFIG_H" unset PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_DERIVE
|
scripts/config.py -f "$CRYPTO_CONFIG_H" unset PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_DERIVE
|
||||||
# Disable deterministic ECDSA as p256-m only does randomized
|
# Disable deterministic ECDSA as p256-m only does randomized
|
||||||
scripts/config.py -f "$CRYPTO_CONFIG_H" unset PSA_WANT_ALG_DETERMINISTIC_ECDSA
|
scripts/config.py -f "$CRYPTO_CONFIG_H" unset PSA_WANT_ALG_DETERMINISTIC_ECDSA
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Keep this in sync with component_test_tfm_config() as they are both meant
|
# Keep this in sync with component_test_tfm_config() as they are both meant
|
||||||
@ -4068,8 +4048,8 @@ support_build_tfm_armcc () {
|
|||||||
|
|
||||||
component_build_tfm_armcc() {
|
component_build_tfm_armcc() {
|
||||||
# test the TF-M configuration can build cleanly with various warning flags enabled
|
# test the TF-M configuration can build cleanly with various warning flags enabled
|
||||||
cp configs/tfm_mbedcrypto_config_profile_medium.h "$CONFIG_H"
|
cp configs/ext/tfm_mbedcrypto_config_profile_medium.h "$CONFIG_H"
|
||||||
cp configs/crypto_config_profile_medium.h "$CRYPTO_CONFIG_H"
|
cp configs/ext/crypto_config_profile_medium.h "$CRYPTO_CONFIG_H"
|
||||||
|
|
||||||
msg "build: TF-M config, armclang armv7-m thumb2"
|
msg "build: TF-M config, armclang armv7-m thumb2"
|
||||||
make clean
|
make clean
|
||||||
@ -4077,9 +4057,13 @@ component_build_tfm_armcc() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
component_build_tfm() {
|
component_build_tfm() {
|
||||||
# test the TF-M configuration can build cleanly with various warning flags enabled
|
# Check that the TF-M configuration can build cleanly with various
|
||||||
cp configs/tfm_mbedcrypto_config_profile_medium.h "$CONFIG_H"
|
# warning flags enabled. We don't build or run tests, since the
|
||||||
cp configs/crypto_config_profile_medium.h "$CRYPTO_CONFIG_H"
|
# TF-M configuration needs a TF-M platform. A tweaked version of
|
||||||
|
# the configuration that works on mainstream platforms is in
|
||||||
|
# configs/config-tfm.h, tested via test-ref-configs.pl.
|
||||||
|
cp configs/ext/tfm_mbedcrypto_config_profile_medium.h "$CONFIG_H"
|
||||||
|
cp configs/ext/crypto_config_profile_medium.h "$CRYPTO_CONFIG_H"
|
||||||
|
|
||||||
msg "build: TF-M config, clang, armv7-m thumb2"
|
msg "build: TF-M config, clang, armv7-m thumb2"
|
||||||
make lib CC="clang" CFLAGS="--target=arm-linux-gnueabihf -march=armv7-m -mthumb -Os -std=c99 -Werror -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wimplicit-fallthrough -Wshadow -Wvla -Wformat=2 -Wno-format-nonliteral -Wshadow -Wasm-operand-widths -Wunused -I../tests/include/spe"
|
make lib CC="clang" CFLAGS="--target=arm-linux-gnueabihf -march=armv7-m -mthumb -Os -std=c99 -Werror -Wall -Wextra -Wwrite-strings -Wpointer-arith -Wimplicit-fallthrough -Wshadow -Wvla -Wformat=2 -Wno-format-nonliteral -Wshadow -Wasm-operand-widths -Wunused -I../tests/include/spe"
|
||||||
|
@ -441,6 +441,7 @@ KNOWN_TASKS = {
|
|||||||
'component_driver': 'test_tfm_config_p256m_driver_accel_ec',
|
'component_driver': 'test_tfm_config_p256m_driver_accel_ec',
|
||||||
'ignored_suites': [
|
'ignored_suites': [
|
||||||
# Modules replaced by drivers
|
# Modules replaced by drivers
|
||||||
|
'asn1parse', 'asn1write',
|
||||||
'ecp', 'ecdsa', 'ecdh', 'ecjpake',
|
'ecp', 'ecdsa', 'ecdh', 'ecjpake',
|
||||||
'bignum_core', 'bignum_random', 'bignum_mod', 'bignum_mod_raw',
|
'bignum_core', 'bignum_random', 'bignum_mod', 'bignum_mod_raw',
|
||||||
'bignum.generated', 'bignum.misc',
|
'bignum.generated', 'bignum.misc',
|
||||||
@ -450,12 +451,6 @@ KNOWN_TASKS = {
|
|||||||
'test_suite_random': [
|
'test_suite_random': [
|
||||||
'PSA classic wrapper: ECDSA signature (SECP256R1)',
|
'PSA classic wrapper: ECDSA signature (SECP256R1)',
|
||||||
],
|
],
|
||||||
'test_suite_asn1parse': [
|
|
||||||
'INTEGER too large for mpi',
|
|
||||||
],
|
|
||||||
'test_suite_asn1write': [
|
|
||||||
re.compile(r'ASN.1 Write mpi.*'),
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,9 @@ my %configs = (
|
|||||||
'config-symmetric-only.h' => {
|
'config-symmetric-only.h' => {
|
||||||
'test_again_with_use_psa' => 0, # Uses PSA by default, no need to test it twice
|
'test_again_with_use_psa' => 0, # Uses PSA by default, no need to test it twice
|
||||||
},
|
},
|
||||||
|
'config-tfm.h' => {
|
||||||
|
'test_again_with_use_psa' => 0, # Uses PSA by default, no need to test it twice
|
||||||
|
},
|
||||||
'config-thread.h' => {
|
'config-thread.h' => {
|
||||||
'opt' => '-f ECJPAKE.*nolog',
|
'opt' => '-f ECJPAKE.*nolog',
|
||||||
'test_again_with_use_psa' => 1,
|
'test_again_with_use_psa' => 1,
|
||||||
|
@ -24,6 +24,17 @@
|
|||||||
#define RSA_KEY_SIZE MBEDTLS_RSA_GEN_KEY_MIN_BITS
|
#define RSA_KEY_SIZE MBEDTLS_RSA_GEN_KEY_MIN_BITS
|
||||||
#define RSA_KEY_LEN (MBEDTLS_RSA_GEN_KEY_MIN_BITS/8)
|
#define RSA_KEY_LEN (MBEDTLS_RSA_GEN_KEY_MIN_BITS/8)
|
||||||
|
|
||||||
|
/* MBEDTLS_TEST_PK_PSA_SIGN is enabled when:
|
||||||
|
* - The build has PK_[PARSE/WRITE]_C for RSA or ECDSA signature.
|
||||||
|
* - The build has built-in ECC and ECDSA signature.
|
||||||
|
*/
|
||||||
|
#if (defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_PK_WRITE_C) && \
|
||||||
|
((defined(MBEDTLS_RSA_C) && defined(MBEDTLS_GENPRIME)) || \
|
||||||
|
defined(MBEDTLS_PK_CAN_ECDSA_SIGN))) || \
|
||||||
|
(defined(MBEDTLS_ECP_C) && defined(MBEDTLS_PK_CAN_ECDSA_SIGN))
|
||||||
|
#define MBEDTLS_TEST_PK_PSA_SIGN
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(MBEDTLS_PK_USE_PSA_EC_DATA)
|
#if defined(MBEDTLS_PK_USE_PSA_EC_DATA)
|
||||||
static int pk_genkey_ec(mbedtls_pk_context *pk, mbedtls_ecp_group_id grp_id)
|
static int pk_genkey_ec(mbedtls_pk_context *pk, mbedtls_ecp_group_id grp_id)
|
||||||
{
|
{
|
||||||
@ -1274,7 +1285,7 @@ exit:
|
|||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_MD_CAN_SHA256:MBEDTLS_USE_PSA_CRYPTO */
|
/* BEGIN_CASE depends_on:MBEDTLS_MD_CAN_SHA256:MBEDTLS_USE_PSA_CRYPTO:MBEDTLS_TEST_PK_PSA_SIGN */
|
||||||
void pk_psa_sign(int parameter_arg,
|
void pk_psa_sign(int parameter_arg,
|
||||||
int psa_type_arg, int expected_bits_arg)
|
int psa_type_arg, int expected_bits_arg)
|
||||||
{
|
{
|
||||||
|
@ -142,7 +142,6 @@ void transient_slot_lifecycle(int owner_id_arg,
|
|||||||
|
|
||||||
#if defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER)
|
#if defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER)
|
||||||
{
|
{
|
||||||
psa_key_handle_t handle;
|
|
||||||
mbedtls_svc_key_id_t key_with_invalid_owner =
|
mbedtls_svc_key_id_t key_with_invalid_owner =
|
||||||
mbedtls_svc_key_id_make(owner_id + 1,
|
mbedtls_svc_key_id_make(owner_id + 1,
|
||||||
MBEDTLS_SVC_KEY_ID_GET_KEY_ID(key));
|
MBEDTLS_SVC_KEY_ID_GET_KEY_ID(key));
|
||||||
@ -150,8 +149,8 @@ void transient_slot_lifecycle(int owner_id_arg,
|
|||||||
TEST_ASSERT(mbedtls_key_owner_id_equal(
|
TEST_ASSERT(mbedtls_key_owner_id_equal(
|
||||||
owner_id,
|
owner_id,
|
||||||
MBEDTLS_SVC_KEY_ID_GET_OWNER_ID(key)));
|
MBEDTLS_SVC_KEY_ID_GET_OWNER_ID(key)));
|
||||||
TEST_EQUAL(psa_open_key(key_with_invalid_owner, &handle),
|
TEST_EQUAL(psa_get_key_attributes(key_with_invalid_owner, &attributes),
|
||||||
PSA_ERROR_DOES_NOT_EXIST);
|
PSA_ERROR_INVALID_HANDLE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user