Mistake on this page?
Report an issue in GitHub or email us
TARGET_TFM/TARGET_TFM_LATEST/include/psa/crypto_struct.h
1 /*
2  * Copyright (c) 2018-2021, Arm Limited. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 /**
8  * \file psa/crypto_struct.h
9  *
10  * \brief PSA cryptography module: structured type implementations
11  *
12  * \note This file may not be included directly. Applications must
13  * include psa/crypto.h.
14  *
15  * This file contains the definitions of some data structures with
16  * implementation-specific definitions.
17  *
18  * In implementations with isolation between the application and the
19  * cryptography module, it is expected that the front-end and the back-end
20  * would have different versions of this file.
21  */
22 
23 #ifndef PSA_CRYPTO_STRUCT_H
24 #define PSA_CRYPTO_STRUCT_H
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
30 /*
31  * Note that the below structures are different from the decalrations in
32  * mbed-crypto. This is because TF-M maintains 'front-end' and 'back-end'
33  * versions of this header. In the front-end version, exported to NS
34  * clients in interface/include/psa, a crypto operation is defined as an
35  * opaque handle to a context in the Crypto service. The back-end
36  * version, directly included from the mbed-crypto repo by the Crypto
37  * service, contains the full definition of the operation structs.
38  *
39  * One of the functions of the Crypto service is to allocate the back-end
40  * operation contexts in its own partition memory (in crypto_alloc.c),
41  * and then do the mapping between front-end operation handles passed by
42  * NS clients and the corresponding back-end operation contexts. The
43  * advantage of doing it this way is that internal mbed-crypto state is never
44  * exposed to the NS client.
45  */
46 
48 {
49  uint32_t handle;
50 };
51 
52 #define PSA_HASH_OPERATION_INIT {0}
53 static inline struct psa_hash_operation_s psa_hash_operation_init( void )
54 {
55  const struct psa_hash_operation_s v = PSA_HASH_OPERATION_INIT;
56  return( v );
57 }
58 
60 {
61  uint32_t handle;
62 };
63 
64 #define PSA_MAC_OPERATION_INIT {0}
65 static inline struct psa_mac_operation_s psa_mac_operation_init( void )
66 {
67  const struct psa_mac_operation_s v = PSA_MAC_OPERATION_INIT;
68  return( v );
69 }
70 
72 {
73  uint32_t handle;
74 };
75 
76 #define PSA_CIPHER_OPERATION_INIT {0}
77 static inline struct psa_cipher_operation_s psa_cipher_operation_init( void )
78 {
79  const struct psa_cipher_operation_s v = PSA_CIPHER_OPERATION_INIT;
80  return( v );
81 }
82 
84 {
85  uint32_t handle;
86 };
87 
88 #define PSA_AEAD_OPERATION_INIT {0}
89 static inline struct psa_aead_operation_s psa_aead_operation_init( void )
90 {
91  const struct psa_aead_operation_s v = PSA_AEAD_OPERATION_INIT;
92  return( v );
93 }
94 
96 {
97  uint32_t handle;
98 };
99 
100 #define PSA_KEY_DERIVATION_OPERATION_INIT {0}
101 static inline struct psa_key_derivation_s psa_key_derivation_operation_init( void )
102 {
103  const struct psa_key_derivation_s v = PSA_KEY_DERIVATION_OPERATION_INIT;
104  return( v );
105 }
106 
107 /* The type used internally for key sizes.
108  * Public interfaces use size_t, but internally we use a smaller type. */
109 typedef uint16_t psa_key_bits_t;
110 /* The maximum value of the type used to represent bit-sizes.
111  * This is used to mark an invalid key size. */
112 #define PSA_KEY_BITS_TOO_LARGE ( (psa_key_bits_t) ( -1 ) )
113 /* The maximum size of a key in bits.
114  * Currently defined as the maximum that can be represented, rounded down
115  * to a whole number of bytes.
116  * This is an uncast value so that it can be used in preprocessor
117  * conditionals. */
118 #define PSA_MAX_KEY_BITS 0xfff8
119 
120 #define PSA_KEY_ATTRIBUTES_INIT PSA_CLIENT_KEY_ATTRIBUTES_INIT
121 
122 static inline struct psa_client_key_attributes_s psa_key_attributes_init( void )
123 {
124  const struct psa_client_key_attributes_s v = PSA_KEY_ATTRIBUTES_INIT;
125  return( v );
126 }
127 
128 static inline void psa_set_key_id(psa_key_attributes_t *attributes,
129  psa_key_id_t key)
130 {
131  psa_key_lifetime_t lifetime = attributes->lifetime;
132 
133  attributes->id = key;
134 
135  if( PSA_KEY_LIFETIME_IS_VOLATILE(lifetime))
136  {
137  attributes->lifetime =
140  PSA_KEY_LIFETIME_GET_LOCATION(lifetime));
141  }
142 }
143 
144 static inline psa_key_id_t psa_get_key_id(
145  const psa_key_attributes_t *attributes)
146 {
147  return( attributes->id );
148 }
149 
150 static inline void psa_set_key_lifetime(psa_key_attributes_t *attributes,
151  psa_key_lifetime_t lifetime)
152 {
153  attributes->lifetime = lifetime;
154  if(PSA_KEY_LIFETIME_IS_VOLATILE(lifetime))
155  {
156  attributes->id = 0;
157  }
158 }
159 
161  const psa_key_attributes_t *attributes)
162 {
163  return( attributes->lifetime );
164 }
165 
166 static inline void psa_set_key_usage_flags(psa_key_attributes_t *attributes,
167  psa_key_usage_t usage_flags)
168 {
169  attributes->usage = usage_flags;
170 }
171 
173  const psa_key_attributes_t *attributes)
174 {
175  return( attributes->usage );
176 }
177 
178 static inline void psa_set_key_algorithm(psa_key_attributes_t *attributes,
179  psa_algorithm_t alg)
180 {
181  attributes->alg = alg;
182 }
183 
185  const psa_key_attributes_t *attributes)
186 {
187  return( attributes->alg );
188 }
189 
190 static inline void psa_set_key_type(psa_key_attributes_t *attributes,
191  psa_key_type_t type)
192 {
193  attributes->type = type;
194 }
195 
196 static inline psa_key_type_t psa_get_key_type(
197  const psa_key_attributes_t *attributes)
198 {
199  return( attributes->type );
200 }
201 
202 static inline void psa_set_key_bits(psa_key_attributes_t *attributes,
203  size_t bits)
204 {
205  if( bits > PSA_MAX_KEY_BITS )
206  attributes->bits = PSA_KEY_BITS_TOO_LARGE;
207  else
208  attributes->bits = bits;
209 }
210 
211 static inline size_t psa_get_key_bits(
212  const psa_key_attributes_t *attributes)
213 {
214  return( attributes->bits );
215 }
216 
217 #ifdef __cplusplus
218 }
219 #endif
220 
221 #endif /* PSA_CRYPTO_STRUCT_H */
static psa_key_derivation_operation_t psa_key_derivation_operation_init(void)
Return an initial value for a key derivation operation object.
static void psa_set_key_bits(psa_key_attributes_t *attributes, size_t bits)
Declare the size of a key.
uint32_t psa_key_id_t
Encoding of identifiers of persistent keys.
static psa_algorithm_t psa_get_key_algorithm(const psa_key_attributes_t *attributes)
Retrieve the algorithm policy from key attributes.
static void psa_set_key_usage_flags(psa_key_attributes_t *attributes, psa_key_usage_t usage_flags)
Declare usage flags for a key.
static void psa_set_key_lifetime(psa_key_attributes_t *attributes, psa_key_lifetime_t lifetime)
Set the location of a persistent key.
static psa_hash_operation_t psa_hash_operation_init(void)
Return an initial value for a hash operation object.
static psa_key_lifetime_t psa_get_key_lifetime(const psa_key_attributes_t *attributes)
Retrieve the lifetime from key attributes.
static void psa_set_key_type(psa_key_attributes_t *attributes, psa_key_type_t type)
Declare the type of a key.
static void psa_set_key_id(psa_key_attributes_t *attributes, mbedtls_svc_key_id_t key)
Declare a key as persistent and set its key identifier.
#define PSA_KEY_LIFETIME_IS_VOLATILE(lifetime)
Whether a key lifetime indicates that the key is volatile.
static size_t psa_get_key_bits(const psa_key_attributes_t *attributes)
Retrieve the key size from key attributes.
#define PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(persistence, location)
Construct a lifetime from a persistence level and a location.
uint32_t psa_algorithm_t
Encoding of a cryptographic algorithm.
#define PSA_KEY_LIFETIME_PERSISTENT
The default lifetime for persistent keys.
static psa_cipher_operation_t psa_cipher_operation_init(void)
Return an initial value for a cipher operation object.
uint32_t psa_key_usage_t
Encoding of permitted usage on a key.
static void psa_set_key_algorithm(psa_key_attributes_t *attributes, psa_algorithm_t alg)
Declare the permitted algorithm policy for a key.
uint16_t psa_key_type_t
Encoding of a key type.
static psa_aead_operation_t psa_aead_operation_init(void)
Return an initial value for an AEAD operation object.
static psa_key_type_t psa_get_key_type(const psa_key_attributes_t *attributes)
Retrieve the key type from key attributes.
static psa_key_usage_t psa_get_key_usage_flags(const psa_key_attributes_t *attributes)
Retrieve the usage flags from key attributes.
static psa_key_attributes_t psa_key_attributes_init(void)
Return an initial value for a key attributes structure.
static mbedtls_svc_key_id_t psa_get_key_id(const psa_key_attributes_t *attributes)
Retrieve the key identifier from key attributes.
uint32_t psa_key_lifetime_t
Encoding of key lifetimes.
static psa_mac_operation_t psa_mac_operation_init(void)
Return an initial value for a MAC operation object.
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.