MCUX CLNS
MCUX Crypto Library Normal Secure
mcuxClEls_Types.h
Go to the documentation of this file.
1 /*--------------------------------------------------------------------------*/
2 /* Copyright 2020-2023 NXP */
3 /* */
4 /* NXP Confidential. This software is owned or controlled by NXP and may */
5 /* only be used strictly in accordance with the applicable license terms. */
6 /* By expressly accepting such terms or by downloading, installing, */
7 /* activating and/or otherwise using the software, you are agreeing that */
8 /* you have read, and that you agree to comply with and are bound by, such */
9 /* license terms. If you do not agree to be bound by the applicable license */
10 /* terms, then you may not retain, install, activate or otherwise use the */
11 /* software. */
12 /*--------------------------------------------------------------------------*/
13 
26 #ifndef MCUXCLELS_TYPES_H_
27 #define MCUXCLELS_TYPES_H_
28 
29 #include <stdint.h>
30 #include <stddef.h>
31 #include <mcuxClConfig.h> // Exported features flags header
32 #include <mcuxCsslFlowProtection.h>
33 
34 #include <mcuxClEls_mapping.h>
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
40 /**********************************************
41  * MACROS
42  **********************************************/
50 #define MCUXCLELS_KEY_SLOTS (20U)
51 
52 
57 #define MCUXCLELS_KEYPROPERTY_VALUE_KEY_SIZE_128 ((uint32_t) 0u<< 0u)
58 #define MCUXCLELS_KEYPROPERTY_VALUE_KEY_SIZE_256 ((uint32_t) 1u<< 0u)
59 #ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
60 #define MCUXCLELS_KEYPROPERTY_VALUE_KEY_SIZE_512 ((uint32_t) 3u<< 0u)
61 #endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
62 #define MCUXCLELS_KEYPROPERTY_VALUE_ACTIVE ((uint32_t) 1u<< 5u)
63 #define MCUXCLELS_KEYPROPERTY_VALUE_BASE_SLOT ((uint32_t) 1u<< 6u)
64 #define MCUXCLELS_KEYPROPERTY_VALUE_GENERAL_PURPOSE_SLOT ((uint32_t) 1u<< 7u)
65 #define MCUXCLELS_KEYPROPERTY_VALUE_RETENTION_SLOT ((uint32_t) 1u<< 8u)
66 #define MCUXCLELS_KEYPROPERTY_VALUE_HW_OUT_SLOT ((uint32_t) 1u<< 9u)
67 #ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
68 #define MCUXCLELS_KEYPROPERTY_VALUE_PUK ((uint32_t) 1u<<11u)
69 #define MCUXCLELS_KEYPROPERTY_VALUE_TECDH ((uint32_t) 1u<<12u)
70 #endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
71 #define MCUXCLELS_KEYPROPERTY_VALUE_CMAC ((uint32_t) 1u<<13u)
72 #define MCUXCLELS_KEYPROPERTY_VALUE_KSK ((uint32_t) 1u<<14u)
73 #define MCUXCLELS_KEYPROPERTY_VALUE_RTF ((uint32_t) 1u<<15u)
74 #define MCUXCLELS_KEYPROPERTY_VALUE_CKDF ((uint32_t) 1u<<16u)
75 #define MCUXCLELS_KEYPROPERTY_VALUE_HKDF ((uint32_t) 1u<<17u)
76 #define MCUXCLELS_KEYPROPERTY_VALUE_ECSGN ((uint32_t) 1u<<18u)
77 #define MCUXCLELS_KEYPROPERTY_VALUE_ECDH ((uint32_t) 1u<<19u)
78 #define MCUXCLELS_KEYPROPERTY_VALUE_AES ((uint32_t) 1u<<20u)
79 #define MCUXCLELS_KEYPROPERTY_VALUE_HMAC ((uint32_t) 1u<<21u)
80 #define MCUXCLELS_KEYPROPERTY_VALUE_KWK ((uint32_t) 1u<<22u)
81 #define MCUXCLELS_KEYPROPERTY_VALUE_KUOK ((uint32_t) 1u<<23u)
82 #define MCUXCLELS_KEYPROPERTY_VALUE_TLS_PREMASTER_SECRET ((uint32_t) 1u<<24u)
83 #define MCUXCLELS_KEYPROPERTY_VALUE_TLS_MASTER_SECRET ((uint32_t) 1u<<25u)
84 #define MCUXCLELS_KEYPROPERTY_VALUE_KGSRC ((uint32_t) 1u<<26u)
85 #define MCUXCLELS_KEYPROPERTY_VALUE_HW_OUT ((uint32_t) 1u<<27u)
86 #define MCUXCLELS_KEYPROPERTY_VALUE_WRPOK ((uint32_t) 1u<<28u)
87 #define MCUXCLELS_KEYPROPERTY_VALUE_DUK ((uint32_t) 1u<<29u)
88 #define MCUXCLELS_KEYPROPERTY_VALUE_PRIVILEGED ((uint32_t) 1u<<30u)
89 #define MCUXCLELS_KEYPROPERTY_VALUE_NOTPRIVILEGED ((uint32_t) 0u<<30u)
90 #define MCUXCLELS_KEYPROPERTY_VALUE_SECURE ((uint32_t) 0u<<31u)
91 #define MCUXCLELS_KEYPROPERTY_VALUE_NOTSECURE ((uint32_t) 1u<<31u)
92 
101 #define MCUXCLELS_KEYPROPERTY_KEY_SIZE_128 0U
102 #define MCUXCLELS_KEYPROPERTY_KEY_SIZE_256 1U
103 #ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
104 #define MCUXCLELS_KEYPROPERTY_KEY_SIZE_512 3U
105 #endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
106 #define MCUXCLELS_KEYPROPERTY_ACTIVE_TRUE 1U
107 #define MCUXCLELS_KEYPROPERTY_ACTIVE_FALSE 0U
108 #define MCUXCLELS_KEYPROPERTY_BASE_SLOT 1U
109 #define MCUXCLELS_KEYPROPERTY_SECOND_SLOT 0U
110 #define MCUXCLELS_KEYPROPERTY_GENERAL_PURPOSE_SLOT_TRUE 1U
111 #define MCUXCLELS_KEYPROPERTY_GENERAL_PURPOSE_SLOT_FALSE 0U
112 #define MCUXCLELS_KEYPROPERTY_RETENTION_SLOT_TRUE 1U
113 #define MCUXCLELS_KEYPROPERTY_RETENTION_SLOT_FALSE 0U
114 #define MCUXCLELS_KEYPROPERTY_HW_OUT_SLOT_TRUE 1U
115 #define MCUXCLELS_KEYPROPERTY_HW_OUT_SLOT_FALSE 0U
116 #ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
117 #define MCUXCLELS_KEYPROPERTY_PUK_TRUE 1U
118 #define MCUXCLELS_KEYPROPERTY_PUK_FALSE 0U
119 #define MCUXCLELS_KEYPROPERTY_TECDH_TRUE 1U
120 #define MCUXCLELS_KEYPROPERTY_TECDH_FALSE 0U
121 #endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
122 #define MCUXCLELS_KEYPROPERTY_CMAC_TRUE 1U
123 #define MCUXCLELS_KEYPROPERTY_CMAC_FALSE 0U
124 #define MCUXCLELS_KEYPROPERTY_KSK_TRUE 1U
125 #define MCUXCLELS_KEYPROPERTY_KSK_FALSE 0U
126 #define MCUXCLELS_KEYPROPERTY_RTF_TRUE 1U
127 #define MCUXCLELS_KEYPROPERTY_RTF_FALSE 0U
128 #define MCUXCLELS_KEYPROPERTY_CKDF_TRUE 1U
129 #define MCUXCLELS_KEYPROPERTY_CKDF_FALSE 0U
130 #define MCUXCLELS_KEYPROPERTY_HKDF_TRUE 1U
131 #define MCUXCLELS_KEYPROPERTY_HKDF_FALSE 0U
132 #define MCUXCLELS_KEYPROPERTY_ECC_TRUE 1U
133 #define MCUXCLELS_KEYPROPERTY_ECC_FALSE 0U
134 #define MCUXCLELS_KEYPROPERTY_ECC_DH_PRIVATE_TRUE 1U
135 #define MCUXCLELS_KEYPROPERTY_ECC_DH_PRIVATE_FALSE 0U
136 #define MCUXCLELS_KEYPROPERTY_AES_TRUE 1U
137 #define MCUXCLELS_KEYPROPERTY_AES_FALSE 0U
138 #define MCUXCLELS_KEYPROPERTY_HMAC_TRUE 1U
139 #define MCUXCLELS_KEYPROPERTY_HMAC_FALSE 0U
140 #define MCUXCLELS_KEYPROPERTY_KWK_TRUE 1U
141 #define MCUXCLELS_KEYPROPERTY_KWK_FALSE 0U
142 #define MCUXCLELS_KEYPROPERTY_KUOK_TRUE 1U
143 #define MCUXCLELS_KEYPROPERTY_KUOK_FALSE 0U
144 #define MCUXCLELS_KEYPROPERTY_TLS_PREMASTER_SECRET_TRUE 1U
145 #define MCUXCLELS_KEYPROPERTY_TLS_PREMASTER_SECRET_FALSE 0U
146 #define MCUXCLELS_KEYPROPERTY_TLS_MASTER_SECRET_TRUE 1U
147 #define MCUXCLELS_KEYPROPERTY_TLS_MASTER_SECRET_FALSE 0U
148 #define MCUXCLELS_KEYPROPERTY_INPUT_FOR_ECC_TRUE 1U
149 #define MCUXCLELS_KEYPROPERTY_INPUT_FOR_ECC_FALSE 0U
150 #define MCUXCLELS_KEYPROPERTY_HW_OUT_TRUE 1U
151 #define MCUXCLELS_KEYPROPERTY_HW_OUT_FALSE 0U
152 #define MCUXCLELS_KEYPROPERTY_WRAP_TRUE 1U
153 #define MCUXCLELS_KEYPROPERTY_WRAP_FALSE 0U
154 #define MCUXCLELS_KEYPROPERTY_DEVICE_UNIQUE_TRUE 1U
155 #define MCUXCLELS_KEYPROPERTY_DEVICE_UNIQUE_FALSE 0U
156 #define MCUXCLELS_KEYPROPERTY_PRIVILEGED_TRUE 1U
157 #define MCUXCLELS_KEYPROPERTY_PRIVILEGED_FALSE 0U
158 #define MCUXCLELS_KEYPROPERTY_SECURE_TRUE 0U
159 #define MCUXCLELS_KEYPROPERTY_SECURE_FALSE 1U
160 
170 #define MCUXCLELS_STATUS_OK ((mcuxClEls_Status_t) 0x05552E03u)
171 #define MCUXCLELS_STATUS_OK_WAIT ((mcuxClEls_Status_t) 0x05552E07u)
172 #define MCUXCLELS_STATUS_HW_FAULT ((mcuxClEls_Status_t) 0x05555330u)
173 #define MCUXCLELS_STATUS_HW_ALGORITHM ((mcuxClEls_Status_t) 0x05555334u)
174 #define MCUXCLELS_STATUS_HW_OPERATIONAL ((mcuxClEls_Status_t) 0x05555338u)
175 #define MCUXCLELS_STATUS_HW_BUS ((mcuxClEls_Status_t) 0x0555533Cu)
176 #define MCUXCLELS_STATUS_HW_INTEGRITY ((mcuxClEls_Status_t) 0x05555370u)
177 #define MCUXCLELS_STATUS_HW_PRNG ((mcuxClEls_Status_t) 0x05555374u)
178 #define MCUXCLELS_STATUS_HW_DTRNG ((mcuxClEls_Status_t) 0x05555378u)
179 #define MCUXCLELS_STATUS_SW_FAULT ((mcuxClEls_Status_t) 0x0555F0F0u)
180 #define MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT ((mcuxClEls_Status_t) 0x055553B0u)
181 #define MCUXCLELS_STATUS_SW_INVALID_PARAM ((mcuxClEls_Status_t) 0x055553F8u)
182 #define MCUXCLELS_STATUS_SW_INVALID_STATE ((mcuxClEls_Status_t) 0x055553B8u)
183 #define MCUXCLELS_STATUS_SW_COUNTER_EXPIRED ((mcuxClEls_Status_t) 0x055553BCu)
184 #define MCUXCLELS_STATUS_SW_COMPARISON_FAILED ((mcuxClEls_Status_t) 0x05558930u)
185 #ifdef MCUXCL_FEATURE_ELS_LOCKING
186 #define MCUXCLELS_STATUS_SW_LOCKING_FAILED ((mcuxClEls_Status_t) 0x055553F4u)
187 #define MCUXCLELS_STATUS_SW_STATUS_LOCKED ((mcuxClEls_Status_t) 0x05552E0Bu)
188 #endif /* MCUXCL_FEATURE_ELS_LOCKING */
189 
191 #define MCUXCLELS_STATUS_IS_HW_ERROR(x) ((((mcuxClEls_Status_t) (x)) & 0x0000FF00U) == 0x0000E100U)
192 
193 #define MCUXCLELS_STATUS_IS_SW_ERROR(x) ((((mcuxClEls_Status_t) (x)) & 0x0000FF00U) == 0x0000F000U)
194 
195 
199 /**********************************************
200  * TYPEDEFS
201  **********************************************/
211 typedef uint32_t mcuxClEls_Status_t;
212 
217 
221 typedef uint32_t mcuxClEls_KeyIndex_t;
222 
224 typedef union
225 {
226  struct
227  {
228  uint32_t value;
229  } word;
230  struct
231  {
232 #ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
233  uint32_t ksize :2;
234  uint32_t :3;
235 #else
236  uint32_t ksize :1;
237  uint32_t :4;
238 #endif
239  uint32_t kactv :1;
240  uint32_t kbase :1;
241  uint32_t fgp :1;
242  uint32_t frtn :1;
243  uint32_t fhwo :1;
244 #ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
245  uint32_t :1;
246  uint32_t upuk :1;
247  uint32_t utecdh :1;
248 #else
249  uint32_t :3;
250 #endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
251  uint32_t ucmac :1;
252  uint32_t uksk :1;
253  uint32_t urtf :1;
254  uint32_t uckdf :1;
255  uint32_t uhkdf :1;
256  uint32_t uecsg :1;
257  uint32_t uecdh :1;
258  uint32_t uaes :1;
259  uint32_t uhmac :1;
260  uint32_t ukwk :1;
261  uint32_t ukuok :1;
262  uint32_t utlspms :1;
263  uint32_t utlsms :1;
264  uint32_t ukgsrc :1;
265  uint32_t uhwo :1;
266  uint32_t wrpok :1;
267  uint32_t duk :1;
268  uint32_t upprot_priv :1;
269  uint32_t upprot_sec :1;
270  } bits;
272 
273 
274 #define utlpsms utlspms
275 
276 
290  uint32_t volatile * pDestRegister,
291  uint8_t const * pSource,
292  size_t sourceLength,
293  void * pCallerData);
294 
295 #ifdef __cplusplus
296 } /* extern "C" */
297 #endif
298 
299 #endif /* MCUXCLELS_TYPES_H_ */
300 
Header providing mapping for legacy function/definition names (with CSS)
uint32_t mcuxClEls_Status_t
Type for ELS driver status codes.
Definition: mcuxClEls_Types.h:211
uint32_t uhmac
Usage permission for HMAC.
Definition: mcuxClEls_Types.h:259
uint32_t frtn
Hardware feature flag: Retention key slot.
Definition: mcuxClEls_Types.h:242
uint32_t uhkdf
Usage permission for HKDF.
Definition: mcuxClEls_Types.h:255
uint32_t upprot_priv
Access restriction to privileged mode.
Definition: mcuxClEls_Types.h:268
uint32_t uckdf
Usage permission for CKDF.
Definition: mcuxClEls_Types.h:254
mcuxClEls_Status_t(* mcuxClEls_TransferToRegisterFunction_t)(uint32_t volatile *pDestRegister, uint8_t const *pSource, size_t sourceLength, void *pCallerData)
Function type for transfer of data to a memory-mapped register.
Definition: mcuxClEls_Types.h:289
uint32_t ukgsrc
Usage permission as input for ECC key generation.
Definition: mcuxClEls_Types.h:264
uint32_t kbase
Status flag to indicate whether the key slot is a base slot or the second slot of a 256-bit key.
Definition: mcuxClEls_Types.h:240
uint32_t uaes
Usage permission for AES.
Definition: mcuxClEls_Types.h:258
uint32_t upprot_sec
Access restriction to TrustZone secure mode.
Definition: mcuxClEls_Types.h:269
uint32_t kactv
Status flag to indicate whether the key slot contains an active key or not.
Definition: mcuxClEls_Types.h:239
uint32_t ucmac
Usage permission for CMAC.
Definition: mcuxClEls_Types.h:251
Type for ELS key store key properties.
Definition: mcuxClEls_Types.h:224
uint32_t ukuok
Usage permission for key unwrapping, but not for key wrapping.
Definition: mcuxClEls_Types.h:261
uint32_t ksize
Key size.
Definition: mcuxClEls_Types.h:236
uint32_t uecdh
Usage permission for Elliptic Curve Diffie-Hellman.
Definition: mcuxClEls_Types.h:257
uint32_t mcuxClEls_KeyIndex_t
Type for ELS keystore indices.
Definition: mcuxClEls_Types.h:221
uint32_t uksk
Usage permission for key signing.
Definition: mcuxClEls_Types.h:252
uint32_t uecsg
Usage permission for ECDSA signing.
Definition: mcuxClEls_Types.h:256
uint32_t wrpok
Usage permission to wrap.
Definition: mcuxClEls_Types.h:266
uint32_t value
Accesses the bit field as a full word; initialize with a combination of constants from MCUXCLELS_KEYP...
Definition: mcuxClEls_Types.h:228
uint32_t ukwk
Usage permission for key wrapping.
Definition: mcuxClEls_Types.h:260
Provides the API for the CSSL flow protection mechanism.
#define MCUX_CSSL_FP_PROTECTED_TYPE(resultType)
Based on a given base type, builds a return type with flow protection.
Definition: mcuxCsslFlowProtection.h:81
uint32_t uhwo
Usage permission in a hardware-out key slot.
Definition: mcuxClEls_Types.h:265
mcuxClEls_Status_t mcuxClEls_Status_Protected_t
Deprecated type for ELS driver protected status codes.
Definition: mcuxClEls_Types.h:216
uint32_t urtf
Usage permission for RTF signing.
Definition: mcuxClEls_Types.h:253
uint32_t utlspms
Usage permission as a TLS premaster secret.
Definition: mcuxClEls_Types.h:262
uint32_t duk
Device-unique key flag.
Definition: mcuxClEls_Types.h:267
uint32_t fgp
Hardware feature flag: General purpose key slot.
Definition: mcuxClEls_Types.h:241
uint32_t fhwo
Hardware feature flag: Hardware-out key slot.
Definition: mcuxClEls_Types.h:243
uint32_t utlsms
Usage permission as a TLS master secret.
Definition: mcuxClEls_Types.h:263