61#ifndef PSA_CRYPTO_STRUCT_H
62#define PSA_CRYPTO_STRUCT_H
63#include "mbedtls/private_access.h"
71#include "mbedtls/build_info.h"
73#include "mbedtls/cmac.h"
74#include "mbedtls/gcm.h"
75#include "mbedtls/ccm.h"
76#include "mbedtls/chachapoly.h"
80#include "psa/crypto_driver_contexts_primitives.h"
94#define PSA_HASH_OPERATION_INIT { 0, { 0 } }
119#define PSA_CIPHER_OPERATION_INIT { 0, 0, 0, 0, { 0 } }
128#include "psa/crypto_driver_contexts_composites.h"
144#define PSA_MAC_OPERATION_INIT { 0, 0, 0, { 0 } }
177#define PSA_AEAD_OPERATION_INIT {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0}}
184#if defined(MBEDTLS_PSA_BUILTIN_ALG_HKDF)
189#if PSA_HASH_MAX_SIZE > 0xff
190#error "PSA_HASH_MAX_SIZE does not fit in uint8_t"
199} psa_hkdf_key_derivation_t;
202#if defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF) || \
203 defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS)
206 PSA_TLS12_PRF_STATE_INIT,
207 PSA_TLS12_PRF_STATE_SEED_SET,
208 PSA_TLS12_PRF_STATE_KEY_SET,
209 PSA_TLS12_PRF_STATE_LABEL_SET,
210 PSA_TLS12_PRF_STATE_OUTPUT
211} psa_tls12_prf_key_derivation_state_t;
213typedef struct psa_tls12_prf_key_derivation_s
215#if PSA_HASH_MAX_SIZE > 0xff
216#error "PSA_HASH_MAX_SIZE does not fit in uint8_t"
221 uint8_t MBEDTLS_PRIVATE(left_in_block);
224 uint8_t MBEDTLS_PRIVATE(block_number);
226 psa_tls12_prf_key_derivation_state_t MBEDTLS_PRIVATE(state);
228 uint8_t *MBEDTLS_PRIVATE(secret);
229 size_t MBEDTLS_PRIVATE(secret_length);
230 uint8_t *MBEDTLS_PRIVATE(seed);
231 size_t MBEDTLS_PRIVATE(seed_length);
232 uint8_t *MBEDTLS_PRIVATE(label);
233 size_t MBEDTLS_PRIVATE(label_length);
239} psa_tls12_prf_key_derivation_t;
246 unsigned int MBEDTLS_PRIVATE(can_output_key) : 1;
247 size_t MBEDTLS_PRIVATE(capacity);
251 uint8_t MBEDTLS_PRIVATE(dummy);
252#if defined(MBEDTLS_PSA_BUILTIN_ALG_HKDF)
253 psa_hkdf_key_derivation_t MBEDTLS_PRIVATE(hkdf);
255#if defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF) || \
256 defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS)
257 psa_tls12_prf_key_derivation_t MBEDTLS_PRIVATE(tls12_prf);
259 } MBEDTLS_PRIVATE(ctx);
263#define PSA_KEY_DERIVATION_OPERATION_INIT { 0, 0, 0, { 0 } }
279#define PSA_KEY_POLICY_INIT { 0, 0, 0 }
288typedef uint16_t psa_key_bits_t;
291#define PSA_KEY_BITS_TOO_LARGE ( ( psa_key_bits_t ) -1 )
297#define PSA_MAX_KEY_BITS 0xfff8
308#define MBEDTLS_PSA_KA_FLAG_HAS_SLOT_NUMBER \
309 ( (psa_key_attributes_flag_t) 0x0001 )
313#define MBEDTLS_PSA_KA_MASK_EXTERNAL_ONLY ( \
314 MBEDTLS_PSA_KA_FLAG_HAS_SLOT_NUMBER | \
319#define MBEDTLS_PSA_KA_MASK_DUAL_USE ( \
325 psa_key_bits_t MBEDTLS_PRIVATE(bits);
327 mbedtls_svc_key_id_t MBEDTLS_PRIVATE(
id);
332#define PSA_CORE_KEY_ATTRIBUTES_INIT { PSA_KEY_TYPE_NONE, 0, \
333 PSA_KEY_LIFETIME_VOLATILE, \
334 MBEDTLS_SVC_KEY_ID_INIT, \
335 PSA_KEY_POLICY_INIT, 0 }
340#if defined(MBEDTLS_PSA_CRYPTO_SE_C)
343 void *MBEDTLS_PRIVATE(domain_parameters);
344 size_t MBEDTLS_PRIVATE(domain_parameters_size);
347#if defined(MBEDTLS_PSA_CRYPTO_SE_C)
348#define PSA_KEY_ATTRIBUTES_INIT { PSA_CORE_KEY_ATTRIBUTES_INIT, 0, NULL, 0 }
350#define PSA_KEY_ATTRIBUTES_INIT { PSA_CORE_KEY_ATTRIBUTES_INIT, NULL, 0 }
360 mbedtls_svc_key_id_t key )
362 psa_key_lifetime_t lifetime = attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(lifetime);
364 attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(
id) = key;
368 attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(lifetime) =
371 PSA_KEY_LIFETIME_GET_LOCATION( lifetime ) );
375static inline mbedtls_svc_key_id_t psa_get_key_id(
378 return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(
id) );
381#ifdef MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER
383 mbedtls_key_owner_id_t owner )
385 attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(
id).MBEDTLS_PRIVATE(owner) = owner;
392 attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(lifetime) = lifetime;
395#ifdef MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER
396 attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(
id).MBEDTLS_PRIVATE(key_id) = 0;
398 attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(
id) = 0;
406 return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(lifetime) );
409static inline void psa_extend_key_usage_flags(
psa_key_usage_t *usage_flags )
421 psa_extend_key_usage_flags( &usage_flags );
422 attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(policy).MBEDTLS_PRIVATE(usage) = usage_flags;
428 return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(policy).MBEDTLS_PRIVATE(usage) );
434 attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(policy).MBEDTLS_PRIVATE(alg) = alg;
440 return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(policy).MBEDTLS_PRIVATE(alg) );
448 size_t data_length );
453 if( attributes->MBEDTLS_PRIVATE(domain_parameters) == NULL )
456 attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(type) = type;
471 return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(type) );
477 if( bits > PSA_MAX_KEY_BITS )
478 attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(bits) = PSA_KEY_BITS_TOO_LARGE;
480 attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(bits) = (psa_key_bits_t) bits;
483static inline size_t psa_get_key_bits(
486 return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(bits) );
#define PSA_HASH_MAX_SIZE
Definition: crypto_sizes.h:128
uint16_t psa_key_attributes_flag_t
Definition: crypto_struct.h:306
#define PSA_MAC_OPERATION_INIT
Definition: crypto_struct.h:144
#define PSA_AEAD_OPERATION_INIT
Definition: crypto_struct.h:177
psa_status_t psa_set_key_domain_parameters(psa_key_attributes_t *attributes, psa_key_type_t type, const uint8_t *data, size_t data_length)
Set domain parameters for a key.
#define PSA_KEY_ATTRIBUTES_INIT
Definition: crypto_struct.h:350
#define PSA_CIPHER_OPERATION_INIT
Definition: crypto_struct.h:119
uint16_t psa_key_type_t
Encoding of a key type.
Definition: crypto_types.h:74
uint32_t psa_algorithm_t
Encoding of a cryptographic algorithm.
Definition: crypto_types.h:106
int32_t psa_status_t
Function return status.
Definition: crypto_types.h:63
#define PSA_HASH_OPERATION_INIT
Definition: crypto_struct.h:94
#define PSA_KEY_DERIVATION_OPERATION_INIT
Definition: crypto_struct.h:263
#define PSA_KEY_LIFETIME_PERSISTENT
Definition: crypto_values.h:2092
#define PSA_KEY_LIFETIME_IS_VOLATILE(lifetime)
Definition: crypto_values.h:2134
uint32_t psa_key_lifetime_t
Definition: crypto_types.h:147
#define PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(persistence, location)
Definition: crypto_values.h:2168
#define PSA_KEY_USAGE_SIGN_HASH
Definition: crypto_values.h:2372
#define PSA_KEY_USAGE_SIGN_MESSAGE
Definition: crypto_values.h:2352
uint32_t psa_key_usage_t
Encoding of permitted usage on a key.
Definition: crypto_types.h:251
#define PSA_KEY_USAGE_VERIFY_MESSAGE
Definition: crypto_values.h:2362
#define PSA_KEY_USAGE_VERIFY_HASH
Definition: crypto_values.h:2382
uint64_t psa_key_slot_number_t
Definition: crypto_se_driver.h:149
Definition: crypto_struct.h:152
unsigned int MBEDTLS_PRIVATE(id)
Definition: crypto_struct.h:102
unsigned int MBEDTLS_PRIVATE(id)
Definition: crypto_struct.h:323
Definition: crypto_struct.h:83
unsigned int MBEDTLS_PRIVATE(id)
Definition: crypto_struct.h:338
Definition: crypto_struct.h:244
Definition: crypto_struct.h:272
Definition: crypto_struct.h:131
unsigned int MBEDTLS_PRIVATE(id)
Definition: crypto_driver_contexts_composites.h:109
Definition: crypto_driver_contexts_primitives.h:107
Definition: crypto_driver_contexts_primitives.h:99
Definition: crypto_driver_contexts_composites.h:100