26#ifndef MCUXCLELS_CRC_H_
27#define MCUXCLELS_CRC_H_
29#include <mcuxClConfig.h>
53#define MCUXCLELS_CMD_CRC_VALUE_RESET ((uint32_t) 0x1u)
54#define MCUXCLELS_CMD_CRC_VALUE_ENABLE ((uint32_t) 0x2u)
55#define MCUXCLELS_CMD_CRC_VALUE_DISABLE ((uint32_t) 0x0u)
57#define MCUXCLELS_CMD_CRC_RESET ((uint32_t) 0x1u)
58#define MCUXCLELS_CMD_CRC_ENABLE ((uint32_t) 0x1u)
59#define MCUXCLELS_CMD_CRC_DISABLE ((uint32_t) 0x0u)
61#define MCUXCLELS_CMD_CRC_POLYNOMIAL ((uint32_t) 0x04C11DB7u)
62#define MCUXCLELS_CMD_CRC_INITIAL_VALUE ((uint32_t) 0xA5A5A5A5u)
76#define MCUXCLELS_CMD_CRC_REFERENCE_INIT(crc) \
77 uint32_t (crc) = MCUXCLELS_CMD_CRC_INITIAL_VALUE
82#define MCUXCLELS_CMD_CRC_REFERENCE_RESET(crc) \
83 (crc) = MCUXCLELS_CMD_CRC_INITIAL_VALUE
88#ifndef MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS
89#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_INIT(crc, options) \
91 (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_INIT; \
92 (options).bits.lastinit = MCUXCLELS_AEAD_LASTINIT_TRUE; \
93 (options).bits.acpsie = MCUXCLELS_AEAD_STATE_IN_DISABLE; \
94 (options).bits.acpsoe = MCUXCLELS_AEAD_STATE_OUT_ENABLE; \
95 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
99#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_INIT(crc, options) \
101 (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_INIT; \
102 (options).bits.lastinit = MCUXCLELS_AEAD_LASTINIT_TRUE; \
103 (options).bits.acpsie = MCUXCLELS_AEAD_STATE_IN_DISABLE; \
104 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
112#ifndef MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS
113#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_PARTIALINIT(crc, options) \
115 (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_INIT; \
116 (options).bits.acpsoe = MCUXCLELS_AEAD_STATE_OUT_ENABLE; \
117 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
121#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_PARTIALINIT(crc, options) \
123 (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_INIT; \
124 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
132#ifndef MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS
133#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_UPDATEAAD(crc, options) \
135 (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_AADPROC \
136 (options).bits.acpsie = MCUXCLELS_AEAD_STATE_IN_ENABLE; \
137 (options).bits.acpsoe = MCUXCLELS_AEAD_STATE_OUT_ENABLE; \
138 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
142#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_UPDATEAAD(crc, options) \
144 (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_AADPROC; \
145 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
153#ifndef MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS
154#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_UPDATEDATA(crc, options) \
156 (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_MSGPROC \
157 (options).bits.acpsie = MCUXCLELS_AEAD_STATE_IN_ENABLE; \
158 (options).bits.acpsoe = MCUXCLELS_AEAD_STATE_OUT_ENABLE; \
159 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
163#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_UPDATEDATA(crc, options) \
165 (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_MSGPROC; \
166 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
174#ifndef MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS
175#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_FINALIZE(crc, options) \
177 (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_FINAL \
178 (options).bits.acpsie = MCUXCLELS_AEAD_STATE_IN_ENABLE; \
179 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
183#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_FINALIZE(crc, options) \
185 (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_FINAL; \
186 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
194#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_CIPHER(crc, options) \
195 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_CIPHER, (options).word.value, &(crc))
200#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_CMAC(crc, options) \
201 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_CMAC, (options).word.value, &(crc))
207#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCKEYGEN(crc, options) \
209 (options).bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
210 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_KEYGEN, (options).word.value, &(crc)); \
217#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL_BIT
218#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCKEYEXCHANGE(crc) \
220 mcuxClEls_EccKeyExchOption_t options = {0u}; \
221 options.bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
222 options.bits.extkey = MCUXCLELS_ECC_EXTKEY_EXTERNAL; \
223 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_ECKXH, options.word.value, &(crc)); \
227#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCKEYEXCHANGE(crc) \
229 mcuxClEls_EccKeyExchOption_t options = {0u}; \
230 options.bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
231 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_ECKXH, options.word.value, &(crc)); \
236#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
240#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCKEYEXCHANGEINT(crc) \
242 mcuxClEls_EccKeyExchOption_t options = {0u}; \
243 options.bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
244 options.bits.extkey = MCUXCLELS_ECC_EXTKEY_INTERNAL; \
245 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_ECKXH, options.word.value, &(crc)); \
253#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCSIGN(crc, options) \
255 (options).bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
256 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_ECSIGN, (options).word.value, &(crc)); \
263#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL_BIT
264#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCVERFIFY(crc, options) \
266 (options).bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
267 (options).bits.extkey = MCUXCLELS_ECC_EXTKEY_EXTERNAL; \
268 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_ECVFY, (options).word.value, &(crc)); \
272#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCVERFIFY(crc, options) \
274 (options).bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
275 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_ECVFY, (options).word.value, &(crc)); \
280#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
284#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCVERFIFYINT(crc, options) \
286 (options).bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
287 (options).bits.extkey = MCUXCLELS_ECC_EXTKEY_INTERNAL; \
288 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_ECVFY, (options).word.value, &(crc)); \
296#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_GLITCHDETECTOR_LOADCONFIG(crc) \
297 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_GDET_CFG_LOAD, 0u, &(crc))
302#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_GLITCHDETECTOR_TRIM(crc) \
303 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_GDET_TRIM, 0u, &(crc))
308#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_HASH(crc, options) \
309 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_HASH, (options).word.value, &(crc))
314#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_HMAC(crc, options) \
315 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_HMAC, (options).word.value, &(crc))
320#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_CKDF_SP800108(crc) \
322 mcuxClEls_CkdfOption_t options = {0u}; \
323 options.bits.ckdf_algo = MCUXCLELS_CKDF_ALGO_SP800108; \
324 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_CKDF, options.word.value, &(crc)); \
332#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_HKDF_RFC5869(crc, options) \
334 (options).bits.hkdf_algo = MCUXCLELS_HKDF_ALGO_RFC5869; \
335 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_HKDF, (options).word.value, &(crc)); \
342#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_HKDF_SP80056C(crc) \
344 mcuxClEls_HkdfOption_t options = {0u}; \
345 options.bits.hkdf_algo = MCUXCLELS_HKDF_ALGO_SP80056C; \
346 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_HKDF, options.word.value, &(crc)); \
353#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_TLSGENERATEMASTERKEYFROMPREMASTERKEY(crc) \
355 mcuxClEls_TlsOption_t options = {0u}; \
356 options.bits.mode = MCUXCLELS_TLS_INIT; \
357 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_TLS, options.word.value, &(crc)); \
364#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_TLSGENERATESESSIONKEYSFROMMASTERKEY(crc) \
366 mcuxClEls_TlsOption_t options = {0u}; \
367 options.bits.mode = MCUXCLELS_TLS_FINALIZE; \
368 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_TLS, options.word.value, &(crc)); \
375#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYDELETE(crc) \
376 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_KDELETE, 0u, &(crc))
383#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYIMPORT(crc, options) \
384 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_KEYIN, (options).word.value, &(crc))
386#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
390#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYIMPORTPUK(crc) \
392 mcuxClEls_KeyImportOption_t options = {0u}; \
393 options.bits.revf = MCUXCLELS_KEYIMPORT_REVERSEFETCH_ENABLE; \
394 options.bits.kfmt = MCUXCLELS_KEYIMPORT_KFMT_PBK; \
395 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_KEYIN, options.word.value, &(crc)); \
403#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYEXPORT(crc) \
405 mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_KEYOUT, 0u, &(crc)); \
406 mcuxClEls_KeyImportOption_t import_options = {0u}; \
407 import_options.bits.kfmt = MCUXCLELS_KEYIMPORT_KFMT_RFC3394; \
408 retVal = MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYDELETE(crc); \
409 retVal = MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYIMPORT(crc, import_options); \
416#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGREQUEST(crc) \
417 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_RND_REQ, 0u, &(crc))
419#ifdef MCUXCL_FEATURE_ELS_RND_RAW
423#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGREQUESTRAW(crc) \
424 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_RND_REQ, MCUXCLELS_RNG_RND_REQ_RND_RAW, &(crc))
430#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTINSTANTIATE(crc) \
431 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_DRBG_TEST, MCUXCLELS_RNG_DRBG_TEST_MODE_INSTANTIATE, &(crc))
436#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTEXTRACT(crc) \
437 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_DRBG_TEST, MCUXCLELS_RNG_DRBG_TEST_MODE_EXTRACT, &(crc))
442#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTAESECB(crc) \
443 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_DRBG_TEST, MCUXCLELS_RNG_DRBG_TEST_MODE_AES_ECB, &(crc))
448#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTAESCTR(crc) \
449 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_DRBG_TEST, MCUXCLELS_RNG_DRBG_TEST_MODE_AES_CTR, &(crc))
454#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DTRNG_CONFIGLOAD(crc) \
455 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_DTRNG_CFG_LOAD, 0u, &(crc))
460#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DTRNG_CONFIGEVALUATE(crc) \
461 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_DTRNG_EVAL, 0u, &(crc))
463#ifdef MCUXCL_FEATURE_ELS_PRND_INIT
467#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_PRNG_INIT(crc) \
468 mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_RND_REQ, MCUXCLELS_RNG_RND_REQ_PRND_INIT, &(crc))
480#define MCUXCLELS_CMD_CRC_CMD_ID_CIPHER 0
481#define MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER 1
482#define MCUXCLELS_CMD_CRC_CMD_ID_CHAL_RESP_GEN 3
483#define MCUXCLELS_CMD_CRC_CMD_ID_ECSIGN 4
484#define MCUXCLELS_CMD_CRC_CMD_ID_ECVFY 5
485#define MCUXCLELS_CMD_CRC_CMD_ID_ECKXH 6
486#define MCUXCLELS_CMD_CRC_CMD_ID_KEYGEN 8
487#define MCUXCLELS_CMD_CRC_CMD_ID_KEYIN 9
488#define MCUXCLELS_CMD_CRC_CMD_ID_KEYOUT 10
489#define MCUXCLELS_CMD_CRC_CMD_ID_KDELETE 11
490#define MCUXCLELS_CMD_CRC_CMD_ID_KEYPROV 12
491#define MCUXCLELS_CMD_CRC_CMD_ID_CKDF 16
492#define MCUXCLELS_CMD_CRC_CMD_ID_HKDF 17
493#define MCUXCLELS_CMD_CRC_CMD_ID_TLS 18
494#define MCUXCLELS_CMD_CRC_CMD_ID_HASH 20
495#define MCUXCLELS_CMD_CRC_CMD_ID_HMAC 21
496#define MCUXCLELS_CMD_CRC_CMD_ID_CMAC 22
497#define MCUXCLELS_CMD_CRC_CMD_ID_RND_REQ 24
498#define MCUXCLELS_CMD_CRC_CMD_ID_DRBG_TEST 25
499#define MCUXCLELS_CMD_CRC_CMD_ID_DTRNG_CFG_LOAD 28
500#define MCUXCLELS_CMD_CRC_CMD_ID_DTRNG_EVAL 29
501#define MCUXCLELS_CMD_CRC_CMD_ID_GDET_CFG_LOAD 30
502#define MCUXCLELS_CMD_CRC_CMD_ID_GDET_TRIM 31
Definition of function identifiers for the flow protection mechanism.
Provides the API for the CSSL flow protection mechanism.
#define MCUXCLELS_API
Marks a function as a public API function of the mcuxClEls component.
Definition mcuxClEls_Common.h:46
MCUXCLELS_API mcuxClEls_Status_t mcuxClEls_ConfigureCommandCRC(mcuxClEls_CommandCrcConfig_t options)
Set command CRC flags.
MCUXCLELS_API mcuxClEls_Status_t mcuxClEls_VerifyVsRefCRC(uint32_t refCrc)
Verifies a reference CRC against the computed ELS command CRC.
MCUXCLELS_API mcuxClEls_Status_t mcuxClEls_UpdateRefCRC(uint8_t command, uint32_t options, uint32_t *refCrc)
Updates a reference CRC with the parameters of an ELS command.
MCUXCLELS_API mcuxClEls_Status_t mcuxClEls_GetCommandCRC(uint32_t *commandCrc)
Get the current command CRC value.
uint32_t mcuxClEls_Status_t
Type for ELS driver status codes.
Definition mcuxClEls_Types.h:212
#define MCUX_CSSL_FP_FUNCTION_DECL(...)
Declaration of a flow protected function.
Definition mcuxCsslFlowProtection.h:125
#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 to control ELS Command CRC.
Definition mcuxClEls_Crc.h:523
uint32_t value
Accesses the bit field as a full word.
Definition mcuxClEls_Crc.h:526
uint32_t enable
Enable/Disable update of Command CRC value by executing commands, set with MCUXCLELS_CMD_CRC_ENABLE /...
Definition mcuxClEls_Crc.h:531
uint32_t reset
Reset the Command CRC to initial value, set by MCUXCLELS_CMD_CRC_RESET.
Definition mcuxClEls_Crc.h:530