MCUX CLNS
MCUX Crypto Library Normal Secure
 
Loading...
Searching...
No Matches
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
33
34#include <mcuxClEls_mapping.h>
35
36#ifdef __cplusplus
37extern "C" {
38#endif
39
40/**********************************************
41 * MACROS
42 **********************************************/
50#define MCUXCLELS_KEY_SLOTS (20U)
51
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)
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
171#define MCUXCLELS_STATUS_OK ((mcuxClEls_Status_t) 0x05552E03u)
172#define MCUXCLELS_STATUS_OK_WAIT ((mcuxClEls_Status_t) 0x05552E07u)
173#define MCUXCLELS_STATUS_HW_FAULT ((mcuxClEls_Status_t) 0x05555330u)
174#define MCUXCLELS_STATUS_HW_ALGORITHM ((mcuxClEls_Status_t) 0x05555334u)
175#define MCUXCLELS_STATUS_HW_OPERATIONAL ((mcuxClEls_Status_t) 0x05555338u)
176#define MCUXCLELS_STATUS_HW_BUS ((mcuxClEls_Status_t) 0x0555533Cu)
177#define MCUXCLELS_STATUS_HW_INTEGRITY ((mcuxClEls_Status_t) 0x05555370u)
178#define MCUXCLELS_STATUS_HW_PRNG ((mcuxClEls_Status_t) 0x05555374u)
179#define MCUXCLELS_STATUS_HW_DTRNG ((mcuxClEls_Status_t) 0x05555378u)
180#define MCUXCLELS_STATUS_SW_FAULT ((mcuxClEls_Status_t) 0x0555F0F0u)
181#define MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT ((mcuxClEls_Status_t) 0x055553B0u)
182#define MCUXCLELS_STATUS_SW_INVALID_PARAM ((mcuxClEls_Status_t) 0x055553F8u)
183#define MCUXCLELS_STATUS_SW_INVALID_STATE ((mcuxClEls_Status_t) 0x055553B8u)
184#define MCUXCLELS_STATUS_SW_COUNTER_EXPIRED ((mcuxClEls_Status_t) 0x055553BCu)
185#define MCUXCLELS_STATUS_SW_COMPARISON_FAILED ((mcuxClEls_Status_t) 0x05558930u)
186#ifdef MCUXCL_FEATURE_ELS_LOCKING
187#define MCUXCLELS_STATUS_SW_LOCKING_FAILED ((mcuxClEls_Status_t) 0x055553F4u)
188#define MCUXCLELS_STATUS_SW_STATUS_LOCKED ((mcuxClEls_Status_t) 0x05552E0Bu)
189#endif /* MCUXCL_FEATURE_ELS_LOCKING */
192#define MCUXCLELS_STATUS_IS_HW_ERROR(x_) ((((mcuxClEls_Status_t) (x_)) & 0x0000FF00U) == 0x0000E100U)
193
194#define MCUXCLELS_STATUS_IS_SW_ERROR(x_) ((((mcuxClEls_Status_t) (x_)) & 0x0000FF00U) == 0x0000F000U)
195
200/**********************************************
201 * TYPEDEFS
202 **********************************************/
212typedef uint32_t mcuxClEls_Status_t;
213
218
222typedef uint32_t mcuxClEls_KeyIndex_t;
223
225typedef union
226{
227 struct
228 {
229 uint32_t value;
230 } word;
231 struct
232 {
233#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
234 uint32_t ksize :2;
235 uint32_t :3;
236#else
237 uint32_t ksize :1;
238 uint32_t :4;
239#endif
240 uint32_t kactv :1;
241 uint32_t kbase :1;
242 uint32_t fgp :1;
243 uint32_t frtn :1;
244 uint32_t fhwo :1;
245#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
246 uint32_t :1;
247 uint32_t upuk :1;
248 uint32_t utecdh :1;
249#else
250 uint32_t :3;
251#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
252 uint32_t ucmac :1;
253 uint32_t uksk :1;
254 uint32_t urtf :1;
255 uint32_t uckdf :1;
256 uint32_t uhkdf :1;
257 uint32_t uecsg :1;
258 uint32_t uecdh :1;
259 uint32_t uaes :1;
260 uint32_t uhmac :1;
261 uint32_t ukwk :1;
262 uint32_t ukuok :1;
263 uint32_t utlspms :1;
264 uint32_t utlsms :1;
265 uint32_t ukgsrc :1;
266 uint32_t uhwo :1;
267 uint32_t wrpok :1;
268 uint32_t duk :1;
269 uint32_t upprot_priv :1;
270 uint32_t upprot_sec :1;
271 } bits;
273
274
275#define utlpsms utlspms
276
291 uint32_t volatile * pDestRegister,
292 uint8_t const * pSource,
293 size_t sourceLength,
294 void * pCallerData);
295
296#ifdef __cplusplus
297} /* extern "C" */
298#endif
299
300#endif /* MCUXCLELS_TYPES_H_ */
301
Header providing mapping for legacy function/definition names (with CSS)
Provides the API for the CSSL flow protection mechanism.
uint32_t mcuxClEls_Status_t
Type for ELS driver status codes.
Definition mcuxClEls_Types.h:212
uint32_t mcuxClEls_KeyIndex_t
Type for ELS keystore indices.
Definition mcuxClEls_Types.h:222
mcuxClEls_Status_t mcuxClEls_Status_Protected_t
Deprecated type for ELS driver protected status codes.
Definition mcuxClEls_Types.h:217
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:290
#define MCUX_CSSL_FP_PROTECTED_TYPE(resultType)
Based on a given base type, builds a return type with flow protection.
Definition mcuxCsslFlowProtection.h:81
Type for ELS key store key properties.
Definition mcuxClEls_Types.h:226
uint32_t ukwk
Usage permission for key wrapping.
Definition mcuxClEls_Types.h:261
uint32_t uhwo
Usage permission in a hardware-out key slot.
Definition mcuxClEls_Types.h:266
uint32_t fhwo
Hardware feature flag: Hardware-out key slot.
Definition mcuxClEls_Types.h:244
uint32_t upprot_sec
Access restriction to TrustZone secure mode.
Definition mcuxClEls_Types.h:270
uint32_t uaes
Usage permission for AES.
Definition mcuxClEls_Types.h:259
uint32_t uksk
Usage permission for key signing.
Definition mcuxClEls_Types.h:253
uint32_t utlspms
Usage permission as a TLS premaster secret.
Definition mcuxClEls_Types.h:263
uint32_t urtf
Usage permission for RTF signing.
Definition mcuxClEls_Types.h:254
uint32_t uckdf
Usage permission for CKDF.
Definition mcuxClEls_Types.h:255
uint32_t ksize
Key size.
Definition mcuxClEls_Types.h:237
uint32_t upprot_priv
Access restriction to privileged mode.
Definition mcuxClEls_Types.h:269
uint32_t utlsms
Usage permission as a TLS master secret.
Definition mcuxClEls_Types.h:264
uint32_t frtn
Hardware feature flag: Retention key slot.
Definition mcuxClEls_Types.h:243
uint32_t wrpok
Usage permission to wrap.
Definition mcuxClEls_Types.h:267
uint32_t uhkdf
Usage permission for HKDF.
Definition mcuxClEls_Types.h:256
uint32_t ukuok
Usage permission for key unwrapping, but not for key wrapping.
Definition mcuxClEls_Types.h:262
uint32_t duk
Device-unique key flag.
Definition mcuxClEls_Types.h:268
uint32_t ukgsrc
Usage permission as input for ECC key generation.
Definition mcuxClEls_Types.h:265
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:241
uint32_t ucmac
Usage permission for CMAC.
Definition mcuxClEls_Types.h:252
uint32_t kactv
Status flag to indicate whether the key slot contains an active key or not.
Definition mcuxClEls_Types.h:240
uint32_t uecsg
Usage permission for ECDSA signing.
Definition mcuxClEls_Types.h:257
uint32_t uhmac
Usage permission for HMAC.
Definition mcuxClEls_Types.h:260
uint32_t value
Accesses the bit field as a full word; initialize with a combination of constants from MCUXCLELS_KEYP...
Definition mcuxClEls_Types.h:229
uint32_t uecdh
Usage permission for Elliptic Curve Diffie-Hellman.
Definition mcuxClEls_Types.h:258
uint32_t fgp
Hardware feature flag: General purpose key slot.
Definition mcuxClEls_Types.h:242