mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-07-29 11:41:15 +03:00
Merge pull request #9240 from gilles-peskine-arm/psa-keystore-dynamic-3.6
Backport 3.6: dynamically sized key store
This commit is contained in:
@ -2504,6 +2504,40 @@ common_block_cipher_dispatch () {
|
||||
scripts/config.py set MBEDTLS_DEPRECATED_REMOVED
|
||||
}
|
||||
|
||||
component_test_full_block_cipher_psa_dispatch_static_keystore () {
|
||||
msg "build: full + PSA dispatch in block_cipher with static keystore"
|
||||
# Check that the static key store works well when CTR_DRBG uses a
|
||||
# PSA key for AES.
|
||||
scripts/config.py unset MBEDTLS_PSA_KEY_STORE_DYNAMIC
|
||||
|
||||
loc_accel_list="ALG_ECB_NO_PADDING \
|
||||
KEY_TYPE_AES KEY_TYPE_ARIA KEY_TYPE_CAMELLIA"
|
||||
|
||||
# Configure
|
||||
# ---------
|
||||
|
||||
common_block_cipher_dispatch 1
|
||||
|
||||
# Build
|
||||
# -----
|
||||
|
||||
helper_libtestdriver1_make_drivers "$loc_accel_list"
|
||||
|
||||
helper_libtestdriver1_make_main "$loc_accel_list"
|
||||
|
||||
# Make sure disabled components were not re-enabled by accident (additive
|
||||
# config)
|
||||
not grep mbedtls_aes_ library/aes.o
|
||||
not grep mbedtls_aria_ library/aria.o
|
||||
not grep mbedtls_camellia_ library/camellia.o
|
||||
|
||||
# Run the tests
|
||||
# -------------
|
||||
|
||||
msg "test: full + PSA dispatch in block_cipher with static keystore"
|
||||
make test
|
||||
}
|
||||
|
||||
component_test_full_block_cipher_psa_dispatch () {
|
||||
msg "build: full + PSA dispatch in block_cipher"
|
||||
|
||||
@ -3038,6 +3072,16 @@ component_test_se_default () {
|
||||
make test
|
||||
}
|
||||
|
||||
component_test_full_static_keystore () {
|
||||
msg "build: full config - MBEDTLS_PSA_KEY_STORE_DYNAMIC"
|
||||
scripts/config.py full
|
||||
scripts/config.py unset MBEDTLS_PSA_KEY_STORE_DYNAMIC
|
||||
make CC=clang CFLAGS="$ASAN_CFLAGS -Os" LDFLAGS="$ASAN_CFLAGS"
|
||||
|
||||
msg "test: full config - MBEDTLS_PSA_KEY_STORE_DYNAMIC"
|
||||
make test
|
||||
}
|
||||
|
||||
component_test_psa_crypto_drivers () {
|
||||
msg "build: full + test drivers dispatching to builtins"
|
||||
scripts/config.py full
|
||||
|
@ -129,9 +129,9 @@ depends_on:MBEDTLS_PSA_CRYPTO_STORAGE_C
|
||||
# writing, this happens in builds where AES uses a PSA driver and the
|
||||
# PSA RNG uses AES-CTR_DRBG through the PSA AES.
|
||||
# Pick a key id that's in the middle of the volatile key ID range.
|
||||
# That works out both when MBEDTLS_PSA_KEY_SLOT_DYNAMIC is enabled and
|
||||
# That works out both when MBEDTLS_PSA_KEY_STORE_DYNAMIC is enabled and
|
||||
# volatile key IDs are assigned starting with the lowest value, and when
|
||||
# MBEDTLS_PSA_KEY_SLOT_DYNAMIC is disabled and volatile key IDs are assigned
|
||||
# MBEDTLS_PSA_KEY_STORE_DYNAMIC is disabled and volatile key IDs are assigned
|
||||
# starting with the highest values.
|
||||
open_fail:(PSA_KEY_ID_VOLATILE_MIN + PSA_KEY_ID_VOLATILE_MAX) / 2:PSA_ERROR_DOES_NOT_EXIST
|
||||
|
||||
@ -228,6 +228,11 @@ invalid_handle:INVALID_HANDLE_HUGE:PSA_ERROR_INVALID_HANDLE
|
||||
Key slot count: maximum
|
||||
many_transient_keys:MBEDTLS_PSA_KEY_SLOT_COUNT - MBEDTLS_TEST_PSA_INTERNAL_KEYS
|
||||
|
||||
Key slot count: dynamic: more than MBEDTLS_PSA_KEY_SLOT_COUNT
|
||||
depends_on:MBEDTLS_PSA_KEY_STORE_DYNAMIC
|
||||
# Check that MBEDTLS_PSA_KEY_SLOT_COUNT doesn't apply to volatile keys.
|
||||
many_transient_keys:MBEDTLS_PSA_KEY_SLOT_COUNT + 1
|
||||
|
||||
Key slot count: try to overfill, destroy first
|
||||
fill_key_store:0
|
||||
|
||||
|
@ -98,10 +98,30 @@ exit:
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Currently, there is always a maximum number of volatile keys that can
|
||||
* realistically be reached in tests. When we add configurations where this
|
||||
* is not true, undefine the macro in such configurations. */
|
||||
#if defined(MBEDTLS_PSA_KEY_STORE_DYNAMIC)
|
||||
#if defined(MBEDTLS_TEST_HOOKS)
|
||||
/* Artificially restrictable dynamic key store */
|
||||
#define KEY_SLICE_1_LENGTH 4
|
||||
#define KEY_SLICE_2_LENGTH 10
|
||||
static size_t tiny_key_slice_length(size_t slice_idx)
|
||||
{
|
||||
switch (slice_idx) {
|
||||
case 1: return KEY_SLICE_1_LENGTH;
|
||||
case 2: return KEY_SLICE_2_LENGTH;
|
||||
default: return 1;
|
||||
}
|
||||
}
|
||||
#define MAX_VOLATILE_KEYS \
|
||||
(KEY_SLICE_1_LENGTH + KEY_SLICE_2_LENGTH + \
|
||||
psa_key_slot_volatile_slice_count() - 2)
|
||||
|
||||
#else /* Effectively unbounded dynamic key store */
|
||||
#undef MAX_VOLATILE_KEYS
|
||||
#endif
|
||||
|
||||
#else /* Static key store */
|
||||
#define MAX_VOLATILE_KEYS MBEDTLS_PSA_KEY_SLOT_COUNT
|
||||
#endif
|
||||
|
||||
/* END_HEADER */
|
||||
|
||||
@ -867,6 +887,10 @@ void fill_key_store(int key_to_destroy_arg)
|
||||
uint8_t exported[sizeof(size_t)];
|
||||
size_t exported_length;
|
||||
|
||||
#if defined(MBEDTLS_PSA_KEY_STORE_DYNAMIC) && defined(MBEDTLS_TEST_HOOKS)
|
||||
mbedtls_test_hook_psa_volatile_key_slice_length = &tiny_key_slice_length;
|
||||
#endif
|
||||
|
||||
PSA_ASSERT(psa_crypto_init());
|
||||
|
||||
mbedtls_psa_stats_t stats;
|
||||
@ -949,6 +973,9 @@ void fill_key_store(int key_to_destroy_arg)
|
||||
exit:
|
||||
PSA_DONE();
|
||||
mbedtls_free(keys);
|
||||
#if defined(MBEDTLS_PSA_KEY_STORE_DYNAMIC) && defined(MBEDTLS_TEST_HOOKS)
|
||||
mbedtls_test_hook_psa_volatile_key_slice_length = NULL;
|
||||
#endif
|
||||
}
|
||||
/* END_CASE */
|
||||
|
||||
@ -1028,7 +1055,7 @@ exit:
|
||||
}
|
||||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE depends_on:MBEDTLS_PSA_CRYPTO_STORAGE_C */
|
||||
/* BEGIN_CASE depends_on:MBEDTLS_PSA_CRYPTO_STORAGE_C:!MBEDTLS_PSA_KEY_STORE_DYNAMIC */
|
||||
void non_reusable_key_slots_integrity_in_case_of_key_slot_starvation()
|
||||
{
|
||||
psa_status_t status;
|
||||
@ -1068,7 +1095,14 @@ void non_reusable_key_slots_integrity_in_case_of_key_slot_starvation()
|
||||
TEST_ASSERT(mbedtls_svc_key_id_equal(returned_key_id, persistent_key));
|
||||
|
||||
/*
|
||||
* Create the maximum available number of volatile keys
|
||||
* Create the maximum available number of keys that are locked in
|
||||
* memory. This can be:
|
||||
* - volatile keys, when MBEDTLS_PSA_KEY_STORE_DYNAMIC is disabled;
|
||||
* - opened persistent keys (could work, but not currently implemented
|
||||
* in this test function);
|
||||
* - keys in use by another thread (we don't do this because it would
|
||||
* be hard to arrange and we can't control how long the keys are
|
||||
* locked anyway).
|
||||
*/
|
||||
psa_set_key_lifetime(&attributes, PSA_KEY_LIFETIME_VOLATILE);
|
||||
for (i = 0; i < available_key_slots; i++) {
|
||||
|
Reference in New Issue
Block a user