XenevaOS
Loading...
Searching...
No Matches
psa_crypto_slot_management.h
Go to the documentation of this file.
1/*
2 * PSA crypto layer on top of Mbed TLS crypto
3 */
4/*
5 * Copyright The Mbed TLS Contributors
6 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
7 */
8
9#ifndef PSA_CRYPTO_SLOT_MANAGEMENT_H
10#define PSA_CRYPTO_SLOT_MANAGEMENT_H
11
12#include "psa/crypto.h"
13#include "psa_crypto_core.h"
14#include "psa_crypto_se.h"
15
28#define PSA_KEY_ID_VOLATILE_MIN PSA_KEY_ID_VENDOR_MIN
29
32#if defined(MBEDTLS_PSA_KEY_STORE_DYNAMIC)
33#define PSA_KEY_ID_VOLATILE_MAX (MBEDTLS_PSA_KEY_ID_BUILTIN_MIN - 1)
34#else /* MBEDTLS_PSA_KEY_STORE_DYNAMIC */
35#define PSA_KEY_ID_VOLATILE_MAX \
36 (PSA_KEY_ID_VOLATILE_MIN + MBEDTLS_PSA_KEY_SLOT_COUNT - 1)
37#endif /* MBEDTLS_PSA_KEY_STORE_DYNAMIC */
38
48static inline int psa_key_id_is_volatile(psa_key_id_t key_id)
49{
50 return (key_id >= PSA_KEY_ID_VOLATILE_MIN) &&
51 (key_id <= PSA_KEY_ID_VOLATILE_MAX);
52}
53
94 psa_key_slot_t **p_slot);
95
102
103#if defined(MBEDTLS_TEST_HOOKS) && defined(MBEDTLS_PSA_KEY_STORE_DYNAMIC)
104/* Allow test code to customize the key slice length. We use this in tests
105 * that exhaust the key store to reach a full key store in reasonable time
106 * and memory.
107 *
108 * The length of each slice must be between 1 and
109 * (1 << KEY_ID_SLOT_INDEX_WIDTH) inclusive.
110 *
111 * The length for a given slice index must not change while
112 * the key store is initialized.
113 */
114extern size_t (*mbedtls_test_hook_psa_volatile_key_slice_length)(
115 size_t slice_idx);
116
117/* The number of volatile key slices. */
118size_t psa_key_slot_volatile_slice_count(void);
119#endif
120
127
162 psa_key_slot_t **p_slot);
163
164#if defined(MBEDTLS_PSA_KEY_STORE_DYNAMIC)
183psa_status_t psa_free_key_slot(size_t slice_idx,
184 psa_key_slot_t *slot);
185#endif /* MBEDTLS_PSA_KEY_STORE_DYNAMIC */
186
205static inline psa_status_t psa_key_slot_state_transition(
206 psa_key_slot_t *slot, psa_key_slot_state_t expected_state,
207 psa_key_slot_state_t new_state)
208{
209 if (slot->state != expected_state) {
211 }
212 slot->state = new_state;
213 return PSA_SUCCESS;
214}
215
230static inline psa_status_t psa_register_read(psa_key_slot_t *slot)
231{
232 if ((slot->state != PSA_SLOT_FULL) ||
235 }
237
238 return PSA_SUCCESS;
239}
240
266
287
300static inline int psa_key_lifetime_is_external(psa_key_lifetime_t lifetime)
301{
302 return PSA_KEY_LIFETIME_GET_LOCATION(lifetime)
304}
305
322
332
343
344#endif /* PSA_CRYPTO_SLOT_MANAGEMENT_H */
#define SIZE_MAX
Definition limits.h:9
uint64_t size_t
Definition stdint.h:104
Platform Security Architecture cryptography module.
int32_t psa_status_t
Function return status.
Definition crypto_types.h:59
#define PSA_ERROR_CORRUPTION_DETECTED
Definition crypto_values.h:231
#define PSA_SUCCESS
Definition crypto_values.h:57
uint32_t psa_key_id_t
Definition crypto_types.h:275
#define PSA_KEY_LOCATION_LOCAL_STORAGE
Definition crypto_values.h:2408
#define PSA_KEY_LIFETIME_GET_LOCATION(lifetime)
Definition crypto_values.h:2345
uint32_t psa_key_lifetime_t
Definition crypto_types.h:183
psa_key_id_t mbedtls_svc_key_id_t
Definition crypto_types.h:292
psa_key_slot_state_t
Definition psa_crypto_core.h:39
@ PSA_SLOT_FULL
Definition psa_crypto_core.h:42
struct psa_se_drv_table_entry_s psa_se_drv_table_entry_t
Definition psa_crypto_se.h:69
psa_status_t psa_unregister_read(psa_key_slot_t *slot)
#define PSA_KEY_ID_VOLATILE_MAX
Definition psa_crypto_slot_management.h:35
psa_status_t psa_get_and_lock_key_slot(mbedtls_svc_key_id_t key, psa_key_slot_t **p_slot)
psa_status_t psa_reserve_free_key_slot(psa_key_id_t *volatile_key_id, psa_key_slot_t **p_slot)
psa_status_t psa_validate_key_persistence(psa_key_lifetime_t lifetime)
psa_status_t psa_unregister_read_under_mutex(psa_key_slot_t *slot)
#define PSA_KEY_ID_VOLATILE_MIN
Definition psa_crypto_slot_management.h:28
psa_status_t psa_validate_key_location(psa_key_lifetime_t lifetime, psa_se_drv_table_entry_t **p_drv)
void psa_wipe_all_key_slots(void)
psa_status_t psa_initialize_key_slots(void)
int psa_is_valid_key_id(mbedtls_svc_key_id_t key, int vendor_ok)
Definition psa_crypto_core.h:49
size_t registered_readers
Definition psa_crypto_core.h:139
union psa_key_slot_t::@900 var
struct psa_key_slot_t::@900::@902 occupied
psa_key_slot_state_t state
Definition psa_crypto_core.h:73