+ *
+ * After each call to a function ending in _Async, one of the waiting functions #mcuxClEls_WaitForOperation or #mcuxClEls_LimitedWaitForOperation must be called to ensure completion.
+ * The waiting functions may fail, e.g., when the ELS enters an error state.
+ */
+
+#ifndef MCUXCLELS_H_
+#define MCUXCLELS_H_
+
+#include // Exported features flags header
+
+#include
+#include
+#ifdef MCUXCL_FEATURE_ELS_CMD_CRC
+#include
+#endif /* MCUXCL_FEATURE_ELS_CMD_CRC */
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#ifdef MCUXCL_FEATURE_ELS_GLITCHDETECTOR
+#include
+#endif /* MCUXCL_FEATURE_ELS_GLITCHDETECTOR */
+
+#endif /* MCUXCLELS_H_ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Aead.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Aead.h
new file mode 100644
index 00000000..c0486bec
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Aead.h
@@ -0,0 +1,457 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/**
+ * @file mcuxClEls_Aead.h
+ * @brief ELS header for Authenticated Encryption with Associated Data (AEAD).
+ *
+ * This header exposes functions that enable using the ELS for Authenticated Encryption with Associated Data (AEAD).
+ * The AEAD algorithm supported by ELS is AES in Galois/Counter Mode (GCM), as described in NIST Special Publication
+ * 800-38D.
+ */
+
+ /**
+ * @defgroup mcuxClEls_Aead mcuxClEls_Aead
+ * @brief This part of the @ref mcuxClEls driver supports Authenticated Encryption with Associated Data (AEAD).
+ * @ingroup mcuxClEls
+ * @{
+ */
+#ifndef MCUXCLELS_AEAD_H_
+#define MCUXCLELS_AEAD_H_
+
+#include // Exported features flags header
+#include // Common functionality
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * CONSTANTS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Aead_Macros mcuxClEls_Aead_Macros
+ * @brief Defines all macros of @ref mcuxClEls_Aead
+ * @ingroup mcuxClEls_Aead
+ * @{
+ */
+/**
+ * @defgroup MCUXCLELS_AEAD_ MCUXCLELS_AEAD_
+ * @brief Defines macros used to initialize #mcuxClEls_AeadOption_t
+ * @ingroup mcuxClEls_Aead_Macros
+ * @{
+ */
+#define MCUXCLELS_AEAD_ENCRYPT ((uint8_t)0x00U) ///< Set #mcuxClEls_AeadOption_t.dcrpt to this value to encrypt data
+#define MCUXCLELS_AEAD_DECRYPT ((uint8_t)0x01U) ///< Set #mcuxClEls_AeadOption_t.dcrpt to this value to decrypt data
+
+#define MCUXCLELS_AEAD_STATE_IN_DISABLE ((uint8_t)0x00U) ///< Set #mcuxClEls_AeadOption_t.acpsie to this value to load the GCM state from ELS
+#define MCUXCLELS_AEAD_STATE_IN_ENABLE ((uint8_t)0x01U) ///< Set #mcuxClEls_AeadOption_t.acpsie to this value to load the GCM state from the context
+
+#define MCUXCLELS_AEAD_LASTINIT_TRUE ((uint8_t)0x01U) ///< Set #mcuxClEls_AeadOption_t.lastinit to this value if this is the last call to init
+#define MCUXCLELS_AEAD_LASTINIT_FALSE ((uint8_t)0x00U) ///< Set #mcuxClEls_AeadOption_t.lastinit to this value if this is not the last call to init
+
+#define MCUXCLELS_AEAD_EXTERN_KEY ((uint8_t)0x01U) ///< Set #mcuxClEls_AeadOption_t.extkey to this value to use an external key
+#define MCUXCLELS_AEAD_INTERN_KEY ((uint8_t)0x00U) ///< Set #mcuxClEls_AeadOption_t.extkey to this value to use a key from the ELS keystore
+
+#define MCUXCLELS_AEAD_ACPMOD_INIT ((uint8_t)0x00U) ///< Set #mcuxClEls_AeadOption_t.acpmod to this value for Init mode. For internal use
+#define MCUXCLELS_AEAD_ACPMOD_AADPROC ((uint8_t)0x01U) ///< Set #mcuxClEls_AeadOption_t.acpmod to this value for Process Additional Authenticated Data mode. For internal use
+#define MCUXCLELS_AEAD_ACPMOD_MSGPROC ((uint8_t)0x02U) ///< Set #mcuxClEls_AeadOption_t.acpmod to this value for Process Message mode. For internal use
+#define MCUXCLELS_AEAD_ACPMOD_FINAL ((uint8_t)0x03U) ///< Set #mcuxClEls_AeadOption_t.acpmod to this value for Finalize mode. For internal use
+
+#ifndef MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS
+#define MCUXCLELS_AEAD_STATE_OUT_ENABLE ((uint8_t)0x01U) ///< Set #mcuxClEls_AeadOption_t.acpsoe to this value to save the state to the context. For internal use
+#endif /* MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS */
+/**
+ * @}
+ */
+
+#define MCUXCLELS_AEAD_IV_BLOCK_SIZE 16U ///< AES-GCM IV Granularity: 128 bit (16 bytes)
+#define MCUXCLELS_AEAD_AAD_BLOCK_SIZE 16U ///< AES-GCM AAD Granularity: 128 bit (16 bytes)
+#define MCUXCLELS_AEAD_TAG_SIZE 16U ///< tag size: Tag generation supports only a 128 bit wide tag (16 bytes)
+#define MCUXCLELS_AEAD_CONTEXT_SIZE 80U ///< context size: 512 bit (64 bytes) + 16 bytes for finalize
+/**
+ * @}
+ */
+
+/**********************************************
+ * TYPEDEFS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Aead_Types mcuxClEls_Aead_Types
+ * @brief Defines all types of @ref mcuxClEls_Aead
+ * @ingroup mcuxClEls_Aead
+ * @{
+ */
+/**
+ * @brief Command option bit field for #mcuxClEls_Aead_Init_Async, #mcuxClEls_Aead_UpdateAad_Async, #mcuxClEls_Aead_UpdateData_Async and #mcuxClEls_Aead_Finalize_Async.
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word
+ } word; ///< Access #mcuxClEls_AeadOption_t word-wise
+ struct
+ {
+ uint32_t :1; ///< RFU
+ uint32_t dcrpt :1; ///< Defines if encryption or decryption shall be performed
+ uint32_t acpmod :2; ///< This field is managed internally
+#ifndef MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS
+ uint32_t acpsoe :1; ///< This field is managed internally
+#else
+ uint32_t :1; ///< RFU
+#endif /* MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS */
+ uint32_t acpsie :1; ///< This field is managed internally
+ uint32_t msgendw :4; ///< The size of the last data block (plain/cipher text) in bytes, without padding
+ uint32_t lastinit :1; ///< Defines whether this is the last call to init
+ uint32_t :2; ///< RFU
+ uint32_t extkey :1; ///< Defines whether an external key shall be used
+ uint32_t :18; ///< RFU
+ } bits; ///< Access #mcuxClEls_AeadOption_t bit-wise
+} mcuxClEls_AeadOption_t;
+/**
+ * @}
+ */
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Aead_Functions mcuxClEls_Aead_Functions
+ * @brief Defines all functions of @ref mcuxClEls_Aead
+ * @ingroup mcuxClEls_Aead
+ * @{
+ */
+
+/**
+ * @brief AES-GCM initialization
+ *
+ * This is the first stage of AEAD encryption/decryption. This generates the initial context out of the IV @p pIV and the key (@p pKey or @p keyIdx).
+ *
+ * @if ELS_AES_WITH_SIDE_CHANNEL_PROTECTION
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ * @endif
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] options The AEAD command options. For more information, see #mcuxClEls_AeadOption_t.
+ * @param[in] keyIdx Index of the key inside the ELS keystore
+ * @param[in] pKey Pointer to the key
+ * @param[in] keyLength Size of @p pKey in bytes
+ * @param[in] pIV Pointer to memory area that contains the IV
+ * @param[in] ivLength Size of @p pIV in bytes, with padding
+ * @param [out] pAeadCtx Pointer to the memory area that receives the AEAD context structure. Must be at least #MCUXCLELS_AEAD_CONTEXT_SIZE bytes long.
+ *
+ * The properties of some parameters change with respect to selected options.
+ *
+ *
+ *
Parameter properties
+ *
+ *
+ *
@p options.extkey == #MCUXCLELS_AEAD_EXTERN_KEY
+ *
@p keyIdx is ignored.
+ *
+ * @p pKey must be a valid AES key and @p keyLength a valid AES key size (see @ref MCUXCLELS_CIPHER_KEY_SIZE_AES_).
+ *
+ *
@p options.extkey == #MCUXCLELS_AEAD_INTERN_KEY
+ *
@p keyIdx must be a valid key index with the correct usage rights.
+ *
+ * @p pKey and @p keyLength are ignored.
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Aead_Init_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Aead_Init_Async(
+ mcuxClEls_AeadOption_t options,
+ mcuxClEls_KeyIndex_t keyIdx,
+ uint8_t const * pKey,
+ size_t keyLength,
+ uint8_t const * pIV,
+ size_t ivLength,
+ uint8_t * pAeadCtx
+ );
+
+/**
+ * @brief AES-GCM partial initialization
+ *
+ * This is the first stage of AEAD encryption/decryption. This generates the initial context out of the IV @p pIV and the key (@p pKey or @p keyIdx).
+ *
+ * @if ELS_AES_WITH_SIDE_CHANNEL_PROTECTION
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ * @endif
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] options The AEAD command options. For more information, see #mcuxClEls_AeadOption_t.
+ * @param[in] keyIdx Index of the key inside the ELS keystore
+ * @param[in] pKey Pointer to the key
+ * @param[in] keyLength Size of @p pKey in bytes
+ * @param[in] pIV Pointer to memory area that contains the IV
+ * @param[in] ivLength Size of @p pIV in bytes, with padding
+ * @param [out] pAeadCtx Pointer to the memory area that receives the AEAD context structure. Must be at least #MCUXCLELS_AEAD_CONTEXT_SIZE bytes long.
+ *
+ * The properties of some parameters change with respect to selected options.
+ *
+ *
+ *
Parameter properties
+ *
+ *
+ *
@p options.extkey == #MCUXCLELS_AEAD_EXTERN_KEY
+ *
@p keyIdx is ignored.
+ *
+ * @p pKey must be a valid AES key and @p keyLength a valid AES key size (see @ref MCUXCLELS_CIPHER_KEY_SIZE_AES_).
+ *
+ *
@p options.extkey == #MCUXCLELS_AEAD_INTERN_KEY
+ *
@p keyIdx must be a valid key index with the correct usage rights.
+ *
+ * @p pKey and @p keyLength are ignored.
+ *
+ *
@p options.msgendw
+ *
This field is ignored
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Aead_PartialInit_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Aead_PartialInit_Async(
+ mcuxClEls_AeadOption_t options,
+ mcuxClEls_KeyIndex_t keyIdx,
+ uint8_t const * pKey,
+ size_t keyLength,
+ uint8_t const * pIV,
+ size_t ivLength,
+ uint8_t * pAeadCtx
+ );
+
+/**
+ * @brief AES-GCM update of the Additional Authenticated Data (AAD)
+ *
+ * This is the second stage of AEAD encryption/decryption. This updates the internal authentication tag with the AAD.
+ *
+ * #mcuxClEls_Aead_Init_Async must have been called before calling this function.
+ *
+ * @if ELS_AES_WITH_SIDE_CHANNEL_PROTECTION
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ * @endif
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] options The AEAD command options. For more information, see #mcuxClEls_AeadOption_t.
+ * @param[in] keyIdx Index of the key inside the ELS keystore
+ * @param[in] pKey Pointer to the key
+ * @param[in] keyLength Size of @p pKey in bytes
+ * @param[in] pAad Memory area that contains the AAD
+ * @param[in] aadLength Length of the @p pAad in bytes with padding
+ * @param[in, out] pAeadCtx Pointer to the AEAD context structure. Must be at least #MCUXCLELS_AEAD_CONTEXT_SIZE bytes long.
+ *
+ * The properties of some parameters change with respect to selected options.
+ *
+ *
+ *
Parameter properties
+ *
+ *
+ *
@p options.extkey == #MCUXCLELS_AEAD_EXTERN_KEY
+ *
@p keyIdx is ignored.
+ *
+ * @p pKey must be a valid AES key and @p keyLength a valid AES key size (see @ref MCUXCLELS_CIPHER_KEY_SIZE_AES_).
+ *
+ *
@p options.extkey == #MCUXCLELS_AEAD_INTERN_KEY
+ *
@p keyIdx must be a valid key index with the correct usage rights.
+ *
+ * @p pKey and @p keyLength are ignored.
+ *
+ *
@p options.msgendw
+ *
This field is ignored
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Aead_UpdateAad_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Aead_UpdateAad_Async(
+ mcuxClEls_AeadOption_t options,
+ mcuxClEls_KeyIndex_t keyIdx,
+ uint8_t const * pKey,
+ size_t keyLength,
+ uint8_t const * pAad,
+ size_t aadLength,
+ uint8_t * pAeadCtx
+ );
+
+/**
+ * @brief AES-GCM update of the encrypted data
+ *
+ * This is the third stage of AEAD encryption/decryption. This processes the given plaintext (in case of encryption)
+ * or ciphertext (in case of decryption) and outputs the ciphertext (in case of encryption) or plaintext (in case of decryption).
+ *
+ * #mcuxClEls_Aead_Init_Async, #mcuxClEls_Aead_UpdateAad_Async must have been called before calling this function.
+ *
+ * @if ELS_AES_WITH_SIDE_CHANNEL_PROTECTION
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ * @endif
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] options The AEAD command options. For more information, see #mcuxClEls_AeadOption_t.
+ * @param[in] keyIdx Index of the key inside the ELS keystore
+ * @param[in] pKey Pointer to the key
+ * @param[in] keyLength Size of @p pKey in bytes
+ * @param[in] pInput Pointer to the memory location of the data to be processed
+ * @param[in] inputLength Size of @p pInput in bytes with padding
+ * @param [out] pOutput Pointer to the processed data memory location
+ * @param[in, out] pAeadCtx Pointer to the AEAD context structure. Must be at least #MCUXCLELS_AEAD_CONTEXT_SIZE bytes long.
+ *
+ * The properties of some parameters change with respect to selected options.
+ *
+ *
+ *
Parameter properties
+ *
+ *
+ *
@p options.extkey == #MCUXCLELS_AEAD_EXTERN_KEY
+ *
@p keyIdx is ignored.
+ *
+ * @p pKey must be a valid AES key and @p keyLength a valid AES key size (see @ref MCUXCLELS_CIPHER_KEY_SIZE_AES_).
+ *
+ *
@p options.extkey == #MCUXCLELS_AEAD_INTERN_KEY
+ *
@p keyIdx must be a valid key index with the correct usage rights.
+ *
+ * @p pKey and @p keyLength are ignored.
+ *
+ *
@p options.msgendw
+ *
This field has to be set to the size of the last data block (plain/cipher text) in bytes, without padding.
+ * In case the last block is a full block, this field has to be set to 0.
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Aead_UpdateData_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Aead_UpdateData_Async(
+ mcuxClEls_AeadOption_t options,
+ mcuxClEls_KeyIndex_t keyIdx,
+ uint8_t const * pKey,
+ size_t keyLength,
+ uint8_t const * pInput,
+ size_t inputLength,
+ uint8_t * pOutput,
+ uint8_t * pAeadCtx
+ );
+
+/**
+ * @brief AES-GCM final encryption/decryption
+ *
+ * This is the fourth stage of AEAD encryption/decryption. This updates the authentication tag with the final data
+ * length block and outputs the tag at the desired location.
+ *
+ * #mcuxClEls_Aead_Init_Async, #mcuxClEls_Aead_UpdateAad_Async and #mcuxClEls_Aead_UpdateData_Async must have been called
+ * before calling this function.
+ *
+ * @if ELS_AES_WITH_SIDE_CHANNEL_PROTECTION
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ * @endif
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] options The AEAD command options. For more information, see #mcuxClEls_AeadOption_t.
+ * @param[in] keyIdx Index of the key inside the ELS keystore
+ * @param[in] pKey Pointer to the key
+ * @param[in] keyLength Size of @p pKey in bytes
+ * @param[in] aadLength Length of the complete Additional Authenticated Data (AAD) in bytes, without padding.
+ * @param[in] dataLength Length of the complete plaintext/ciphertext in bytes, without padding.
+ * @param [out] pTag Pointer where the resulting tag will be stored
+ * @param[in] pAeadCtx Pointer to the AEAD context structure. Must be at least #MCUXCLELS_AEAD_CONTEXT_SIZE bytes long.
+ *
+ * The properties of some parameters change with respect to selected options.
+ *
+ *
+ *
Parameter properties
+ *
+ *
+ *
@p options.extkey == #MCUXCLELS_AEAD_EXTERN_KEY
+ *
@p keyIdx is ignored.
+ *
+ * @p pKey must be a valid AES key and @p keyLength a valid AES key size (see @ref MCUXCLELS_CIPHER_KEY_SIZE_AES_).
+ *
+ *
@p options.extkey == #MCUXCLELS_AEAD_INTERN_KEY
+ *
@p keyIdx must be a valid key index with the correct usage rights.
+ *
+ * @p pKey and @p keyLength are ignored.
+ *
+ *
@p options.msgendw
+ *
This field is ignored
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Aead_Finalize_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Aead_Finalize_Async(
+ mcuxClEls_AeadOption_t options,
+ mcuxClEls_KeyIndex_t keyIdx,
+ uint8_t const * pKey,
+ size_t keyLength,
+ size_t aadLength,
+ size_t dataLength,
+ uint8_t * pTag,
+ uint8_t * pAeadCtx
+ );
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLELS_AEAD_H_ */
+
+/**
+ * @}
+ *
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Cipher.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Cipher.h
new file mode 100644
index 00000000..a0f35909
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Cipher.h
@@ -0,0 +1,239 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/**
+ * @file mcuxClEls_Cipher.h
+ * @brief ELS header for symmetric ciphers.
+ *
+ * This header exposes functions that enable using the ELS for symmetric encryption/decryption.
+ * The cipher algorithm supported by ELS is AES in the following modes:
+ * - Electronic Code Book (ECB) mode,
+ * - Cipher Block Chaining (CBC) mode, and
+ * - Counter (CTR) mode.
+ * Supported key sizes are 128, 192, and 256 bits.
+ */
+
+/**
+ * @defgroup mcuxClEls_Cipher mcuxClEls_Cipher
+ * @brief This part of the @ref mcuxClEls driver supports functionality for symmetric ciphers
+ * @ingroup mcuxClEls
+ * @{
+ */
+
+#ifndef MCUXCLELS_CIPHER_H_
+#define MCUXCLELS_CIPHER_H_
+
+#include // Exported features flags header
+#include // Common functionality
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * CONSTANTS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Cipher_Macros mcuxClEls_Cipher_Macros
+ * @brief Defines all macros of @ref mcuxClEls_Cipher
+ * @ingroup mcuxClEls_Cipher
+ * @{
+ */
+
+/**
+ * @defgroup MCUXCLELS_CIPHER_ MCUXCLELS_CIPHER_
+ * @brief Defines valid options to be used by #mcuxClEls_CipherOption_t
+ * @ingroup mcuxClEls_Cipher_Macros
+ *
+ * Valid AES key sizes in bytes
+ * @{
+ */
+
+#define MCUXCLELS_CIPHER_ENCRYPT 0U ///< Set this option at #mcuxClEls_CipherOption_t.dcrpt to perform an encryption
+#define MCUXCLELS_CIPHER_DECRYPT 1U ///< Set this option at #mcuxClEls_CipherOption_t.dcrpt to perform a decryption
+
+#define MCUXCLELS_CIPHER_STATE_OUT_ENABLE 1U ///< Set this option at #mcuxClEls_CipherOption_t.cphsoe to export the internal ELS state to @p pIV
+#define MCUXCLELS_CIPHER_STATE_OUT_DISABLE 0U ///< Set this option at #mcuxClEls_CipherOption_t.cphsoe to not export the internal ELS state
+
+#ifndef MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS
+#define MCUXCLELS_CIPHER_STATE_IN_ENABLE 1U ///< Set this option at #mcuxClEls_CipherOption_t.cphsie to import an external ELS state from @p pIV
+#define MCUXCLELS_CIPHER_STATE_IN_DISABLE 0U ///< Set this option at #mcuxClEls_CipherOption_t.cphsie to not import an external ELS state
+#endif /* MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS */
+
+#define MCUXCLELS_CIPHER_EXTERNAL_KEY 1U ///< Set this option at #mcuxClEls_CipherOption_t.extkey to use a key located in CPU memory provided by @p pKey
+#define MCUXCLELS_CIPHER_INTERNAL_KEY 0U ///< Set this option at #mcuxClEls_CipherOption_t.extkey to use a key located in ELS keystore privded by @p keyIdx
+
+#define MCUXCLELS_CIPHERPARAM_ALGORITHM_AES_ECB 0x00U ///< Set this option at #mcuxClEls_CipherOption_t.cphmde to use AES engine in Electornic Code Book (ECB) mode
+#define MCUXCLELS_CIPHERPARAM_ALGORITHM_AES_CBC 0x01U ///< Set this option at #mcuxClEls_CipherOption_t.cphmde to use AES engine in Cipher Block Chaining (CBC) mode
+#define MCUXCLELS_CIPHERPARAM_ALGORITHM_AES_CTR 0x02U ///< Set this option at #mcuxClEls_CipherOption_t.cphmde to use AES engine in Counter (CTR) mode
+/**
+ * @}
+ */
+
+
+/**
+ * @ingroup mcuxClEls_Cipher_Macros
+ */
+#define MCUXCLELS_CIPHER_BLOCK_SIZE_AES ((size_t) 16U) ///< Size of an AES input block: 128 bit (16 bytes)
+
+/**
+ * @defgroup MCUXCLELS_CIPHER_KEY_SIZE_AES_ MCUXCLELS_CIPHER_KEY_SIZE_AES_
+ * @brief Defines valid AES key sizes in bytes
+ * @ingroup mcuxClEls_Cipher_Macros
+ * @{
+ */
+
+#define MCUXCLELS_CIPHER_KEY_SIZE_AES_128 ((size_t) 16U) ///< Size of an AES128 key: 128 bit (16 bytes)
+#define MCUXCLELS_CIPHER_KEY_SIZE_AES_192 ((size_t) 24U) ///< Size of an AES192 key: 192 bit (24 bytes)
+#define MCUXCLELS_CIPHER_KEY_SIZE_AES_256 ((size_t) 32U) ///< Size of an AES192 key: 256 bit (32 bytes)
+/**
+ * @}
+ *
+ * @}
+ */
+
+/**********************************************
+ * TYPEDEFS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Cipher_Types mcuxClEls_Cipher_Types
+ * @brief Defines all types of @ref mcuxClEls_Cipher
+ * @ingroup mcuxClEls_Cipher
+ * @{
+ */
+
+/**
+ * @brief Command option bit field for #mcuxClEls_Cipher_Async
+ *
+ * Bit field to configure #mcuxClEls_Cipher_Async. See @ref MCUXCLELS_CIPHER_ for possible options.
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word
+ } word; ///< Access #mcuxClEls_CipherOption_t word-wise
+ struct
+ {
+ uint32_t :1; ///< RFU
+ uint32_t dcrpt :1; ///< Define operation mode
+ uint32_t cphmde :2; ///< Define cipher mode
+ uint32_t cphsoe :1; ///< Define whether the ELS internal cipher state should be extracted to external memory or kept internally
+#ifndef MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS
+ uint32_t cphsie :1; ///< Define whether an external provided cipher state should be imported from external memory
+ uint32_t :7; ///< RFU
+#else
+ uint32_t :8; ///< RFU
+#endif /* MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS */
+ uint32_t extkey :1; ///< Define whether an external key from memory or ELS internal key should be used
+ uint32_t :18; ///< RFU
+ } bits; ///< Access #mcuxClEls_CipherOption_t bit-wise
+} mcuxClEls_CipherOption_t;
+/**
+ * @}
+ */
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Cipher_Functions mcuxClEls_Cipher_Functions
+ * @brief Defines all functions of @ref mcuxClEls_Cipher
+ * @ingroup mcuxClEls_Cipher
+ * @{
+ */
+
+ /**
+ * @brief Performs AES encryption/decryption.
+ *
+ * @if ELS_AES_WITH_SIDE_CHANNEL_PROTECTION
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ * @endif
+ *
+ * Performs an AES encryption/decryption. Call #mcuxClEls_WaitForOperation to complete the operation.
+ * @param[in] options Encryption/decryption command options. For detailed information, see #mcuxClEls_CipherOption_t.
+ * @param[in] keyIdx Index of the key inside the ELS keystore. See parameter properties section in function description.
+ * @param[in] pKey Memory area that contains the key. See parameter properties section in function description.
+ * @param[in] keyLength Size of @p pKey in bytes. Must be a valid key size of @ref MCUXCLELS_CIPHER_KEY_SIZE_AES_. See parameter properties section in function description.
+ * @param[in] pInput Pointer to the input data to be encrypted/decrypted. Padding must be already applied.
+ * @param[in] inputLength Size of @p pInput in bytes, must be a multiple of the block size.
+ * @param[in, out] pIV A pointer to the memory location which contains/receives the IV/state of cipher. See parameter properties section in function description.
+ * @param[out] pOutput Pointer to the output buffer to store encrypted/decrypted data.
+ *
+ * The properties of some parameters change with respect to selected options.
+ *
+ *
@p pIV must be set to the IV (when encrypting the first block) or to the last block of the ciphertext of the previous operation.
+ * ELS will always read and write to this location.
+ *
+ * @ifnot ELS_NO_INTERNAL_STATE_FLAGS
+ * @p options.cphsie is ignored.
+ * @endif
+ *
+ * @p options.cphsoe is ignored.
@p pIV must be set to the IV (when encrypting the first block) or to the state output of the previous
+ * encryption/decryption operation. ELS will write to this location if @p options.cphsoe == #MCUXCLELS_CIPHER_STATE_OUT_ENABLE.
@p pKey is ignored.
+ *
+ * @p keyLength is ignored.
+ *
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Cipher_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Cipher_Async(
+ mcuxClEls_CipherOption_t options,
+ mcuxClEls_KeyIndex_t keyIdx,
+ uint8_t const * pKey,
+ size_t keyLength,
+ uint8_t const * pInput,
+ size_t inputLength,
+ uint8_t * pIV,
+ uint8_t * pOutput
+ );
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLELS_CIPHER_H_ */
+
+/**
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Cmac.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Cmac.h
new file mode 100644
index 00000000..7bb8b948
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Cmac.h
@@ -0,0 +1,191 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/**
+ * @file mcuxClEls_Cmac.h
+ * @brief ELS header for CMAC support.
+ * This header exposes functions that enable using the ELS for the generation of cipher-based message authentication
+ * codes (CMAC).
+ * The supported cipher algorithm is AES-128 and AES-256.
+ */
+
+/**
+ * @defgroup mcuxClEls_Cmac mcuxClEls_Cmac
+ * @brief This part of the @ref mcuxClEls driver supports functionality for cipher-based message authentication codes (CMAC).
+ * @ingroup mcuxClEls
+ * @{
+ */
+
+#ifndef MCUXCLELS_CMAC_H_
+#define MCUXCLELS_CMAC_H_
+
+#include // Exported features flags header
+#include // Common functionality
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * MACROS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Cmac_Macros mcuxClEls_Cmac_Macros
+ * @brief Defines all macros of @ref mcuxClEls_Cmac
+ * @ingroup mcuxClEls_Cmac
+ * @{
+ */
+
+/**
+ * @defgroup MCUXCLELS_CMAC_KEY_SIZE_ MCUXCLELS_CMAC_KEY_SIZE_
+ * @brief Valid CMAC key sizes in bytes
+ * @ingroup mcuxClEls_Cmac_Macros
+ * @{ */
+#define MCUXCLELS_CMAC_KEY_SIZE_128 ((size_t) 16U) ///< Size of 128 bit CMAC key (16 bytes)
+#define MCUXCLELS_CMAC_KEY_SIZE_256 ((size_t) 32U) ///< Size of 256 bit CMAC key (32 bytes)
+/** @} */
+
+/**
+ * @defgroup MCUXCLELS_CMAC_ MCUXCLELS_CMAC_
+ * @brief Option values for #mcuxClEls_CmacOption_t
+ * @ingroup mcuxClEls_Cmac_Macros
+ * @{ */
+#define MCUXCLELS_CMAC_EXTERNAL_KEY_ENABLE 1U ///< Set #mcuxClEls_CmacOption_t.extkey to this value to use an external key
+#define MCUXCLELS_CMAC_EXTERNAL_KEY_DISABLE 0U ///< Set #mcuxClEls_CmacOption_t.extkey to this value to use a key from the ELS keystore
+#define MCUXCLELS_CMAC_INITIALIZE_DISABLE 0U ///< Set #mcuxClEls_CmacOption_t.initialize to this value if the message chunk does not include the first block of the message
+#define MCUXCLELS_CMAC_INITIALIZE_ENABLE 1U ///< Set #mcuxClEls_CmacOption_t.initialize to this value if the message chunk includes the first block of the message
+#define MCUXCLELS_CMAC_FINALIZE_DISABLE 0U ///< Set #mcuxClEls_CmacOption_t.finalize to this value if the message chunk does not include the last block of the message
+#define MCUXCLELS_CMAC_FINALIZE_ENABLE 1U ///< Set #mcuxClEls_CmacOption_t.finalize to this value if the message chunk includes the last block of the message
+/**
+ * @}
+ */
+
+#define MCUXCLELS_CMAC_OUT_SIZE ((size_t) 16U) ///< Size of CMAC output: 128 bit (16 bytes)
+
+/**
+ * @}
+ */
+
+/**********************************************
+ * TYPEDEFS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Cmac_Types mcuxClEls_Cmac_Types
+ * @brief Defines all types of @ref mcuxClEls_Cmac
+ * @ingroup mcuxClEls_Cmac
+ * @{
+ */
+/**
+ * @brief Command option bit field for #mcuxClEls_Cmac_Async.
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word
+ } word; ///< Access #mcuxClEls_CmacOption_t word-wise
+ struct
+ {
+ uint32_t initialize : 1; ///< Request initial processing for the first block of the message
+ uint32_t finalize : 1; ///< Request final processing for the last block of the message
+ uint32_t soe : 1; ///< This field is managed internally
+ uint32_t sie : 1; ///< This field is managed internally
+ uint32_t :9; ///< RFU
+ uint32_t extkey :1; ///< An external key should be used
+ uint32_t :18; ///< RFU
+ } bits; ///< Access #mcuxClEls_CmacOption_t bit-wise
+} mcuxClEls_CmacOption_t;
+/**
+ * @}
+ */
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Cmac_Functions mcuxClEls_Cmac_Functions
+ * @brief Defines all functions of @ref mcuxClEls_Cmac
+ * @ingroup mcuxClEls_Cmac
+ * @{
+ */
+/**
+ * @brief Performs CMAC with AES-128 or AES-256
+ *
+ * @if ELS_AES_WITH_SIDE_CHANNEL_PROTECTION
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ * @endif
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] options The command options. For more information, see #mcuxClEls_CmacOption_t.
+ * @param[in] keyIdx The CMAC key index
+ * @param[in] pKey Pointer to the padded CMAC key
+ * @param[in] keyLength Size of @p pKey in bytes. Must be a @ref MCUXCLELS_CMAC_KEY_SIZE_ "valid CMAC key size". See the parameter properties section in the function description.
+ * @param[in] pInput Pointer to a memory location which contains the data, padded via SP 800-38b standard, to be authenticated
+ * @param[in] inputLength Size of @p pInput in bytes before padding
+ * @param[in, out] pMac Pointer to the CMAC command state input/output. See the parameter properties section in the function description.
+ *
+ * The properties of some parameters change with respect to selected options.
+ *
+ *
The resulting MAC is written to @p pMac.
+ *
+ * @p options.soe is ignored.
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if an invalid parameter was specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Cmac_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Cmac_Async(
+ mcuxClEls_CmacOption_t options,
+ mcuxClEls_KeyIndex_t keyIdx,
+ uint8_t const * pKey,
+ size_t keyLength,
+ uint8_t const * pInput,
+ size_t inputLength,
+ uint8_t * pMac
+ );
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLELS_CMAC_H_ */
+
+/**
+ * @}
+ *
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Common.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Common.h
new file mode 100644
index 00000000..61c0244e
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Common.h
@@ -0,0 +1,848 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/**
+ * @file mcuxClEls_Common.h
+ * @brief ELS header for common functionality.
+ *
+ * This header exposes functions that support hardware state management for other ELS commands.
+ */
+
+/**
+ * @defgroup mcuxClEls_Common mcuxClEls_Common
+ * @brief This part of the @ref mcuxClEls driver supports common functionality
+ * @ingroup mcuxClEls
+ * @{
+ */
+#ifndef MCUXCLELS_COMMON_H_
+#define MCUXCLELS_COMMON_H_
+
+#include // Exported features flags header
+#include // Common types
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup mcuxClEls_Common_Macros mcuxClEls_Common_Macros
+ * @brief Defines all macros of @ref mcuxClEls_Common
+ * @ingroup mcuxClEls_Common
+ * @{
+ */
+
+#define MCUXCLELS_API ///< Marks a function as a public API function of the mcuxClEls component
+
+/**********************************************
+ * CONSTANTS
+ **********************************************/
+
+#ifdef MCUXCL_FEATURE_ELS_DMA_FINAL_ADDRESS_READBACK
+ #define MCUXCLELS_DMA_READBACK_PROTECTION_TOKEN MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEls_CompareDmaFinalOutputAddress)
+#else
+ #define MCUXCLELS_DMA_READBACK_PROTECTION_TOKEN (0u)
+#endif
+
+
+/**
+ * @defgroup mcuxClEls_InterruptOptionEn_t_Macros mcuxClEls_InterruptOptionEn_t
+ * @brief Defines interrupt enable option values
+ * @ingroup mcuxClEls_Common_Macros
+ * @{
+ */
+#define MCUXCLELS_ELS_INTERRUPT_ENABLE (0x01U) ///< Set this option at #mcuxClEls_InterruptOptionEn_t.elsint to allow ELS to trigger an interrupt
+#define MCUXCLELS_ELS_INTERRUPT_DISABLE (0x00U) ///< Set this option at #mcuxClEls_InterruptOptionEn_t.elsint to prevent ELS from triggering an interrupt
+#ifdef MCUXCL_FEATURE_ELS_GLITCHDETECTOR
+#define MCUXCLELS_GLITCH_DETECTOR_INTERRUPT_ENABLE ((uint32_t) 1U) ///< Set this option at #mcuxClEls_InterruptOptionEn_t.gdetint to allow the Glitch Detector to trigger an interrupt
+#define MCUXCLELS_GLITCH_DETECTOR_INTERRUPT_DISABLE ((uint32_t) 0U) ///< Set this option at #mcuxClEls_InterruptOptionEn_t.gdetint to prevent the Glitch Detector from triggering an interrupt
+#endif /* MCUXCL_FEATURE_ELS_GLITCHDETECTOR */
+/**@}*/
+
+/**
+ * @defgroup mcuxClEls_InterruptOptionRst_t_Macros mcuxClEls_InterruptOptionRst_t
+ * @brief Defines interrupt reset option values
+ * @ingroup mcuxClEls_Common_Macros
+ * @{
+ */
+#define MCUXCLELS_ELS_RESET_CLEAR (0x01U) ///< Set this option at #mcuxClEls_InterruptOptionRst_t.elsint to reset the ELS interrupt flag
+#define MCUXCLELS_ELS_RESET_KEEP (0x00U) ///< Set this option at #mcuxClEls_InterruptOptionRst_t.elsint to keep the ELS interrupt flag
+#ifdef MCUXCL_FEATURE_ELS_GLITCHDETECTOR
+#define MCUXCLELS_GLITCH_DETECTOR_RESET_CLEAR ((uint32_t) 1U) ///< Set this option at #mcuxClEls_InterruptOptionRst_t.gdetint to reset the Glitch Detector interrupt flag
+#define MCUXCLELS_GLITCH_DETECTOR_RESET_KEEP ((uint32_t) 0U) ///< Set this option at #mcuxClEls_InterruptOptionRst_t.gdetint to keep the Glitch Detector interrupt flag
+#endif /* MCUXCL_FEATURE_ELS_GLITCHDETECTOR */
+/**@}*/
+
+/**
+ * @defgroup mcuxClEls_InterruptOptionSet_t_Macros mcuxClEls_InterruptOptionSet_t
+ * @brief Defines interrupt set option values
+ * @ingroup mcuxClEls_Common_Macros
+ * @{
+ */
+#define MCUXCLELS_ELS_INTERRUPT_SET (0x01U) ///< Set this option at #mcuxClEls_InterruptOptionSet_t.elsint to set the ELS interrupt flag
+#define MCUXCLELS_ELS_INTERRUPT_KEEP (0x00U) ///< Set this option at #mcuxClEls_InterruptOptionSet_t.elsint to leave the ELS interrupt flag unchanged
+#ifdef MCUXCL_FEATURE_ELS_GLITCHDETECTOR
+#define MCUXCLELS_GLITCH_DETECTOR_NEG_SET (0x01U) ///< Set this option at #mcuxClEls_InterruptOptionSet_t.gdetint_neg to set the negative Glitch Detector interrupt flag
+#define MCUXCLELS_GLITCH_DETECTOR_NEG_KEEP (0x00U) ///< Set this option at #mcuxClEls_InterruptOptionSet_t.gdetint_neg to leave the negative Glitch Detector interrupt flag unchanged
+#define MCUXCLELS_GLITCH_DETECTOR_POS_SET (0x01U) ///< Set this option at #mcuxClEls_InterruptOptionSet_t.gdetint_pos to set the positive Glitch Detector interrupt flag
+#define MCUXCLELS_GLITCH_DETECTOR_POS_KEEP (0x00U) ///< Set this option at #mcuxClEls_InterruptOptionSet_t.gdetint_pos to leave the positive Glitch Detector interrupt flag unchanged
+#endif /* MCUXCL_FEATURE_ELS_GLITCHDETECTOR */
+/**@}*/
+
+/**
+ * @defgroup MCUXCLELS_ERROR_FLAGS_ MCUXCLELS_ERROR_FLAGS_
+ * @brief Options for error flag clearing
+ * @ingroup mcuxClEls_Common_Macros
+ * @{
+ */
+#define MCUXCLELS_ERROR_FLAGS_KEEP ((mcuxClEls_ErrorHandling_t) 0x0u) ///< Set this option at #mcuxClEls_ErrorHandling_t to not clear any error flags
+#define MCUXCLELS_ERROR_FLAGS_CLEAR ((mcuxClEls_ErrorHandling_t) 0x1u) ///< Set this option at #mcuxClEls_ErrorHandling_t to clear all ELS error flags
+/**@}*/
+
+/**
+ * @defgroup MCUXCLELS_RESET_ MCUXCLELS_RESET_
+ * @brief Options for reset handling
+ * @ingroup mcuxClEls_Common_Macros
+ * @{
+ */
+#define MCUXCLELS_RESET_DO_NOT_CANCEL ((mcuxClEls_ResetOption_t) 0x0u) ///< Set this option at #mcuxClEls_ResetOption_t to abort the requested command if another ELS operation is still running
+#define MCUXCLELS_RESET_CANCEL ((mcuxClEls_ResetOption_t) 0x1u) ///< Set this option at #mcuxClEls_ResetOption_t to execute the requested command even if another ELS operation is still running
+/**@}*/
+
+/**
+ * @defgroup MCUXCLELS_STATUS_PPROT_ MCUXCLELS_STATUS_PPROT_
+ * @brief Values for the privilege/security level of ELS commands
+ *
+ * Note that some keys and memory areas may only be accessible when ELS is on a certain privilege/security level.
+ *
+ * The default value, before any command has been executed, is #MCUXCLELS_STATUS_PPROT_UNPRIVILEGED_NONSECURE.
+ *
+ * @ingroup mcuxClEls_Common_Macros
+ * @{
+ */
+#define MCUXCLELS_STATUS_PPROT_UNPRIVILEGED_SECURE ((uint32_t) 0x0u) ///< This value of #mcuxClEls_HwState_t.pprot means that the most recently started ELS operation was or is running in unprivileged secure mode
+#define MCUXCLELS_STATUS_PPROT_PRIVILEGED_SECURE ((uint32_t) 0x1u) ///< This value of #mcuxClEls_HwState_t.pprot means that the most recently started ELS operation was or is running in privileged secure mode
+#define MCUXCLELS_STATUS_PPROT_UNPRIVILEGED_NONSECURE ((uint32_t) 0x2u) ///< This value of #mcuxClEls_HwState_t.pprot means that the most recently started ELS operation was or is running in unprivileged non-secure mode
+#define MCUXCLELS_STATUS_PPROT_PRIVILEGED_NONSECURE ((uint32_t) 0x3u) ///< This value of #mcuxClEls_HwState_t.pprot means that the most recently started ELS operation was or is running in privileged non-secure mode
+/**@}*/
+
+/**
+ * @defgroup MCUXCLELS_STATUS_ECDSAVFY_ MCUXCLELS_STATUS_ECDSAVFY_
+ * @brief ECDSA verify check values
+ * @ingroup mcuxClEls_Common_Macros
+ * @{
+ */
+#define MCUXCLELS_STATUS_ECDSAVFY_NORUN ((uint32_t) 0x0u) ///< This value of #mcuxClEls_HwState_t.ecdsavfy means that no ECDSA verify operation has been executed
+#define MCUXCLELS_STATUS_ECDSAVFY_FAIL ((uint32_t) 0x1u) ///< This value of #mcuxClEls_HwState_t.ecdsavfy means that the most recently finished ECDSA signature verification failed
+#define MCUXCLELS_STATUS_ECDSAVFY_OK ((uint32_t) 0x2u) ///< This value of #mcuxClEls_HwState_t.ecdsavfy means that the most recently finished ECDSA signature verification passed
+#define MCUXCLELS_STATUS_ECDSAVFY_ERROR ((uint32_t) 0x3u) ///< This value of #mcuxClEls_HwState_t.ecdsavfy means that an error has occurred
+/**@}*/
+
+/**
+ * @defgroup MCUXCLELS_STATUS_DRBGENTLVL_ MCUXCLELS_STATUS_DRBGENTLVL_
+ * @brief Constants for Entropy quality of the current DRBG instance
+ * @ingroup mcuxClEls_Common_Macros
+ * @{ */
+#define MCUXCLELS_STATUS_DRBGENTLVL_NONE ((uint32_t) 0x0u) ///< This value of #mcuxClEls_HwState_t.drbgentlvl means that the DRBG is not running
+#define MCUXCLELS_STATUS_DRBGENTLVL_LOW ((uint32_t) 0x1u) ///< This value of #mcuxClEls_HwState_t.drbgentlvl means that the DRBG can generate random numbers with a low security strength (sufficient for commands with a low DRBG security strength requirement, see the function description to check which level is required)
+#define MCUXCLELS_STATUS_DRBGENTLVL_HIGH ((uint32_t) 0x2u) ///< This value of #mcuxClEls_HwState_t.drbgentlvl means that the DRBG can generate random numbers with 128 bits of security strength (sufficient for commands with a high DRBG security strength requirement, see the function description to check which level is required)
+/** @} */
+
+#ifdef MCUXCL_FEATURE_ELS_LOCKING
+/**
+ * @defgroup MCUXCLELS_LOCKING_ MCUXCLELS_LOCKING_
+ * @brief Constants for ELS locking feature
+ * @ingroup mcuxClEls_Common_Macros
+ * @{ */
+#define MCUXCLELS_MASTER_UNLOCK_ANY ((uint32_t) 0x1Fu) ///< Any bus master ID can override ELS lock
+/** @} */
+#endif /* MCUXCL_FEATURE_ELS_LOCKING */
+
+
+
+/**
+ * @}
+ */
+
+/**********************************************
+ * TYPEDEFS
+ **********************************************/
+
+/**
+ * @defgroup mcuxClEls_Common_Types mcuxClEls_Common_Types
+ * @brief Defines all types of @ref mcuxClEls_Common
+ * @ingroup mcuxClEls_Common
+ * @{
+ */
+
+/**
+ * @brief Result type of #mcuxClEls_GetHwVersion
+ *
+ * Contains the ELS version value.
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word
+ } word; ///< Access #mcuxClEls_HwVersion_t word-wise
+ struct
+ {
+ uint32_t revision :4; ///< Revision number
+ uint32_t minor :8; ///< Minor version
+ uint32_t major :4; ///< Major version
+#ifndef MCUXCL_FEATURE_ELS_GET_FW_VERSION
+ uint32_t level :4; ///< Release level version
+ uint32_t :12; ///< RFU
+#else /* MCUXCL_FEATURE_ELS_GET_FW_VERSION */
+ uint32_t fw_revision :4; ///< Firmware Revision number
+ uint32_t fw_minor :8; ///< Firmware Minor version
+ uint32_t fw_major :4; ///< Firmware Major version
+#endif /* MCUXCL_FEATURE_ELS_GET_FW_VERSION */
+ } bits; ///< Access #mcuxClEls_HwVersion_t bit-wise
+} mcuxClEls_HwVersion_t;
+
+/**
+ * @brief Result type of #mcuxClEls_GetHwState
+ *
+ * Contains ELS status information.
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word
+ } word; ///< Access #mcuxClEls_HwState_t word-wise
+ struct
+ {
+ uint32_t busy :1; ///< ELS is busy
+ uint32_t irq :1; ///< ELS interrupt activated
+ uint32_t err :1; ///< ELS is in error state
+ uint32_t prngready :1; ///< ELS PRNG is seeded and ready to use
+ uint32_t ecdsavfy :2; ///< ECDSA verify operation state (For possible values of this field, see @ref MCUXCLELS_STATUS_ECDSAVFY_)
+ uint32_t pprot :2; ///< The privilege/security level of the most recently started ELS command (For possible values of this field, see @ref MCUXCLELS_STATUS_PPROT_)
+ uint32_t drbgentlvl :2; ///< Entropy quality of the current DRBG instance (For possible values of this field, see @ref MCUXCLELS_STATUS_DRBGENTLVL_)
+ uint32_t dtrng_busy: 1; ///< Indicates the DTRNG is gathering entropy
+#ifdef MCUXCL_FEATURE_ELS_GLITCHDETECTOR
+ uint32_t gdet_pos :1; ///< Glitch detector interrupt activated (positive)
+ uint32_t gdet_neg :1; ///< Glitch detector interrupt activated (negative)
+#else
+ uint32_t :2; ///< RFU
+#endif /* MCUXCL_FEATURE_ELS_GLITCHDETECTOR */
+ uint32_t :3; ///< RFU
+#ifdef MCUXCL_FEATURE_ELS_LOCKING
+ uint32_t els_locked :1; ///< ELS is locked
+#else
+ uint32_t :1; ///< RFU
+#endif /* MCUXCL_FEATURE_ELS_LOCKING */
+ uint32_t :15; ///< RFU
+ } bits; ///< Access #mcuxClEls_HwState_t bit-wise
+} mcuxClEls_HwState_t;
+
+/**
+ * @brief Type to handle ELS error clearing options
+ *
+ * For possible values, see @ref MCUXCLELS_ERROR_FLAGS_.
+ */
+typedef uint32_t mcuxClEls_ErrorHandling_t;
+
+/**
+ * @brief Type to handle ELS reset options
+ *
+ * For possible values, see @ref MCUXCLELS_RESET_.
+ */
+typedef uint32_t mcuxClEls_ResetOption_t;
+
+/**
+ * @brief Command option type for #mcuxClEls_SetIntEnableFlags and #mcuxClEls_GetIntEnableFlags
+ *
+ * Used to get/set ELS interrupt enable options.
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word
+ } word; ///< Access #mcuxClEls_InterruptOptionEn_t word-wise
+ struct
+ {
+ uint32_t elsint :1; ///< Whether ELS interrupt should be used. (For possible values of this field, see @ref mcuxClEls_InterruptOptionEn_t_Macros)
+#ifdef MCUXCL_FEATURE_ELS_GLITCHDETECTOR
+ uint32_t gdetint :1; ///< Whether Glitch detector interrupt should be used. (For possible values of this field, see @ref mcuxClEls_InterruptOptionEn_t_Macros)
+#else
+ uint32_t :1; ///< RFU
+#endif /* MCUXCL_FEATURE_ELS_GLITCHDETECTOR */
+ uint32_t :30; ///< RFU
+ } bits; ///< Access #mcuxClEls_InterruptOptionEn_t bit-wise
+} mcuxClEls_InterruptOptionEn_t;
+
+/**
+ * @brief Type to control which ELS interrupts should be reset when calling #mcuxClEls_ResetIntFlags
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word
+ } word; ///< Access #mcuxClEls_InterruptOptionRst_t word-wise
+ struct
+ {
+ uint32_t elsint :1; ///< Whether ELS interrupt should be reset. (For possible values of this field, see @ref mcuxClEls_InterruptOptionRst_t_Macros)
+#ifdef MCUXCL_FEATURE_ELS_GLITCHDETECTOR
+ uint32_t gdetint :1; ///< Whether Glitch detector interrupt should be reset. (For possible values of this field, see @ref mcuxClEls_InterruptOptionRst_t_Macros)
+#else
+ uint32_t :1; ///< RFU
+#endif /* MCUXCL_FEATURE_ELS_GLITCHDETECTOR */
+ uint32_t :30; ///< RFU
+ } bits; ///< Access #mcuxClEls_InterruptOptionRst_t bit-wise
+} mcuxClEls_InterruptOptionRst_t;
+
+/**
+ * @brief Type to control which ELS interrupts should be set when calling #mcuxClEls_SetIntFlags
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word
+ } word; ///< Access #mcuxClEls_InterruptOptionSet_t word-wise
+ struct
+ {
+ uint32_t elsint :1; ///< Whether ELS interrupt should be set. (For possible values of this field, see @ref mcuxClEls_InterruptOptionSet_t_Macros)
+#ifdef MCUXCL_FEATURE_ELS_GLITCHDETECTOR
+ uint32_t gdetint_neg :1;///< Whether Glitch detector neg interrupt should be set. (For possible values of this field, see @ref mcuxClEls_InterruptOptionSet_t_Macros)
+ uint32_t gdetint_pos :1;///< Whether Glitch detector pos interrupt should be set. (For possible values of this field, see @ref mcuxClEls_InterruptOptionSet_t_Macros)
+#else
+ uint32_t :2; ///< RFU
+#endif /* MCUXCL_FEATURE_ELS_GLITCHDETECTOR */
+ uint32_t :29; ///< RFU
+ } bits; ///< Access #mcuxClEls_InterruptOptionSet_t bit-wise
+} mcuxClEls_InterruptOptionSet_t;
+
+/**
+ * @brief Result type of #mcuxClEls_GetHwConfig
+ *
+ * Contains ELS configuration values.
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word
+ } word; ///< Access #mcuxClEls_InterruptOptionSet_t word-wise
+ struct
+ {
+ uint32_t ciphersup :1; ///< Indicates whether the cipher command is supported
+ uint32_t authciphersup :1; ///< Indicates whether the auth_cipher command is supported
+ uint32_t ecsignsup :1; ///< Indicates whether the ecsign command is supported
+ uint32_t ecvfysup :1; ///< Indicates whether the ecvfy command is supported
+ uint32_t eckxchsup :1; ///< Indicates whether the dhkey_xch command is supported
+ uint32_t keygensup :1; ///< Indicates whether the keygen command is supported
+ uint32_t keyinsup :1; ///< Indicates whether the keyin command is supported
+ uint32_t keyoutsup :1; ///< Indicates whether the keyout command is supported
+ uint32_t kdeletesup :1; ///< Indicates whether the kdelete command is supported
+ uint32_t keyprovsup :1; ///< Indicates whether the keyprov command is supported
+ uint32_t ckdfsup :1; ///< Indicates whether the ckdf command is supported
+ uint32_t hkdfsup :1; ///< Indicates whether the hkdf command is supported
+ uint32_t tlsinitsup :1; ///< Indicates whether the tls_init command is supported
+ uint32_t hashsup :1; ///< Indicates whether the hash command is supported
+ uint32_t hmacsup :1; ///< Indicates whether the hmac command is supported
+ uint32_t cmacsup :1; ///< Indicates whether the cmac command is supported
+ uint32_t drbgreqsup :1; ///< Indicates whether the drbg_req command is supported
+ uint32_t drbgtestsup :1; ///< Indicates whether the drbg_test command is supported
+ uint32_t dtrgncfgloadsup :1; ///< Indicates whether the dtrng_cfg_load command is is supported
+ uint32_t dtrngevalsup :1; ///< Indicates whether the dtrng_eval command is supported
+ uint32_t gdetcfgloadsup :1; ///< Indicates whether the gdet_cfg_load command is supported
+ uint32_t gdettrimsup :1; ///< Indicates whether the gdet_trim command is supported
+ uint32_t :10; ///< RFU
+ } bits; ///< Access #mcuxClEls_InterruptOptionSet_t bit-wise
+} mcuxClEls_HwConfig_t;
+
+#define drbgreqsub drbgreqsup ///< Deprecated name for #mcuxClEls_HwConfig_t.drbgreqsup
+
+
+/**
+ * @}
+ */
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Common_Functions mcuxClEls_Common_Functions
+ * @brief Defines all functions of @ref mcuxClEls_Common
+ * @ingroup mcuxClEls_Common
+ * @{
+ */
+/**
+ * @brief Determines the version of the underlying ELS hardware IP.
+ *
+ * @attention This header was delivered as part of a CLNS release which is compatible with a specific ELS hardware IP version.
+ *
+ * @param[out] result Pointer which will be filled with the ELS hardware version
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code is always #MCUXCLELS_STATUS_OK
+ * @else
+ * @return An error code that is always #MCUXCLELS_STATUS_OK
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GetHwVersion)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetHwVersion(
+ mcuxClEls_HwVersion_t * result
+ );
+
+#ifdef MCUXCL_FEATURE_ELS_HWCONFIG
+/**
+ * @brief Determines the hardware configuration of the underlying ELS hardware IP.
+ *
+ * @param[out] result Pointer which will be filled with the ELS hardware configuration
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code is always #MCUXCLELS_STATUS_OK
+ * @else
+ * @return An error code that is always #MCUXCLELS_STATUS_OK
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GetHwConfig)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetHwConfig(
+ mcuxClEls_HwConfig_t * result
+ );
+#endif /* MCUXCL_FEATURE_ELS_HWCONFIG */
+
+/**
+ * @brief Determines the current state of the ELS.
+ *
+ * @param[out] result Pointer which will be filled with the ELS status information
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code is always #MCUXCLELS_STATUS_OK
+ * @else
+ * @return An error code that is always #MCUXCLELS_STATUS_OK
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GetHwState)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetHwState(
+ mcuxClEls_HwState_t * result
+ );
+
+/**
+ * @brief Enables the ELS.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code is always #MCUXCLELS_STATUS_OK_WAIT
+ * @else
+ * @return An error code that is always #MCUXCLELS_STATUS_OK_WAIT
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Enable_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Enable_Async(
+ void
+ );
+
+/**
+ * @brief Perform a synchronous reset of the ELS.
+ *
+ * This means that:
+ * - any running ELS command will be stopped,
+ * - all errors will be cleared,
+ * - all keys will be deleted,
+ * - any RNG entropy will be discarded,
+ * - the glitch detector will be reset and
+ * - the run-time fingerprint will be restored to its default value.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] options A value indicating whether any running ELS operations shall be canceled
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ *
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the reset
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Reset_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Reset_Async(
+ mcuxClEls_ResetOption_t options
+ );
+
+/**
+ * @brief Disable the ELS.
+ *
+ * This is useful as a power saving mechanism.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code is always #MCUXCLELS_STATUS_OK
+ * @else
+ * @return An error code that is always #MCUXCLELS_STATUS_OK
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Disable)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Disable(
+ void
+);
+
+/**
+ * @brief Set interrupt enable flags.
+ *
+ * @param[in] options The command options, determining which interrupts should be enabled or disabled. For more information, see #mcuxClEls_InterruptOptionEn_t.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code is always #MCUXCLELS_STATUS_OK
+ * @else
+ * @return An error code that is always #MCUXCLELS_STATUS_OK
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_SetIntEnableFlags)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_SetIntEnableFlags(
+ mcuxClEls_InterruptOptionEn_t options
+ );
+
+/**
+ * @brief Get interrupt enable flags.
+ *
+ * @param[out] result Pointer which is filled with the configuration of the interrupts enable register.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code is always #MCUXCLELS_STATUS_OK
+ * @else
+ * @return An error code that is always #MCUXCLELS_STATUS_OK
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GetIntEnableFlags)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetIntEnableFlags(
+ mcuxClEls_InterruptOptionEn_t * result
+ );
+
+/**
+ * @brief Clear the interrupt status register.
+ *
+ * @param[in] options The command options, determining which interrupt status bits should be cleared. For more information, see #mcuxClEls_InterruptOptionRst_t.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code is always #MCUXCLELS_STATUS_OK
+ * @else
+ * @return An error code that is always #MCUXCLELS_STATUS_OK
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_ResetIntFlags)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_ResetIntFlags(
+ mcuxClEls_InterruptOptionRst_t options
+ );
+
+/**
+ * @brief Set the interrupt status register, for debug and testing purposes.
+ *
+ * @param[in] options The command options, determining which interrupt status bits should be set. For more information, see #mcuxClEls_InterruptOptionSet_t.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code is always #MCUXCLELS_STATUS_OK
+ * @else
+ * @return An error code that is always #MCUXCLELS_STATUS_OK
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_SetIntFlags)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_SetIntFlags(
+ mcuxClEls_InterruptOptionSet_t options
+ );
+
+/**
+ * @brief Wait for an ELS operation and optionally clear the error status.
+ *
+ * If an ELS operation is active, this function waits for completion of that operation. For this, the
+ * busy flag of ELS is polled. Additionally, this function checks and returns any applicable error indication.
+ * If no operation is active, the function returns immediately.
+ *
+ * @param[in] errorHandling Define if error flags shall be cleared.
+ *
+ * @retval #MCUXCLELS_STATUS_OK if the last operation was successful, or no operation was active
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_WaitForOperation)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_WaitForOperation(
+ mcuxClEls_ErrorHandling_t errorHandling
+ );
+
+/**
+ * @brief Await the completion of an ELS operation for a limited amount of time and optionally clear the error status.
+ *
+ * If an ELS operation is active, this function waits for completion of that operation until a counter expires.
+ * For this, the busy flag of ELS is polled. The counting mechanism behaves like a simple for-loop from
+ * @p counterLimit to one. This counter does not have a well-defined relationship to real-world time.
+ * Additionally, this function checks and returns any applicable error indication.
+ * If no operation is active, the function returns immediately.
+ *
+ * @param[in] counterLimit The limit of the wait counter.
+ * @param[in] errorHandling Define if error flags shall be cleared.
+ *
+ * @retval #MCUXCLELS_STATUS_OK if the last operation was successful, or no operation was active
+ * @retval #MCUXCLELS_STATUS_SW_COUNTER_EXPIRED if the counter expired while waiting for the operation to complete
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_LimitedWaitForOperation)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_LimitedWaitForOperation(
+ uint32_t counterLimit,
+ mcuxClEls_ErrorHandling_t errorHandling
+ );
+
+/**
+ * @brief Resets all error flags that have been set by a previous operation.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code is always #MCUXCLELS_STATUS_OK
+ * @else
+ * @return An error code that is always #MCUXCLELS_STATUS_OK
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_ResetErrorFlags)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_ResetErrorFlags(
+ void);
+
+/**
+ * @brief Get the last ELS error code and optionally clear the error status.
+ *
+ * @param[in] errorHandling Define if error flags shall be cleared.
+ *
+ * @retval #MCUXCLELS_STATUS_OK if the last operation was successful or no operation was active
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GetErrorCode)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetErrorCode(
+ mcuxClEls_ErrorHandling_t errorHandling
+ );
+
+/**
+ * @brief Get the last ELS error code and level and optionally clear the error status.
+ *
+ * @param[in] errorHandling Define if error flags shall be cleared.
+ * @param[out] errorLevel Pointer to the location that will receive the value of the error level.
+ *
+ * @retval #MCUXCLELS_STATUS_OK if the last operation was successful or no operation was active
+ * @retval #MCUXCLELS_STATUS_ if the last operation resulted in an error
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GetErrorLevel)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetErrorLevel(
+ mcuxClEls_ErrorHandling_t errorHandling,
+ uint32_t *errorLevel
+ );
+
+/**
+ * @brief Set the random start delay for AES based operations. This impacts mcuxClEls_Aead_*, mcuxClEls_Cipher_*, mcuxClEls_Cmac_*, ncpClEls_Ckdf_*, mcuxClEls_KeyImport_Async, mcuxClEls_KeyExport_Async
+ *
+ * @param[in] startDelay Define the max random start delay. Acceptable values are a power of 2 minus one, starting from 0 to 1023 (0, 1, 3, 7, ..., 1023).
+ *
+ * @retval #MCUXCLELS_STATUS_OK if the operation was successful
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_SetRandomStartDelay)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_SetRandomStartDelay(
+ uint32_t startDelay
+ );
+
+/**
+ * @brief Get the random start delay for AES based operations.
+ *
+ * @param[out] startDelay Pointer to store random start delay configuration.
+ *
+ * @retval #MCUXCLELS_STATUS_OK if the operation was successful
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GetRandomStartDelay)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetRandomStartDelay(
+ uint32_t * startDelay
+ );
+
+#ifdef MCUXCL_FEATURE_ELS_LOCKING
+/**
+ * @brief Lock ELS to a session
+ *
+ * This operation locks the ELS, when the lock is obtained a nonzero value will be stored in @p sessionId, and the PPROT and bus Master ID
+ * of the locking command will be recorded. Subsequent unlocking can only be done by one of the following:
+ * 1. ELS reset
+ * 2. Normal unlock: calling #mcuxClEls_ReleaseLock with the correct @p sessionId, from the same bus Master ID and using the same PPROT settings.
+ * 3. Privileged unlock: calling #mcuxClEls_ReleaseLock with any value of @p sessionId, from the bus Master ID set with the #mcuxClEls_SetMasterUnlock
+ * command and PPROT settings 'secure privileged'.
+ * While ELS is locked read access is only permitted to ELS_STATUS and ELS_SESSION_ID and writes are only permitted to ELS_RESET, except for accesses that
+ * have the same bus Master ID and PPROT settings.
+ *
+ * @param[out] pSessionId The session identifier assigned to the lock, it is required to unlock the session, it will be zero when a lock could not be obtained.
+ *
+ * @retval #MCUXCLELS_STATUS_OK if the operation was successful
+ * @retval #MCUXCLELS_STATUS_SW_LOCKING_FAILED if the operation was not successful
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GetLock)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetLock(
+ uint32_t * pSessionId
+ );
+
+/**
+ * @brief Release ELS lock for the session
+ *
+ * This operation unlocks the ELS when following conditions are met:
+ * 1. Normal unlock: providing the correct @p sessionId, from the same bus Master ID and using the same PPROT settings.
+ * 2. Privileged unlock: providing any value of @p sessionId, from the bus Master ID set with the #mcuxClEls_SetMasterUnlock command
+ * and PPROT settings 'secure privileged'.
+ * Invalid attempts to unlock ELS will result in a bus error.
+ *
+ * @param[in] sessionId The session identifier obtained while locking ELS
+ *
+ * @retval #MCUXCLELS_STATUS_OK if the operation was successful
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_ReleaseLock)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_ReleaseLock(
+ uint32_t sessionId
+ );
+
+/**
+ * @brief Check if ELS is locked
+ *
+ * This operation returns the locking status of ELS.
+ *
+ * @retval #MCUXCLELS_STATUS_OK if the operation was successful and ELS is not locked
+ * @retval #MCUXCLELS_STATUS_SW_STATUS_LOCKED if the operation was successful and ELS is locked
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_IsLocked)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_IsLocked(void);
+
+/**
+ * @brief Set the bus master ID that can unlock ELS
+ *
+ * This operation sets the bus master ID of the master that can override ELS lock. This command can only be executed once after reset.
+ * Invalid attempts to set the bus master ID will result in a bus error.
+ *
+ * @param[in] masterId The bus master identifier that can override the ELS lock. Special value #MCUXCLELS_MASTER_UNLOCK_ANY allows any bus master identifier to override the ELS lock.
+ *
+ * @retval #MCUXCLELS_STATUS_OK if the operation was successful
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_SetMasterUnlock)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_SetMasterUnlock(
+ uint32_t masterId
+ );
+
+#endif /* MCUXCL_FEATURE_ELS_LOCKING */
+
+
+#ifdef MCUXCL_FEATURE_ELS_DMA_ADDRESS_READBACK
+/**
+ * @brief Reads back the last address processed by the ELS DMA (security feature)
+ *
+ * @param[out] pLastAddress Pointer to the last address read/written by the ELS DMA
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code is always #MCUXCLELS_STATUS_OK
+ * @else
+ * @return An error code that is always #MCUXCLELS_STATUS_OK
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GetLastDmaAddress)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetLastDmaAddress(
+ uint32_t* pLastAddress
+ );
+#endif /* MCUXCL_FEATURE_ELS_DMA_ADDRESS_READBACK */
+
+#ifdef MCUXCL_FEATURE_ELS_DMA_FINAL_ADDRESS_READBACK
+/**
+ * @brief Compares the last address processed by the ELS DMA with the expected final address of the output buffer given to the last ELS command (security feature).
+ * The given address @p outputStartAddress and expected length @p expectedLength determine the expected final address.
+ * This function can be used to verify that the final DMA transfer of an ELS command has completed as expected.
+ *
+ * @param[in] outputStartAddress Pointer to the output buffer of the last ELS operation
+ * @param[in] expectedLength Expected length of the output buffer of the last ELS operation
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ *
+ * @retval #MCUXCLELS_STATUS_SW_COMPARISON_FAILED if the comparison between the expected final address and the actual final address processed by ELS fails
+ * @retval #MCUXCLELS_STATUS_OK_WAIT if the comparison was successful
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_CompareDmaFinalOutputAddress)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_CompareDmaFinalOutputAddress(
+ uint8_t *outputStartAddress,
+ size_t expectedLength
+ );
+#endif /* MCUXCL_FEATURE_ELS_DMA_FINAL_ADDRESS_READBACK */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLELS_COMMON_H_ */
+
+/**
+ * @}
+ *
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Crc.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Crc.h
new file mode 100644
index 00000000..5b719970
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Crc.h
@@ -0,0 +1,637 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2021-2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/**
+ * @file mcuxClEls_Crc.h
+ * @brief ELS header for Command CRC functionality.
+ *
+ * This header exposes functions that support the usage of the Command CRC feature for ELS.
+ */
+/**
+ * @defgroup mcuxClEls_Crc mcuxClEls_Crc
+ * @brief This part of the @ref mcuxClEls driver defines the Command CRC functionality
+ * @ingroup mcuxClEls
+ * @{
+ */
+#ifndef MCUXCLELS_CRC_H_
+#define MCUXCLELS_CRC_H_
+
+#include // Exported features flags header
+#include // Common types
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * CONSTANTS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Crc_Macros mcuxClEls_Crc_Macros
+ * @brief Defines all macros of @ref mcuxClEls_Crc
+ * @ingroup mcuxClEls_Crc
+ * @{
+ */
+
+/**
+ * @defgroup MCUXCLELS_CMD_CRC_ MCUXCLELS_CMD_CRC_
+ * @brief Constants for ELS Command CRC
+ * @ingroup mcuxClEls_Crc_Macros
+ * @{ */
+#define MCUXCLELS_CMD_CRC_VALUE_RESET ((uint32_t) 0x1u) ///< Reset the Command CRC to initial value
+#define MCUXCLELS_CMD_CRC_VALUE_ENABLE ((uint32_t) 0x2u) ///< Enable update of Command CRC value by executing commands
+#define MCUXCLELS_CMD_CRC_VALUE_DISABLE ((uint32_t) 0x0u) ///< Disable update of Command CRC value by executing commands
+
+#define MCUXCLELS_CMD_CRC_RESET ((uint32_t) 0x1u) ///< Reset the Command CRC to initial value
+#define MCUXCLELS_CMD_CRC_ENABLE ((uint32_t) 0x1u) ///< Enable update of Command CRC value by executing commands
+#define MCUXCLELS_CMD_CRC_DISABLE ((uint32_t) 0x0u) ///< Disable update of Command CRC value by executing commands
+
+#define MCUXCLELS_CMD_CRC_POLYNOMIAL ((uint32_t) 0x04C11DB7u) ///< CRC polynomial for the Command CRC
+#define MCUXCLELS_CMD_CRC_INITIAL_VALUE ((uint32_t) 0xA5A5A5A5u) ///< Initial value for the Command CRC
+/** @} */
+
+/**
+ * @defgroup MCUXCLELS_CMD_CRC_REFERENCE_ MCUXCLELS_CMD_CRC_REFERENCE_
+ * @brief Macros for reference ELS Command CRC
+ * @ingroup mcuxClEls_Crc_Macros
+ * @{
+ */
+
+/**
+ * @brief Initializes a reference CRC variable with the command CRC initial value.
+ * The new variable has the given name.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_INIT(crc) \
+ uint32_t (crc) = MCUXCLELS_CMD_CRC_INITIAL_VALUE
+
+/**
+ * @brief Resets the given reference CRC variable to the command CRC initial value.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_RESET(crc) \
+ (crc) = MCUXCLELS_CMD_CRC_INITIAL_VALUE
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Aead_Init_Async.
+ */
+#ifndef MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_INIT(crc, options) \
+ ({ \
+ (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_INIT; \
+ (options).bits.lastinit = MCUXCLELS_AEAD_LASTINIT_TRUE; \
+ (options).bits.acpsie = MCUXCLELS_AEAD_STATE_IN_DISABLE; \
+ (options).bits.acpsoe = MCUXCLELS_AEAD_STATE_OUT_ENABLE; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+#else
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_INIT(crc, options) \
+ ({ \
+ (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_INIT; \
+ (options).bits.lastinit = MCUXCLELS_AEAD_LASTINIT_TRUE; \
+ (options).bits.acpsie = MCUXCLELS_AEAD_STATE_IN_DISABLE; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+#endif /* MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS */
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Aead_PartialInit_Async.
+ */
+#ifndef MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_PARTIALINIT(crc, options) \
+ ({ \
+ (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_INIT; \
+ (options).bits.acpsoe = MCUXCLELS_AEAD_STATE_OUT_ENABLE; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+#else
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_PARTIALINIT(crc, options) \
+ ({ \
+ (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_INIT; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+#endif /* MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS */
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Aead_UpdateAad_Async.
+ */
+#ifndef MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_UPDATEAAD(crc, options) \
+ ({ \
+ (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_AADPROC \
+ (options).bits.acpsie = MCUXCLELS_AEAD_STATE_IN_ENABLE; \
+ (options).bits.acpsoe = MCUXCLELS_AEAD_STATE_OUT_ENABLE; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+#else
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_UPDATEAAD(crc, options) \
+ ({ \
+ (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_AADPROC; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+#endif /* MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS */
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Aead_UpdateData_Async.
+ */
+#ifndef MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_UPDATEDATA(crc, options) \
+ ({ \
+ (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_MSGPROC \
+ (options).bits.acpsie = MCUXCLELS_AEAD_STATE_IN_ENABLE; \
+ (options).bits.acpsoe = MCUXCLELS_AEAD_STATE_OUT_ENABLE; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+#else
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_UPDATEDATA(crc, options) \
+ ({ \
+ (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_MSGPROC; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+#endif /* MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS */
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Aead_Finalize_Async.
+ */
+#ifndef MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_FINALIZE(crc, options) \
+ ({ \
+ (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_FINAL \
+ (options).bits.acpsie = MCUXCLELS_AEAD_STATE_IN_ENABLE; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+#else
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_FINALIZE(crc, options) \
+ ({ \
+ (options).bits.acpmod = MCUXCLELS_AEAD_ACPMOD_FINAL; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+#endif /* MCUXCL_FEATURE_ELS_NO_INTERNAL_STATE_FLAGS */
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Cipher_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_CIPHER(crc, options) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_CIPHER, (options).word.value, &(crc))
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Cmac_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_CMAC(crc, options) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_CMAC, (options).word.value, &(crc))
+
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_EccKeyGen_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCKEYGEN(crc, options) \
+ ({ \
+ (options).bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_KEYGEN, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_EccKeyExchange_Async.
+ */
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL_BIT
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCKEYEXCHANGE(crc) \
+ ({ \
+ mcuxClEls_EccKeyExchOption_t options = {0u}; \
+ options.bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
+ options.bits.extkey = MCUXCLELS_ECC_EXTKEY_EXTERNAL; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_ECKXH, options.word.value, &(crc)); \
+ (retVal); \
+ })
+#else
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCKEYEXCHANGE(crc) \
+ ({ \
+ mcuxClEls_EccKeyExchOption_t options = {0u}; \
+ options.bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_ECKXH, options.word.value, &(crc)); \
+ (retVal); \
+ })
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL_BIT */
+
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_EccKeyExchangeInt_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCKEYEXCHANGEINT(crc) \
+ ({ \
+ mcuxClEls_EccKeyExchOption_t options = {0u}; \
+ options.bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
+ options.bits.extkey = MCUXCLELS_ECC_EXTKEY_INTERNAL; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_ECKXH, options.word.value, &(crc)); \
+ (retVal); \
+ })
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_EccSign_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCSIGN(crc, options) \
+ ({ \
+ (options).bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_ECSIGN, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_EccVerify_Async.
+ */
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL_BIT
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCVERFIFY(crc, options) \
+ ({ \
+ (options).bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
+ (options).bits.extkey = MCUXCLELS_ECC_EXTKEY_EXTERNAL; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_ECVFY, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+#else
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCVERFIFY(crc, options) \
+ ({ \
+ (options).bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_ECVFY, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL_BIT */
+
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_EccVerifyInt_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCVERFIFYINT(crc, options) \
+ ({ \
+ (options).bits.revf = MCUXCLELS_ECC_REVERSEFETCH_ENABLE; \
+ (options).bits.extkey = MCUXCLELS_ECC_EXTKEY_INTERNAL; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_ECVFY, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_GlitchDetector_LoadConfig_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_GLITCHDETECTOR_LOADCONFIG(crc) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_GDET_CFG_LOAD, 0u, &(crc))
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_GlitchDetector_Trim_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_GLITCHDETECTOR_TRIM(crc) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_GDET_TRIM, 0u, &(crc))
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Hash_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_HASH(crc, options) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_HASH, (options).word.value, &(crc))
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Hmac_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_HMAC(crc, options) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_HMAC, (options).word.value, &(crc))
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Ckdf_Sp800108_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_CKDF_SP800108(crc) \
+ ({ \
+ mcuxClEls_CkdfOption_t options = {0u}; \
+ options.bits.ckdf_algo = MCUXCLELS_CKDF_ALGO_SP800108; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_CKDF, options.word.value, &(crc)); \
+ (retVal); \
+ })
+
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Hkdf_Rfc5869_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_HKDF_RFC5869(crc, options) \
+ ({ \
+ (options).bits.hkdf_algo = MCUXCLELS_HKDF_ALGO_RFC5869; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_HKDF, (options).word.value, &(crc)); \
+ (retVal); \
+ })
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Hkdf_Sp80056c_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_HKDF_SP80056C(crc) \
+ ({ \
+ mcuxClEls_HkdfOption_t options = {0u}; \
+ options.bits.hkdf_algo = MCUXCLELS_HKDF_ALGO_SP80056C; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_HKDF, options.word.value, &(crc)); \
+ (retVal); \
+ })
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_TlsGenerateMasterKeyFromPreMasterKey_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_TLSGENERATEMASTERKEYFROMPREMASTERKEY(crc) \
+ ({ \
+ mcuxClEls_TlsOption_t options = {0u}; \
+ options.bits.mode = MCUXCLELS_TLS_INIT; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_TLS, options.word.value, &(crc)); \
+ (retVal); \
+ })
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_TlsGenerateSessionKeysFromMasterKey_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_TLSGENERATESESSIONKEYSFROMMASTERKEY(crc) \
+ ({ \
+ mcuxClEls_TlsOption_t options = {0u}; \
+ options.bits.mode = MCUXCLELS_TLS_FINALIZE; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_TLS, options.word.value, &(crc)); \
+ (retVal); \
+ })
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_KeyDelete_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYDELETE(crc) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_KDELETE, 0u, &(crc))
+
+
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_KeyImport_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYIMPORT(crc, options) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_KEYIN, (options).word.value, &(crc))
+
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_KeyImportPuk_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYIMPORTPUK(crc) \
+ ({ \
+ mcuxClEls_KeyImportOption_t options = {0u}; \
+ options.bits.revf = MCUXCLELS_KEYIMPORT_REVERSEFETCH_ENABLE; \
+ options.bits.kfmt = MCUXCLELS_KEYIMPORT_KFMT_PBK; \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_KEYIN, options.word.value, &(crc)); \
+ (retVal); \
+ })
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_KeyExport_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYEXPORT(crc) \
+ ({ \
+ mcuxClEls_Status_t retVal = mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_KEYOUT, 0u, &(crc)); \
+ mcuxClEls_KeyImportOption_t import_options = {0u}; \
+ import_options.bits.kfmt = MCUXCLELS_KEYIMPORT_KFMT_RFC3394; \
+ retVal = MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYDELETE(crc); \
+ retVal = MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYIMPORT(crc, import_options); \
+ (retVal); \
+ })
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Rng_DrbgRequest_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGREQUEST(crc) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_RND_REQ, 0u, &(crc))
+
+#ifdef MCUXCL_FEATURE_ELS_RND_RAW
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Rng_DrbgRequestRaw_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGREQUESTRAW(crc) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_RND_REQ, MCUXCLELS_RNG_RND_REQ_RND_RAW, &(crc))
+#endif /* MCUXCL_FEATURE_ELS_RND_RAW */
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Rng_DrbgTestInstantiate_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTINSTANTIATE(crc) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_DRBG_TEST, MCUXCLELS_RNG_DRBG_TEST_MODE_INSTANTIATE, &(crc))
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Rng_DrbgTestExtract_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTEXTRACT(crc) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_DRBG_TEST, MCUXCLELS_RNG_DRBG_TEST_MODE_EXTRACT, &(crc))
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Rng_DrbgTestAesEcb_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTAESECB(crc) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_DRBG_TEST, MCUXCLELS_RNG_DRBG_TEST_MODE_AES_ECB, &(crc))
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Rng_DrbgTestAesCtr_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTAESCTR(crc) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_DRBG_TEST, MCUXCLELS_RNG_DRBG_TEST_MODE_AES_CTR, &(crc))
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Rng_Dtrng_ConfigLoad_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DTRNG_CONFIGLOAD(crc) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_DTRNG_CFG_LOAD, 0u, &(crc))
+
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Rng_Dtrng_ConfigEvaluate_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DTRNG_CONFIGEVALUATE(crc) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_DTRNG_EVAL, 0u, &(crc))
+
+#ifdef MCUXCL_FEATURE_ELS_PRND_INIT
+/**
+ * @brief Updates given reference command CRC with command @ref mcuxClEls_Prng_Init_Async.
+ */
+#define MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_PRNG_INIT(crc) \
+ mcuxClEls_UpdateRefCRC(MCUXCLELS_CMD_CRC_CMD_ID_RND_REQ, MCUXCLELS_RNG_RND_REQ_PRND_INIT, &(crc))
+#endif /* MCUXCL_FEATURE_ELS_PRND_INIT */
+/**
+ * @}
+ */
+
+/**
+ * @defgroup MCUXCLELS_CMD_CRC_CMD_ID_ MCUXCLELS_CMD_CRC_CMD_ID_
+ * @brief Constants for ELS Command IDs
+ * @ingroup mcuxClEls_Crc_Macros
+ * @{
+ */
+#define MCUXCLELS_CMD_CRC_CMD_ID_CIPHER 0 ///< ELS Command ID for CIPHER command
+#define MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER 1 ///< ELS Command ID for AUTH_CIPHER command
+#define MCUXCLELS_CMD_CRC_CMD_ID_CHAL_RESP_GEN 3 ///< ELS Command ID for CHAL_RESP_GEN command
+#define MCUXCLELS_CMD_CRC_CMD_ID_ECSIGN 4 ///< ELS Command ID for ECSIGN command
+#define MCUXCLELS_CMD_CRC_CMD_ID_ECVFY 5 ///< ELS Command ID for ECVFY command
+#define MCUXCLELS_CMD_CRC_CMD_ID_ECKXH 6 ///< ELS Command ID for ECKXH command
+#define MCUXCLELS_CMD_CRC_CMD_ID_KEYGEN 8 ///< ELS Command ID for KEYGEN command
+#define MCUXCLELS_CMD_CRC_CMD_ID_KEYIN 9 ///< ELS Command ID for KEYIN command
+#define MCUXCLELS_CMD_CRC_CMD_ID_KEYOUT 10 ///< ELS Command ID for KEYOUT command
+#define MCUXCLELS_CMD_CRC_CMD_ID_KDELETE 11 ///< ELS Command ID for KDELETE command
+#define MCUXCLELS_CMD_CRC_CMD_ID_KEYPROV 12 ///< ELS Command ID for KEYPROV command
+#define MCUXCLELS_CMD_CRC_CMD_ID_CKDF 16 ///< ELS Command ID for CKDF command
+#define MCUXCLELS_CMD_CRC_CMD_ID_HKDF 17 ///< ELS Command ID for HKDF command
+#define MCUXCLELS_CMD_CRC_CMD_ID_TLS 18 ///< ELS Command ID for TLS command
+#define MCUXCLELS_CMD_CRC_CMD_ID_HASH 20 ///< ELS Command ID for HASH command
+#define MCUXCLELS_CMD_CRC_CMD_ID_HMAC 21 ///< ELS Command ID for HMAC command
+#define MCUXCLELS_CMD_CRC_CMD_ID_CMAC 22 ///< ELS Command ID for CMAC command
+#define MCUXCLELS_CMD_CRC_CMD_ID_RND_REQ 24 ///< ELS Command ID for RND_REQ command
+#define MCUXCLELS_CMD_CRC_CMD_ID_DRBG_TEST 25 ///< ELS Command ID for DRBG_TEST command
+#define MCUXCLELS_CMD_CRC_CMD_ID_DTRNG_CFG_LOAD 28 ///< ELS Command ID for DTRNG_CFG_LOAD command
+#define MCUXCLELS_CMD_CRC_CMD_ID_DTRNG_EVAL 29 ///< ELS Command ID for DTRNG_EVAL command
+#define MCUXCLELS_CMD_CRC_CMD_ID_GDET_CFG_LOAD 30 ///< ELS Command ID for GDET_CFG_LOAD command
+#define MCUXCLELS_CMD_CRC_CMD_ID_GDET_TRIM 31 ///< ELS Command ID for GDET_TRIM command
+/**
+ * @}
+ *
+ * @}
+ */
+
+/**********************************************
+ * TYPEDEFS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Crc_Types mcuxClEls_Crc_Types
+ * @brief Defines all types of @ref mcuxClEls_Crc
+ * @ingroup mcuxClEls_Crc
+ * @{
+ */
+
+/**
+ * @brief Type to control ELS Command CRC
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word
+ } word;
+ struct
+ {
+ uint32_t reset :1; ///< Reset the Command CRC to initial value, set by #MCUXCLELS_CMD_CRC_RESET
+ uint32_t enable :1; ///< Enable/Disable update of Command CRC value by executing commands, set with #MCUXCLELS_CMD_CRC_ENABLE / #MCUXCLELS_CMD_CRC_DISABLE
+ uint32_t : 30; ///< RFU
+ } bits; ///< Access #mcuxClEls_CommandCrcConfig_t bit-wise
+} mcuxClEls_CommandCrcConfig_t;
+
+/**
+ * @}
+ */
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Crc_Functions mcuxClEls_Crc_Functions
+ * @brief Defines all functions of @ref mcuxClEls_Crc
+ * @ingroup mcuxClEls_Crc
+ * @{
+ */
+
+/**
+ * @brief Set command CRC flags.
+ *
+ * @param[in] options The command CRC options. For more information, see #mcuxClEls_CommandCrcConfig_t.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code is always #MCUXCLELS_STATUS_OK
+ * @else
+ * @return An error code that is always #MCUXCLELS_STATUS_OK
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_ConfigureCommandCRC)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_ConfigureCommandCRC(
+ mcuxClEls_CommandCrcConfig_t options
+ );
+
+/**
+ * @brief Get the current command CRC value.
+ *
+ * @param[out] commandCrc The command CRC value.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection).
+ * @retval MCUXCLELS_STATUS_OK Operation successful
+ * @retval MCUXCLELS_STATUS_SW_INVALID_PARAM Parameter commandCRC points to NULL
+ * @else
+ * @return An error code
+ * @retval MCUXCLELS_STATUS_OK Operation successful
+ * @retval MCUXCLELS_STATUS_SW_INVALID_PARAM Parameter commandCRC points to NULL
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GetCommandCRC)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetCommandCRC(
+ uint32_t* commandCrc
+ );
+
+/**
+ * @brief Verifies a reference CRC against the computed ELS command CRC.
+ *
+ * @param[in] refCrc The reference CRC value.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_VerifyVsRefCRC)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_VerifyVsRefCRC(
+ uint32_t refCrc
+ );
+
+/**
+ * @brief Updates a reference CRC with the parameters of an ELS command.
+ * This can be used to verify against the ELS command CRC.
+ *
+ * @param[in] command The ELS command ID.
+ * @param[in] options The command options for the given ELS command.
+ * @param[in,out] refCrc The current reference CRC value to update.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection).
+ * @retval MCUXCLELS_STATUS_OK Operation successful
+ * @retval MCUXCLELS_STATUS_SW_INVALID_PARAM Parameter crc points to NULL
+ * @else
+ * @return An error code
+ * @retval MCUXCLELS_STATUS_OK Operation successful
+ * @retval MCUXCLELS_STATUS_SW_INVALID_PARAM Parameter crc points to NULL
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_UpdateRefCRC)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_UpdateRefCRC(
+ uint8_t command,
+ uint32_t options,
+ uint32_t* refCrc
+ );
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLELS_CRC_H_ */
+
+/**
+ * @}
+ *
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Ecc.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Ecc.h
new file mode 100644
index 00000000..222a6c39
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Ecc.h
@@ -0,0 +1,593 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/**
+ * @file mcuxClEls_Ecc.h
+ * @brief ELS header for elliptic curve cryptography
+ * This header exposes functions that enable using the ELS for elliptic curve cryptography.
+ * All functions operate on the NIST P-256 curve.
+ * The ECC operations supported are:
+ * - ECC key generation
+ * - ECC Diffie-Hellman key exchange
+ * - ECDSA signature generation/verification
+ */
+
+
+#ifndef MCUXCLELS_ECC_H_
+#define MCUXCLELS_ECC_H_
+
+#include // Exported features flags header
+#include // Common types & functionality
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup mcuxClEls_Ecc mcuxClEls_Ecc
+ * @brief This part of the @ref mcuxClEls driver supports functionality for elliptic curve cryptography
+ * @ingroup mcuxClEls
+ * @{
+ */
+
+
+/**********************************************
+ * CONSTANTS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Ecc_Macros mcuxClEls_Ecc_Macros
+ * @brief Defines all macros of @ref mcuxClEls_Ecc
+ * @ingroup mcuxClEls_Ecc
+ * @{
+ */
+
+/**
+ * @defgroup MCUXCLELS_ECC_VALUE_ MCUXCLELS_ECC (Sign and Verify) option word values
+ * @brief Constants for #mcuxClEls_EccSignOption_t and #mcuxClEls_EccVerifyOption_t
+ * @ingroup mcuxClEls_Ecc_Macros
+ * @{
+ */
+#define MCUXCLELS_ECC_VALUE_HASHED ((uint32_t) 0u<< 0u) ///< Set this option at #mcuxClEls_EccSignOption_t.value or #mcuxClEls_EccVerifyOption_t.value to specify input is the hash of the message
+#define MCUXCLELS_ECC_VALUE_NOT_HASHED ((uint32_t) 1u<< 0u) ///< Set this option at #mcuxClEls_EccSignOption_t.value or #mcuxClEls_EccVerifyOption_t.value to specify input is the plain message
+#define MCUXCLELS_ECC_VALUE_RTF ((uint32_t) 1u<< 1u) ///< Set this option at #mcuxClEls_EccSignOption_t.value to include the RTF in the signature, only for #mcuxClEls_EccSignOption_t
+#define MCUXCLELS_ECC_VALUE_NO_RTF ((uint32_t) 0u<< 1u) ///< Set this option at #mcuxClEls_EccSignOption_t.value to not include the RTF in the signature, only for #mcuxClEls_EccSignOption_t
+/**
+ * @}
+ */
+
+/**
+ * @defgroup MCUXCLELS_KEYGEN_VALUE_ MCUXCLELS_KEYGEN option word values
+ * @brief Constants for #mcuxClEls_EccKeyGenOption_t
+ * @ingroup mcuxClEls_Ecc_Macros
+ * @{
+ */
+#define MCUXCLELS_KEYGEN_VALUE_SIGN_PUBLICKEY ((uint32_t) 1u<< 0u) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.value to sign the public key
+#define MCUXCLELS_KEYGEN_VALUE_TYPE_SIGN ((uint32_t) 0u<< 1u) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.value to specify output key will be a signing key usable by #mcuxClEls_EccSign_Async
+#define MCUXCLELS_KEYGEN_VALUE_TYPE_KEYEXCHANGE ((uint32_t) 1u<< 1u) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.value to specify output key will be a Diffie Helman key usable by #mcuxClEls_EccKeyExchange_Async
+#define MCUXCLELS_KEYGEN_VALUE_DETERMINISTIC ((uint32_t) 0u<< 2u) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.value to specify output key is deterministic
+#define MCUXCLELS_KEYGEN_VALUE_RANDOM ((uint32_t) 1u<< 2u) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.value to specify output key is random
+#define MCUXCLELS_KEYGEN_VALUE_GEN_PUB_KEY ((uint32_t) 0u<< 3u) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.value to generate a public key
+#define MCUXCLELS_KEYGEN_VALUE_NO_PUB_KEY ((uint32_t) 1u<< 3u) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.value to not generate a public key
+#define MCUXCLELS_KEYGEN_VALUE_NO_RANDOM_DATA ((uint32_t) 0u<< 5u) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.value to not use random data for signing the public key
+#define MCUXCLELS_KEYGEN_VALUE_USE_RANDOM_DATA ((uint32_t) 1u<< 5u) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.value to use random data for signing the public key
+/**
+ * @}
+ */
+
+/**
+ * @defgroup MCUXCLELS_ECC_VALUE_BITS MCUXCLELS_ECC (Sign and Verify) option bit field values
+ * @brief Bit field constants for #mcuxClEls_EccSignOption_t and #mcuxClEls_EccVerifyOption_t
+ * @ingroup mcuxClEls_Ecc_Macros
+ * @{
+ */
+#define MCUXCLELS_ECC_HASHED ((uint32_t) 0U) ///< Set this option at #mcuxClEls_EccSignOption_t.echashchl or #mcuxClEls_EccVerifyOption_t.echashchl to specify input is the hash of the message
+#define MCUXCLELS_ECC_NOT_HASHED ((uint32_t) 1U) ///< Set this option at #mcuxClEls_EccSignOption_t.echashchl or #mcuxClEls_EccVerifyOption_t.echashchl to specify input is the plain message
+
+#define MCUXCLELS_ECC_RTF ((uint32_t) 1U) ///< Set this option at #mcuxClEls_EccSignOption_t.signrtf to include the RTF in the signature
+#define MCUXCLELS_ECC_NO_RTF ((uint32_t) 0U) ///< Set this option at #mcuxClEls_EccSignOption_t.signrtf to not include the RTF in the signature
+/**
+ * @}
+ */
+
+/**
+ * @defgroup MCUXCLELS_KEYGEN_VALUE_BITS MCUXCLELS_KEYGEN option bit field values
+ * @brief Bit field constants for #mcuxClEls_EccKeyGenOption_t
+ * @ingroup mcuxClEls_Ecc_Macros
+ * @{
+ */
+#define MCUXCLELS_ECC_PUBLICKEY_SIGN_ENABLE (1U) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.kgsign to sign the public key (signature will be concatenated to the output public key)
+#define MCUXCLELS_ECC_PUBLICKEY_SIGN_DISABLE (0U) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.kgsign to not sign the public key
+
+#define MCUXCLELS_ECC_OUTPUTKEY_SIGN (0U) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.kgtypedh to specify output key will be a signing key usable by #mcuxClEls_EccSign_Async
+#define MCUXCLELS_ECC_OUTPUTKEY_KEYEXCHANGE (1U) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.kgtypedh to specify output key will be a Diffie Helman key usable by #mcuxClEls_EccKeyExchange_Async
+
+#define MCUXCLELS_ECC_OUTPUTKEY_DETERMINISTIC (0U) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.kgsrc to specify output key is deterministic
+#define MCUXCLELS_ECC_OUTPUTKEY_RANDOM (1U) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.kgsrc to specify output key is random
+
+#define MCUXCLELS_ECC_GEN_PUBLIC_KEY (0U) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.skip_pbk to generate a public key
+#define MCUXCLELS_ECC_SKIP_PUBLIC_KEY (1U) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.skip_pbk to not generate a public key.
+ ///< If #MCUXCLELS_ECC_OUTPUTKEY_KEYEXCHANGE set, this option will be ignored and a public key will be generated.
+
+#define MCUXCLELS_ECC_NO_RANDOM_DATA (0U) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.kgsign_rnd to not include user provided random data for the signature
+#define MCUXCLELS_ECC_INCLUDE_RANDOM_DATA (1U) ///< Set this option at #mcuxClEls_EccKeyGenOption_t.kgsign_rnd to include user provided random data for the signature.
+ ///< #MCUXCLELS_ECC_PUBLICKEY_SIGN_ENABLE must be set in this case.
+/**
+ * @}
+ */
+
+/**
+ * @defgroup MCUXCLELS_INTERNAL_VALUE_BITS Option bit field values that are needed for internal use only
+ * @brief Internal bit field constants for several option types.
+ * @ingroup mcuxClEls_Ecc_Macros
+ * @{
+ */
+#define MCUXCLELS_ECC_REVERSEFETCH_ENABLE (0x01U) ///< Reverse Fetch enabled. For internal use
+#define MCUXCLELS_ECC_REVERSEFETCH_DISABLE (0x00U) ///< Reverse Fetch disabled. For internal use
+
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL_BIT
+#define MCUXCLELS_ECC_EXTKEY_EXTERNAL (0x01U) ///< Public key is taken from system memory. For internal use
+#define MCUXCLELS_ECC_EXTKEY_INTERNAL (0x00U) ///< Public key is taken from internal keystore. For internal use
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL_BIT */
+/**
+ * @}
+ */
+
+/**
+ * @defgroup MCUXCLELS_ECC_SIZE MCUXCLELS_ECC_SIZE
+ * @brief Defines size of public key and signature in bytes
+ * @ingroup mcuxClEls_Ecc_Macros
+ * @{
+ */
+#define MCUXCLELS_ECC_PUBLICKEY_SIZE ((size_t) 64U) ///< Size of the public key
+#define MCUXCLELS_ECC_SIGNATURE_SIZE ((size_t) 64U) ///< Size of the signature
+#define MCUXCLELS_ECC_SIGNATURE_R_SIZE ((size_t) 32U) ///< Size of the signature part r
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */ /* mcuxClEls_Ecc_Macros */
+
+
+/**********************************************
+ * TYPEDEFS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Ecc_Types mcuxClEls_Ecc_Types
+ * @brief Defines all types of @ref mcuxClEls_Ecc
+ * @ingroup mcuxClEls_Ecc
+ * @{
+ */
+
+/**
+ * @brief Data type for ECC parameters in ELS format
+ * @deprecated All ELS ECC functions now operate on uint8_t. This type will be removed soon.
+ */
+typedef uint8_t mcuxClEls_EccByte_t;
+
+/**
+ * @brief Command option bit field for #mcuxClEls_EccSign_Async
+ * Bit field to configure #mcuxClEls_EccSign_Async. See @ref MCUXCLELS_ECC_VALUE_BITS for possible options.
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Access the bit field as a full word; initialize with a combination of constants from @ref MCUXCLELS_ECC_VALUE_
+ } word; ///< Access #mcuxClEls_EccSignOption_t word-wise
+ struct
+ {
+ uint32_t echashchl :1; ///< Define type of input, plain message or hash of message
+ uint32_t signrtf :1; ///< Define if signing the Run-Time Fingerprint
+ uint32_t :2; ///< RFU
+ uint32_t revf :1; ///< This field is managed internally
+ uint32_t :27; ///< RFU
+ } bits; ///< Access #mcuxClEls_EccSignOption_t bit-wise
+} mcuxClEls_EccSignOption_t;
+
+/**
+ * @brief Command option bit field for #mcuxClEls_EccVerify_Async
+ * Bit field to configure #mcuxClEls_EccVerifyOption_t. See @ref MCUXCLELS_ECC_VALUE_BITS for possible options.
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Access the bit field as a full word; initialize with a combination of constants from @ref MCUXCLELS_ECC_VALUE_
+ } word; ///< Access #mcuxClEls_EccVerifyOption_t word-wise
+ struct
+ {
+ uint32_t echashchl :1; ///< Define type of input, plain message or hash of message
+ uint32_t :3; ///< RFU
+ uint32_t revf :1; ///< This field is managed internally
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL_BIT
+ uint32_t :8; ///< RFU
+ uint32_t extkey :1; ///< This field is managed internally
+ uint32_t :18; ///< RFU
+#else
+ uint32_t :27; ///< RFU
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL_BIT */
+ } bits; ///< Access #mcuxClEls_EccVerifyOption_t bit-wise
+} mcuxClEls_EccVerifyOption_t;
+
+/**
+ * @brief Command option bit field for #mcuxClEls_EccKeyGen_Async
+ * Bit field to configure #mcuxClEls_EccKeyGenOption_t. See @ref MCUXCLELS_KEYGEN_VALUE_BITS for possible options.
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word; initialize with a combination of constants from @ref MCUXCLELS_KEYGEN_VALUE_
+ } word; ///< Access #mcuxClEls_EccKeyGenOption_t word-wise
+ struct
+ {
+ uint32_t kgsign :1; ///< Define if signing the output public key
+ uint32_t kgtypedh :1; ///< Define the usage of the output key
+ uint32_t kgsrc :1; ///< Define if the output key is deterministic or random
+ uint32_t skip_pbk :1; ///< Define if generating a public key
+ uint32_t revf :1; ///< This field is managed internally
+ uint32_t kgsign_rnd :1; ///< Define if using user provided random data for the signature.
+ uint32_t :26; ///< RFU
+ } bits; ///< Access #mcuxClEls_EccKeyGenOption_t bit-wise
+} mcuxClEls_EccKeyGenOption_t;
+
+/**
+ * @brief Command option bit field for #mcuxClEls_EccKeyExchange_Async, for internal use only.
+ * Bit field to configure #mcuxClEls_EccKeyExchOption_t.
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word
+ } word; ///< Access #mcuxClEls_EccKeyExchOption_t word-wise
+ struct
+ {
+ uint32_t :4; ///< RFU
+ uint32_t revf :1; ///< This field is managed internally
+ uint32_t :8; ///< RFU
+ uint32_t extkey :1; ///< This field is managed internally
+ uint32_t :18; ///< RFU
+ } bits; ///< Access #mcuxClEls_EccKeyExchOption_t bit-wise
+} mcuxClEls_EccKeyExchOption_t;
+
+/**
+ * @}
+ */ /* mcuxClEls_Ecc_Types */
+
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Ecc_Functions mcuxClEls_Ecc_Functions
+ * @brief Defines all functions of @ref mcuxClEls_Ecc
+ * @ingroup mcuxClEls_Ecc
+ * @{
+ */
+
+/**
+ * @brief Generates an ECC key pair on the NIST P-256 curve.
+ *
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_HIGH. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ * The public key will be stored in the standard ANSI X9.62 byte order (big-endian).
+ *
+ * @param[in] options The command options. For more information, see #mcuxClEls_EccKeyGenOption_t.
+ * @param[in] signingKeyIdx The index of the key to sign the generated public key.
+ * @param[in] privateKeyIdx Output key index.
+ * @param[in] generatedKeyProperties The desired key properties of the generated key.
+ * @param[in] pRandomData Random data provided by the user.
+ * @param[out] pPublicKey Pointer to the memory area which receives the public key and optionally the key signature.
+ *
+ *
@p pPublicKey must be aligned on a 4-byte boundary.
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_EccKeyGen_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_EccKeyGen_Async(
+ mcuxClEls_EccKeyGenOption_t options,
+ mcuxClEls_KeyIndex_t signingKeyIdx,
+ mcuxClEls_KeyIndex_t privateKeyIdx,
+ mcuxClEls_KeyProp_t generatedKeyProperties,
+ uint8_t const * pRandomData,
+ uint8_t * pPublicKey
+ );
+
+/**
+ * @brief Performs a Diffie-Hellman key exchange with an internal ECC private key and an external ECC public key.
+ *
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ * The public key must be stored in the standard ANSI X9.62 byte order (big-endian).
+ *
+ * @param[in] privateKeyIdx The private key index.
+ * @param[in] pPublicKey Pointer to the public key of a third party.
+ * @param[in] sharedSecretIdx The index in the ELS keystore that receives the shared secret that is generated by the ECDH operation.
+ * @param[in] sharedSecretProperties The desired key properties of the shared secret.
+ *
+ *
+ *
Parameter properties
+ *
+ *
@p pPublicKey
+ *
The public key consists of the 256-bit X coordinate and the 256-bit Y coordinate.
+ * The point must lie on the NIST P-256 curve, be encoded in X9.62 format and aligned on a 4-byte boundary.
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_EccKeyExchange_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_EccKeyExchange_Async(
+ mcuxClEls_KeyIndex_t privateKeyIdx,
+ uint8_t const * pPublicKey,
+ mcuxClEls_KeyIndex_t sharedSecretIdx,
+ mcuxClEls_KeyProp_t sharedSecretProperties
+ );
+
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+/**
+ * @brief Performs a Diffie-Hellman key exchange with an internal ECC private key and an internal ECC public key.
+ *
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] privateKeyIdx The private key index.
+ * @param[in] publicKeyIdx The public key index.
+ * @param[in] sharedSecretIdx The index in the ELS keystore that receives the shared secret that is generated by the ECDH operation.
+ * @param[in] sharedSecretProperties The desired key properties of the shared secret.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_EccKeyExchangeInt_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_EccKeyExchangeInt_Async(
+ mcuxClEls_KeyIndex_t privateKeyIdx,
+ mcuxClEls_KeyIndex_t publicKeyIdx,
+ mcuxClEls_KeyIndex_t sharedSecretIdx,
+ mcuxClEls_KeyProp_t sharedSecretProperties
+ );
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+
+/**
+ * @brief Generates an ECDSA signature of a given message.
+ *
+ * The curve is NIST P-256.
+ * The message hash, must be stored in the standard ANSI X9.62 format.
+ * If the message is provided in plain, no prior conversion is necessary.
+ * The signature will be stored in the standard ANSI X9.62 byte order (big-endian).
+ * @if MCUXCL_FEATURE_ELS_SHA_DIRECT
+ * No matter the value of @p options.echashchl, it must be ensured that SHA-Direct mode is disabled when calling this function (see #mcuxClEls_ShaDirect_Disable).
+ * @endif
+ *
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_HIGH. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] options The command options. For more information, see #mcuxClEls_EccSignOption_t.
+ * @param[in] keyIdx The private key index.
+ * @param[in] pInputHash The hash of the message to sign in X9.62 format.
+ * @param[in] pInputMessage The message to sign.
+ * @param[in] inputMessageLength Size of @p pInputMessage in bytes.
+ * @param[out] pOutput Pointer to the memory area which receives the generated signature in X9.62 format. (64 bytes)
+ *
+ *
+ *
Parameter properties
+ *
+ *
@p options.echashchl == #MCUXCLELS_ECC_HASHED
+ *
@p pInputHash is used, and it must be aligned on a 4-byte boundary.
+ * @p pInputMessage is ignored.
+ *
@p options.echashchl == #MCUXCLELS_ECC_NOT_HASHED
+ *
@p pInputHash is ignored.
+ * @p pInputMessage and @p inputMessageLength are used.
+ *
@p pOptput must be aligned on a 4-byte boundary.
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_EccSign_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_EccSign_Async(
+ mcuxClEls_EccSignOption_t options,
+ mcuxClEls_KeyIndex_t keyIdx,
+ uint8_t const * pInputHash,
+ uint8_t const * pInputMessage,
+ size_t inputMessageLength,
+ uint8_t * pOutput
+ );
+
+/**
+ * @brief Verifies an ECDSA signature of a given message.
+ *
+ * The curve is NIST P-256.
+ * The message hash, must be stored in the standard ANSI X9.62 format.
+ * If the message is provided in plain, no prior conversion is necessary.
+ * The signature and public key must be stored in the standard ANSI X9.62 byte order (big-endian).
+ * @if MCUXCL_FEATURE_ELS_SHA_DIRECT
+ * No matter the value of @p options.echashchl, it must be ensured that SHA-Direct mode is disabled when calling this function (see #mcuxClEls_ShaDirect_Disable).
+ * @endif
+ *
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] options The command options. For more information, see #mcuxClEls_EccVerifyOption_t.
+ * @param[in] pInputHash The hash of the signed message in X9.62 format.
+ * @param[in] pInputMessage The message to sign.
+ * @param[in] inputMessageLength Size of @p pInputMessage in bytes.
+ * @param[in] pSignatureAndPubKey Pointer to the memory area which contains the concatenation of the signature and the public key.
+ * @param[out] pOutput Pointer to the memory area which will receive the recalculated value of the R component in case of a successful
+ * signature verification.
+ *
+ *
+ *
Parameter properties
+ *
+ *
@p options.echashchl == #MCUXCLELS_ECC_HASHED
+ *
@p pInputHash is used, and it must be aligned on a 4-byte boundary.
+ * @p pInputMessage is ignored.
+ *
@p options.echashchl == #MCUXCLELS_ECC_NOT_HASHED
+ *
@p pInputHash is ignored.
+ * @p pInputMessage and @p inputMessageLength are used.
+ *
@p pSignatureAndPubKey
+ *
It must be aligned on a 4-byte boundary.
+ * The signature to be verified consists of the 256-bit R component and the 256-bit S component.
+ * The public key is the one for verification. (Uncompressed, X and Y components)
+ * The signature and the public key are in X9.62 format.
+ *
@p pOutput
+ *
It must be aligned on a 4-byte boundary.
+ * The output shall be compared to the first 32 bytes stored at @p pSignatureAndPublicKey.
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_EccVerify_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_EccVerify_Async(
+ mcuxClEls_EccVerifyOption_t options,
+ uint8_t const * pInputHash,
+ uint8_t const * pInputMessage,
+ size_t inputMessageLength,
+ uint8_t const * pSignatureAndPubKey,
+ uint8_t * pOutput
+ );
+
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+/**
+ * @brief Verifies an ECDSA signature of a given message.
+ *
+ * The curve is NIST P-256.
+ * The message hash, must be stored in the standard ANSI X9.62 format.
+ * If the message is provided in plain, no prior conversion is necessary.
+ * The signature must be stored in the standard ANSI X9.62 byte order (big-endian).
+ * @if MCUXCL_FEATURE_ELS_SHA_DIRECT
+ * No matter the value of @p options.echashchl, it must be ensured that SHA-Direct mode is disabled when calling this function (see #mcuxClEls_ShaDirect_Disable).
+ * @endif
+ *
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] options The command options. For more information, see #mcuxClEls_EccVerifyOption_t.
+ * @param[in] publicKeyIdx The public key index.
+ * @param[in] pInputHash The hash of the signed message in X9.62 format.
+ * @param[in] pInputMessage The message to sign.
+ * @param[in] inputMessageLength Size of @p pInputMessage in bytes.
+ * @param[in] pSignature Pointer to the memory area which contains the concatenation of the signature and the public key.
+ * @param[out] pOutput Pointer to the memory area which will receive the recalculated value of the R component in case of a successful
+ * signature verification.
+ *
+ *
+ *
Parameter properties
+ *
+ *
@p options.echashchl == #MCUXCLELS_ECC_HASHED
+ *
@p pInputHash is used, and it must be aligned on a 4-byte boundary.
+ * @p pInputMessage is ignored.
+ *
@p options.echashchl == #MCUXCLELS_ECC_NOT_HASHED
+ *
@p pInputHash is ignored.
+ * @p pInputMessage and @p inputMessageLength are used.
+ *
@p pSignature
+ *
It must be aligned on a 4-byte boundary.
+ * The signature to be verified consists of the 256-bit R component and the 256-bit S component.
+ * The signature is in X9.62 format.
+ *
@p pOutput
+ *
It must be aligned on a 4-byte boundary.
+ * The output shall be compared to the first 32 bytes stored at @p pSignatureAndPublicKey.
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_EccVerifyInt_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_EccVerifyInt_Async(
+ mcuxClEls_EccVerifyOption_t options,
+ mcuxClEls_KeyIndex_t publicKeyIdx,
+ uint8_t const * pInputHash,
+ uint8_t const * pInputMessage,
+ size_t inputMessageLength,
+ uint8_t const * pSignature,
+ uint8_t * pOutput
+ );
+
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+
+/**
+ * @}
+ */ /* mcuxClEls_Ecc_Functions */
+
+/**
+ * @}
+ */ /* mcuxClEls_Ecc */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLELS_ECC_H_ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_GlitchDetector.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_GlitchDetector.h
new file mode 100644
index 00000000..84ce4da2
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_GlitchDetector.h
@@ -0,0 +1,157 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2022 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClEls_GlitchDetector.h
+ * @brief ELS header for controlling the glitch detector.
+ *
+ * This header exposes functions that configure the ELS glitch detector.
+ */
+
+#ifndef MCUXCLELS_GLITCHDETECTOR_H_
+#define MCUXCLELS_GLITCHDETECTOR_H_
+
+#include // Exported features flags header
+#include // Common types & functionality
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup mcuxClEls_GlitchDetector mcuxClEls_GlitchDetector
+ * @brief This part of the @ref mcuxClEls driver supports glitch detector functionality
+ * @ingroup mcuxClEls
+ * @{
+ */
+
+/**********************************************
+ * CONSTANTS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_GlitchDetector_Macros mcuxClEls_GlitchDetector_Macros
+ * @brief Defines all macros of @ref mcuxClEls_GlitchDetector
+ * @ingroup mcuxClEls_GlitchDetector
+ * @{
+ */
+
+#define MCUXCLELS_GLITCHDETECTOR_CFG_SIZE ((size_t) 0x18u) ///< Glitch detector configuration size
+
+#define MCUXCLELS_GLITCHDETECTOR_TRIM_SIZE ((size_t) 0x04u) ///< Glitch detector trim value size
+
+/**
+ * @}
+ */ /* mcuxClEls_GlitchDetector_Macros */
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_GlitchDetector_Functions mcuxClEls_GlitchDetector_Functions
+ * @brief Defines all functions of @ref mcuxClEls_GlitchDetector
+ * @ingroup mcuxClEls_GlitchDetector
+ * @{
+ */
+
+/**
+ * @brief Loads a glitch detector configuration.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] Pointer to the memory area which contains the glitch detector configuration. The size is fixed at #MCUXCLELS_GLITCHDETECTOR_CFG_SIZE bytes.
+ *
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GlitchDetector_LoadConfig_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GlitchDetector_LoadConfig_Async(
+ uint8_t const * pInput
+ );
+
+/**
+ * @brief Calculates optimal ELS glitch detector configuration and writes it to system memory.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[out] Pointer to the memory area which receives the glitch detector trim value. The size is fixed at #MCUXCLELS_GLITCHDETECTOR_TRIM_SIZE bytes.
+ *
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ *
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GlitchDetector_Trim_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GlitchDetector_Trim_Async(
+ uint8_t * pOutput
+ );
+
+/**
+ * @brief Reads the glitch detector's event counter
+ *
+ * This function converts the event counter from Gray code to an unsigned number.
+ *
+ * @param[in] Pointer to the word where the counter value will be stored.
+ *
+ * @retval #MCUXCLELS_STATUS_OK on successful request
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GlitchDetector_GetEventCounter)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GlitchDetector_GetEventCounter(
+ uint8_t * pCount
+ );
+
+/**
+ * @brief Resets the glitch detector's event counter
+ *
+ * @retval #MCUXCLELS_STATUS_OK on successful request
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GlitchDetector_ResetEventCounter)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GlitchDetector_ResetEventCounter( void
+ );
+
+/**
+ * @}
+ */ /* mcuxClEls_GlitchDetector_Functions */
+
+/**
+ * @}
+ */ /* mcuxClEls_GlitchDetector */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLELS_GLITCHDETECTOR_H_ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Hash.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Hash.h
new file mode 100644
index 00000000..808b99b4
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Hash.h
@@ -0,0 +1,351 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/**
+ * @file mcuxClEls_Hash.h
+ * @brief ELS header for hashing.
+ *
+ * This header exposes functions that enable using the ELS for hashing.
+ * There are two modes to hash a message: The asynchronous way as an ELS command, and the SHA-Direct mode which feeds
+ * data to the internal registers of the ELS and is synchronous (blocking).
+ * The SHA-Direct mode is meant to be used when another command should be executed in parallel on the ELS while the
+ * hash operation is still ongoing. For this, use the DMA callback option in #mcuxClEls_Hash_ShaDirect.
+ */
+
+/**
+ * @defgroup mcuxClEls_Hash mcuxClEls_Hash
+ * @brief This part of the @ref mcuxClEls driver supports hashing
+ * @ingroup mcuxClEls
+ * @{
+ */
+
+#ifndef MCUXCLELS_HASH_H_
+#define MCUXCLELS_HASH_H_
+
+#include // Exported features flags header
+#include // Common functionality
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * CONSTANTS
+ **********************************************/
+
+/**
+ * @defgroup mcuxClEls_Hash_Macros mcuxClEls_Hash_Macros
+ * @brief Defines all macros of @ref mcuxClEls_Hash
+ * @ingroup mcuxClEls_Hash
+ * @{
+ */
+
+/**
+ * @defgroup MCUXCLELS_HASH_ MCUXCLELS_HASH_
+ * @brief Defines valid options to be used by #mcuxClEls_HashOption_t
+ * @ingroup mcuxClEls_Hash_Macros
+ * @{
+ */
+
+#define MCUXCLELS_HASH_INIT_ENABLE 1U ///< Set this option at #mcuxClEls_HashOption_t.hashini to initialize the hash
+#define MCUXCLELS_HASH_INIT_DISABLE 0U ///< Set this option at #mcuxClEls_HashOption_t.hashini to continue the hash
+
+#define MCUXCLELS_HASH_LOAD_ENABLE 1U ///< Set this option at #mcuxClEls_HashOption_t.hashld to load the hash state from @p pDigest
+#define MCUXCLELS_HASH_LOAD_DISABLE 0U ///< Set this option at #mcuxClEls_HashOption_t.hashld to not load the hash state
+
+#define MCUXCLELS_HASH_OUTPUT_ENABLE 1U ///< Set this option at #mcuxClEls_HashOption_t.hashoe to output the hash to @p pDigest
+#define MCUXCLELS_HASH_OUTPUT_DISABLE 0U ///< Set this option at #mcuxClEls_HashOption_t.hashoe to not output the hash
+
+#define MCUXCLELS_HASH_RTF_UPDATE_ENABLE 1U ///< Set this option at #mcuxClEls_HashOption_t.rtfupd to update the run-time fingerprint (only supported by #mcuxClEls_Hash_Async)
+#define MCUXCLELS_HASH_RTF_UPDATE_DISABLE 0U ///< Set this option at #mcuxClEls_HashOption_t.rtfupd to not update the run-time fingerprint
+
+#define MCUXCLELS_HASH_RTF_OUTPUT_ENABLE 1U ///< Set this option at #mcuxClEls_HashOption_t.rtfoe to output the run-time fingerprint (only supported by #mcuxClEls_Hash_Async)
+#define MCUXCLELS_HASH_RTF_OUTPUT_DISABLE 0U ///< Set this option at #mcuxClEls_HashOption_t.rtfoe to not output the run-time fingerprint
+
+#define MCUXCLELS_HASH_MODE_SHA_224 1U ///< Set this option at #mcuxClEls_HashOption_t.hashmd to use the hash algorithm SHA-224
+#define MCUXCLELS_HASH_MODE_SHA_256 0U ///< Set this option at #mcuxClEls_HashOption_t.hashmd to use the hash algorithm SHA-256
+#define MCUXCLELS_HASH_MODE_SHA_384 2U ///< Set this option at #mcuxClEls_HashOption_t.hashmd to use the hash algorithm SHA-384
+#define MCUXCLELS_HASH_MODE_SHA_512 3U ///< Set this option at #mcuxClEls_HashOption_t.hashmd to use the hash algorithm SHA-512
+
+
+#define MCUXCLELS_HASH_VALUE_MODE_SHA_224 ((uint32_t) MCUXCLELS_HASH_MODE_SHA_224 << 4) ///< Set this option at #mcuxClEls_HashOption_t.word.value to use the hash algorithm SHA-224
+#define MCUXCLELS_HASH_VALUE_MODE_SHA_256 ((uint32_t) MCUXCLELS_HASH_MODE_SHA_256 << 4) ///< Set this option at #mcuxClEls_HashOption_t.word.value to use the hash algorithm SHA-256
+#define MCUXCLELS_HASH_VALUE_MODE_SHA_384 ((uint32_t) MCUXCLELS_HASH_MODE_SHA_384 << 4) ///< Set this option at #mcuxClEls_HashOption_t.word.value to use the hash algorithm SHA-384
+#define MCUXCLELS_HASH_VALUE_MODE_SHA_512 ((uint32_t) MCUXCLELS_HASH_MODE_SHA_512 << 4) ///< Set this option at #mcuxClEls_HashOption_t.word.value to use the hash algorithm SHA-512
+
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup MCUXCLELS_HASH_BLOCK_SIZE_ MCUXCLELS_HASH_BLOCK_SIZE_
+ * @brief Defines block sizes used by the supported hash algorithms
+ * @ingroup mcuxClEls_Hash_Macros
+ * @{
+ */
+#define MCUXCLELS_HASH_BLOCK_SIZE_SHA_224 64U ///< SHA-224 output size: 512 bit (64 bytes)
+#define MCUXCLELS_HASH_BLOCK_SIZE_SHA_256 64U ///< SHA-256 output size: 512 bit (64 bytes)
+#define MCUXCLELS_HASH_BLOCK_SIZE_SHA_384 128U ///< SHA-384 output size: 1024 bit (128 bytes)
+#define MCUXCLELS_HASH_BLOCK_SIZE_SHA_512 128U ///< SHA-512 output size: 1024 bit (128 bytes)
+/**
+ * @}
+ */
+
+/**
+ * @defgroup MCUXCLELS_HASH_STATE_SIZE_ MCUXCLELS_HASH_STATE_SIZE_
+ * @brief Defines the intermediate state sizes of the supported hash algorithms
+ * @ingroup mcuxClEls_Hash_Macros
+ * @{
+ */
+#define MCUXCLELS_HASH_STATE_SIZE_SHA_224 32U ///< SHA-224 state size: 256 bit (32 bytes)
+#define MCUXCLELS_HASH_STATE_SIZE_SHA_256 32U ///< SHA-256 state size: 256 bit (32 bytes)
+#define MCUXCLELS_HASH_STATE_SIZE_SHA_384 64U ///< SHA-384 state size: 512 bit (64 bytes)
+#define MCUXCLELS_HASH_STATE_SIZE_SHA_512 64U ///< SHA-512 state size: 512 bit (64 bytes)
+/**
+ * @}
+ */
+
+/**
+ * @defgroup MCUXCLELS_HASH_OUTPUT_SIZE_ MCUXCLELS_HASH_OUTPUT_SIZE_
+ * @brief Defines the output sizes of the supported hash algorithms (do not use for allocation)
+ * @ingroup mcuxClEls_Hash_Macros
+ * @{
+ */
+#define MCUXCLELS_HASH_OUTPUT_SIZE_SHA_224 28U ///< SHA-224 output size: 224 bit (28 bytes)
+#define MCUXCLELS_HASH_OUTPUT_SIZE_SHA_256 32U ///< SHA-256 output size: 256 bit (32 bytes)
+#define MCUXCLELS_HASH_OUTPUT_SIZE_SHA_384 48U ///< SHA-384 output size: 384 bit (48 bytes)
+#define MCUXCLELS_HASH_OUTPUT_SIZE_SHA_512 64U ///< SHA-512 output size: 512 bit (64 bytes)
+/**
+ * @}
+ */
+
+/**
+ * @ingroup mcuxClEls_Hash_Macros
+ * @{
+ */
+#define MCUXCLELS_HASH_RTF_OUTPUT_SIZE ((size_t)32U) ///< Size of run-time fingerprint appended to the hash in @p pDigest in bytes, if #MCUXCLELS_HASH_RTF_OUTPUT_ENABLE was specified
+/**
+ * @}
+ *
+ * @}
+ */
+
+/**********************************************
+ * TYPEDEFS
+ **********************************************/
+
+/**
+ * @defgroup mcuxClEls_Hash_Types mcuxClEls_Hash_Types
+ * @brief Defines all types of @ref mcuxClEls_Hash
+ * @ingroup mcuxClEls_Hash
+ * @{
+ */
+
+/**
+ * @brief Command option bit field for #mcuxClEls_Hash_Async and #mcuxClEls_Hash_ShaDirect.
+ *
+ * Bit field to configure #mcuxClEls_Hash_Async and #mcuxClEls_Hash_ShaDirect. See @ref MCUXCLELS_HASH_ for possible options.
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word
+ } word; ///< Access #mcuxClEls_HashOption_t word-wise
+ struct
+ {
+ uint32_t :2; ///< RFU
+ uint32_t hashini :1; ///< Defines if the hash engine shall be initialized
+ uint32_t hashld :1; ///< Defines if the hash engine shall be initialized with an externally provided digest
+ uint32_t hashmd :2; ///< Defines which hash algorithm shall be used
+ uint32_t hashoe :1; ///< Defines if the hash digest shall be moved to the output buffer
+ uint32_t rtfupd :1; ///< RTF (Runtime Fingerprint) Update
+ uint32_t rtfoe :1; ///< RTF (Runtime Fingerprint) Output Enabled
+ uint32_t :23; ///< RFU
+ } bits; ///< Access #mcuxClEls_HashOption_t bit-wise
+} mcuxClEls_HashOption_t;
+
+/**
+ * @}
+ */
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+
+/**
+ * @defgroup mcuxClEls_Hash_Functions mcuxClEls_Hash_Functions
+ * @brief Defines all functions of @ref mcuxClEls_Hash
+ * @ingroup mcuxClEls_Hash
+ * @{
+ */
+
+/**
+ * @brief Computes the hash of a message.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ * @if MCUXCL_FEATURE_ELS_SHA_DIRECT
+ * It must be ensured that SHA-Direct mode is disabled when calling this function (see #mcuxClEls_ShaDirect_Disable).
+ * @endif
+ *
+ * @param[in] options The command options. For more information, see #mcuxClEls_HashOption_t.
+ * @param[in] pInput Padded input data to be hashed
+ * @param[in] inputLength Size of @p pInput in bytes. Since the input is padded, the length must be a multiple of the block size, see @ref MCUXCLELS_HASH_BLOCK_SIZE_.
+ * @param[in, out] pDigest Pointer to the memory area that contains/receives the (intermediate) hash digest, allocated by the caller, see @ref MCUXCLELS_HASH_STATE_SIZE_.
+ *
+ * The properties of some parameters change with respect to selected options.
+ *
+ *
+ *
Parameter properties
+ *
+ *
+ *
@p options.hashini == #MCUXCLELS_HASH_INIT_ENABLE
+ *
@p options.hashld has no effect and shall be #MCUXCLELS_HASH_LOAD_DISABLE. No data is read from @p pDigest.
+ *
+ *
@p options.hashld == #MCUXCLELS_HASH_LOAD_DISABLE
+ *
@p pDigest is not expected to contain an initial state. No data is read from @p pDigest.
When this option is used the current runtime fingerprint (RTF) value will be appended to the output @p pDigest; an additional #MCUXCLELS_HASH_RTF_OUTPUT_SIZE bytes has to be allocated for @p pDigest.
The hash state is written to @p pDigest. The size varies depending on the choice of @p options.hashmd, for more information see @ref MCUXCLELS_HASH_STATE_SIZE_ . In cases where the state size and output size differ - see @ref MCUXCLELS_HASH_OUTPUT_SIZE_ -, the state must be truncated by the caller to obtain the final hash value.
+ *
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Hash_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Hash_Async(
+ mcuxClEls_HashOption_t options,
+ uint8_t const * pInput,
+ size_t inputLength,
+ uint8_t * pDigest
+ );
+
+#ifdef MCUXCL_FEATURE_ELS_SHA_DIRECT
+/**
+ * @brief Enables SHA-direct mode.
+ *
+ * If this mode is enabled, it allows the application processor to access the ELS hash
+ * engine, but at the same time it stops ELS operations from using the hash engine.
+ *
+ * Therefore, in SHA-direct mode, hashing can only be done with #mcuxClEls_Hash_ShaDirect.
+ * When SHA-direct mode is active, ELS operations which internally use the ELS hash engine
+ * will result in an operational error (see #MCUXCLELS_STATUS_HW_OPERATIONAL). To use those
+ * operations, disable SHA-direct mode. Please consult function descriptions to check
+ * whether and under which circumstances they internally use the ELS hash engine.
+ *
+ * ELS operations which do not internally use the ELS hash engine can be performed in
+ * parallel with a SHA-direct hash operation.
+ *
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection)
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK on success
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_ShaDirect_Enable)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_ShaDirect_Enable(
+ void);
+
+/**
+ * @brief Disables SHA-direct mode.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK on success
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_ShaDirect_Disable)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_ShaDirect_Disable(
+ void);
+
+/**
+ * @brief Calculates the hash of a message using SHA-Direct mode.
+ *
+ * SHA-Direct mode must be enabled before calling this function. For more information, see #mcuxClEls_ShaDirect_Enable.
+ *
+ * In order to perform a hash calculation in SHA-Direct mode, the CPU must feed the input data to a register in ELS's SHA core, or configure a DMA to copy the input data to that register. A DMA can be used because feeding input data to the SHA core while the SHA core is busy results in an AHB bus stall, and there is no need to check any further flags before copying further data.
+ * If a DMA shall be used to perform this copy, a callback function must be provided by the caller that will configure and start the DMA.
+ * If no callback function is specified, this function will resort to using the CPU.
+ *
+ * @param[in] options The command options. For more information, see #mcuxClEls_HashOption_t.
+ * @param[in] pInput Padded input data to be hashed.
+ * @param[in] inputLength Size of @p pInput in bytes. Since the input is padded, the length must be a multiple of the block size, see @ref MCUXCLELS_HASH_BLOCK_SIZE_.
+ * @param[in, out] pDigest Pointer to the memory area that contains/receives the (intermediate) hash digest, allocated by the caller, see @ref MCUXCLELS_HASH_STATE_SIZE_.
+ * @param[in] pCallback Callback function to load data into Sha core.
+ * @param[in, out] pCallerData Pointer forwarded by the operation to the callback function.
+ *
+ * The properties of some parameters change with respect to selected options.
+ *
+ *
+ *
Parameter properties
+ *
+ *
+ *
@p options.hashini == #MCUXCLELS_HASH_INIT_ENABLE
+ *
@p options.hashld has no effect and shall be #MCUXCLELS_HASH_LOAD_DISABLE. No data is read from @p pDigest.
+ *
+ *
@p options.hashld == #MCUXCLELS_HASH_LOAD_DISABLE
+ *
@p pDigest is not expected to contain an initial state. No data is read from @p pDigest.
The hash state is written to @p pDigest. The size varies depending on the choice of @p options.hashmd, for more information see @ref MCUXCLELS_HASH_STATE_SIZE_ . In cases where the state size and output size differ - see @ref MCUXCLELS_HASH_OUTPUT_SIZE_ -, the state must be truncated by the caller to obtain the final hash value.
+ *
+ *
@p pCallback != @c NULL
+ *
The callback function referenced by @p pCallback is called. Otherwise, the function uses a default implementation for the copy.
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_SW_FAULT if the callback returned an error
+ * @retval #MCUXCLELS_STATUS_OK on success
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Hash_ShaDirect)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Hash_ShaDirect(
+ mcuxClEls_HashOption_t options,
+ uint8_t const * pInput,
+ size_t inputLength,
+ uint8_t * pDigest,
+ mcuxClEls_TransferToRegisterFunction_t pCallback,
+ void * pCallerData
+ );
+#endif /* MCUXCL_FEATURE_ELS_SHA_DIRECT */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLELS_HASH_H_ */
+
+/**
+ * @}
+ *
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Hmac.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Hmac.h
new file mode 100644
index 00000000..7438ce30
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Hmac.h
@@ -0,0 +1,170 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/**
+ * @file mcuxClEls_Hmac.h
+ * @brief ELS header for HMAC support.
+ *
+ * This header exposes functions that enable using the ELS for the generation of hashed-key message authentication
+ * codes (HMAC).
+ * The supported hash algorithm is SHA2-256.
+ */
+
+/**
+ * @defgroup mcuxClEls_Hmac mcuxClEls_Hmac
+ * @brief This part of the @ref mcuxClEls driver supports functionality for hashed-key message authentication codes.
+ * @ingroup mcuxClEls
+ * @{
+ */
+#ifndef MCUXCLELS_HMAC_H_
+#define MCUXCLELS_HMAC_H_
+
+#include // Exported features flags header
+#include // Common functionality
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * MACROS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Hmac_Macros mcuxClEls_Hmac_Macros
+ * @brief Defines all macros of @ref mcuxClEls_Hmac
+ * @ingroup mcuxClEls_Hmac
+ * @{
+ */
+/**
+ * @defgroup MCUXCLELS_HMAC_EXTERNAL_KEY_ MCUXCLELS_HMAC_EXTERNAL_KEY_
+ * @brief Defines valid options to be used by #mcuxClEls_HmacOption_t
+ * @ingroup mcuxClEls_Hmac_Macros
+ * @{
+ */
+#define MCUXCLELS_HMAC_EXTERNAL_KEY_ENABLE 1U ///< Set #mcuxClEls_HmacOption_t.extkey to this value to use an external key
+#define MCUXCLELS_HMAC_EXTERNAL_KEY_DISABLE 0U ///< Set #mcuxClEls_HmacOption_t.extkey to this value to use a key from the ELS keystore
+/**
+ * @}
+ */
+
+#define MCUXCLELS_HMAC_PADDED_KEY_SIZE ((size_t) 64U) ///< HMAC Key size: 64 bytes
+#define MCUXCLELS_HMAC_OUTPUT_SIZE ((size_t) 32U) ///< HMAC Output size: 32 bytes
+/**
+ * @}
+ */
+
+/**********************************************
+ * TYPEDEFS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Hmac_Types mcuxClEls_Hmac_Types
+ * @brief Defines all types of @ref mcuxClEls_Hmac
+ * @ingroup mcuxClEls_Hmac
+ * @{
+ */
+/**
+ * @brief Command option bit field for #mcuxClEls_Hmac_Async.
+ *
+ * Valid option values can be found under @ref MCUXCLELS_HMAC_EXTERNAL_KEY_.
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word
+ } word; ///< Access #mcuxClEls_CipherOption_t word-wise
+ struct
+ {
+ uint32_t :13; ///< RFU
+ uint32_t extkey :1; ///< Whether an external key should be used
+ uint32_t :18; ///< RFU
+ } bits; ///< Access #mcuxClEls_CipherOption_t word-wise
+} mcuxClEls_HmacOption_t;
+/**
+ * @}
+ */
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Hmac_Functions mcuxClEls_Hmac_Functions
+ * @brief Defines all functions of @ref mcuxClEls_Hmac
+ * @ingroup mcuxClEls_Hmac
+ * @{
+ */
+/**
+ * @brief Performs HMAC with SHA-256.
+ *
+ * @if MCUXCL_FEATURE_ELS_SHA_DIRECT
+ * It must be ensured that SHA-Direct mode is disabled when calling this function (see #mcuxClEls_ShaDirect_Disable).
+ * @endif
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] options The command options. For more information, see #mcuxClEls_HmacOption_t.
+ * @param[in] keyIdx The HMAC key index, if an internal key shall be used
+ * @param[in] pPaddedKey Pointer to a memory location containing the padded HMAC key
+ * @param[in] pInput Pointer to a memory location which contains the data to be authenticated
+ * @param[in] inputLength Size of @p pInput in bytes
+ * @param [out] pOutput The output message authentication code
+ *
+ * The properties of some parameters change with respect to selected options.
+ *
+ *
@p keyIdx is ignored.
+ *
+ * @p pPaddedKey must contain the padded HMAC key, which can mean one of two things depending on the length of the original HMAC key, LkHMAC:
+ *
If LkHMAC ≤ #MCUXCLELS_HMAC_PADDED_KEY_SIZE, @p pPaddedKey must be the HMAC key padded with zero-bytes to fill the required length of #MCUXCLELS_HMAC_PADDED_KEY_SIZE bytes.
+ *
+ *
If LkHMAC > #MCUXCLELS_HMAC_PADDED_KEY_SIZE, @p pPaddedKey must contain the SHA-256 hash of the HMAC key, padded with zero-bytes to fill the required length of #MCUXCLELS_HMAC_PADDED_KEY_SIZE bytes.
@p keyIdx must be a valid key index with the correct usage rights for HMAC.
+ *
+ * @p pPaddedKey is ignored.
+ *
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Hmac_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Hmac_Async(
+ mcuxClEls_HmacOption_t options,
+ mcuxClEls_KeyIndex_t keyIdx,
+ uint8_t const * pPaddedKey,
+ uint8_t const * pInput,
+ size_t inputLength,
+ uint8_t * pOutput
+ );
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLELS_HMAC_H_ */
+/**
+ * @}
+ *
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Kdf.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Kdf.h
new file mode 100644
index 00000000..dcfe6fd6
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Kdf.h
@@ -0,0 +1,338 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/**
+ * @file mcuxClEls_Kdf.h
+ * @brief ELS header for key derivation.
+ *
+ * This header exposes functions that enable using the ELS for various key derivation commands.
+ * The supported key derivation algorithms are CKDF, HKDF, TLS
+ */
+
+
+/**
+ * @defgroup mcuxClEls_Kdf mcuxClEls_Kdf
+ * @brief This part of the @ref mcuxClEls driver supports functionality for key derivation
+ * @ingroup mcuxClEls
+ * @{
+ */
+
+/**
+ * @defgroup mcuxClEls_Kdf_Macros mcuxClEls_Kdf_Macros
+ * @brief Defines all macros of @ref mcuxClEls_Kdf
+ * @ingroup mcuxClEls_Kdf
+ * @{
+ */
+
+#ifndef MCUXCLELS_KDF_H_
+#define MCUXCLELS_KDF_H_
+
+#include // Exported features flags header
+
+
+
+
+
+#include // Common functionality
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * CONSTANTS
+ **********************************************/
+
+/**
+ * @defgroup mcuxClEls_Kdf_Define mcuxClEls_Kdf_Define
+ * @brief constants
+ * @ingroup mcuxClEls_Kdf_Macros
+ * @{
+ */
+
+
+#define MCUXCLELS_CKDF_DERIVATIONDATA_SIZE 12u ///< Size of CKDF SP800-108 derivation data
+#define MCUXCLELS_CKDF_ALGO_SP800108 0x0u ///< Use SP800-108 algorithm
+
+
+
+
+#define MCUXCLELS_HKDF_RFC5869_DERIVATIONDATA_SIZE 32u ///< Size of HKDF derivation data
+#define MCUXCLELS_HKDF_SP80056C_TARGETKEY_SIZE 32u ///< Size of HKDF SP800-56C derived key
+
+#define MCUXCLELS_HKDF_VALUE_RTF_DERIV ((uint32_t) 1u<< 0u) ///< Use RTF as derivation input
+#define MCUXCLELS_HKDF_VALUE_MEMORY_DERIV ((uint32_t) 0u<< 0u) ///< Use derivation input from system memory
+
+#define MCUXCLELS_HKDF_ALGO_RFC5869 0x0u ///< Use RFC5869 algorithm
+#define MCUXCLELS_HKDF_ALGO_SP80056C 0x1u ///< Use SP800-56C algorithm
+
+#define MCUXCLELS_HKDF_RTF_DERIV 1U ///< Use RTF as derivation input
+#define MCUXCLELS_HKDF_SYSTEM_MEMORY_DERIV 0U ///< Use derivation input from system memory
+
+#define MCUXCLELS_TLS_DERIVATIONDATA_SIZE ((size_t) 80u) ///< Size of TLS derivation data
+#define MCUXCLELS_TLS_RANDOM_SIZE ((size_t) 32u) ///< Size of random bytes for TLS
+
+#define MCUXCLELS_TLS_INIT 0u ///< Perform master key generation
+#define MCUXCLELS_TLS_FINALIZE 1u ///< Perform session key generation
+
+/**
+ * @}
+ */ /* mcuxClEls_Kdf_Define */
+
+/**********************************************
+ * TYPEDEFS
+ **********************************************/
+
+/**
+ * @defgroup mcuxClEls_Kdf_Types mcuxClEls_Kdf_Types
+ * @brief Defines all types of @ref mcuxClEls_Kdf
+ * @ingroup mcuxClEls_Kdf
+ * @{
+ */
+
+/** Internal command option bit field for CKDF functions. */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word; initialize with a combination of constants from @ref MCUXCLELS_HKDF_VALUE_
+ } word;
+ struct
+ {
+ uint32_t :12;
+ uint32_t ckdf_algo :2; ///< Defines which algorithm and mode shall be used. This option is set internally and will be ignored:
+ ///< #MCUXCLELS_CKDF_ALGO_SP800108 = Use SP800-108 algorithm
+ uint32_t :18;
+ } bits;
+} mcuxClEls_CkdfOption_t;
+
+/** Command option bit field for #mcuxClEls_Hkdf_Rfc5869_Async. */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word; initialize with a combination of constants from @ref MCUXCLELS_HKDF_VALUE_
+ } word;
+ struct
+ {
+ uint32_t rtfdrvdat :1; ///< #MCUXCLELS_HKDF_SYSTEM_MEMORY_DERIV=use derivation input from system memory, #MCUXCLELS_HKDF_RTF_DERIV=use RTF (runtime fingerprint) as derivation input
+ uint32_t hkdf_algo :1; ///< Defines which algorithm shall be used. This option is set internally and will be ignored:
+ ///< #MCUXCLELS_HKDF_ALGO_RFC5869 = Use RFC5869 algorithm
+ ///< #MCUXCLELS_HKDF_ALGO_SP80056C = Use SP800-56C algorithm
+ uint32_t :30;
+ } bits;
+} mcuxClEls_HkdfOption_t;
+
+/** Internal command option bit field for #mcuxClEls_TlsGenerateMasterKeyFromPreMasterKey_Async, and #mcuxClEls_TlsGenerateMasterKeyFromPreMasterKey_Async. */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word; initialize with a combination of constants from @ref MCUXCLELS_HKDF_VALUE_
+ } word;
+ struct
+ {
+ uint32_t :10;
+ uint32_t mode :1; ///< Defines which phase of the key generation is performed. This option is set internally and will be ignored:
+ ///< #MCUXCLELS_TLS_INIT = Calculate master key from premaster key
+ ///< #MCUXCLELS_TLS_FINALIZE = Calculate session keys from master key
+ uint32_t :21;
+ } bits;
+} mcuxClEls_TlsOption_t;
+
+/**
+ * @}
+ */ /* mcuxClEls_Kdf_Types */
+
+/**
+ * @}
+ */ /* mcuxClEls_Kdf_Macros */
+
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Kdf_Functions mcuxClEls_Kdf_Functions
+ * @brief Defines all functions of @ref mcuxClEls_Kdf
+ * @ingroup mcuxClEls_Kdf
+ * @{
+ */
+
+
+/**
+ * @brief Derives a key using the HKDF (HMAC-based key derivation function) according to RFC5869.
+ * @if MCUXCL_FEATURE_ELS_SHA_DIRECT
+ * It must be ensured that SHA-Direct mode is disabled when calling this function (see #mcuxClEls_ShaDirect_Disable).
+ * @endif
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ * @param[in] options The command options. For more information, see #mcuxClEls_HkdfOption_t.
+ * @param[in] derivationKeyIdx Key index used for derivation. Must be a 256-bit key with HKDF property bit set to 1.
+ * @param[in] targetKeyIdx Key bank number of the derived key. Will be a 256-bit key, the user must ensure there is enough space in the keystore to hold the derived key.
+ * @param[in] targetKeyProperties Requested properties for the derived key. The ksize field will be ignored.
+ * @param[in] pDerivationData The algorithm-specific derivation data, the length is #MCUXCLELS_HKDF_RFC5869_DERIVATIONDATA_SIZE bytes
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ *
+ *
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Hkdf_Rfc5869_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Hkdf_Rfc5869_Async(
+ mcuxClEls_HkdfOption_t options,
+ mcuxClEls_KeyIndex_t derivationKeyIdx,
+ mcuxClEls_KeyIndex_t targetKeyIdx,
+ mcuxClEls_KeyProp_t targetKeyProperties,
+ uint8_t const * pDerivationData
+ );
+
+/** Derives a key using the HKDF (HMAC-based key derivation function) according to SP800-56C one-step approach with Sha2-256.
+ * @if MCUXCL_FEATURE_ELS_SHA_DIRECT
+ * It must be ensured that SHA-Direct mode is disabled when calling this function (see #mcuxClEls_ShaDirect_Disable).
+ * @endif
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] derivationKeyIdx Key index used for derivation. Must be a 256-bit key with HKDF property bit set to 1.
+ * @param[out] pTagetKey Memory area to store the derived key. Will be a 256-bit key, the user must ensure there is enough space in the keystore to hold the derived key.
+ * @param[in] pDerivationData The algorithm-specific derivation data
+ * @param[in] derivationDataLength Length of the derivation data
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ *
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Hkdf_Sp80056c_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Hkdf_Sp80056c_Async(
+ mcuxClEls_KeyIndex_t derivationKeyIdx,
+ uint8_t * pTagetKey,
+ uint8_t const * pDerivationData,
+ size_t derivationDataLength
+ );
+
+
+/** Derives a key using the NIST SP 800-108 CMAC-based Extract-and-Expand Key Derivation Function.
+ *
+ * @if ELS_AES_WITH_SIDE_CHANNEL_PROTECTION
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ * @endif
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] derivationKeyIdx Key index used for derivation
+ * @param[in] targetKeyIdx Key bank number of the derived key
+ * @param[in] targetKeyProperties Requested properties for the derived key. Only set usage bits.
+ * @param[in] pDerivationData The algorithm-specific derivation data, the length is #MCUXCLELS_CKDF_DERIVATIONDATA_SIZE bytes
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Ckdf_Sp800108_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Ckdf_Sp800108_Async(
+ mcuxClEls_KeyIndex_t derivationKeyIdx,
+ mcuxClEls_KeyIndex_t targetKeyIdx,
+ mcuxClEls_KeyProp_t targetKeyProperties,
+ uint8_t const * pDerivationData
+ );
+
+
+
+/** Generates a TLS master key based on a pre-master key and derivation data, according to the TLS 1.2 specification.
+ * The pre-master key is overwritten in this operation.
+ * @if MCUXCL_FEATURE_ELS_SHA_DIRECT
+ * It must be ensured that SHA-Direct mode is disabled when calling this function (see #mcuxClEls_ShaDirect_Disable).
+ * @endif
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] pDerivationData The TLS derivation data, consisting of Label, Client Random and Server Random from the TLS 1.2 specification.
+ * Note: The order is different from #mcuxClEls_TlsGenerateSessionKeysFromMasterKey_Async.
+ * @param[in] keyProperties Desired key properties. Only #mcuxClEls_KeyProp_t::upprot_priv and #mcuxClEls_KeyProp_t::upprot_sec are used, the rest are ignored.
+ * @param[in] keyIdx The index of the TLS pre-master key, which is overwritten with the master key
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_TlsGenerateMasterKeyFromPreMasterKey_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_TlsGenerateMasterKeyFromPreMasterKey_Async(
+ uint8_t const * pDerivationData,
+ mcuxClEls_KeyProp_t keyProperties,
+ mcuxClEls_KeyIndex_t keyIdx
+ );
+
+/** Generates TLS session keys based on a master key and derivation data, according to the TLS 1.2 specification.
+ * The master key and the following five key indices are overwritten in this operation.
+ * The keys are written in the following order:
+ *
+ *
Client Encryption Key
+ *
Client Message Authentication Key
+ *
Server Encryption Key
+ *
Server Message Authentication Key
+ *
+ * @if MCUXCL_FEATURE_ELS_SHA_DIRECT
+ * It must be ensured that SHA-Direct mode is disabled when calling this function (see #mcuxClEls_ShaDirect_Disable).
+ * @endif
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] pDerivationData The TLS derivation data, consisting of Label, Server Random and Client Random from the TLS 1.2 specification.
+ * Note: The order is different from #mcuxClEls_TlsGenerateMasterKeyFromPreMasterKey_Async.
+ * @param[in] keyProperties Desired key properties. Only #mcuxClEls_KeyProp_t::upprot_priv and #mcuxClEls_KeyProp_t::upprot_sec are used, the rest are ignored.
+ * @param[in] keyIdx The index of the TLS master key, which is overwritten with one of the session keys.
+ * There must be three further consecutive unoccupied key indices following this index.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_TlsGenerateSessionKeysFromMasterKey_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_TlsGenerateSessionKeysFromMasterKey_Async(
+ uint8_t const * pDerivationData,
+ mcuxClEls_KeyProp_t keyProperties,
+ mcuxClEls_KeyIndex_t keyIdx
+ );
+
+/**
+ * @}
+ */ /* mcuxClEls_Kdf_Functions */
+
+/**
+ * @}
+ */ /* mcuxClEls_Kdf */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLELS_KDF_H_ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_KeyManagement.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_KeyManagement.h
new file mode 100644
index 00000000..c0898a6b
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_KeyManagement.h
@@ -0,0 +1,332 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/**
+ * @file mcuxClEls_KeyManagement.h
+ * @brief ELS header for key management.
+ *
+ * This header exposes functions that can be used to manage the keystore of ELS.
+ * This includes:
+ * - Importing keys
+ * @if MCUXCL_FEATURE_ELS_KEY_MGMT_EXPORT
+ * - Exporting keys
+ * @endif
+ * @if MCUXCL_FEATURE_ELS_KEY_MGMT_DELETE
+ * - Deleting keys
+ * @endif
+ */
+
+/**
+ * @defgroup mcuxClEls_KeyManagement mcuxClEls_KeyManagement
+ * @brief This part of the @ref mcuxClEls driver supports functionality for keys management
+ * @ingroup mcuxClEls
+ * @{
+ */
+
+#ifndef MCUXCLELS_KEYMANAGEMENT_H_
+#define MCUXCLELS_KEYMANAGEMENT_H_
+
+#include // Exported features flags header
+#include // Common functionality
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * CONSTANTS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_KeyManagement_Macros mcuxClEls_KeyManagement_Macros
+ * @brief Defines all macros of @ref mcuxClEls_KeyManagement
+ * @ingroup mcuxClEls_KeyManagement
+ * @{
+ */
+
+/**
+ * @defgroup MCUXCLELS_KEYIMPORT_VALUE_KFMT_ MCUXCLELS_KEYIMPORT_VALUE_KFMT_
+ * @brief Defines valid options (word value) to be used by #mcuxClEls_KeyImport_Async
+ * @ingroup mcuxClEls_KeyManagement_Macros
+ *
+ * @{
+ */
+
+#define MCUXCLELS_KEYIMPORT_VALUE_KFMT_UDF ((uint32_t) 0u<< 6u) ///< Key format UDF with shares in RTL or memory
+#define MCUXCLELS_KEYIMPORT_VALUE_KFMT_RFC3394 ((uint32_t) 1u<< 6u) ///< Key format RFC3394 with shares in memory
+#define MCUXCLELS_KEYIMPORT_VALUE_KFMT_PUF ((uint32_t) 2u<< 6u) ///< Key from PUF
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+#define MCUXCLELS_KEYIMPORT_VALUE_KFMT_PBK ((uint32_t) 3u<< 6u) ///< Key from Public Key Certificate
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup MCUXCLELS_KEYIMPORT_KFMT_ MCUXCLELS_KEYIMPORT_KFMT_
+ * @brief Defines valid options (bit values) to be used by #mcuxClEls_KeyImport_Async
+ * @ingroup mcuxClEls_KeyManagement_Macros
+ *
+ * @{
+ */
+#define MCUXCLELS_KEYIMPORT_KFMT_UDF (0x00u) ///< Key format UDF with shares in RTL or memory
+#define MCUXCLELS_KEYIMPORT_KFMT_RFC3394 (0x01u) ///< Key format RFC3394 with shares in memory
+#define MCUXCLELS_KEYIMPORT_KFMT_PUF (0x02u) ///< Key from PUF
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+#define MCUXCLELS_KEYIMPORT_KFMT_PBK (0x03u) ///< Key from Public Key Certificate
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+#define MCUXCLELS_KEYIMPORT_REVERSEFETCH_ENABLE (0x01U) ///< Reverse fetch enabled. For internal use
+#define MCUXCLELS_KEYIMPORT_REVERSEFETCH_DISABLE (0x00U) ///< Reverse fetch disabled. For internal use
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+
+#define MCUXCLELS_RFC3394_OVERHEAD ((size_t) 16u) ///< Overhead between RFC3394 blob and key size
+/**
+ * @}
+ */
+
+/**
+ * @defgroup MCUXCLELS_RFC3394_ MCUXCLELS_RFC3394_
+ * @brief Defines specifying the length of RFC3394 containers
+ * @ingroup mcuxClEls_KeyManagement_Macros
+ *
+ * @{
+ */
+#define MCUXCLELS_RFC3394_CONTAINER_SIZE_128 ((size_t) 256u/8u) ///< Size of RFC3394 container for 128 bit key
+#define MCUXCLELS_RFC3394_CONTAINER_SIZE_256 ((size_t) 384u/8u) ///< Size of RFC3394 container for 256 bit key
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+#define MCUXCLELS_RFC3394_CONTAINER_SIZE_P256 ((size_t) 640u/8u) ///< Size of RFC3394 container for P256 bit public key
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**********************************************
+ * TYPEDEFS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_KeyManagement_Types mcuxClEls_KeyManagement_Types
+ * @brief Defines all types of @ref mcuxClEls_KeyManagement
+ * @ingroup mcuxClEls_KeyManagement
+ * @{
+ */
+
+/**
+ * @brief Command option bit field for #mcuxClEls_KeyImport_Async
+ *
+ * Bit field to configure #mcuxClEls_KeyImport_Async.
+ * See @ref MCUXCLELS_KEYIMPORT_KFMT_ for possible options in case the struct is accessed bit-wise.
+ * See @ref MCUXCLELS_KEYIMPORT_VALUE_KFMT_ for possible options in case the struct is accessed word-wise.
+ */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word; initialize with a combination of constants from @ref MCUXCLELS_KEYIMPORT_VALUE_KFMT_
+ } word; ///< Access #mcuxClEls_KeyImportOption_t word-wise
+ struct
+ {
+ uint32_t :4; ///< RFU
+ uint32_t revf :1; ///< This field is managed internally
+ uint32_t :1; ///< RFU
+ uint32_t kfmt :2; ///< Defines the key import format, one of @ref MCUXCLELS_KEYIMPORT_KFMT_
+ uint32_t :24; ///< RFU
+ } bits; ///< Access #mcuxClEls_KeyImportOption_t bit-wise
+} mcuxClEls_KeyImportOption_t;
+
+/**
+ * @}
+ */
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_KeyManagement_Functions mcuxClEls_KeyManagement_Functions
+ * @brief Defines all functions of @ref mcuxClEls_KeyManagement
+ * @ingroup mcuxClEls_KeyManagement
+ * @{
+ */
+
+/**
+ * @brief Deletes a key from keystore at the given index.
+ *
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] keyIdx The index of the key to be deleted
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_SW_FAULT if a failure occurred
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_KeyDelete_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_KeyDelete_Async(
+ mcuxClEls_KeyIndex_t keyIdx
+);
+
+
+
+/** @brief Imports a key from external storage to an internal key register.
+ *
+ * @if ELS_AES_WITH_SIDE_CHANNEL_PROTECTION
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ * @endif
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] options One of @ref MCUXCLELS_KEYIMPORT_KFMT_
+ * @param[in] pImportKey Pointer to the RFC3394 container of the key to be imported
+ * @param[in] importKeyLength Length of the RFC3394 container of the key to be imported
+ * @param[in] wrappingKeyIdx Index of the key wrapping key, if importing RFC3394 format
+ * @param[in] targetKeyIdx The desired key index of the imported key
+ *
+ *
@p targetKeyIdx is ignored. The unpacked key is automatically stored in key slots 0, 1.
+ *
+ *
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_KeyImport_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_KeyImport_Async(
+ mcuxClEls_KeyImportOption_t options,
+ uint8_t const * pImportKey,
+ size_t importKeyLength,
+ mcuxClEls_KeyIndex_t wrappingKeyIdx,
+ mcuxClEls_KeyIndex_t targetKeyIdx
+ );
+
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+/** @brief Imports a public key to an internal key register if the signature verification of the provided public key against
+ * the provided signature is correct.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] pCertificate Pointer to the Certificate structure
+ * @param[in] certificateLength Length of the Certificate structure
+ * @param[in] publicKeyOffset Offset of the Public key to be imported within @p pCertificate
+ * @param[in] pSignature Signed challenge used to authenticate the imported key. Must be word aligned
+ * @param[in] verifyingKeyIdx The key index of the verifying public key
+ * @param[in] keyProperties The desired key properties of the imported key
+ * @param[in] targetKeyIdx The desired key index of the imported key
+ * @param[out] pOutput Pointer to the memory area which will receive the recalculated value of the R component in case of a successful
+ * certificate verification. Must be word aligned
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_KeyImportPuk_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_KeyImportPuk_Async(
+ uint8_t const * pCertificate,
+ size_t certificateLength,
+ size_t publicKeyOffset,
+ uint8_t const * pSignature,
+ mcuxClEls_KeyIndex_t verifyingKeyIdx,
+ mcuxClEls_KeyProp_t keyProperties,
+ mcuxClEls_KeyIndex_t targetKeyIdx,
+ uint8_t * pOutput
+ );
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+
+/** @brief Exports a key from an internal key register to external storage, using a wrapping key.
+ *
+ * @if ELS_AES_WITH_SIDE_CHANNEL_PROTECTION
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ * @endif
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] wrappingKeyIdx The key used for key wrapping
+ * @param[in] exportKeyIdx The key to export
+ * @param[out] pOutput The memory address of the exported key
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_INVALID_PARAM if invalid parameters were specified
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_KeyExport_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_KeyExport_Async(
+ mcuxClEls_KeyIndex_t wrappingKeyIdx, ///< [in] The key used for key wrapping
+ mcuxClEls_KeyIndex_t exportKeyIdx, ///< [in] The key to export
+ uint8_t * pOutput ///< [out] The memory address of the exported key
+ );
+
+/** @brief Exports the properties of the keys stored in the ELS internal keystore
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[in] keyIdx Request key properties of the index defined here
+ * @param[out] pKeyProp Key properties of the index provided
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK on successful request */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_GetKeyProperties)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetKeyProperties(
+ mcuxClEls_KeyIndex_t keyIdx,
+ mcuxClEls_KeyProp_t * pKeyProp
+ );
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLELS_KEYMANAGEMENT_H_ */
+
+/**
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Rng.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Rng.h
new file mode 100644
index 00000000..8bd1dc69
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Rng.h
@@ -0,0 +1,435 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/**
+ * @file mcuxClEls_Rng.h
+ * @brief ELS header for random number generation.
+ * This header exposes functions to configure the ELS RNGs (DRBG and DTRNG) and to generate random data.
+ */
+
+#ifndef MCUXCLELS_RNG_H_
+#define MCUXCLELS_RNG_H_
+
+#include // Exported features flags header
+#include // Common functionality
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup mcuxClEls_Rng mcuxClEls_Rng
+ * @brief This part of the @ref mcuxClEls driver supports functionality for random number generation
+ * @ingroup mcuxClEls
+ * @{
+ */
+
+
+/**********************************************
+ * CONSTANTS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Rng_Macros mcuxClEls_Rng_Macros
+ * @brief Defines all macros of @ref mcuxClEls_Rng
+ * @ingroup mcuxClEls_Rng
+ * @{
+ */
+#define MCUXCLELS_RNG_DTRNG_CONFIG_SIZE ((uint8_t) 84) ///< Size of DTRNG configuration
+#define MCUXCLELS_RNG_DTRNG_EVAL_CONFIG_SIZE ((uint8_t) 52) ///< Size of DTRNG characterization data
+#define MCUXCLELS_RNG_DTRNG_EVAL_RESULT_SIZE ((uint8_t) 188) ///< Size of DTRNG characterization result
+
+#define MCUXCLELS_RNG_DRBG_TEST_EXTRACT_OUTPUT_MIN_SIZE 4U ///< Minimum output size of #mcuxClEls_Rng_DrbgTestExtract_Async
+#define MCUXCLELS_RNG_DRBG_TEST_EXTRACT_OUTPUT_MAX_SIZE ((uint32_t) 1U << 16U) ///< Maximum output size of #mcuxClEls_Rng_DrbgTestExtract_Async
+
+#define MCUXCLELS_RNG_DRBG_TEST_MODE_INSTANTIATE ((uint32_t) 0U) ///< Command options value for DRBG Test Instantiate command. For internal use
+#define MCUXCLELS_RNG_DRBG_TEST_MODE_EXTRACT ((uint32_t) 1U) ///< Command options value for DRBG Test Extract command. For internal use
+#define MCUXCLELS_RNG_DRBG_TEST_MODE_AES_ECB ((uint32_t) 3U) ///< Command options value for DRBG Test AES-ECB command. For internal use
+#define MCUXCLELS_RNG_DRBG_TEST_MODE_AES_CTR ((uint32_t) 2U) ///< Command options value for DRBG Test AES-CTR command. For internal use
+
+#ifdef MCUXCL_FEATURE_ELS_RND_RAW
+#define MCUXCLELS_RNG_RND_REQ_RND_RAW ((uint32_t) 1U << 1) ///< Command options value for RND_REQ command. For internal use
+#define MCUXCLELS_RNG_RAW_ENTROPY_SIZE ((uint32_t) 32U) ///< Fixed size of raw entropy when using the DTRNG
+#endif /* MCUXCL_FEATURE_ELS_RND_RAW */
+#ifdef MCUXCL_FEATURE_ELS_PRND_INIT
+#define MCUXCLELS_RNG_RND_REQ_PRND_INIT ((uint32_t) 1U << 0) ///< Command options value for PRND_INIT command. For internal use
+#endif /* MCUXCL_FEATURE_ELS_PRND_INIT */
+/**
+ * @}
+ */
+
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Rng_Functions mcuxClEls_Rng_Functions
+ * @brief Defines all functions of @ref mcuxClEls_Rng
+ * @ingroup mcuxClEls_Rng
+ * @{
+ */
+
+/**
+ * @brief Writes random data from the ELS DRBG to the given buffer.
+ *
+ * This function fills a buffer with random values from the DRBG. The DRBG provides 128 bits of security strength.
+ *
+ * Before execution, ELS will wait until #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_HIGH. This can lead to a delay if the DRBG is in a state with less security strength at the time of the call.
+ *
+ * If the random values from the DRBG are later used as a cryptographic key, the security strength of the cryptographic operation using the generated key should not exceed that of the DRBG.
+ *
+ * To name a few examples, this means (as per NIST SP 800-57 Part 1 Rev. 5):
+ * - AES-192 or AES-256 keys generated with this function will provide only 128 bits of security strength
+ * - RSA keys longer than 3072 bits will provide only 128 bits of security strength
+ * - ECC keys longer than 383 bits will provide only 128 bits of security strength
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[out] pOutput Pointer to the beginning of the memory area to fill with random data
+ * @param[in] outputLength Number of requested random bytes
+ *
+ *
+ *
Parameter properties
+ *
+ *
@p outputLength
+ *
supported values are #MCUXCLELS_RNG_DRBG_TEST_EXTRACT_OUTPUT_MIN_SIZE bytes up to
+ * #MCUXCLELS_RNG_DRBG_TEST_EXTRACT_OUTPUT_MAX_SIZE bytes. The size must be a multiple of 4.
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_SW_FAULT in case of an internal error
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Rng_DrbgRequest_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Rng_DrbgRequest_Async(
+ uint8_t * pOutput,
+ size_t outputLength
+ );
+
+#ifdef MCUXCL_FEATURE_ELS_RND_RAW
+/**
+ * @brief Writes 32 bytes of raw random data from the ELS TRNG to the given buffer.
+ *
+ * This function fills a buffer with raw (unprocessed) random values from the TRNG.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @param[out] pOutput Pointer to the beginning of the memory area to fill with random data
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Rng_DrbgRequestRaw_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Rng_DrbgRequestRaw_Async(
+ uint8_t * pOutput
+ );
+#endif /* MCUXCL_FEATURE_ELS_RND_RAW */
+
+/**
+ * @brief Instantiates the DRBG in test mode.
+ *
+ * This function is a support function for FIPS CAVP testing. This function turns the ELS internal DRBG in test mode by loading known entropy from system memory.
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ * Note that this function will alter the ELS internal entropy state which needs to be updated by the TRNG to use the DRBG in normal mode.
+ * The update process is majorly impacted by the time the TRNG needs to provide fresh entropy.
+ *
+ * @param[in] pEntropy Pointer to the input entropy data
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Rng_DrbgTestInstantiate_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Rng_DrbgTestInstantiate_Async(
+ uint8_t const * pEntropy
+ );
+
+/**
+ * @brief Performs a DRBG extraction.
+ *
+ * This function is a support function for FIPS CAVP testing. This function mimics the behavior of #mcuxClEls_Rng_DrbgRequest_Async and fills a buffer with random data when DRBG is in test mode.
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ * Note that this function will alter the ELS internal entropy state which needs to be updated by the TRNG to use the DRBG in normal mode.
+ * The update process is majorly impacted by the time the TRNG needs to provide fresh entropy.
+ *
+ * @attention #mcuxClEls_Rng_DrbgTestInstantiate_Async must be called prior to this function.
+ *
+ * @param[out] pOutput Pointer to the output random number
+ * @param[in] outputLength Length of the random number
+ *
+ *
+ *
Parameter properties
+ *
+ *
@p outputLength
+ *
supported values are #MCUXCLELS_RNG_DRBG_TEST_EXTRACT_OUTPUT_MIN_SIZE bytes up to
+ * #MCUXCLELS_RNG_DRBG_TEST_EXTRACT_OUTPUT_MAX_SIZE bytes. The size must be a multiple of 4.
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref MCUXCLELS_STATUS_ and @ref mcuxCsslFlowProtection)
+ * @else
+ * @return An error code (see @ref MCUXCLELS_STATUS_)
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Rng_DrbgTestExtract_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Rng_DrbgTestExtract_Async(
+ uint8_t * pOutput,
+ size_t outputLength
+ );
+
+/**
+ * @brief Encrypts data using the AES-ECB engine of the DRBG.
+ *
+ * This function is a support function for FIPS CAVP testing. This function performs an AES-ECB encryption on system data to evaluate the encryption engine of the DRBG.
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ * Note that this function will alter the ELS internal entropy state which needs to be updated by the TRNG to use the DRBG in normal mode.
+ * The update process is majorly impacted by the time the TRNG needs to provide fresh entropy.
+ *
+ * @param[in] pDataKey Pointer to the data and key
+ * @param[out] pOutput Pointer to the encrypted output
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Rng_DrbgTestAesEcb_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Rng_DrbgTestAesEcb_Async(
+ uint8_t const * pDataKey,
+ uint8_t * pOutput
+ );
+
+/**
+ * @brief Encrypts data using the AES-CTR engine of the DRBG.
+ *
+
+ * This function is a support function for FIPS CAVP testing. This function performs an AES-CTR encryption on system data to evaluate the encryption engine of the DRBG in test mode.
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ * Note that this function will alter the ELS internal entropy state which needs to be updated by the TRNG to use the DRBG in normal mode.
+ * The update process is majorly impacted by the time the TRNG needs to provide fresh entropy.
+ *
+ * @param[in] pData Pointer to the data to be encrypted
+ * @param[in] dataLength Length of the data to be encrypted
+ * @param[in] pIvKey Pointer to the IV and key
+ * @param[out] pOutput Pointer to the encrypted output
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Rng_DrbgTestAesCtr_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Rng_DrbgTestAesCtr_Async(
+ uint8_t const * pData,
+ size_t dataLength,
+ uint8_t const * pIvKey,
+ uint8_t * pOutput
+ );
+
+/**
+ * @brief Loads a configuration of the ELS DTRNG.
+ *
+ * This function overwrites the default DTRNG configuration in order to optimize or fine tune the DTRNG entropy gathering process.
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ * Note that the TRNG configuration set by this function is non-persistent and any reset of the ELS (e.g. a power-cycle or calling #mcuxClEls_Reset_Async) will resets the DTRNG configuration to its default value.
+ *
+ * @if MCUXCL_FEATURE_ELS_SHA_DIRECT
+ * It must be ensured that SHA-Direct mode is disabled when calling this function (see #mcuxClEls_ShaDirect_Disable).
+ * @endif
+ *
+ * @param[in] pInput The pointer to DTRNG initialization data
+ *
+ *
+ *
Parameter properties
+ *
+ *
@p pInput
+ *
The size is #MCUXCLELS_RNG_DTRNG_CONFIG_SIZE bytes.
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Rng_Dtrng_ConfigLoad_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Rng_Dtrng_ConfigLoad_Async(
+ uint8_t const * pInput
+ );
+
+
+/**
+ * @brief Performs characterization of the ELS DTRNG.
+ *
+ * This function evaluates a DTRNG configuration for device specific characterization. The configuration used for characterization has to be placed in system memory.
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @attention If this function is called once, all other ELS commands except #mcuxClEls_Rng_Dtrng_ConfigEvaluate_Async are blocked until any reset of the ELS (e.g. a power-cycle or calling #mcuxClEls_Reset_Async) is triggered.
+ *
+ * @param[in] pInput The pointer to DTRNG initialization data
+ * @param[out] pOutput The pointer to the evaluation result
+ *
+ *
+ *
Parameter properties
+ *
+ *
@p pInput
+ *
The size is #MCUXCLELS_RNG_DTRNG_EVAL_CONFIG_SIZE bytes.
+ *
@p pOutput
+ *
The size is #MCUXCLELS_RNG_DTRNG_EVAL_RESULT_SIZE bytes.
+ *
+ *
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Rng_Dtrng_ConfigEvaluate_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Rng_Dtrng_ConfigEvaluate_Async(
+ uint8_t const * pInput,
+ uint8_t * pOutput
+ );
+
+#ifdef MCUXCL_FEATURE_ELS_PRND_INIT
+/**
+ * @brief Initializes the ELS PRNG.
+ *
+ * This function initializes the PRNG. After this operation #mcuxClEls_HwState_t.drbgentlvl == #MCUXCLELS_STATUS_DRBGENTLVL_LOW. This can lead to a delay if the DRBG is in a state with lower security strength at the time of the call.
+ *
+ * Call #mcuxClEls_WaitForOperation to complete the operation.
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT if a running operation prevented the request
+ * @retval #MCUXCLELS_STATUS_OK_WAIT on successful request
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Prng_Init_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Prng_Init_Async(void);
+#endif /* MCUXCL_FEATURE_ELS_PRND_INIT */
+
+/**
+ * @brief Returns one random word from the ELS PRNG.
+ *
+ * This function returns one low-quality random CPU word gathered from the PRNG.
+ *
+ * @attention PRNG has to be initialized prior to the first time calling this function.
+ *
+ * @param[out] pWord The pointer to the random word
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_OK on successful request
+ * @retval #MCUXCLELS_STATUS_HW_PRNG in case of insufficient entropy
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Prng_GetRandomWord)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Prng_GetRandomWord(
+ uint32_t * pWord
+ );
+
+/**
+ * @brief Writes random data from the ELS PRNG to the given buffer.
+ *
+ * This function fills a buffer with low-quality random values gathered from the PRNG.
+ *
+ * @attention PRNG has to be initialized prior to the first time calling this function.
+ *
+ * @param[out] pOutput Pointer to the beginning of the memory area to fill with random data from PRNG
+ * @param[in] outputLength Size of @p pOutput in bytes
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_OK on successful request
+ * @retval #MCUXCLELS_STATUS_HW_PRNG in case of insufficient entropy
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Prng_GetRandom)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Prng_GetRandom(
+ uint8_t * pOutput,
+ size_t outputLength
+ );
+
+#ifdef MCUXCL_FEATURE_ELS_ITERATIVE_SEEDING
+/**
+ * @brief This function checks if a DRBG reseeding is needed and if so reseeds the ELS DRBG.
+ *
+ * This function checks if the ELS DRBG needs to be reseeded by the DTRNG, and if so, executes the iterative seeding process.
+ * The function internally disables ELS interrupts before (potentially) running the iterative seeding process and restores
+ * the original ELS interrupt enable flags afterwards, before returning to the caller. This allows to properly use the function
+ * in an ELS interrupt handler to reseed the ELS DRBG when needed.
+ *
+ * @param[in] pDtrngConfig Pointer to the beginning of the memory area which contains the ELS DTRNG config
+ *
+ * @if (MCUXCL_FEATURE_CSSL_FP_USE_SECURE_COUNTER && MCUXCL_FEATURE_CSSL_SC_USE_SW_LOCAL)
+ * @return A code-flow protected error code (see @ref mcuxCsslFlowProtection). The error code can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @else
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ * @endif
+ * @retval #MCUXCLELS_STATUS_OK on successful request
+ * @retval #MCUXCLELS_STATUS_SW_FAULT in case the iterative seeding failed
+ */
+MCUX_CSSL_FP_FUNCTION_DECL(mcuxClEls_Dtrng_IterativeReseeding_CheckAndReseed)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Dtrng_IterativeReseeding_CheckAndReseed(const uint8_t *pDtrngConfig);
+#endif /* MCUXCL_FEATURE_ELS_ITERATIVE_SEEDING */
+
+/**
+ * @}
+ */ /* mcuxClEls_Rng_Functions */
+
+
+/**
+ * @}
+ */ /* mcuxClEls_Rng */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLELS_RNG_H_ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Types.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Types.h
new file mode 100644
index 00000000..ddf80e82
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_Types.h
@@ -0,0 +1,306 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/**
+ * @file mcuxClEls_Types.h
+ * @brief ELS type header.
+ *
+ * This header defines types that are used by other mcuxClEls headers.
+ */
+/**
+ * @defgroup mcuxClEls_Types mcuxClEls_Types
+ * @brief This part of the @ref mcuxClEls driver defines common types
+ * @ingroup mcuxClEls
+ * @{
+ */
+#ifndef MCUXCLELS_TYPES_H_
+#define MCUXCLELS_TYPES_H_
+
+#include
+#include
+#include // Exported features flags header
+#include
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * MACROS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Types_Macros mcuxClEls_Types_Macros
+ * @brief Defines all macros of @ref mcuxClEls_Types
+ * @ingroup mcuxClEls_Types
+ * @{
+ */
+
+#define MCUXCLELS_KEY_SLOTS (20U) ///< Number of key slots in the ELS key store.
+
+/** @defgroup MCUXCLELS_KEYPROPERTY_VALUE_ MCUXCLELS_KEYPROPERTY_VALUE_
+ * @brief Constants for initalizing #mcuxClEls_KeyProp_t.word
+ * @ingroup mcuxClEls_Types_Macros
+ * @{
+ */
+#define MCUXCLELS_KEYPROPERTY_VALUE_KEY_SIZE_128 ((uint32_t) 0u<< 0u) ///< 128-bit key
+#define MCUXCLELS_KEYPROPERTY_VALUE_KEY_SIZE_256 ((uint32_t) 1u<< 0u) ///< 256-bit key
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+#define MCUXCLELS_KEYPROPERTY_VALUE_KEY_SIZE_512 ((uint32_t) 3u<< 0u) ///< 512-bit key
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+#define MCUXCLELS_KEYPROPERTY_VALUE_ACTIVE ((uint32_t) 1u<< 5u) ///< Key is active (loaded)
+#define MCUXCLELS_KEYPROPERTY_VALUE_BASE_SLOT ((uint32_t) 1u<< 6u) ///< First part of multi-slot key
+#define MCUXCLELS_KEYPROPERTY_VALUE_GENERAL_PURPOSE_SLOT ((uint32_t) 1u<< 7u) ///< General purpose key slot
+#define MCUXCLELS_KEYPROPERTY_VALUE_RETENTION_SLOT ((uint32_t) 1u<< 8u) ///< Retention key slot
+#define MCUXCLELS_KEYPROPERTY_VALUE_HW_OUT_SLOT ((uint32_t) 1u<< 9u) ///< Hardware output key slot
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+#define MCUXCLELS_KEYPROPERTY_VALUE_PUK ((uint32_t) 1u<<11u) ///< Trusted Public Key
+#define MCUXCLELS_KEYPROPERTY_VALUE_TECDH ((uint32_t) 1u<<12u) ///< Private key that can only be used in ECDH with Trusted Public Key
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+#define MCUXCLELS_KEYPROPERTY_VALUE_CMAC ((uint32_t) 1u<<13u) ///< CMAC key
+#define MCUXCLELS_KEYPROPERTY_VALUE_KSK ((uint32_t) 1u<<14u) ///< Key signing key
+#define MCUXCLELS_KEYPROPERTY_VALUE_RTF ((uint32_t) 1u<<15u) ///< RTF signing key
+#define MCUXCLELS_KEYPROPERTY_VALUE_CKDF ((uint32_t) 1u<<16u) ///< CKDF signing key
+#define MCUXCLELS_KEYPROPERTY_VALUE_HKDF ((uint32_t) 1u<<17u) ///< HKDF signing key
+#define MCUXCLELS_KEYPROPERTY_VALUE_ECSGN ((uint32_t) 1u<<18u) ///< ECC signing key
+#define MCUXCLELS_KEYPROPERTY_VALUE_ECDH ((uint32_t) 1u<<19u) ///< ECC Diffie Hellman private key
+#define MCUXCLELS_KEYPROPERTY_VALUE_AES ((uint32_t) 1u<<20u) ///< AES key
+#define MCUXCLELS_KEYPROPERTY_VALUE_HMAC ((uint32_t) 1u<<21u) ///< HMAC key
+#define MCUXCLELS_KEYPROPERTY_VALUE_KWK ((uint32_t) 1u<<22u) ///< Key Wrapping Key
+#define MCUXCLELS_KEYPROPERTY_VALUE_KUOK ((uint32_t) 1u<<23u) ///< Key Unwrapping Only Key
+#define MCUXCLELS_KEYPROPERTY_VALUE_TLS_PREMASTER_SECRET ((uint32_t) 1u<<24u) ///< TLS Premaster Secret
+#define MCUXCLELS_KEYPROPERTY_VALUE_TLS_MASTER_SECRET ((uint32_t) 1u<<25u) ///< TLS Master Secret
+#define MCUXCLELS_KEYPROPERTY_VALUE_KGSRC ((uint32_t) 1u<<26u) ///< Can provide key material input for ECC key generation
+#define MCUXCLELS_KEYPROPERTY_VALUE_HW_OUT ((uint32_t) 1u<<27u) ///< A key to be used in a hardware out key slot
+#define MCUXCLELS_KEYPROPERTY_VALUE_WRPOK ((uint32_t) 1u<<28u) ///< The key can be wrapped
+#define MCUXCLELS_KEYPROPERTY_VALUE_DUK ((uint32_t) 1u<<29u) ///< Device Unique Key
+#define MCUXCLELS_KEYPROPERTY_VALUE_PRIVILEGED ((uint32_t) 1u<<30u) ///< Caller must be in privileged mode to use the key
+#define MCUXCLELS_KEYPROPERTY_VALUE_NOTPRIVILEGED ((uint32_t) 0u<<30u) ///< Caller does not have to be in privileged mode to use the key
+#define MCUXCLELS_KEYPROPERTY_VALUE_SECURE ((uint32_t) 0u<<31u) ///< Caller must be in secure mode to use the key
+#define MCUXCLELS_KEYPROPERTY_VALUE_NOTSECURE ((uint32_t) 1u<<31u) ///< Caller does not have to be in secure mode to use the key
+/**
+ * @}
+ */
+
+/** @defgroup MCUXCLELS_KEYPROPERTY_ MCUXCLELS_KEYPROPERTY_
+ * @brief Constants for initalizing #mcuxClEls_KeyProp_t.bits
+ * @ingroup mcuxClEls_Types_Macros
+ * @{
+ */
+#define MCUXCLELS_KEYPROPERTY_KEY_SIZE_128 (0U) ///< This value of #mcuxClEls_KeyProp_t.ksize indicates a 128 bit key
+#define MCUXCLELS_KEYPROPERTY_KEY_SIZE_256 (1U) ///< This value of #mcuxClEls_KeyProp_t.ksize indicates a 256 bit key
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+#define MCUXCLELS_KEYPROPERTY_KEY_SIZE_512 (3U) ///< This value of #mcuxClEls_KeyProp_t.ksize indicates a 512 bit key
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+#define MCUXCLELS_KEYPROPERTY_ACTIVE_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.kactv indicates that the slot contains an active key
+#define MCUXCLELS_KEYPROPERTY_ACTIVE_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.kactv indicates that the slot does not contain active key
+#define MCUXCLELS_KEYPROPERTY_BASE_SLOT (1U) ///< This value of #mcuxClEls_KeyProp_t.kbase indicates that the slot is the base slot of a 2-slot key
+#define MCUXCLELS_KEYPROPERTY_SECOND_SLOT (0U) ///< This value of #mcuxClEls_KeyProp_t.kbase indicates that the slot is the second slot of a 2-slot key
+#define MCUXCLELS_KEYPROPERTY_GENERAL_PURPOSE_SLOT_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.fgp indicates that the slot is a retention key slot or a hardware out key slot
+#define MCUXCLELS_KEYPROPERTY_GENERAL_PURPOSE_SLOT_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.fgp indicates that the slot is a neither retention key slot nor hardware out key slot
+#define MCUXCLELS_KEYPROPERTY_RETENTION_SLOT_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.frtn indicates that the slot is a retention key slot
+#define MCUXCLELS_KEYPROPERTY_RETENTION_SLOT_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.frtn indicates that the slot is not a retention key slot
+#define MCUXCLELS_KEYPROPERTY_HW_OUT_SLOT_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.fhwo indicates that the slot is a hardware out key slot
+#define MCUXCLELS_KEYPROPERTY_HW_OUT_SLOT_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.fhwo indicates that the slot is not a hardware out key slot
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+#define MCUXCLELS_KEYPROPERTY_PUK_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.upuk indicates that the slot is a Trusted Public Key
+#define MCUXCLELS_KEYPROPERTY_PUK_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.upuk indicates that the slot is not a Trusted Public Key
+#define MCUXCLELS_KEYPROPERTY_TECDH_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.utecdh indicates that the slot is a Private key that can only be used in ECDH with Trusted Public Key
+#define MCUXCLELS_KEYPROPERTY_TECDH_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.utecdh indicates that the slot is not a Private key that can only be used in ECDH with Trusted Public Key
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+#define MCUXCLELS_KEYPROPERTY_CMAC_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.ucmac indicates that the key can be used for CMAC
+#define MCUXCLELS_KEYPROPERTY_CMAC_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.ucmac indicates that the key cannot be used for CMAC
+#define MCUXCLELS_KEYPROPERTY_KSK_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.uksk indicates that the key can be used for key signing
+#define MCUXCLELS_KEYPROPERTY_KSK_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.uksk indicates that the key cannot be used for key signing
+#define MCUXCLELS_KEYPROPERTY_RTF_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.urtf indicates that the key can be used for RTF signing
+#define MCUXCLELS_KEYPROPERTY_RTF_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.urtf indicates that the key cannot be used for RTF signing
+#define MCUXCLELS_KEYPROPERTY_CKDF_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.uckdf indicates that the key can be used for CKDF
+#define MCUXCLELS_KEYPROPERTY_CKDF_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.uckdf indicates that the key cannot be used for CKDF
+#define MCUXCLELS_KEYPROPERTY_HKDF_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.uhkdf indicates that the key can be used for HKDF
+#define MCUXCLELS_KEYPROPERTY_HKDF_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.uhkdf indicates that the key cannot be used for HKDF
+#define MCUXCLELS_KEYPROPERTY_ECC_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.uecsg indicates that the key can be used for ECC signing
+#define MCUXCLELS_KEYPROPERTY_ECC_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.uecsg indicates that the key cannot be used for ECC signing
+#define MCUXCLELS_KEYPROPERTY_ECC_DH_PRIVATE_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.uecdh indicates that the key is a ECC Diffie Hellman private key
+#define MCUXCLELS_KEYPROPERTY_ECC_DH_PRIVATE_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.uecdh indicates that the key is not an ECC Diffie Hellman private key
+#define MCUXCLELS_KEYPROPERTY_AES_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.uaes indicates that the key is an AES key
+#define MCUXCLELS_KEYPROPERTY_AES_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.uaes indicates that the key is not an AES key
+#define MCUXCLELS_KEYPROPERTY_HMAC_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.uhmac indicates that the key is an HMAC key
+#define MCUXCLELS_KEYPROPERTY_HMAC_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.uhmac indicates that the key is not an HMAC key
+#define MCUXCLELS_KEYPROPERTY_KWK_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.ukwk indicates that the key is a Key Wrapping Key
+#define MCUXCLELS_KEYPROPERTY_KWK_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.ukwk indicates that the key is not a Key Wrapping Key
+#define MCUXCLELS_KEYPROPERTY_KUOK_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.ukuok indicates that the key is a Key Unwrapping Only Key
+#define MCUXCLELS_KEYPROPERTY_KUOK_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.ukuok indicates that the key is not a Key Unwrapping Only Key
+#define MCUXCLELS_KEYPROPERTY_TLS_PREMASTER_SECRET_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.utlspms indicates that the key is a TLS Premaster Secret
+#define MCUXCLELS_KEYPROPERTY_TLS_PREMASTER_SECRET_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.utlspms indicates that the key is not a TLS Premaster Secret
+#define MCUXCLELS_KEYPROPERTY_TLS_MASTER_SECRET_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.utlsms indicates that the key is a TLS Master Secret
+#define MCUXCLELS_KEYPROPERTY_TLS_MASTER_SECRET_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.utlsms indicates that the key is not a TLS Master Secret
+#define MCUXCLELS_KEYPROPERTY_INPUT_FOR_ECC_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.ukgsrc indicates that the key can be used as key material input for ECC key generation
+#define MCUXCLELS_KEYPROPERTY_INPUT_FOR_ECC_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.ukgsrc indicates that the key cannot be used as key material input for ECC key generation
+#define MCUXCLELS_KEYPROPERTY_HW_OUT_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.uhwo indicates that the key can be used in a hardware out key slot
+#define MCUXCLELS_KEYPROPERTY_HW_OUT_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.uhwo indicates that the key cannot be used in a hardware out key slot
+#define MCUXCLELS_KEYPROPERTY_WRAP_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.wrpok indicates that the key can be wrapped
+#define MCUXCLELS_KEYPROPERTY_WRAP_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.wrpok indicates that the key cannot be wrapped
+#define MCUXCLELS_KEYPROPERTY_DEVICE_UNIQUE_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.duk indicates that the key is a Device Unique Key
+#define MCUXCLELS_KEYPROPERTY_DEVICE_UNIQUE_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.duk indicates that the key is not a Device Unique Key
+#define MCUXCLELS_KEYPROPERTY_PRIVILEGED_TRUE (1U) ///< This value of #mcuxClEls_KeyProp_t.upprot_priv indicates that the caller must be in privileged mode to use the key
+#define MCUXCLELS_KEYPROPERTY_PRIVILEGED_FALSE (0U) ///< This value of #mcuxClEls_KeyProp_t.upprot_priv indicates that the caller does not need to be in privileged mode to use the key
+#define MCUXCLELS_KEYPROPERTY_SECURE_TRUE (0U) ///< This value of #mcuxClEls_KeyProp_t.upprot_sec indicates that the caller must be in secure mode to use the key
+#define MCUXCLELS_KEYPROPERTY_SECURE_FALSE (1U) ///< This value of #mcuxClEls_KeyProp_t.upprot_sec indicates that the caller does not need to be in secure mode to use the key
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup MCUXCLELS_STATUS_ MCUXCLELS_STATUS_
+ * @brief Return code definitions
+ * @ingroup mcuxClEls_Types_Macros
+ * @{
+ */
+#define MCUXCLELS_STATUS_OK ((mcuxClEls_Status_t) 0x05552E03u) ///< No error occurred
+#define MCUXCLELS_STATUS_OK_WAIT ((mcuxClEls_Status_t) 0x05552E07u) ///< An _Async function successfully started an ELS command. Call #mcuxClEls_WaitForOperation to complete it
+#define MCUXCLELS_STATUS_HW_FAULT ((mcuxClEls_Status_t) 0x05555330u) ///< ELS hardware detected a fault
+#define MCUXCLELS_STATUS_HW_ALGORITHM ((mcuxClEls_Status_t) 0x05555334u) ///< An algorithm failed in hardware
+#define MCUXCLELS_STATUS_HW_OPERATIONAL ((mcuxClEls_Status_t) 0x05555338u) ///< ELS was operated incorrectly
+#define MCUXCLELS_STATUS_HW_BUS ((mcuxClEls_Status_t) 0x0555533Cu) ///< A bus access failed
+#define MCUXCLELS_STATUS_HW_INTEGRITY ((mcuxClEls_Status_t) 0x05555370u) ///< An integrity check failed in hardware
+#define MCUXCLELS_STATUS_HW_PRNG ((mcuxClEls_Status_t) 0x05555374u) ///< Read access to PRNG output while PRNG is not in ready state
+#define MCUXCLELS_STATUS_HW_DTRNG ((mcuxClEls_Status_t) 0x05555378u) ///< Unable to get entropy from dTRNG with current configuration
+#define MCUXCLELS_STATUS_SW_FAULT ((mcuxClEls_Status_t) 0x0555F0F0u) ///< Software detected a fault
+#define MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT ((mcuxClEls_Status_t) 0x055553B0u) ///< an ELS command was started while the ELS was still busy, or a SHA-Direct command was started while the SHA kernel was still busy
+#define MCUXCLELS_STATUS_SW_INVALID_PARAM ((mcuxClEls_Status_t) 0x055553F8u) ///< Incorrect parameters were supplied
+#define MCUXCLELS_STATUS_SW_INVALID_STATE ((mcuxClEls_Status_t) 0x055553B8u) ///< This can happen when ELS is in a wrong state for the requested ELS command
+#define MCUXCLELS_STATUS_SW_COUNTER_EXPIRED ((mcuxClEls_Status_t) 0x055553BCu) ///< A software counter expired while waiting for an ELS operation to finish
+#define MCUXCLELS_STATUS_SW_COMPARISON_FAILED ((mcuxClEls_Status_t) 0x05558930u) ///< A comparison between an ELS flag and its expected value failed
+#ifdef MCUXCL_FEATURE_ELS_LOCKING
+#define MCUXCLELS_STATUS_SW_LOCKING_FAILED ((mcuxClEls_Status_t) 0x055553F4u) ///< Unable to obtain ELS lock
+#define MCUXCLELS_STATUS_SW_STATUS_LOCKED ((mcuxClEls_Status_t) 0x05552E0Bu) ///< ELS status is locked
+#endif /* MCUXCL_FEATURE_ELS_LOCKING */
+/** @} */
+
+#define MCUXCLELS_STATUS_IS_HW_ERROR(x_) ((((mcuxClEls_Status_t) (x_)) & 0x0000FF00U) == 0x0000E100U) ///< Checks whether an error code is a hardware error. Indicates that an error was reported by ELS hardware.
+
+#define MCUXCLELS_STATUS_IS_SW_ERROR(x_) ((((mcuxClEls_Status_t) (x_)) & 0x0000FF00U) == 0x0000F000U) ///< Checks whether an error code is a software error. Indicates that the error was detected by the driver software and not by ELS hardware.
+
+/**
+ * @}
+ */
+
+/**********************************************
+ * TYPEDEFS
+ **********************************************/
+/**
+ * @defgroup mcuxClEls_Types_Types mcuxClEls_Types_Types
+ * @brief Defines all types of @ref mcuxClEls_Types
+ * @ingroup mcuxClEls_Types
+ * @{
+ */
+/**
+ * @brief Type for ELS driver status codes
+ */
+typedef uint32_t mcuxClEls_Status_t;
+
+/**
+ * @brief Deprecated type for ELS driver protected status codes
+ */
+typedef MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Status_Protected_t;
+
+/**
+ * @brief Type for ELS keystore indices
+ */
+typedef uint32_t mcuxClEls_KeyIndex_t;
+
+/** Type for ELS key store key properties */
+typedef union
+{
+ struct
+ {
+ uint32_t value; ///< Accesses the bit field as a full word; initialize with a combination of constants from @ref MCUXCLELS_KEYPROPERTY_VALUE_
+ } word; ///< Access #mcuxClEls_KeyProp_t word-wise
+ struct
+ {
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+ uint32_t ksize :2; ///< Key size
+ uint32_t :3; ///< RFU
+#else
+ uint32_t ksize :1; ///< Key size
+ uint32_t :4; ///< RFU
+#endif
+ uint32_t kactv :1; ///< Status flag to indicate whether the key slot contains an active key or not
+ uint32_t kbase :1; ///< Status flag to indicate whether the key slot is a base slot or the second slot of a 256-bit key
+ uint32_t fgp :1; ///< Hardware feature flag: General purpose key slot
+ uint32_t frtn :1; ///< Hardware feature flag: Retention key slot
+ uint32_t fhwo :1; ///< Hardware feature flag: Hardware-out key slot
+#ifdef MCUXCL_FEATURE_ELS_PUK_INTERNAL
+ uint32_t :1; ///< RFU
+ uint32_t upuk :1; ///< Usage permission for Trusted Public Key
+ uint32_t utecdh :1; ///< Usage permission for Private key that can only be used in ECDH with Trusted Public Key
+#else
+ uint32_t :3; ///< RFU
+#endif /* MCUXCL_FEATURE_ELS_PUK_INTERNAL */
+ uint32_t ucmac :1; ///< Usage permission for CMAC
+ uint32_t uksk :1; ///< Usage permission for key signing
+ uint32_t urtf :1; ///< Usage permission for RTF signing
+ uint32_t uckdf :1; ///< Usage permission for CKDF
+ uint32_t uhkdf :1; ///< Usage permission for HKDF
+ uint32_t uecsg :1; ///< Usage permission for ECDSA signing
+ uint32_t uecdh :1; ///< Usage permission for Elliptic Curve Diffie-Hellman
+ uint32_t uaes :1; ///< Usage permission for AES
+ uint32_t uhmac :1; ///< Usage permission for HMAC
+ uint32_t ukwk :1; ///< Usage permission for key wrapping
+ uint32_t ukuok :1; ///< Usage permission for key unwrapping, but not for key wrapping
+ uint32_t utlspms :1; ///< Usage permission as a TLS premaster secret
+ uint32_t utlsms :1; ///< Usage permission as a TLS master secret
+ uint32_t ukgsrc :1; ///< Usage permission as input for ECC key generation
+ uint32_t uhwo :1; ///< Usage permission in a hardware-out key slot
+ uint32_t wrpok :1; ///< Usage permission to wrap
+ uint32_t duk :1; ///< Device-unique key flag
+ uint32_t upprot_priv :1; ///< Access restriction to privileged mode
+ uint32_t upprot_sec :1; ///< Access restriction to TrustZone secure mode
+ } bits; ///< Access #mcuxClEls_KeyProp_t bit-wise
+} mcuxClEls_KeyProp_t;
+
+
+#define utlpsms utlspms ///< Deprecated name for #mcuxClEls_KeyProp_t.utlspms
+
+/**
+ * @brief Function type for transfer of data to a memory-mapped register
+ *
+ * This function type is used as a callback for handling data transfer from memory to a memory-mapped register.
+ * Such a function shall read data from the @c uint8_t array source, and write data via a sequence of writes to @p destRegister.
+ * Further specification of this function's behavior can be found in the documentation of the function that accepts this function as a callback parameter.
+ *
+ * @param [out] pDestRegister Memory-mapped register that the output data shall be written to
+ * @param [in] pSource Array containing the input data
+ * @param [in] sourceLength Size of @p source in bytes
+ * @param [in, out] pCallerData Custom pointer that is provided by the caller and forwarded to the callback function by the operation
+ * @return An error code that can be any error code in @ref MCUXCLELS_STATUS_, see individual documentation for more information
+ */
+typedef mcuxClEls_Status_t (*mcuxClEls_TransferToRegisterFunction_t)(
+ uint32_t volatile * pDestRegister,
+ uint8_t const * pSource,
+ size_t sourceLength,
+ void * pCallerData);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLELS_TYPES_H_ */
+
+/**
+ * @}
+ *
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_mapping.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_mapping.h
new file mode 100644
index 00000000..069564d4
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/inc/mcuxClEls_mapping.h
@@ -0,0 +1,549 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2022 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/**
+ * @file mcuxClEls_mapping.h
+ * @brief Header providing mapping for legacy function/definition names (with CSS)
+ */
+
+
+#ifndef MCUXCLELS_MAPPING_H_
+#define MCUXCLELS_MAPPING_H_
+
+/* Public definitions */
+/**
+ * MCUXCLCSS_CSS_((?:INTERRUPT_DISABLE|INTERRUPT_ENABLE|INTERRUPT_KEEP|INTERRUPT_SET|RESET_CLEAR|RESET_KEEP))(?!\w)
+ * -->
+ * MCUXCLELS_ELS_\1
+ *
+ * MCUXCLCSS_((?:API|AEAD_AAD_BLOCK_SIZE|AEAD_ACPMOD_AADPROC|AEAD_ACPMOD_FINAL|AEAD_ACPMOD_INIT|AEAD_ACPMOD_MSGPROC|AEAD_CONTEXT_SIZE|AEAD_DECRYPT|AEAD_ENCRYPT|AEAD_EXTERN_KEY|AEAD_INTERN_KEY|AEAD_IV_BLOCK_SIZE|AEAD_LASTINIT_FALSE|AEAD_LASTINIT_TRUE|AEAD_STATE_IN_DISABLE|AEAD_STATE_IN_ENABLE|AEAD_STATE_OUT_ENABLE|AEAD_TAG_SIZE|CIPHERPARAM_ALGORITHM_AES_CBC|CIPHERPARAM_ALGORITHM_AES_CTR|CIPHERPARAM_ALGORITHM_AES_ECB|CIPHER_BLOCK_SIZE_AES|CIPHER_DECRYPT|CIPHER_ENCRYPT|CIPHER_EXTERNAL_KEY|CIPHER_INTERNAL_KEY|CIPHER_KEY_SIZE_AES_128|CIPHER_KEY_SIZE_AES_192|CIPHER_KEY_SIZE_AES_256|CIPHER_STATE_IN_DISABLE|CIPHER_STATE_IN_ENABLE|CIPHER_STATE_OUT_DISABLE|CIPHER_STATE_OUT_ENABLE|CKDF_ALGO_SP800108|CKDF_ALGO_SP80056C_EXPAND|CKDF_ALGO_SP80056C_EXTRACT|CKDF_DERIVATIONDATA_SIZE|CKDF_RTF_DERIV|CKDF_SP80056C_DERIVATIONDATA_SIZE_16|CKDF_SP80056C_DERIVATIONDATA_SIZE_32|CKDF_SYSTEM_MEMORY_DERIV|CMAC_EXTERNAL_KEY_DISABLE|CMAC_EXTERNAL_KEY_ENABLE|CMAC_FINALIZE_DISABLE|CMAC_FINALIZE_ENABLE|CMAC_INITIALIZE_DISABLE|CMAC_INITIALIZE_ENABLE|CMAC_KEY_SIZE_128|CMAC_KEY_SIZE_256|CMAC_OUT_SIZE))(?!\w)
+ * MCUXCLCSS_((?:CMD_CRC_CMD_ID_AUTH_CIPHER|CMD_CRC_CMD_ID_CHAL_RESP_GEN|CMD_CRC_CMD_ID_CIPHER|CMD_CRC_CMD_ID_CKDF|CMD_CRC_CMD_ID_CMAC|CMD_CRC_CMD_ID_DRBG_TEST|CMD_CRC_CMD_ID_DTRNG_CFG_LOAD|CMD_CRC_CMD_ID_DTRNG_EVAL|CMD_CRC_CMD_ID_ECKXH|CMD_CRC_CMD_ID_ECSIGN|CMD_CRC_CMD_ID_ECVFY|CMD_CRC_CMD_ID_GDET_CFG_LOAD|CMD_CRC_CMD_ID_GDET_TRIM|CMD_CRC_CMD_ID_HASH|CMD_CRC_CMD_ID_HKDF|CMD_CRC_CMD_ID_HMAC|CMD_CRC_CMD_ID_KDELETE|CMD_CRC_CMD_ID_KEYGEN|CMD_CRC_CMD_ID_KEYIN|CMD_CRC_CMD_ID_KEYOUT|CMD_CRC_CMD_ID_KEYPROV|CMD_CRC_CMD_ID_RND_REQ|CMD_CRC_CMD_ID_TLS|CMD_CRC_DISABLE|CMD_CRC_ENABLE|CMD_CRC_INITIAL_VALUE|CMD_CRC_POLYNOMIAL|CMD_CRC_REFERENCE_INIT|CMD_CRC_REFERENCE_RESET|CMD_CRC_REFERENCE_UPDATE_AEAD_FINALIZE|CMD_CRC_REFERENCE_UPDATE_AEAD_INIT|CMD_CRC_REFERENCE_UPDATE_AEAD_PARTIALINIT|CMD_CRC_REFERENCE_UPDATE_AEAD_UPDATEAAD|CMD_CRC_REFERENCE_UPDATE_AEAD_UPDATEDATA|CMD_CRC_REFERENCE_UPDATE_CIPHER|CMD_CRC_REFERENCE_UPDATE_CKDF_SP800108|CMD_CRC_REFERENCE_UPDATE_CKDF_SP80056C_EXPAND|CMD_CRC_REFERENCE_UPDATE_CKDF_SP80056C_EXTRACT|CMD_CRC_REFERENCE_UPDATE_CMAC))(?!\w)
+ * MCUXCLCSS_((?:CMD_CRC_REFERENCE_UPDATE_ECCKEYEXCHANGE|CMD_CRC_REFERENCE_UPDATE_ECCKEYEXCHANGEINT|CMD_CRC_REFERENCE_UPDATE_ECCKEYGEN|CMD_CRC_REFERENCE_UPDATE_ECCSIGN|CMD_CRC_REFERENCE_UPDATE_ECCVERFIFY|CMD_CRC_REFERENCE_UPDATE_ECCVERFIFYINT|CMD_CRC_REFERENCE_UPDATE_GLITCHDETECTOR_LOADCONFIG|CMD_CRC_REFERENCE_UPDATE_GLITCHDETECTOR_TRIM|CMD_CRC_REFERENCE_UPDATE_HASH|CMD_CRC_REFERENCE_UPDATE_HKDF_RFC5869|CMD_CRC_REFERENCE_UPDATE_HKDF_SP80056C|CMD_CRC_REFERENCE_UPDATE_HMAC|CMD_CRC_REFERENCE_UPDATE_KEYDELETE|CMD_CRC_REFERENCE_UPDATE_KEYEXPORT|CMD_CRC_REFERENCE_UPDATE_KEYIMPORT|CMD_CRC_REFERENCE_UPDATE_KEYIMPORTPUK|CMD_CRC_REFERENCE_UPDATE_KEYPROVISION|CMD_CRC_REFERENCE_UPDATE_KEYPROVISIONROM|CMD_CRC_REFERENCE_UPDATE_PRNG_INIT|CMD_CRC_REFERENCE_UPDATE_RESPGEN|CMD_CRC_REFERENCE_UPDATE_RNG_DRBGREQUEST|CMD_CRC_REFERENCE_UPDATE_RNG_DRBGREQUESTRAW|CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTAESCTR|CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTAESECB|CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTEXTRACT|CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTINSTANTIATE|CMD_CRC_REFERENCE_UPDATE_RNG_DTRNG_CONFIGEVALUATE))(?!\w)
+ * MCUXCLCSS_((?:CMD_CRC_REFERENCE_UPDATE_RNG_DTRNG_CONFIGLOAD|CMD_CRC_REFERENCE_UPDATE_TLSGENERATEMASTERKEYFROMPREMASTERKEY|CMD_CRC_REFERENCE_UPDATE_TLSGENERATESESSIONKEYSFROMMASTERKEY|CMD_CRC_RESET|CMD_CRC_VALUE_DISABLE|CMD_CRC_VALUE_ENABLE|CMD_CRC_VALUE_RESET|DMA_READBACK_PROTECTION_TOKEN|ECC_EXTKEY_EXTERNAL|ECC_EXTKEY_INTERNAL|ECC_GEN_PUBLIC_KEY|ECC_HASHED|ECC_INCLUDE_RANDOM_DATA|ECC_NOT_HASHED|ECC_NO_RANDOM_DATA|ECC_NO_RTF|ECC_OUTPUTKEY_DETERMINISTIC|ECC_OUTPUTKEY_KEYEXCHANGE|ECC_OUTPUTKEY_RANDOM|ECC_OUTPUTKEY_SIGN|ECC_PUBLICKEY_SIGN_DISABLE|ECC_PUBLICKEY_SIGN_ENABLE|ECC_PUBLICKEY_SIZE|ECC_REVERSEFETCH_DISABLE|ECC_REVERSEFETCH_ENABLE|ECC_RTF|ECC_SIGNATURE_R_SIZE|ECC_SIGNATURE_SIZE|ECC_SKIP_PUBLIC_KEY|ECC_VALUE_HASHED|ECC_VALUE_NOT_HASHED|ECC_VALUE_NO_RTF|ECC_VALUE_RTF|ERROR_FLAGS_CLEAR|ERROR_FLAGS_KEEP|GLITCHDETECTOR_CFG_SIZE|GLITCHDETECTOR_TRIM_SIZE|GLITCH_DETECTOR_INTERRUPT_DISABLE|GLITCH_DETECTOR_INTERRUPT_ENABLE|GLITCH_DETECTOR_NEG_KEEP))(?!\w)
+ * MCUXCLCSS_((?:GLITCH_DETECTOR_NEG_SET|GLITCH_DETECTOR_POS_KEEP|GLITCH_DETECTOR_POS_SET|GLITCH_DETECTOR_RESET_CLEAR|GLITCH_DETECTOR_RESET_KEEP|HASH_BLOCK_SIZE_SHA_224|HASH_BLOCK_SIZE_SHA_256|HASH_BLOCK_SIZE_SHA_384|HASH_BLOCK_SIZE_SHA_512|HASH_INIT_DISABLE|HASH_INIT_ENABLE|HASH_LOAD_DISABLE|HASH_LOAD_ENABLE|HASH_MODE_SHA_224|HASH_MODE_SHA_256|HASH_MODE_SHA_384|HASH_MODE_SHA_512|HASH_OUTPUT_DISABLE|HASH_OUTPUT_ENABLE|HASH_OUTPUT_SIZE_SHA_224|HASH_OUTPUT_SIZE_SHA_256|HASH_OUTPUT_SIZE_SHA_384|HASH_OUTPUT_SIZE_SHA_512|HASH_RTF_OUTPUT_DISABLE|HASH_RTF_OUTPUT_ENABLE|HASH_RTF_OUTPUT_SIZE|HASH_RTF_UPDATE_DISABLE|HASH_RTF_UPDATE_ENABLE|HASH_STATE_SIZE_SHA_224|HASH_STATE_SIZE_SHA_256|HASH_STATE_SIZE_SHA_384|HASH_STATE_SIZE_SHA_512|HASH_VALUE_MODE_SHA_224|HASH_VALUE_MODE_SHA_256|HASH_VALUE_MODE_SHA_384|HASH_VALUE_MODE_SHA_512|HKDF_ALGO_RFC5869|HKDF_ALGO_SP80056C|HKDF_RFC5869_DERIVATIONDATA_SIZE|HKDF_SP80056C_TARGETKEY_SIZE|HKDF_VALUE_MEMORY_DERIV|HKDF_VALUE_RTF_DERIV|HMAC_EXTERNAL_KEY_DISABLE|HMAC_EXTERNAL_KEY_ENABLE|HMAC_OUTPUT_SIZE|HMAC_PADDED_KEY_SIZE|HW_VERSION))(?!\w)
+ * MCUXCLCSS_((?:KEYGEN_VALUE_DETERMINISTIC|KEYGEN_VALUE_GEN_PUB_KEY|KEYGEN_VALUE_NO_PUB_KEY|KEYGEN_VALUE_NO_RANDOM_DATA|KEYGEN_VALUE_RANDOM|KEYGEN_VALUE_SIGN_PUBLICKEY|KEYGEN_VALUE_TYPE_KEYEXCHANGE|KEYGEN_VALUE_TYPE_SIGN|KEYGEN_VALUE_USE_RANDOM_DATA|KEYIMPORT_KFMT_PBK|KEYIMPORT_KFMT_PUF|KEYIMPORT_KFMT_RFC3394|KEYIMPORT_KFMT_UDF|KEYIMPORT_REVERSEFETCH_DISABLE|KEYIMPORT_REVERSEFETCH_ENABLE|KEYIMPORT_VALUE_KFMT_PBK|KEYIMPORT_VALUE_KFMT_PUF|KEYIMPORT_VALUE_KFMT_RFC3394|KEYIMPORT_VALUE_KFMT_UDF|KEYPROPERTY_ACTIVE_FALSE|KEYPROPERTY_ACTIVE_TRUE|KEYPROPERTY_AES_FALSE|KEYPROPERTY_AES_TRUE|KEYPROPERTY_BASE_SLOT|KEYPROPERTY_CKDF_FALSE|KEYPROPERTY_CKDF_TRUE|KEYPROPERTY_CMAC_FALSE|KEYPROPERTY_CMAC_TRUE|KEYPROPERTY_DEVICE_UNIQUE_FALSE|KEYPROPERTY_DEVICE_UNIQUE_TRUE|KEYPROPERTY_ECC_DH_PRIVATE_FALSE|KEYPROPERTY_ECC_DH_PRIVATE_TRUE|KEYPROPERTY_ECC_FALSE|KEYPROPERTY_ECC_TRUE|KEYPROPERTY_GENERAL_PURPOSE_SLOT_FALSE|KEYPROPERTY_GENERAL_PURPOSE_SLOT_TRUE|KEYPROPERTY_HKDF_FALSE|KEYPROPERTY_HKDF_TRUE|KEYPROPERTY_HMAC_FALSE|KEYPROPERTY_HMAC_TRUE|KEYPROPERTY_HW_OUT_FALSE|KEYPROPERTY_HW_OUT_SLOT_FALSE))(?!\w)
+ * MCUXCLCSS_((?:KEYPROPERTY_HW_OUT_SLOT_TRUE|KEYPROPERTY_HW_OUT_TRUE|KEYPROPERTY_INPUT_FOR_ECC_FALSE|KEYPROPERTY_INPUT_FOR_ECC_TRUE|KEYPROPERTY_KEY_SIZE_128|KEYPROPERTY_KEY_SIZE_256|KEYPROPERTY_KEY_SIZE_512|KEYPROPERTY_KSK_FALSE|KEYPROPERTY_KSK_TRUE|KEYPROPERTY_KUOK_FALSE|KEYPROPERTY_KUOK_TRUE|KEYPROPERTY_KWK_FALSE|KEYPROPERTY_KWK_TRUE|KEYPROPERTY_PRIVILEGED_FALSE|KEYPROPERTY_PRIVILEGED_TRUE|KEYPROPERTY_PUK_FALSE|KEYPROPERTY_PUK_TRUE|KEYPROPERTY_RETENTION_SLOT_FALSE|KEYPROPERTY_RETENTION_SLOT_TRUE|KEYPROPERTY_RTF_FALSE|KEYPROPERTY_RTF_TRUE|KEYPROPERTY_SECOND_SLOT|KEYPROPERTY_SECURE_FALSE|KEYPROPERTY_SECURE_TRUE|KEYPROPERTY_TECDH_FALSE|KEYPROPERTY_TECDH_TRUE|KEYPROPERTY_TLS_MASTER_SECRET_FALSE|KEYPROPERTY_TLS_MASTER_SECRET_TRUE|KEYPROPERTY_TLS_PREMASTER_SECRET_FALSE|KEYPROPERTY_TLS_PREMASTER_SECRET_TRUE|KEYPROPERTY_VALUE_ACTIVE|KEYPROPERTY_VALUE_AES|KEYPROPERTY_VALUE_BASE_SLOT|KEYPROPERTY_VALUE_CKDF|KEYPROPERTY_VALUE_CMAC|KEYPROPERTY_VALUE_DUK|KEYPROPERTY_VALUE_ECDH|KEYPROPERTY_VALUE_ECSGN|KEYPROPERTY_VALUE_GENERAL_PURPOSE_SLOT|KEYPROPERTY_VALUE_HKDF|KEYPROPERTY_VALUE_HMAC))(?!\w)
+ * MCUXCLCSS_((?:KEYPROPERTY_VALUE_HW_OUT|KEYPROPERTY_VALUE_HW_OUT_SLOT|KEYPROPERTY_VALUE_KEY_SIZE_128|KEYPROPERTY_VALUE_KEY_SIZE_256|KEYPROPERTY_VALUE_KEY_SIZE_512|KEYPROPERTY_VALUE_KGSRC|KEYPROPERTY_VALUE_KSK|KEYPROPERTY_VALUE_KUOK|KEYPROPERTY_VALUE_KWK|KEYPROPERTY_VALUE_NOTPRIVILEGED|KEYPROPERTY_VALUE_NOTSECURE|KEYPROPERTY_VALUE_PRIVILEGED|KEYPROPERTY_VALUE_PUK|KEYPROPERTY_VALUE_RETENTION_SLOT|KEYPROPERTY_VALUE_RTF|KEYPROPERTY_VALUE_SECURE|KEYPROPERTY_VALUE_TECDH|KEYPROPERTY_VALUE_TLS_MASTER_SECRET|KEYPROPERTY_VALUE_TLS_PREMASTER_SECRET|KEYPROPERTY_VALUE_WRPOK|KEYPROPERTY_WRAP_FALSE|KEYPROPERTY_WRAP_TRUE|KEYPROV_DUK_UPDATE_DISABLE|KEYPROV_DUK_UPDATE_ENABLE|KEYPROV_KEYSHARE_TABLE_SIZE|KEYPROV_KEY_PART_1_SIZE|KEYPROV_NOIC_DISABLE|KEYPROV_NOIC_ENABLE|KEYPROV_TESTERSHARE_SIZE|KEYPROV_VALUE_NOIC|KEY_SLOTS|MASTER_UNLOCK_ANY|RESET_CANCEL|RESET_DO_NOT_CANCEL|RESP_GEN_AVAILABLE_SLOT_0|RESP_GEN_AVAILABLE_SLOT_1|RESP_GEN_AVAILABLE_SLOT_2|RESP_GEN_SLOTS|RFC3394_CONTAINER_SIZE_128|RFC3394_CONTAINER_SIZE_256|RFC3394_CONTAINER_SIZE_P256|RFC3394_OVERHEAD|RNG_DRBG_TEST_EXTRACT_OUTPUT_MAX_SIZE))(?!\w)
+ * MCUXCLCSS_((?:RNG_DRBG_TEST_EXTRACT_OUTPUT_MIN_SIZE|RNG_DRBG_TEST_MODE_AES_CTR|RNG_DRBG_TEST_MODE_AES_ECB|RNG_DRBG_TEST_MODE_EXTRACT|RNG_DRBG_TEST_MODE_INSTANTIATE|RNG_DTRNG_CONFIG_SIZE|RNG_DTRNG_EVAL_CONFIG_SIZE|RNG_DTRNG_EVAL_RESULT_SIZE|RNG_RAW_ENTROPY_SIZE|RNG_RND_REQ_PRND_INIT|RNG_RND_REQ_RND_RAW|STATUS_DRBGENTLVL_HIGH|STATUS_DRBGENTLVL_LOW|STATUS_DRBGENTLVL_NONE|STATUS_ECDSAVFY_ERROR|STATUS_ECDSAVFY_FAIL|STATUS_ECDSAVFY_NORUN|STATUS_ECDSAVFY_OK|STATUS_HW_ALGORITHM|STATUS_HW_BUS|STATUS_HW_DTRNG|STATUS_HW_FAULT|STATUS_HW_INTEGRITY|STATUS_HW_OPERATIONAL|STATUS_HW_PRNG|STATUS_IS_HW_ERROR|STATUS_IS_SW_ERROR|STATUS_OK|STATUS_OK_WAIT|STATUS_PPROT_PRIVILEGED_NONSECURE|STATUS_PPROT_PRIVILEGED_SECURE|STATUS_PPROT_UNPRIVILEGED_NONSECURE|STATUS_PPROT_UNPRIVILEGED_SECURE|STATUS_SW_CANNOT_INTERRUPT|STATUS_SW_COMPARISON_FAILED|STATUS_SW_COUNTER_EXPIRED|STATUS_SW_FAULT|STATUS_SW_INVALID_PARAM|STATUS_SW_INVALID_STATE|STATUS_SW_LOCKING_FAILED|STATUS_SW_STATUS_LOCKED|TLS_DERIVATIONDATA_SIZE|TLS_FINALIZE|TLS_INIT|TLS_RANDOM_SIZE))(?!\w)
+ * -->
+ * MCUXCLELS_\1
+ */
+#define MCUXCLCSS_API MCUXCLELS_API
+#define MCUXCLCSS_AEAD_AAD_BLOCK_SIZE MCUXCLELS_AEAD_AAD_BLOCK_SIZE
+#define MCUXCLCSS_AEAD_ACPMOD_AADPROC MCUXCLELS_AEAD_ACPMOD_AADPROC
+#define MCUXCLCSS_AEAD_ACPMOD_FINAL MCUXCLELS_AEAD_ACPMOD_FINAL
+#define MCUXCLCSS_AEAD_ACPMOD_INIT MCUXCLELS_AEAD_ACPMOD_INIT
+#define MCUXCLCSS_AEAD_ACPMOD_MSGPROC MCUXCLELS_AEAD_ACPMOD_MSGPROC
+#define MCUXCLCSS_AEAD_CONTEXT_SIZE MCUXCLELS_AEAD_CONTEXT_SIZE
+#define MCUXCLCSS_AEAD_DECRYPT MCUXCLELS_AEAD_DECRYPT
+#define MCUXCLCSS_AEAD_ENCRYPT MCUXCLELS_AEAD_ENCRYPT
+#define MCUXCLCSS_AEAD_EXTERN_KEY MCUXCLELS_AEAD_EXTERN_KEY
+#define MCUXCLCSS_AEAD_INTERN_KEY MCUXCLELS_AEAD_INTERN_KEY
+#define MCUXCLCSS_AEAD_IV_BLOCK_SIZE MCUXCLELS_AEAD_IV_BLOCK_SIZE
+#define MCUXCLCSS_AEAD_LASTINIT_FALSE MCUXCLELS_AEAD_LASTINIT_FALSE
+#define MCUXCLCSS_AEAD_LASTINIT_TRUE MCUXCLELS_AEAD_LASTINIT_TRUE
+#define MCUXCLCSS_AEAD_STATE_IN_DISABLE MCUXCLELS_AEAD_STATE_IN_DISABLE
+#define MCUXCLCSS_AEAD_STATE_IN_ENABLE MCUXCLELS_AEAD_STATE_IN_ENABLE
+#define MCUXCLCSS_AEAD_STATE_OUT_ENABLE MCUXCLELS_AEAD_STATE_OUT_ENABLE
+#define MCUXCLCSS_AEAD_TAG_SIZE MCUXCLELS_AEAD_TAG_SIZE
+#define MCUXCLCSS_CIPHERPARAM_ALGORITHM_AES_CBC MCUXCLELS_CIPHERPARAM_ALGORITHM_AES_CBC
+#define MCUXCLCSS_CIPHERPARAM_ALGORITHM_AES_CTR MCUXCLELS_CIPHERPARAM_ALGORITHM_AES_CTR
+#define MCUXCLCSS_CIPHERPARAM_ALGORITHM_AES_ECB MCUXCLELS_CIPHERPARAM_ALGORITHM_AES_ECB
+#define MCUXCLCSS_CIPHER_BLOCK_SIZE_AES MCUXCLELS_CIPHER_BLOCK_SIZE_AES
+#define MCUXCLCSS_CIPHER_DECRYPT MCUXCLELS_CIPHER_DECRYPT
+#define MCUXCLCSS_CIPHER_ENCRYPT MCUXCLELS_CIPHER_ENCRYPT
+#define MCUXCLCSS_CIPHER_EXTERNAL_KEY MCUXCLELS_CIPHER_EXTERNAL_KEY
+#define MCUXCLCSS_CIPHER_INTERNAL_KEY MCUXCLELS_CIPHER_INTERNAL_KEY
+#define MCUXCLCSS_CIPHER_KEY_SIZE_AES_128 MCUXCLELS_CIPHER_KEY_SIZE_AES_128
+#define MCUXCLCSS_CIPHER_KEY_SIZE_AES_192 MCUXCLELS_CIPHER_KEY_SIZE_AES_192
+#define MCUXCLCSS_CIPHER_KEY_SIZE_AES_256 MCUXCLELS_CIPHER_KEY_SIZE_AES_256
+#define MCUXCLCSS_CIPHER_STATE_IN_DISABLE MCUXCLELS_CIPHER_STATE_IN_DISABLE
+#define MCUXCLCSS_CIPHER_STATE_IN_ENABLE MCUXCLELS_CIPHER_STATE_IN_ENABLE
+#define MCUXCLCSS_CIPHER_STATE_OUT_DISABLE MCUXCLELS_CIPHER_STATE_OUT_DISABLE
+#define MCUXCLCSS_CIPHER_STATE_OUT_ENABLE MCUXCLELS_CIPHER_STATE_OUT_ENABLE
+#define MCUXCLCSS_CKDF_ALGO_SP800108 MCUXCLELS_CKDF_ALGO_SP800108
+#define MCUXCLCSS_CKDF_ALGO_SP80056C_EXPAND MCUXCLELS_CKDF_ALGO_SP80056C_EXPAND
+#define MCUXCLCSS_CKDF_ALGO_SP80056C_EXTRACT MCUXCLELS_CKDF_ALGO_SP80056C_EXTRACT
+#define MCUXCLCSS_CKDF_DERIVATIONDATA_SIZE MCUXCLELS_CKDF_DERIVATIONDATA_SIZE
+#define MCUXCLCSS_HKDF_RTF_DERIV MCUXCLELS_HKDF_RTF_DERIV
+#define MCUXCLCSS_CKDF_SP80056C_DERIVATIONDATA_SIZE_16 MCUXCLELS_CKDF_SP80056C_DERIVATIONDATA_SIZE_16
+#define MCUXCLCSS_CKDF_SP80056C_DERIVATIONDATA_SIZE_32 MCUXCLELS_CKDF_SP80056C_DERIVATIONDATA_SIZE_32
+#define MCUXCLCSS_HKDF_SYSTEM_MEMORY_DERIV MCUXCLELS_HKDF_SYSTEM_MEMORY_DERIV
+#define MCUXCLCSS_CMAC_EXTERNAL_KEY_DISABLE MCUXCLELS_CMAC_EXTERNAL_KEY_DISABLE
+#define MCUXCLCSS_CMAC_EXTERNAL_KEY_ENABLE MCUXCLELS_CMAC_EXTERNAL_KEY_ENABLE
+#define MCUXCLCSS_CMAC_FINALIZE_DISABLE MCUXCLELS_CMAC_FINALIZE_DISABLE
+#define MCUXCLCSS_CMAC_FINALIZE_ENABLE MCUXCLELS_CMAC_FINALIZE_ENABLE
+#define MCUXCLCSS_CMAC_INITIALIZE_DISABLE MCUXCLELS_CMAC_INITIALIZE_DISABLE
+#define MCUXCLCSS_CMAC_INITIALIZE_ENABLE MCUXCLELS_CMAC_INITIALIZE_ENABLE
+#define MCUXCLCSS_CMAC_KEY_SIZE_128 MCUXCLELS_CMAC_KEY_SIZE_128
+#define MCUXCLCSS_CMAC_KEY_SIZE_256 MCUXCLELS_CMAC_KEY_SIZE_256
+#define MCUXCLCSS_CMAC_OUT_SIZE MCUXCLELS_CMAC_OUT_SIZE
+#define MCUXCLCSS_CMD_CRC_CMD_ID_AUTH_CIPHER MCUXCLELS_CMD_CRC_CMD_ID_AUTH_CIPHER
+#define MCUXCLCSS_CMD_CRC_CMD_ID_CHAL_RESP_GEN MCUXCLELS_CMD_CRC_CMD_ID_CHAL_RESP_GEN
+#define MCUXCLCSS_CMD_CRC_CMD_ID_CIPHER MCUXCLELS_CMD_CRC_CMD_ID_CIPHER
+#define MCUXCLCSS_CMD_CRC_CMD_ID_CKDF MCUXCLELS_CMD_CRC_CMD_ID_CKDF
+#define MCUXCLCSS_CMD_CRC_CMD_ID_CMAC MCUXCLELS_CMD_CRC_CMD_ID_CMAC
+#define MCUXCLCSS_CMD_CRC_CMD_ID_DRBG_TEST MCUXCLELS_CMD_CRC_CMD_ID_DRBG_TEST
+#define MCUXCLCSS_CMD_CRC_CMD_ID_DTRNG_CFG_LOAD MCUXCLELS_CMD_CRC_CMD_ID_DTRNG_CFG_LOAD
+#define MCUXCLCSS_CMD_CRC_CMD_ID_DTRNG_EVAL MCUXCLELS_CMD_CRC_CMD_ID_DTRNG_EVAL
+#define MCUXCLCSS_CMD_CRC_CMD_ID_ECKXH MCUXCLELS_CMD_CRC_CMD_ID_ECKXH
+#define MCUXCLCSS_CMD_CRC_CMD_ID_ECSIGN MCUXCLELS_CMD_CRC_CMD_ID_ECSIGN
+#define MCUXCLCSS_CMD_CRC_CMD_ID_ECVFY MCUXCLELS_CMD_CRC_CMD_ID_ECVFY
+#define MCUXCLCSS_CMD_CRC_CMD_ID_GDET_CFG_LOAD MCUXCLELS_CMD_CRC_CMD_ID_GDET_CFG_LOAD
+#define MCUXCLCSS_CMD_CRC_CMD_ID_GDET_TRIM MCUXCLELS_CMD_CRC_CMD_ID_GDET_TRIM
+#define MCUXCLCSS_CMD_CRC_CMD_ID_HASH MCUXCLELS_CMD_CRC_CMD_ID_HASH
+#define MCUXCLCSS_CMD_CRC_CMD_ID_HKDF MCUXCLELS_CMD_CRC_CMD_ID_HKDF
+#define MCUXCLCSS_CMD_CRC_CMD_ID_HMAC MCUXCLELS_CMD_CRC_CMD_ID_HMAC
+#define MCUXCLCSS_CMD_CRC_CMD_ID_KDELETE MCUXCLELS_CMD_CRC_CMD_ID_KDELETE
+#define MCUXCLCSS_CMD_CRC_CMD_ID_KEYGEN MCUXCLELS_CMD_CRC_CMD_ID_KEYGEN
+#define MCUXCLCSS_CMD_CRC_CMD_ID_KEYIN MCUXCLELS_CMD_CRC_CMD_ID_KEYIN
+#define MCUXCLCSS_CMD_CRC_CMD_ID_KEYOUT MCUXCLELS_CMD_CRC_CMD_ID_KEYOUT
+#define MCUXCLCSS_CMD_CRC_CMD_ID_KEYPROV MCUXCLELS_CMD_CRC_CMD_ID_KEYPROV
+#define MCUXCLCSS_CMD_CRC_CMD_ID_RND_REQ MCUXCLELS_CMD_CRC_CMD_ID_RND_REQ
+#define MCUXCLCSS_CMD_CRC_CMD_ID_TLS MCUXCLELS_CMD_CRC_CMD_ID_TLS
+#define MCUXCLCSS_CMD_CRC_DISABLE MCUXCLELS_CMD_CRC_DISABLE
+#define MCUXCLCSS_CMD_CRC_ENABLE MCUXCLELS_CMD_CRC_ENABLE
+#define MCUXCLCSS_CMD_CRC_INITIAL_VALUE MCUXCLELS_CMD_CRC_INITIAL_VALUE
+#define MCUXCLCSS_CMD_CRC_POLYNOMIAL MCUXCLELS_CMD_CRC_POLYNOMIAL
+#define MCUXCLCSS_CMD_CRC_REFERENCE_INIT MCUXCLELS_CMD_CRC_REFERENCE_INIT
+#define MCUXCLCSS_CMD_CRC_REFERENCE_RESET MCUXCLELS_CMD_CRC_REFERENCE_RESET
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_AEAD_FINALIZE MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_FINALIZE
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_AEAD_INIT MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_INIT
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_AEAD_PARTIALINIT MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_PARTIALINIT
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_AEAD_UPDATEAAD MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_UPDATEAAD
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_AEAD_UPDATEDATA MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_AEAD_UPDATEDATA
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_CIPHER MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_CIPHER
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_CKDF_SP800108 MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_CKDF_SP800108
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_CKDF_SP80056C_EXPAND MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_CKDF_SP80056C_EXPAND
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_CKDF_SP80056C_EXTRACT MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_CKDF_SP80056C_EXTRACT
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_CMAC MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_CMAC
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_ECCKEYEXCHANGE MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCKEYEXCHANGE
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_ECCKEYEXCHANGEINT MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCKEYEXCHANGEINT
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_ECCKEYGEN MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCKEYGEN
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_ECCSIGN MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCSIGN
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_ECCVERFIFY MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCVERFIFY
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_ECCVERFIFYINT MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_ECCVERFIFYINT
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_GLITCHDETECTOR_LOADCONFIG MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_GLITCHDETECTOR_LOADCONFIG
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_GLITCHDETECTOR_TRIM MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_GLITCHDETECTOR_TRIM
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_HASH MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_HASH
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_HKDF_RFC5869 MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_HKDF_RFC5869
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_HKDF_SP80056C MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_HKDF_SP80056C
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_HMAC MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_HMAC
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_KEYDELETE MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYDELETE
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_KEYEXPORT MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYEXPORT
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_KEYIMPORT MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYIMPORT
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_KEYIMPORTPUK MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYIMPORTPUK
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_KEYPROVISION MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYPROVISION
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_KEYPROVISIONROM MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_KEYPROVISIONROM
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_PRNG_INIT MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_PRNG_INIT
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_RESPGEN MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RESPGEN
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGREQUEST MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGREQUEST
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGREQUESTRAW MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGREQUESTRAW
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTAESCTR MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTAESCTR
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTAESECB MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTAESECB
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTEXTRACT MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTEXTRACT
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTINSTANTIATE MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DRBGTESTINSTANTIATE
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_RNG_DTRNG_CONFIGEVALUATE MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DTRNG_CONFIGEVALUATE
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_RNG_DTRNG_CONFIGLOAD MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_RNG_DTRNG_CONFIGLOAD
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_TLSGENERATEMASTERKEYFROMPREMASTERKEY MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_TLSGENERATEMASTERKEYFROMPREMASTERKEY
+#define MCUXCLCSS_CMD_CRC_REFERENCE_UPDATE_TLSGENERATESESSIONKEYSFROMMASTERKEY MCUXCLELS_CMD_CRC_REFERENCE_UPDATE_TLSGENERATESESSIONKEYSFROMMASTERKEY
+#define MCUXCLCSS_CMD_CRC_RESET MCUXCLELS_CMD_CRC_RESET
+#define MCUXCLCSS_CMD_CRC_VALUE_DISABLE MCUXCLELS_CMD_CRC_VALUE_DISABLE
+#define MCUXCLCSS_CMD_CRC_VALUE_ENABLE MCUXCLELS_CMD_CRC_VALUE_ENABLE
+#define MCUXCLCSS_CMD_CRC_VALUE_RESET MCUXCLELS_CMD_CRC_VALUE_RESET
+#define MCUXCLCSS_CSS_INTERRUPT_DISABLE MCUXCLELS_ELS_INTERRUPT_DISABLE
+#define MCUXCLCSS_CSS_INTERRUPT_ENABLE MCUXCLELS_ELS_INTERRUPT_ENABLE
+#define MCUXCLCSS_CSS_INTERRUPT_KEEP MCUXCLELS_ELS_INTERRUPT_KEEP
+#define MCUXCLCSS_CSS_INTERRUPT_SET MCUXCLELS_ELS_INTERRUPT_SET
+#define MCUXCLCSS_CSS_RESET_CLEAR MCUXCLELS_ELS_RESET_CLEAR
+#define MCUXCLCSS_CSS_RESET_KEEP MCUXCLELS_ELS_RESET_KEEP
+#define MCUXCLCSS_DMA_READBACK_PROTECTION_TOKEN MCUXCLELS_DMA_READBACK_PROTECTION_TOKEN
+#define MCUXCLCSS_ECC_EXTKEY_EXTERNAL MCUXCLELS_ECC_EXTKEY_EXTERNAL
+#define MCUXCLCSS_ECC_EXTKEY_INTERNAL MCUXCLELS_ECC_EXTKEY_INTERNAL
+#define MCUXCLCSS_ECC_GEN_PUBLIC_KEY MCUXCLELS_ECC_GEN_PUBLIC_KEY
+#define MCUXCLCSS_ECC_HASHED MCUXCLELS_ECC_HASHED
+#define MCUXCLCSS_ECC_INCLUDE_RANDOM_DATA MCUXCLELS_ECC_INCLUDE_RANDOM_DATA
+#define MCUXCLCSS_ECC_NOT_HASHED MCUXCLELS_ECC_NOT_HASHED
+#define MCUXCLCSS_ECC_NO_RANDOM_DATA MCUXCLELS_ECC_NO_RANDOM_DATA
+#define MCUXCLCSS_ECC_NO_RTF MCUXCLELS_ECC_NO_RTF
+#define MCUXCLCSS_ECC_OUTPUTKEY_DETERMINISTIC MCUXCLELS_ECC_OUTPUTKEY_DETERMINISTIC
+#define MCUXCLCSS_ECC_OUTPUTKEY_KEYEXCHANGE MCUXCLELS_ECC_OUTPUTKEY_KEYEXCHANGE
+#define MCUXCLCSS_ECC_OUTPUTKEY_RANDOM MCUXCLELS_ECC_OUTPUTKEY_RANDOM
+#define MCUXCLCSS_ECC_OUTPUTKEY_SIGN MCUXCLELS_ECC_OUTPUTKEY_SIGN
+#define MCUXCLCSS_ECC_PUBLICKEY_SIGN_DISABLE MCUXCLELS_ECC_PUBLICKEY_SIGN_DISABLE
+#define MCUXCLCSS_ECC_PUBLICKEY_SIGN_ENABLE MCUXCLELS_ECC_PUBLICKEY_SIGN_ENABLE
+#define MCUXCLCSS_ECC_PUBLICKEY_SIZE MCUXCLELS_ECC_PUBLICKEY_SIZE
+#define MCUXCLCSS_ECC_REVERSEFETCH_DISABLE MCUXCLELS_ECC_REVERSEFETCH_DISABLE
+#define MCUXCLCSS_ECC_REVERSEFETCH_ENABLE MCUXCLELS_ECC_REVERSEFETCH_ENABLE
+#define MCUXCLCSS_ECC_RTF MCUXCLELS_ECC_RTF
+#define MCUXCLCSS_ECC_SIGNATURE_R_SIZE MCUXCLELS_ECC_SIGNATURE_R_SIZE
+#define MCUXCLCSS_ECC_SIGNATURE_SIZE MCUXCLELS_ECC_SIGNATURE_SIZE
+#define MCUXCLCSS_ECC_SKIP_PUBLIC_KEY MCUXCLELS_ECC_SKIP_PUBLIC_KEY
+#define MCUXCLCSS_ECC_VALUE_HASHED MCUXCLELS_ECC_VALUE_HASHED
+#define MCUXCLCSS_ECC_VALUE_NOT_HASHED MCUXCLELS_ECC_VALUE_NOT_HASHED
+#define MCUXCLCSS_ECC_VALUE_NO_RTF MCUXCLELS_ECC_VALUE_NO_RTF
+#define MCUXCLCSS_ECC_VALUE_RTF MCUXCLELS_ECC_VALUE_RTF
+#define MCUXCLCSS_ERROR_FLAGS_CLEAR MCUXCLELS_ERROR_FLAGS_CLEAR
+#define MCUXCLCSS_ERROR_FLAGS_KEEP MCUXCLELS_ERROR_FLAGS_KEEP
+#define MCUXCLCSS_GLITCHDETECTOR_CFG_SIZE MCUXCLELS_GLITCHDETECTOR_CFG_SIZE
+#define MCUXCLCSS_GLITCHDETECTOR_TRIM_SIZE MCUXCLELS_GLITCHDETECTOR_TRIM_SIZE
+#define MCUXCLCSS_GLITCH_DETECTOR_INTERRUPT_DISABLE MCUXCLELS_GLITCH_DETECTOR_INTERRUPT_DISABLE
+#define MCUXCLCSS_GLITCH_DETECTOR_INTERRUPT_ENABLE MCUXCLELS_GLITCH_DETECTOR_INTERRUPT_ENABLE
+#define MCUXCLCSS_GLITCH_DETECTOR_NEG_KEEP MCUXCLELS_GLITCH_DETECTOR_NEG_KEEP
+#define MCUXCLCSS_GLITCH_DETECTOR_NEG_SET MCUXCLELS_GLITCH_DETECTOR_NEG_SET
+#define MCUXCLCSS_GLITCH_DETECTOR_POS_KEEP MCUXCLELS_GLITCH_DETECTOR_POS_KEEP
+#define MCUXCLCSS_GLITCH_DETECTOR_POS_SET MCUXCLELS_GLITCH_DETECTOR_POS_SET
+#define MCUXCLCSS_GLITCH_DETECTOR_RESET_CLEAR MCUXCLELS_GLITCH_DETECTOR_RESET_CLEAR
+#define MCUXCLCSS_GLITCH_DETECTOR_RESET_KEEP MCUXCLELS_GLITCH_DETECTOR_RESET_KEEP
+#define MCUXCLCSS_HASH_BLOCK_SIZE_SHA_224 MCUXCLELS_HASH_BLOCK_SIZE_SHA_224
+#define MCUXCLCSS_HASH_BLOCK_SIZE_SHA_256 MCUXCLELS_HASH_BLOCK_SIZE_SHA_256
+#define MCUXCLCSS_HASH_BLOCK_SIZE_SHA_384 MCUXCLELS_HASH_BLOCK_SIZE_SHA_384
+#define MCUXCLCSS_HASH_BLOCK_SIZE_SHA_512 MCUXCLELS_HASH_BLOCK_SIZE_SHA_512
+#define MCUXCLCSS_HASH_INIT_DISABLE MCUXCLELS_HASH_INIT_DISABLE
+#define MCUXCLCSS_HASH_INIT_ENABLE MCUXCLELS_HASH_INIT_ENABLE
+#define MCUXCLCSS_HASH_LOAD_DISABLE MCUXCLELS_HASH_LOAD_DISABLE
+#define MCUXCLCSS_HASH_LOAD_ENABLE MCUXCLELS_HASH_LOAD_ENABLE
+#define MCUXCLCSS_HASH_MODE_SHA_224 MCUXCLELS_HASH_MODE_SHA_224
+#define MCUXCLCSS_HASH_MODE_SHA_256 MCUXCLELS_HASH_MODE_SHA_256
+#define MCUXCLCSS_HASH_MODE_SHA_384 MCUXCLELS_HASH_MODE_SHA_384
+#define MCUXCLCSS_HASH_MODE_SHA_512 MCUXCLELS_HASH_MODE_SHA_512
+#define MCUXCLCSS_HASH_OUTPUT_DISABLE MCUXCLELS_HASH_OUTPUT_DISABLE
+#define MCUXCLCSS_HASH_OUTPUT_ENABLE MCUXCLELS_HASH_OUTPUT_ENABLE
+#define MCUXCLCSS_HASH_OUTPUT_SIZE_SHA_224 MCUXCLELS_HASH_OUTPUT_SIZE_SHA_224
+#define MCUXCLCSS_HASH_OUTPUT_SIZE_SHA_256 MCUXCLELS_HASH_OUTPUT_SIZE_SHA_256
+#define MCUXCLCSS_HASH_OUTPUT_SIZE_SHA_384 MCUXCLELS_HASH_OUTPUT_SIZE_SHA_384
+#define MCUXCLCSS_HASH_OUTPUT_SIZE_SHA_512 MCUXCLELS_HASH_OUTPUT_SIZE_SHA_512
+#define MCUXCLCSS_HASH_RTF_OUTPUT_DISABLE MCUXCLELS_HASH_RTF_OUTPUT_DISABLE
+#define MCUXCLCSS_HASH_RTF_OUTPUT_ENABLE MCUXCLELS_HASH_RTF_OUTPUT_ENABLE
+#define MCUXCLCSS_HASH_RTF_OUTPUT_SIZE MCUXCLELS_HASH_RTF_OUTPUT_SIZE
+#define MCUXCLCSS_HASH_RTF_UPDATE_DISABLE MCUXCLELS_HASH_RTF_UPDATE_DISABLE
+#define MCUXCLCSS_HASH_RTF_UPDATE_ENABLE MCUXCLELS_HASH_RTF_UPDATE_ENABLE
+#define MCUXCLCSS_HASH_STATE_SIZE_SHA_224 MCUXCLELS_HASH_STATE_SIZE_SHA_224
+#define MCUXCLCSS_HASH_STATE_SIZE_SHA_256 MCUXCLELS_HASH_STATE_SIZE_SHA_256
+#define MCUXCLCSS_HASH_STATE_SIZE_SHA_384 MCUXCLELS_HASH_STATE_SIZE_SHA_384
+#define MCUXCLCSS_HASH_STATE_SIZE_SHA_512 MCUXCLELS_HASH_STATE_SIZE_SHA_512
+#define MCUXCLCSS_HASH_VALUE_MODE_SHA_224 MCUXCLELS_HASH_VALUE_MODE_SHA_224
+#define MCUXCLCSS_HASH_VALUE_MODE_SHA_256 MCUXCLELS_HASH_VALUE_MODE_SHA_256
+#define MCUXCLCSS_HASH_VALUE_MODE_SHA_384 MCUXCLELS_HASH_VALUE_MODE_SHA_384
+#define MCUXCLCSS_HASH_VALUE_MODE_SHA_512 MCUXCLELS_HASH_VALUE_MODE_SHA_512
+#define MCUXCLCSS_HKDF_ALGO_RFC5869 MCUXCLELS_HKDF_ALGO_RFC5869
+#define MCUXCLCSS_HKDF_ALGO_SP80056C MCUXCLELS_HKDF_ALGO_SP80056C
+#define MCUXCLCSS_HKDF_RFC5869_DERIVATIONDATA_SIZE MCUXCLELS_HKDF_RFC5869_DERIVATIONDATA_SIZE
+#define MCUXCLCSS_HKDF_SP80056C_TARGETKEY_SIZE MCUXCLELS_HKDF_SP80056C_TARGETKEY_SIZE
+#define MCUXCLCSS_HKDF_VALUE_MEMORY_DERIV MCUXCLELS_HKDF_VALUE_MEMORY_DERIV
+#define MCUXCLCSS_HKDF_VALUE_RTF_DERIV MCUXCLELS_HKDF_VALUE_RTF_DERIV
+#define MCUXCLCSS_HMAC_EXTERNAL_KEY_DISABLE MCUXCLELS_HMAC_EXTERNAL_KEY_DISABLE
+#define MCUXCLCSS_HMAC_EXTERNAL_KEY_ENABLE MCUXCLELS_HMAC_EXTERNAL_KEY_ENABLE
+#define MCUXCLCSS_HMAC_OUTPUT_SIZE MCUXCLELS_HMAC_OUTPUT_SIZE
+#define MCUXCLCSS_HMAC_PADDED_KEY_SIZE MCUXCLELS_HMAC_PADDED_KEY_SIZE
+#define MCUXCLCSS_HW_VERSION MCUXCLELS_HW_VERSION
+#define MCUXCLCSS_KEYGEN_VALUE_DETERMINISTIC MCUXCLELS_KEYGEN_VALUE_DETERMINISTIC
+#define MCUXCLCSS_KEYGEN_VALUE_GEN_PUB_KEY MCUXCLELS_KEYGEN_VALUE_GEN_PUB_KEY
+#define MCUXCLCSS_KEYGEN_VALUE_NO_PUB_KEY MCUXCLELS_KEYGEN_VALUE_NO_PUB_KEY
+#define MCUXCLCSS_KEYGEN_VALUE_NO_RANDOM_DATA MCUXCLELS_KEYGEN_VALUE_NO_RANDOM_DATA
+#define MCUXCLCSS_KEYGEN_VALUE_RANDOM MCUXCLELS_KEYGEN_VALUE_RANDOM
+#define MCUXCLCSS_KEYGEN_VALUE_SIGN_PUBLICKEY MCUXCLELS_KEYGEN_VALUE_SIGN_PUBLICKEY
+#define MCUXCLCSS_KEYGEN_VALUE_TYPE_KEYEXCHANGE MCUXCLELS_KEYGEN_VALUE_TYPE_KEYEXCHANGE
+#define MCUXCLCSS_KEYGEN_VALUE_TYPE_SIGN MCUXCLELS_KEYGEN_VALUE_TYPE_SIGN
+#define MCUXCLCSS_KEYGEN_VALUE_USE_RANDOM_DATA MCUXCLELS_KEYGEN_VALUE_USE_RANDOM_DATA
+#define MCUXCLCSS_KEYIMPORT_KFMT_PBK MCUXCLELS_KEYIMPORT_KFMT_PBK
+#define MCUXCLCSS_KEYIMPORT_KFMT_PUF MCUXCLELS_KEYIMPORT_KFMT_PUF
+#define MCUXCLCSS_KEYIMPORT_KFMT_RFC3394 MCUXCLELS_KEYIMPORT_KFMT_RFC3394
+#define MCUXCLCSS_KEYIMPORT_KFMT_UDF MCUXCLELS_KEYIMPORT_KFMT_UDF
+#define MCUXCLCSS_KEYIMPORT_REVERSEFETCH_DISABLE MCUXCLELS_KEYIMPORT_REVERSEFETCH_DISABLE
+#define MCUXCLCSS_KEYIMPORT_REVERSEFETCH_ENABLE MCUXCLELS_KEYIMPORT_REVERSEFETCH_ENABLE
+#define MCUXCLCSS_KEYIMPORT_VALUE_KFMT_PBK MCUXCLELS_KEYIMPORT_VALUE_KFMT_PBK
+#define MCUXCLCSS_KEYIMPORT_VALUE_KFMT_PUF MCUXCLELS_KEYIMPORT_VALUE_KFMT_PUF
+#define MCUXCLCSS_KEYIMPORT_VALUE_KFMT_RFC3394 MCUXCLELS_KEYIMPORT_VALUE_KFMT_RFC3394
+#define MCUXCLCSS_KEYIMPORT_VALUE_KFMT_UDF MCUXCLELS_KEYIMPORT_VALUE_KFMT_UDF
+#define MCUXCLCSS_KEYPROPERTY_ACTIVE_FALSE MCUXCLELS_KEYPROPERTY_ACTIVE_FALSE
+#define MCUXCLCSS_KEYPROPERTY_ACTIVE_TRUE MCUXCLELS_KEYPROPERTY_ACTIVE_TRUE
+#define MCUXCLCSS_KEYPROPERTY_AES_FALSE MCUXCLELS_KEYPROPERTY_AES_FALSE
+#define MCUXCLCSS_KEYPROPERTY_AES_TRUE MCUXCLELS_KEYPROPERTY_AES_TRUE
+#define MCUXCLCSS_KEYPROPERTY_BASE_SLOT MCUXCLELS_KEYPROPERTY_BASE_SLOT
+#define MCUXCLCSS_KEYPROPERTY_CKDF_FALSE MCUXCLELS_KEYPROPERTY_CKDF_FALSE
+#define MCUXCLCSS_KEYPROPERTY_CKDF_TRUE MCUXCLELS_KEYPROPERTY_CKDF_TRUE
+#define MCUXCLCSS_KEYPROPERTY_CMAC_FALSE MCUXCLELS_KEYPROPERTY_CMAC_FALSE
+#define MCUXCLCSS_KEYPROPERTY_CMAC_TRUE MCUXCLELS_KEYPROPERTY_CMAC_TRUE
+#define MCUXCLCSS_KEYPROPERTY_DEVICE_UNIQUE_FALSE MCUXCLELS_KEYPROPERTY_DEVICE_UNIQUE_FALSE
+#define MCUXCLCSS_KEYPROPERTY_DEVICE_UNIQUE_TRUE MCUXCLELS_KEYPROPERTY_DEVICE_UNIQUE_TRUE
+#define MCUXCLCSS_KEYPROPERTY_ECC_DH_PRIVATE_FALSE MCUXCLELS_KEYPROPERTY_ECC_DH_PRIVATE_FALSE
+#define MCUXCLCSS_KEYPROPERTY_ECC_DH_PRIVATE_TRUE MCUXCLELS_KEYPROPERTY_ECC_DH_PRIVATE_TRUE
+#define MCUXCLCSS_KEYPROPERTY_ECC_FALSE MCUXCLELS_KEYPROPERTY_ECC_FALSE
+#define MCUXCLCSS_KEYPROPERTY_ECC_TRUE MCUXCLELS_KEYPROPERTY_ECC_TRUE
+#define MCUXCLCSS_KEYPROPERTY_GENERAL_PURPOSE_SLOT_FALSE MCUXCLELS_KEYPROPERTY_GENERAL_PURPOSE_SLOT_FALSE
+#define MCUXCLCSS_KEYPROPERTY_GENERAL_PURPOSE_SLOT_TRUE MCUXCLELS_KEYPROPERTY_GENERAL_PURPOSE_SLOT_TRUE
+#define MCUXCLCSS_KEYPROPERTY_HKDF_FALSE MCUXCLELS_KEYPROPERTY_HKDF_FALSE
+#define MCUXCLCSS_KEYPROPERTY_HKDF_TRUE MCUXCLELS_KEYPROPERTY_HKDF_TRUE
+#define MCUXCLCSS_KEYPROPERTY_HMAC_FALSE MCUXCLELS_KEYPROPERTY_HMAC_FALSE
+#define MCUXCLCSS_KEYPROPERTY_HMAC_TRUE MCUXCLELS_KEYPROPERTY_HMAC_TRUE
+#define MCUXCLCSS_KEYPROPERTY_HW_OUT_FALSE MCUXCLELS_KEYPROPERTY_HW_OUT_FALSE
+#define MCUXCLCSS_KEYPROPERTY_HW_OUT_SLOT_FALSE MCUXCLELS_KEYPROPERTY_HW_OUT_SLOT_FALSE
+#define MCUXCLCSS_KEYPROPERTY_HW_OUT_SLOT_TRUE MCUXCLELS_KEYPROPERTY_HW_OUT_SLOT_TRUE
+#define MCUXCLCSS_KEYPROPERTY_HW_OUT_TRUE MCUXCLELS_KEYPROPERTY_HW_OUT_TRUE
+#define MCUXCLCSS_KEYPROPERTY_INPUT_FOR_ECC_FALSE MCUXCLELS_KEYPROPERTY_INPUT_FOR_ECC_FALSE
+#define MCUXCLCSS_KEYPROPERTY_INPUT_FOR_ECC_TRUE MCUXCLELS_KEYPROPERTY_INPUT_FOR_ECC_TRUE
+#define MCUXCLCSS_KEYPROPERTY_KEY_SIZE_128 MCUXCLELS_KEYPROPERTY_KEY_SIZE_128
+#define MCUXCLCSS_KEYPROPERTY_KEY_SIZE_256 MCUXCLELS_KEYPROPERTY_KEY_SIZE_256
+#define MCUXCLCSS_KEYPROPERTY_KEY_SIZE_512 MCUXCLELS_KEYPROPERTY_KEY_SIZE_512
+#define MCUXCLCSS_KEYPROPERTY_KSK_FALSE MCUXCLELS_KEYPROPERTY_KSK_FALSE
+#define MCUXCLCSS_KEYPROPERTY_KSK_TRUE MCUXCLELS_KEYPROPERTY_KSK_TRUE
+#define MCUXCLCSS_KEYPROPERTY_KUOK_FALSE MCUXCLELS_KEYPROPERTY_KUOK_FALSE
+#define MCUXCLCSS_KEYPROPERTY_KUOK_TRUE MCUXCLELS_KEYPROPERTY_KUOK_TRUE
+#define MCUXCLCSS_KEYPROPERTY_KWK_FALSE MCUXCLELS_KEYPROPERTY_KWK_FALSE
+#define MCUXCLCSS_KEYPROPERTY_KWK_TRUE MCUXCLELS_KEYPROPERTY_KWK_TRUE
+#define MCUXCLCSS_KEYPROPERTY_PRIVILEGED_FALSE MCUXCLELS_KEYPROPERTY_PRIVILEGED_FALSE
+#define MCUXCLCSS_KEYPROPERTY_PRIVILEGED_TRUE MCUXCLELS_KEYPROPERTY_PRIVILEGED_TRUE
+#define MCUXCLCSS_KEYPROPERTY_PUK_FALSE MCUXCLELS_KEYPROPERTY_PUK_FALSE
+#define MCUXCLCSS_KEYPROPERTY_PUK_TRUE MCUXCLELS_KEYPROPERTY_PUK_TRUE
+#define MCUXCLCSS_KEYPROPERTY_RETENTION_SLOT_FALSE MCUXCLELS_KEYPROPERTY_RETENTION_SLOT_FALSE
+#define MCUXCLCSS_KEYPROPERTY_RETENTION_SLOT_TRUE MCUXCLELS_KEYPROPERTY_RETENTION_SLOT_TRUE
+#define MCUXCLCSS_KEYPROPERTY_RTF_FALSE MCUXCLELS_KEYPROPERTY_RTF_FALSE
+#define MCUXCLCSS_KEYPROPERTY_RTF_TRUE MCUXCLELS_KEYPROPERTY_RTF_TRUE
+#define MCUXCLCSS_KEYPROPERTY_SECOND_SLOT MCUXCLELS_KEYPROPERTY_SECOND_SLOT
+#define MCUXCLCSS_KEYPROPERTY_SECURE_FALSE MCUXCLELS_KEYPROPERTY_SECURE_FALSE
+#define MCUXCLCSS_KEYPROPERTY_SECURE_TRUE MCUXCLELS_KEYPROPERTY_SECURE_TRUE
+#define MCUXCLCSS_KEYPROPERTY_TECDH_FALSE MCUXCLELS_KEYPROPERTY_TECDH_FALSE
+#define MCUXCLCSS_KEYPROPERTY_TECDH_TRUE MCUXCLELS_KEYPROPERTY_TECDH_TRUE
+#define MCUXCLCSS_KEYPROPERTY_TLS_MASTER_SECRET_FALSE MCUXCLELS_KEYPROPERTY_TLS_MASTER_SECRET_FALSE
+#define MCUXCLCSS_KEYPROPERTY_TLS_MASTER_SECRET_TRUE MCUXCLELS_KEYPROPERTY_TLS_MASTER_SECRET_TRUE
+#define MCUXCLCSS_KEYPROPERTY_TLS_PREMASTER_SECRET_FALSE MCUXCLELS_KEYPROPERTY_TLS_PREMASTER_SECRET_FALSE
+#define MCUXCLCSS_KEYPROPERTY_TLS_PREMASTER_SECRET_TRUE MCUXCLELS_KEYPROPERTY_TLS_PREMASTER_SECRET_TRUE
+#define MCUXCLCSS_KEYPROPERTY_VALUE_ACTIVE MCUXCLELS_KEYPROPERTY_VALUE_ACTIVE
+#define MCUXCLCSS_KEYPROPERTY_VALUE_AES MCUXCLELS_KEYPROPERTY_VALUE_AES
+#define MCUXCLCSS_KEYPROPERTY_VALUE_BASE_SLOT MCUXCLELS_KEYPROPERTY_VALUE_BASE_SLOT
+#define MCUXCLCSS_KEYPROPERTY_VALUE_CKDF MCUXCLELS_KEYPROPERTY_VALUE_CKDF
+#define MCUXCLCSS_KEYPROPERTY_VALUE_CMAC MCUXCLELS_KEYPROPERTY_VALUE_CMAC
+#define MCUXCLCSS_KEYPROPERTY_VALUE_DUK MCUXCLELS_KEYPROPERTY_VALUE_DUK
+#define MCUXCLCSS_KEYPROPERTY_VALUE_ECDH MCUXCLELS_KEYPROPERTY_VALUE_ECDH
+#define MCUXCLCSS_KEYPROPERTY_VALUE_ECSGN MCUXCLELS_KEYPROPERTY_VALUE_ECSGN
+#define MCUXCLCSS_KEYPROPERTY_VALUE_GENERAL_PURPOSE_SLOT MCUXCLELS_KEYPROPERTY_VALUE_GENERAL_PURPOSE_SLOT
+#define MCUXCLCSS_KEYPROPERTY_VALUE_HKDF MCUXCLELS_KEYPROPERTY_VALUE_HKDF
+#define MCUXCLCSS_KEYPROPERTY_VALUE_HMAC MCUXCLELS_KEYPROPERTY_VALUE_HMAC
+#define MCUXCLCSS_KEYPROPERTY_VALUE_HW_OUT MCUXCLELS_KEYPROPERTY_VALUE_HW_OUT
+#define MCUXCLCSS_KEYPROPERTY_VALUE_HW_OUT_SLOT MCUXCLELS_KEYPROPERTY_VALUE_HW_OUT_SLOT
+#define MCUXCLCSS_KEYPROPERTY_VALUE_KEY_SIZE_128 MCUXCLELS_KEYPROPERTY_VALUE_KEY_SIZE_128
+#define MCUXCLCSS_KEYPROPERTY_VALUE_KEY_SIZE_256 MCUXCLELS_KEYPROPERTY_VALUE_KEY_SIZE_256
+#define MCUXCLCSS_KEYPROPERTY_VALUE_KEY_SIZE_512 MCUXCLELS_KEYPROPERTY_VALUE_KEY_SIZE_512
+#define MCUXCLCSS_KEYPROPERTY_VALUE_KGSRC MCUXCLELS_KEYPROPERTY_VALUE_KGSRC
+#define MCUXCLCSS_KEYPROPERTY_VALUE_KSK MCUXCLELS_KEYPROPERTY_VALUE_KSK
+#define MCUXCLCSS_KEYPROPERTY_VALUE_KUOK MCUXCLELS_KEYPROPERTY_VALUE_KUOK
+#define MCUXCLCSS_KEYPROPERTY_VALUE_KWK MCUXCLELS_KEYPROPERTY_VALUE_KWK
+#define MCUXCLCSS_KEYPROPERTY_VALUE_NOTPRIVILEGED MCUXCLELS_KEYPROPERTY_VALUE_NOTPRIVILEGED
+#define MCUXCLCSS_KEYPROPERTY_VALUE_NOTSECURE MCUXCLELS_KEYPROPERTY_VALUE_NOTSECURE
+#define MCUXCLCSS_KEYPROPERTY_VALUE_PRIVILEGED MCUXCLELS_KEYPROPERTY_VALUE_PRIVILEGED
+#define MCUXCLCSS_KEYPROPERTY_VALUE_PUK MCUXCLELS_KEYPROPERTY_VALUE_PUK
+#define MCUXCLCSS_KEYPROPERTY_VALUE_RETENTION_SLOT MCUXCLELS_KEYPROPERTY_VALUE_RETENTION_SLOT
+#define MCUXCLCSS_KEYPROPERTY_VALUE_RTF MCUXCLELS_KEYPROPERTY_VALUE_RTF
+#define MCUXCLCSS_KEYPROPERTY_VALUE_SECURE MCUXCLELS_KEYPROPERTY_VALUE_SECURE
+#define MCUXCLCSS_KEYPROPERTY_VALUE_TECDH MCUXCLELS_KEYPROPERTY_VALUE_TECDH
+#define MCUXCLCSS_KEYPROPERTY_VALUE_TLS_MASTER_SECRET MCUXCLELS_KEYPROPERTY_VALUE_TLS_MASTER_SECRET
+#define MCUXCLCSS_KEYPROPERTY_VALUE_TLS_PREMASTER_SECRET MCUXCLELS_KEYPROPERTY_VALUE_TLS_PREMASTER_SECRET
+#define MCUXCLCSS_KEYPROPERTY_VALUE_WRPOK MCUXCLELS_KEYPROPERTY_VALUE_WRPOK
+#define MCUXCLCSS_KEYPROPERTY_WRAP_FALSE MCUXCLELS_KEYPROPERTY_WRAP_FALSE
+#define MCUXCLCSS_KEYPROPERTY_WRAP_TRUE MCUXCLELS_KEYPROPERTY_WRAP_TRUE
+#define MCUXCLCSS_KEYPROV_DUK_UPDATE_DISABLE MCUXCLELS_KEYPROV_DUK_UPDATE_DISABLE
+#define MCUXCLCSS_KEYPROV_DUK_UPDATE_ENABLE MCUXCLELS_KEYPROV_DUK_UPDATE_ENABLE
+#define MCUXCLCSS_KEYPROV_KEYSHARE_TABLE_SIZE MCUXCLELS_KEYPROV_KEYSHARE_TABLE_SIZE
+#define MCUXCLCSS_KEYPROV_KEY_PART_1_SIZE MCUXCLELS_KEYPROV_KEY_PART_1_SIZE
+#define MCUXCLCSS_KEYPROV_NOIC_DISABLE MCUXCLELS_KEYPROV_NOIC_DISABLE
+#define MCUXCLCSS_KEYPROV_NOIC_ENABLE MCUXCLELS_KEYPROV_NOIC_ENABLE
+#define MCUXCLCSS_KEYPROV_TESTERSHARE_SIZE MCUXCLELS_KEYPROV_TESTERSHARE_SIZE
+#define MCUXCLCSS_KEYPROV_VALUE_NOIC MCUXCLELS_KEYPROV_VALUE_NOIC
+#define MCUXCLCSS_KEY_SLOTS MCUXCLELS_KEY_SLOTS
+#define MCUXCLCSS_MASTER_UNLOCK_ANY MCUXCLELS_MASTER_UNLOCK_ANY
+#define MCUXCLCSS_RESET_CANCEL MCUXCLELS_RESET_CANCEL
+#define MCUXCLCSS_RESET_DO_NOT_CANCEL MCUXCLELS_RESET_DO_NOT_CANCEL
+#define MCUXCLCSS_RESP_GEN_AVAILABLE_SLOT_0 MCUXCLELS_RESP_GEN_AVAILABLE_SLOT_0
+#define MCUXCLCSS_RESP_GEN_AVAILABLE_SLOT_1 MCUXCLELS_RESP_GEN_AVAILABLE_SLOT_1
+#define MCUXCLCSS_RESP_GEN_AVAILABLE_SLOT_2 MCUXCLELS_RESP_GEN_AVAILABLE_SLOT_2
+#define MCUXCLCSS_RESP_GEN_SLOTS MCUXCLELS_RESP_GEN_SLOTS
+#define MCUXCLCSS_RFC3394_CONTAINER_SIZE_128 MCUXCLELS_RFC3394_CONTAINER_SIZE_128
+#define MCUXCLCSS_RFC3394_CONTAINER_SIZE_256 MCUXCLELS_RFC3394_CONTAINER_SIZE_256
+#define MCUXCLCSS_RFC3394_CONTAINER_SIZE_P256 MCUXCLELS_RFC3394_CONTAINER_SIZE_P256
+#define MCUXCLCSS_RFC3394_OVERHEAD MCUXCLELS_RFC3394_OVERHEAD
+#define MCUXCLCSS_RNG_DRBG_TEST_EXTRACT_OUTPUT_MAX_SIZE MCUXCLELS_RNG_DRBG_TEST_EXTRACT_OUTPUT_MAX_SIZE
+#define MCUXCLCSS_RNG_DRBG_TEST_EXTRACT_OUTPUT_MIN_SIZE MCUXCLELS_RNG_DRBG_TEST_EXTRACT_OUTPUT_MIN_SIZE
+#define MCUXCLCSS_RNG_DRBG_TEST_MODE_AES_CTR MCUXCLELS_RNG_DRBG_TEST_MODE_AES_CTR
+#define MCUXCLCSS_RNG_DRBG_TEST_MODE_AES_ECB MCUXCLELS_RNG_DRBG_TEST_MODE_AES_ECB
+#define MCUXCLCSS_RNG_DRBG_TEST_MODE_EXTRACT MCUXCLELS_RNG_DRBG_TEST_MODE_EXTRACT
+#define MCUXCLCSS_RNG_DRBG_TEST_MODE_INSTANTIATE MCUXCLELS_RNG_DRBG_TEST_MODE_INSTANTIATE
+#define MCUXCLCSS_RNG_DTRNG_CONFIG_SIZE MCUXCLELS_RNG_DTRNG_CONFIG_SIZE
+#define MCUXCLCSS_RNG_DTRNG_EVAL_CONFIG_SIZE MCUXCLELS_RNG_DTRNG_EVAL_CONFIG_SIZE
+#define MCUXCLCSS_RNG_DTRNG_EVAL_RESULT_SIZE MCUXCLELS_RNG_DTRNG_EVAL_RESULT_SIZE
+#define MCUXCLCSS_RNG_RAW_ENTROPY_SIZE MCUXCLELS_RNG_RAW_ENTROPY_SIZE
+#define MCUXCLCSS_RNG_RND_REQ_PRND_INIT MCUXCLELS_RNG_RND_REQ_PRND_INIT
+#define MCUXCLCSS_RNG_RND_REQ_RND_RAW MCUXCLELS_RNG_RND_REQ_RND_RAW
+#define MCUXCLCSS_STATUS_DRBGENTLVL_HIGH MCUXCLELS_STATUS_DRBGENTLVL_HIGH
+#define MCUXCLCSS_STATUS_DRBGENTLVL_LOW MCUXCLELS_STATUS_DRBGENTLVL_LOW
+#define MCUXCLCSS_STATUS_DRBGENTLVL_NONE MCUXCLELS_STATUS_DRBGENTLVL_NONE
+#define MCUXCLCSS_STATUS_ECDSAVFY_ERROR MCUXCLELS_STATUS_ECDSAVFY_ERROR
+#define MCUXCLCSS_STATUS_ECDSAVFY_FAIL MCUXCLELS_STATUS_ECDSAVFY_FAIL
+#define MCUXCLCSS_STATUS_ECDSAVFY_NORUN MCUXCLELS_STATUS_ECDSAVFY_NORUN
+#define MCUXCLCSS_STATUS_ECDSAVFY_OK MCUXCLELS_STATUS_ECDSAVFY_OK
+#define MCUXCLCSS_STATUS_HW_ALGORITHM MCUXCLELS_STATUS_HW_ALGORITHM
+#define MCUXCLCSS_STATUS_HW_BUS MCUXCLELS_STATUS_HW_BUS
+#define MCUXCLCSS_STATUS_HW_DTRNG MCUXCLELS_STATUS_HW_DTRNG
+#define MCUXCLCSS_STATUS_HW_FAULT MCUXCLELS_STATUS_HW_FAULT
+#define MCUXCLCSS_STATUS_HW_INTEGRITY MCUXCLELS_STATUS_HW_INTEGRITY
+#define MCUXCLCSS_STATUS_HW_OPERATIONAL MCUXCLELS_STATUS_HW_OPERATIONAL
+#define MCUXCLCSS_STATUS_HW_PRNG MCUXCLELS_STATUS_HW_PRNG
+#define MCUXCLCSS_STATUS_IS_HW_ERROR MCUXCLELS_STATUS_IS_HW_ERROR
+#define MCUXCLCSS_STATUS_IS_SW_ERROR MCUXCLELS_STATUS_IS_SW_ERROR
+#define MCUXCLCSS_STATUS_OK MCUXCLELS_STATUS_OK
+#define MCUXCLCSS_STATUS_OK_WAIT MCUXCLELS_STATUS_OK_WAIT
+#define MCUXCLCSS_STATUS_PPROT_PRIVILEGED_NONSECURE MCUXCLELS_STATUS_PPROT_PRIVILEGED_NONSECURE
+#define MCUXCLCSS_STATUS_PPROT_PRIVILEGED_SECURE MCUXCLELS_STATUS_PPROT_PRIVILEGED_SECURE
+#define MCUXCLCSS_STATUS_PPROT_UNPRIVILEGED_NONSECURE MCUXCLELS_STATUS_PPROT_UNPRIVILEGED_NONSECURE
+#define MCUXCLCSS_STATUS_PPROT_UNPRIVILEGED_SECURE MCUXCLELS_STATUS_PPROT_UNPRIVILEGED_SECURE
+#define MCUXCLCSS_STATUS_SW_CANNOT_INTERRUPT MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT
+#define MCUXCLCSS_STATUS_SW_COMPARISON_FAILED MCUXCLELS_STATUS_SW_COMPARISON_FAILED
+#define MCUXCLCSS_STATUS_SW_COUNTER_EXPIRED MCUXCLELS_STATUS_SW_COUNTER_EXPIRED
+#define MCUXCLCSS_STATUS_SW_FAULT MCUXCLELS_STATUS_SW_FAULT
+#define MCUXCLCSS_STATUS_SW_INVALID_PARAM MCUXCLELS_STATUS_SW_INVALID_PARAM
+#define MCUXCLCSS_STATUS_SW_INVALID_STATE MCUXCLELS_STATUS_SW_INVALID_STATE
+#define MCUXCLCSS_STATUS_SW_LOCKING_FAILED MCUXCLELS_STATUS_SW_LOCKING_FAILED
+#define MCUXCLCSS_STATUS_SW_STATUS_LOCKED MCUXCLELS_STATUS_SW_STATUS_LOCKED
+#define MCUXCLCSS_TLS_DERIVATIONDATA_SIZE MCUXCLELS_TLS_DERIVATIONDATA_SIZE
+#define MCUXCLCSS_TLS_FINALIZE MCUXCLELS_TLS_FINALIZE
+#define MCUXCLCSS_TLS_INIT MCUXCLELS_TLS_INIT
+#define MCUXCLCSS_TLS_RANDOM_SIZE MCUXCLELS_TLS_RANDOM_SIZE
+
+
+/* Public types */
+/**
+ * mcuxClCss_((?:AeadOption_t|CipherOption_t|CkdfOption_t|CmacOption_t|CommandCrcConfig_t|EccByte_t|EccKeyExchOption_t|EccKeyGenOption_t|EccSignOption_t|EccVerifyOption_t|ErrorHandling_t|HashOption_t|HkdfOption_t|HmacOption_t|HwConfig_t|HwState_t|HwVersion_t|InterruptOptionEn_t|InterruptOptionRst_t|InterruptOptionSet_t|KeyImportOption_t|KeyIndex_t|KeyProp_t|KeyProvisionOption_t|ResetOption_t|Status_Protected_t|Status_t|TlsOption_t|TransferToRegisterFunction_t))(?!\w)
+ * -->
+ * mcuxClEls_\1
+ */
+#define mcuxClCss_AeadOption_t mcuxClEls_AeadOption_t
+#define mcuxClCss_CipherOption_t mcuxClEls_CipherOption_t
+#define mcuxClCss_CkdfOption_t mcuxClEls_CkdfOption_t
+#define mcuxClCss_CmacOption_t mcuxClEls_CmacOption_t
+#define mcuxClCss_CommandCrcConfig_t mcuxClEls_CommandCrcConfig_t
+#define mcuxClCss_EccByte_t mcuxClEls_EccByte_t
+#define mcuxClCss_EccKeyExchOption_t mcuxClEls_EccKeyExchOption_t
+#define mcuxClCss_EccKeyGenOption_t mcuxClEls_EccKeyGenOption_t
+#define mcuxClCss_EccSignOption_t mcuxClEls_EccSignOption_t
+#define mcuxClCss_EccVerifyOption_t mcuxClEls_EccVerifyOption_t
+#define mcuxClCss_ErrorHandling_t mcuxClEls_ErrorHandling_t
+#define mcuxClCss_HashOption_t mcuxClEls_HashOption_t
+#define mcuxClCss_HkdfOption_t mcuxClEls_HkdfOption_t
+#define mcuxClCss_HmacOption_t mcuxClEls_HmacOption_t
+#define mcuxClCss_HwConfig_t mcuxClEls_HwConfig_t
+#define mcuxClCss_HwState_t mcuxClEls_HwState_t
+#define mcuxClCss_HwVersion_t mcuxClEls_HwVersion_t
+#define mcuxClCss_InterruptOptionEn_t mcuxClEls_InterruptOptionEn_t
+#define mcuxClCss_InterruptOptionRst_t mcuxClEls_InterruptOptionRst_t
+#define mcuxClCss_InterruptOptionSet_t mcuxClEls_InterruptOptionSet_t
+#define mcuxClCss_KeyImportOption_t mcuxClEls_KeyImportOption_t
+#define mcuxClCss_KeyIndex_t mcuxClEls_KeyIndex_t
+#define mcuxClCss_KeyProp_t mcuxClEls_KeyProp_t
+#define mcuxClCss_KeyProvisionOption_t mcuxClEls_KeyProvisionOption_t
+#define mcuxClCss_ResetOption_t mcuxClEls_ResetOption_t
+#define mcuxClCss_Status_Protected_t mcuxClEls_Status_Protected_t
+#define mcuxClCss_Status_t mcuxClEls_Status_t
+#define mcuxClCss_TlsOption_t mcuxClEls_TlsOption_t
+#define mcuxClCss_TransferToRegisterFunction_t mcuxClEls_TransferToRegisterFunction_t
+
+
+/* Public functions */
+/**
+ * mcuxClCss_((?:Aead_Finalize_Async|Aead_Init_Async|Aead_PartialInit_Async|Aead_UpdateAad_Async|Aead_UpdateData_Async|Cipher_Async|Ckdf_Sp800108_Async|Ckdf_Sp80056c_Expand_Async|Ckdf_Sp80056c_Extract_Async|Cmac_Async|CompareDmaFinalOutputAddress|ConfigureCommandCRC|Disable|EccKeyExchangeInt_Async|EccKeyExchange_Async|EccKeyGen_Async|EccSign_Async|EccVerifyInt_Async|EccVerify_Async|Enable_Async|GetCommandCRC|GetErrorCode|GetErrorLevel|GetHwConfig|GetHwState|GetHwVersion|GetIntEnableFlags|GetKeyProperties|GetLastDmaAddress|GetLock|GetRandomStartDelay|GlitchDetector_GetEventCounter|GlitchDetector_LoadConfig_Async|GlitchDetector_ResetEventCounter|GlitchDetector_Trim_Async|Hash_Async|Hash_ShaDirect|Hkdf_Rfc5869_Async|Hkdf_Sp80056c_Async|Hmac_Async|IsLocked|KeyDelete_Async|KeyExport_Async|KeyImportPuk_Async|KeyImport_Async|KeyProvisionRom_Async|KeyProvision_Async|LimitedWaitForOperation|Prng_GetRandom|Prng_GetRandomWord|Prng_Init_Async|ReleaseLock|ResetErrorFlags|ResetIntFlags|Reset_Async|RespGen_Async|Rng_DrbgRequestRaw_Async|Rng_DrbgRequest_Async|Rng_DrbgTestAesCtr_Async|Rng_DrbgTestAesEcb_Async|Rng_DrbgTestExtract_Async|Rng_DrbgTestInstantiate_Async|Rng_Dtrng_ConfigEvaluate_Async|Rng_Dtrng_ConfigLoadPrv_Async|Rng_Dtrng_ConfigLoad_Async|SetIntEnableFlags|SetIntFlags|SetMasterUnlock|SetRandomStartDelay|ShaDirect_Disable|ShaDirect_Enable|TlsGenerateMasterKeyFromPreMasterKey_Async|TlsGenerateSessionKeysFromMasterKey_Async|UpdateRefCRC|VerifyVsRefCRC|WaitForOperation))(?!\w)
+ * -->
+ * mcuxClEls_\1
+ */
+#define mcuxClCss_Aead_Finalize_Async mcuxClEls_Aead_Finalize_Async
+#define mcuxClCss_Aead_Init_Async mcuxClEls_Aead_Init_Async
+#define mcuxClCss_Aead_PartialInit_Async mcuxClEls_Aead_PartialInit_Async
+#define mcuxClCss_Aead_UpdateAad_Async mcuxClEls_Aead_UpdateAad_Async
+#define mcuxClCss_Aead_UpdateData_Async mcuxClEls_Aead_UpdateData_Async
+#define mcuxClCss_Cipher_Async mcuxClEls_Cipher_Async
+#define mcuxClCss_Ckdf_Sp800108_Async mcuxClEls_Ckdf_Sp800108_Async
+#define mcuxClCss_Ckdf_Sp80056c_Expand_Async mcuxClEls_Ckdf_Sp80056c_Expand_Async
+#define mcuxClCss_Ckdf_Sp80056c_Extract_Async mcuxClEls_Ckdf_Sp80056c_Extract_Async
+#define mcuxClCss_Cmac_Async mcuxClEls_Cmac_Async
+#define mcuxClCss_CompareDmaFinalOutputAddress mcuxClEls_CompareDmaFinalOutputAddress
+#define mcuxClCss_ConfigureCommandCRC mcuxClEls_ConfigureCommandCRC
+#define mcuxClCss_Disable mcuxClEls_Disable
+#define mcuxClCss_EccKeyExchangeInt_Async mcuxClEls_EccKeyExchangeInt_Async
+#define mcuxClCss_EccKeyExchange_Async mcuxClEls_EccKeyExchange_Async
+#define mcuxClCss_EccKeyGen_Async mcuxClEls_EccKeyGen_Async
+#define mcuxClCss_EccSign_Async mcuxClEls_EccSign_Async
+#define mcuxClCss_EccVerifyInt_Async mcuxClEls_EccVerifyInt_Async
+#define mcuxClCss_EccVerify_Async mcuxClEls_EccVerify_Async
+#define mcuxClCss_Enable_Async mcuxClEls_Enable_Async
+#define mcuxClCss_GetCommandCRC mcuxClEls_GetCommandCRC
+#define mcuxClCss_GetErrorCode mcuxClEls_GetErrorCode
+#define mcuxClCss_GetErrorLevel mcuxClEls_GetErrorLevel
+#define mcuxClCss_GetHwConfig mcuxClEls_GetHwConfig
+#define mcuxClCss_GetHwState mcuxClEls_GetHwState
+#define mcuxClCss_GetHwVersion mcuxClEls_GetHwVersion
+#define mcuxClCss_GetIntEnableFlags mcuxClEls_GetIntEnableFlags
+#define mcuxClCss_GetKeyProperties mcuxClEls_GetKeyProperties
+#define mcuxClCss_GetLastDmaAddress mcuxClEls_GetLastDmaAddress
+#define mcuxClCss_GetLock mcuxClEls_GetLock
+#define mcuxClCss_GetRandomStartDelay mcuxClEls_GetRandomStartDelay
+#define mcuxClCss_GlitchDetector_GetEventCounter mcuxClEls_GlitchDetector_GetEventCounter
+#define mcuxClCss_GlitchDetector_LoadConfig_Async mcuxClEls_GlitchDetector_LoadConfig_Async
+#define mcuxClCss_GlitchDetector_ResetEventCounter mcuxClEls_GlitchDetector_ResetEventCounter
+#define mcuxClCss_GlitchDetector_Trim_Async mcuxClEls_GlitchDetector_Trim_Async
+#define mcuxClCss_Hash_Async mcuxClEls_Hash_Async
+#define mcuxClCss_Hash_ShaDirect mcuxClEls_Hash_ShaDirect
+#define mcuxClCss_Hkdf_Rfc5869_Async mcuxClEls_Hkdf_Rfc5869_Async
+#define mcuxClCss_Hkdf_Sp80056c_Async mcuxClEls_Hkdf_Sp80056c_Async
+#define mcuxClCss_Hmac_Async mcuxClEls_Hmac_Async
+#define mcuxClCss_IsLocked mcuxClEls_IsLocked
+#define mcuxClCss_KeyDelete_Async mcuxClEls_KeyDelete_Async
+#define mcuxClCss_KeyExport_Async mcuxClEls_KeyExport_Async
+#define mcuxClCss_KeyImportPuk_Async mcuxClEls_KeyImportPuk_Async
+#define mcuxClCss_KeyImport_Async mcuxClEls_KeyImport_Async
+#define mcuxClCss_KeyProvisionRom_Async mcuxClEls_KeyProvisionRom_Async
+#define mcuxClCss_KeyProvision_Async mcuxClEls_KeyProvision_Async
+#define mcuxClCss_LimitedWaitForOperation mcuxClEls_LimitedWaitForOperation
+#define mcuxClCss_Prng_GetRandom mcuxClEls_Prng_GetRandom
+#define mcuxClCss_Prng_GetRandomWord mcuxClEls_Prng_GetRandomWord
+#define mcuxClCss_Prng_Init_Async mcuxClEls_Prng_Init_Async
+#define mcuxClCss_ReleaseLock mcuxClEls_ReleaseLock
+#define mcuxClCss_ResetErrorFlags mcuxClEls_ResetErrorFlags
+#define mcuxClCss_ResetIntFlags mcuxClEls_ResetIntFlags
+#define mcuxClCss_Reset_Async mcuxClEls_Reset_Async
+#define mcuxClCss_RespGen_Async mcuxClEls_RespGen_Async
+#define mcuxClCss_Rng_DrbgRequestRaw_Async mcuxClEls_Rng_DrbgRequestRaw_Async
+#define mcuxClCss_Rng_DrbgRequest_Async mcuxClEls_Rng_DrbgRequest_Async
+#define mcuxClCss_Rng_DrbgTestAesCtr_Async mcuxClEls_Rng_DrbgTestAesCtr_Async
+#define mcuxClCss_Rng_DrbgTestAesEcb_Async mcuxClEls_Rng_DrbgTestAesEcb_Async
+#define mcuxClCss_Rng_DrbgTestExtract_Async mcuxClEls_Rng_DrbgTestExtract_Async
+#define mcuxClCss_Rng_DrbgTestInstantiate_Async mcuxClEls_Rng_DrbgTestInstantiate_Async
+#define mcuxClCss_Rng_Dtrng_ConfigEvaluate_Async mcuxClEls_Rng_Dtrng_ConfigEvaluate_Async
+#define mcuxClCss_Rng_Dtrng_ConfigLoadPrv_Async mcuxClEls_Rng_Dtrng_ConfigLoadPrv_Async
+#define mcuxClCss_Rng_Dtrng_ConfigLoad_Async mcuxClEls_Rng_Dtrng_ConfigLoad_Async
+#define mcuxClCss_SetIntEnableFlags mcuxClEls_SetIntEnableFlags
+#define mcuxClCss_SetIntFlags mcuxClEls_SetIntFlags
+#define mcuxClCss_SetMasterUnlock mcuxClEls_SetMasterUnlock
+#define mcuxClCss_SetRandomStartDelay mcuxClEls_SetRandomStartDelay
+#define mcuxClCss_ShaDirect_Disable mcuxClEls_ShaDirect_Disable
+#define mcuxClCss_ShaDirect_Enable mcuxClEls_ShaDirect_Enable
+#define mcuxClCss_TlsGenerateMasterKeyFromPreMasterKey_Async mcuxClEls_TlsGenerateMasterKeyFromPreMasterKey_Async
+#define mcuxClCss_TlsGenerateSessionKeysFromMasterKey_Async mcuxClEls_TlsGenerateSessionKeysFromMasterKey_Async
+#define mcuxClCss_UpdateRefCRC mcuxClEls_UpdateRefCRC
+#define mcuxClCss_VerifyVsRefCRC mcuxClEls_VerifyVsRefCRC
+#define mcuxClCss_WaitForOperation mcuxClEls_WaitForOperation
+
+/**
+ * There are also corresponding changes in other components:
+ * mcuxClMac_Mode_HMAC_SHA2_256_CSS -> mcuxClMac_Mode_HMAC_SHA2_256_ELS
+ * mcuxClRandomModes_Mode_CSS_Drbg -> mcuxClRandomModes_Mode_ELS_Drbg
+ */
+
+#endif /* MCUXCLELS_MAPPING_H_ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/src/mcuxClEls_Common.c b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/src/mcuxClEls_Common.c
new file mode 100644
index 00000000..0b04ab9a
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/src/mcuxClEls_Common.c
@@ -0,0 +1,383 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClEls_Common.c
+ * @brief ELS implementation for common functionality.
+ * This file implements the functions declared in mcuxClEls_Common.h and adds helper functions used by other implementation headers. */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_GetHwVersion)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetHwVersion(
+ mcuxClEls_HwVersion_t * result)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_GetHwVersion);
+ result->word.value = MCUXCLELS_SFR_READ(ELS_VERSION);
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GetHwVersion, MCUXCLELS_STATUS_OK);
+}
+
+#ifdef MCUXCL_FEATURE_ELS_HWCONFIG
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_GetHwConfig)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetHwConfig(
+ mcuxClEls_HwConfig_t * result)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_GetHwConfig);
+ result->word.value = MCUXCLELS_SFR_READ(ELS_CONFIG);
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GetHwConfig, MCUXCLELS_STATUS_OK);
+}
+#endif /* MCUXCL_FEATURE_ELS_HWCONFIG */
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_GetHwState)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetHwState(
+ mcuxClEls_HwState_t * result)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_GetHwState);
+ result->word.value = MCUXCLELS_SFR_READ(ELS_STATUS);
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GetHwState, MCUXCLELS_STATUS_OK);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_Enable_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Enable_Async(
+ void)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_Enable_Async);
+ const uint32_t sfrVal = MCUXCLELS_SFR_FIELD_FORMAT(ELS_CTRL, ELS_EN, 1u);
+ MCUXCLELS_SFR_WRITE(ELS_CTRL, sfrVal);
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_Enable_Async, MCUXCLELS_STATUS_OK_WAIT);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_Disable)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Disable(
+ void)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_Disable);
+ MCUXCLELS_SET_CTRL_FIELD(MCUXCLELS_SFR_CTRL_ELS_EN, 0u);
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_Disable, MCUXCLELS_STATUS_OK);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_GetErrorCode)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetErrorCode(
+ mcuxClEls_ErrorHandling_t errorHandling)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_GetErrorCode);
+
+ mcuxClEls_Status_t result = MCUXCLELS_STATUS_SW_FAULT;
+ if (1U == MCUXCLELS_GET_STATUS_FIELD(MCUXCLELS_SFR_STATUS_ELS_ERR))
+ {
+ if (MCUXCLELS_IS_ERROR_BIT_SET(MCUXCLELS_SFR_ERR_STATUS_FLT_ERR))
+ {
+ result = MCUXCLELS_STATUS_HW_FAULT;
+ }
+ else if (MCUXCLELS_IS_ERROR_BIT_SET(MCUXCLELS_SFR_ERR_STATUS_ITG_ERR))
+ {
+ result = MCUXCLELS_STATUS_HW_INTEGRITY;
+ }
+ else if (MCUXCLELS_IS_ERROR_BIT_SET(MCUXCLELS_SFR_ERR_STATUS_OPN_ERR))
+ {
+ result = MCUXCLELS_STATUS_HW_OPERATIONAL;
+ }
+ else if (MCUXCLELS_IS_ERROR_BIT_SET(MCUXCLELS_SFR_ERR_STATUS_ALG_ERR))
+ {
+ result = MCUXCLELS_STATUS_HW_ALGORITHM;
+ }
+ else if (MCUXCLELS_IS_ERROR_BIT_SET(MCUXCLELS_SFR_ERR_STATUS_BUS_ERR))
+ {
+ result = MCUXCLELS_STATUS_HW_BUS;
+ }
+ else if (MCUXCLELS_IS_ERROR_BIT_SET(MCUXCLELS_SFR_ERR_STATUS_PRNG_ERR))
+ {
+ result = MCUXCLELS_STATUS_HW_PRNG;
+ }
+ else if (MCUXCLELS_IS_ERROR_BIT_SET(MCUXCLELS_SFR_ERR_STATUS_DTRNG_ERR))
+ {
+ result = MCUXCLELS_STATUS_HW_DTRNG;
+ }
+ else
+ {
+ result = MCUXCLELS_STATUS_SW_FAULT;
+ }
+ }
+ else
+ {
+ result = MCUXCLELS_STATUS_OK;
+ }
+
+ if (MCUXCLELS_ERROR_FLAGS_CLEAR == errorHandling){
+ MCUX_CSSL_FP_FUNCTION_CALL_VOID(mcuxClEls_ResetErrorFlags()); /* always returns MCUXCLELS_STATUS_OK. */
+
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GetErrorCode, result,
+ MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEls_ResetErrorFlags));
+ }
+
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GetErrorCode, result);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_GetErrorLevel)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetErrorLevel(
+ mcuxClEls_ErrorHandling_t errorHandling,
+ uint32_t *errorLevel)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_GetErrorLevel);
+
+ *errorLevel = MCUXCLELS_GET_ERROR_STATUS_FIELD(MCUXCLELS_SFR_ERR_STATUS_ERR_LVL);
+
+ MCUX_CSSL_FP_FUNCTION_CALL(result, mcuxClEls_GetErrorCode(errorHandling));
+
+ /* Exit function with expectation: mcuxClEls_GetErrorCode was called unconditionally */
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GetErrorLevel, result,
+ MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEls_GetErrorCode));
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_WaitForOperation)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_WaitForOperation(
+ mcuxClEls_ErrorHandling_t errorHandling)
+{
+ /* Enter flow-protected function with expectation: mcuxClEls_GetErrorCode will be called (unconditionally) */
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_WaitForOperation,
+ MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEls_GetErrorCode));
+
+ while (mcuxClEls_isBusy())
+ {
+ // Do nothing
+ }
+
+ MCUX_CSSL_FP_FUNCTION_CALL(result, mcuxClEls_GetErrorCode(errorHandling));
+
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_WaitForOperation, result);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_LimitedWaitForOperation)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_LimitedWaitForOperation(
+ uint32_t counterLimit,
+ mcuxClEls_ErrorHandling_t errorHandling)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_LimitedWaitForOperation);
+
+ bool counterExpired = true;
+ while (0U != counterLimit)
+ {
+ if (!mcuxClEls_isBusy())
+ {
+ counterExpired = false;
+ break;
+ }
+ counterLimit--;
+ }
+
+ if (true == counterExpired)
+ {
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_LimitedWaitForOperation, MCUXCLELS_STATUS_SW_COUNTER_EXPIRED);
+ }
+
+ MCUX_CSSL_FP_FUNCTION_CALL(result, mcuxClEls_GetErrorCode(errorHandling));
+
+ /* Exit function with expectation: mcuxClEls_GetErrorCode was called */
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_LimitedWaitForOperation, result,
+ MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEls_GetErrorCode));
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_ResetErrorFlags)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_ResetErrorFlags(
+ void)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_ResetErrorFlags);
+ const uint32_t sfrVal = MCUXCLELS_SFR_FIELD_FORMAT(ELS_ERR_STATUS, CLR_ERR_CLR, MCUXCLELS_ERROR_FLAGS_CLEAR);
+ MCUXCLELS_SFR_WRITE(ELS_ERR_STATUS_CLR, sfrVal);
+ // Poll error bit to be sure that error bits has been cleared. Required by HW spec.
+ while(0u != MCUXCLELS_GET_STATUS_FIELD(MCUXCLELS_SFR_STATUS_ELS_ERR))
+ {
+ // Do nothing
+ }
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_ResetErrorFlags, MCUXCLELS_STATUS_OK);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_Reset_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_Reset_Async(
+ mcuxClEls_ResetOption_t options)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_Reset_Async);
+
+ if (mcuxClEls_isBusy() && (MCUXCLELS_RESET_DO_NOT_CANCEL == options))
+ {
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_Reset_Async, MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT);
+ }
+
+#ifdef MCUXCL_FEATURE_ELS_ITERATIVE_SEEDING
+ /* Set the drbg_block_counter to a value triggering a reseed after the upcoming RESET operation via interrupt */
+ mcuxClEls_rng_drbg_block_counter = MCUXCLELS_RNG_DRBG_BLOCK_COUNTER_THRESHOLD;
+#endif /* MCUXCL_FEATURE_ELS_ITERATIVE_SEEDING */
+
+ MCUXCLELS_SET_CTRL_FIELD(MCUXCLELS_SFR_CTRL_RESET, 1u);
+
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_Reset_Async, MCUXCLELS_STATUS_OK_WAIT);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_SetIntEnableFlags)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_SetIntEnableFlags(
+ mcuxClEls_InterruptOptionEn_t options)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_SetIntEnableFlags);
+ MCUXCLELS_SFR_WRITE(ELS_INT_ENABLE, options.word.value);
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_SetIntEnableFlags, MCUXCLELS_STATUS_OK);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_GetIntEnableFlags)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetIntEnableFlags(
+ mcuxClEls_InterruptOptionEn_t * result)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_GetIntEnableFlags);
+ result->word.value = MCUXCLELS_SFR_READ(ELS_INT_ENABLE);
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GetIntEnableFlags, MCUXCLELS_STATUS_OK);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_ResetIntFlags)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_ResetIntFlags(
+ mcuxClEls_InterruptOptionRst_t options)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_ResetIntFlags);
+ MCUXCLELS_SFR_WRITE(ELS_INT_STATUS_CLR, options.word.value);
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_ResetIntFlags, MCUXCLELS_STATUS_OK);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_SetIntFlags)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_SetIntFlags(
+ mcuxClEls_InterruptOptionSet_t options)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_SetIntFlags);
+ MCUXCLELS_SFR_WRITE(ELS_INT_STATUS_SET, options.word.value);
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_SetIntFlags, MCUXCLELS_STATUS_OK);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_SetRandomStartDelay)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_SetRandomStartDelay(
+ uint32_t startDelay)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_SetRandomStartDelay);
+ MCUXCLELS_INPUT_PARAM_CHECK_PROTECTED(mcuxClEls_SetRandomStartDelay, 1024u < startDelay);
+
+ if (mcuxClEls_isBusy())
+ {
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_SetRandomStartDelay, MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT);
+ }
+
+ MCUXCLELS_SET_CFG_FIELD(MCUXCLELS_SFR_CFG_ADCTRL, startDelay);
+
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_SetRandomStartDelay, MCUXCLELS_STATUS_OK);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_GetRandomStartDelay)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetRandomStartDelay(
+ uint32_t *startDelay)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_GetRandomStartDelay);
+
+ *startDelay = MCUXCLELS_GET_CFG_FIELD(MCUXCLELS_SFR_CFG_ADCTRL);
+
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GetRandomStartDelay, MCUXCLELS_STATUS_OK);
+}
+
+#ifdef MCUXCL_FEATURE_ELS_LOCKING
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_GetLock)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetLock(
+ uint32_t * pSessionId)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_GetLock);
+
+ *pSessionId = MCUXCLELS_SFR_READ(ELS_SESSION_ID);
+ if(0u == *pSessionId)
+ {
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GetLock, MCUXCLELS_STATUS_SW_LOCKING_FAILED);
+ }
+
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GetLock, MCUXCLELS_STATUS_OK);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_ReleaseLock)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_ReleaseLock(
+ uint32_t sessionId)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_ReleaseLock);
+ MCUXCLELS_SFR_WRITE(ELS_SESSION_ID, sessionId);
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_ReleaseLock, MCUXCLELS_STATUS_OK);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_IsLocked)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_IsLocked(
+ void)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_IsLocked);
+
+ if(1u == MCUXCLELS_GET_STATUS_FIELD(MCUXCLELS_SFR_STATUS_ELS_LOCKED))
+ {
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_IsLocked, MCUXCLELS_STATUS_SW_STATUS_LOCKED);
+ }
+
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_IsLocked, MCUXCLELS_STATUS_OK);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_SetMasterUnlock)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_SetMasterUnlock(
+ uint32_t masterId)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_SetMasterUnlock);
+ MCUXCLELS_SFR_WRITE(ELS_MASTER_ID, masterId);
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_SetMasterUnlock, MCUXCLELS_STATUS_OK);
+}
+#endif /* MCUXCL_FEATURE_ELS_LOCKING */
+
+
+#ifdef MCUXCL_FEATURE_ELS_DMA_ADDRESS_READBACK
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_GetLastDmaAddress)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GetLastDmaAddress(uint32_t* pLastAddress)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_GetLastDmaAddress);
+
+ *pLastAddress = MCUXCLELS_SFR_READ(ELS_DMA_FIN_ADDR);
+
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GetLastDmaAddress, MCUXCLELS_STATUS_OK);
+
+}
+#endif /* MCUXCL_FEATURE_ELS_DMA_ADDRESS_READBACK */
+
+#ifdef MCUXCL_FEATURE_ELS_DMA_FINAL_ADDRESS_READBACK
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_CompareDmaFinalOutputAddress)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_CompareDmaFinalOutputAddress(
+ uint8_t *outputStartAddress,
+ size_t expectedLength)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_CompareDmaFinalOutputAddress,
+ MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEls_GetLastDmaAddress));
+
+ /* Calculate the expected final address from the input */
+ uint32_t expectedFinalAddress = (uint32_t)outputStartAddress + expectedLength;
+
+ /* Get the actual final address from ELS - no result check as function always returns OK */
+ uint32_t finalAddress;
+ MCUX_CSSL_FP_FUNCTION_CALL_VOID(mcuxClEls_GetLastDmaAddress(&finalAddress));
+
+ /* Compare the expected address to the actual one */
+ if(finalAddress != expectedFinalAddress)
+ {
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_CompareDmaFinalOutputAddress, MCUXCLELS_STATUS_SW_COMPARISON_FAILED);
+ }
+
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_CompareDmaFinalOutputAddress, MCUXCLELS_STATUS_OK);
+
+}
+#endif /* MCUXCL_FEATURE_ELS_DMA_FINAL_ADDRESS_READBACK */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/src/mcuxClEls_GlitchDetector.c b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/src/mcuxClEls_GlitchDetector.c
new file mode 100644
index 00000000..f5a806cd
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClEls/src/mcuxClEls_GlitchDetector.c
@@ -0,0 +1,98 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2022 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClEls_GlitchDetector.c
+ * @brief ELS implementation for key management.
+ * This file implements the functions declared in mcuxClEls_GlitchDetector.h. */
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_GlitchDetector_LoadConfig_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GlitchDetector_LoadConfig_Async(
+ uint8_t const * pInput)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_GlitchDetector_LoadConfig_Async);
+
+ /* ELS SFRs are not cached => Tell SW to wait for ELS to come back from BUSY state before modifying the SFRs */
+ if (mcuxClEls_isBusy())
+ {
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GlitchDetector_LoadConfig_Async, MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT);
+ }
+
+ mcuxClEls_setInput0_fixedSize(pInput);
+ mcuxClEls_startCommand(ID_CFG_ELS_CMD_GDET_CFG_LOAD, 0U, ELS_CMD_BIG_ENDIAN);
+
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GlitchDetector_LoadConfig_Async, MCUXCLELS_STATUS_OK_WAIT);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_GlitchDetector_Trim_Async)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GlitchDetector_Trim_Async(
+ uint8_t * pOutput)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_GlitchDetector_Trim_Async);
+
+ /* ELS SFRs are not cached => Tell SW to wait for ELS to come back from BUSY state before modifying the SFRs */
+ if (mcuxClEls_isBusy())
+ {
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GlitchDetector_Trim_Async, MCUXCLELS_STATUS_SW_CANNOT_INTERRUPT);
+ }
+
+ mcuxClEls_setOutput_fixedSize(pOutput);
+ mcuxClEls_startCommand(ID_CFG_ELS_CMD_GDET_TRIM, 0U, ELS_CMD_BIG_ENDIAN);
+
+
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GlitchDetector_Trim_Async, MCUXCLELS_STATUS_OK_WAIT);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_GlitchDetector_GetEventCounter)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GlitchDetector_GetEventCounter(
+ uint8_t * pCount)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_GlitchDetector_GetEventCounter);
+
+ // Decode from Gray coding
+ uint8_t count8 = (uint8_t) MCUXCLELS_GET_GDET_EVTCNT_FIELD(MCUXCLELS_SFR_GDET_EVTCNT_GDET_EVTCNT);
+ count8 ^= count8 >> 4u;
+ count8 ^= count8 >> 2u;
+ count8 ^= count8 >> 1u;
+
+ // Assign to the result variable
+ *pCount = count8;
+
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GlitchDetector_GetEventCounter, MCUXCLELS_STATUS_OK);
+}
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClEls_GlitchDetector_ResetEventCounter)
+MCUXCLELS_API MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClEls_Status_t) mcuxClEls_GlitchDetector_ResetEventCounter(
+ void)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClEls_GlitchDetector_ResetEventCounter);
+
+ // Start GDET Event Counter reset
+ MCUXCLELS_SFR_WRITE(ELS_GDET_EVTCNT_CLR, 1u);
+
+ // The actual reset occurs in a different clock domain from the ELS core clock, so we have to wait for synchroni-
+ // zation. The spec states that this takes on the order of 2 cycles of the ELS core clock plus 2 cycles of the
+ // Glitch Detector reference clock.
+ while(1u != MCUXCLELS_GET_GDET_EVTCNT_FIELD(MCUXCLELS_SFR_GDET_EVTCNT_GDET_EVTCNT_CLR_DONE))
+ {
+ // Do nothing
+ }
+
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClEls_GlitchDetector_ResetEventCounter, MCUXCLELS_STATUS_OK);
+}
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_ClearSecure_Internal.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_ClearSecure_Internal.h
new file mode 100644
index 00000000..12f75667
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_ClearSecure_Internal.h
@@ -0,0 +1,85 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClMemory_ClearSecure_Internal.h
+ * @brief Memory header for secure clear function.
+ * This header exposes functions that enable secure memory clear function.
+ */
+
+/**
+ * @defgroup mcuxClMemory_Clear_Secure_Internal mcuxClMemory_Clear_Secure_Internal
+ * @brief This function clears all bytes in a memory region to null in a secure way
+ * when a secure clear is available.
+ * @ingroup mcuxClMemory
+ * @{
+ */
+
+#ifndef MCUXCLMEMORY_CLEARSECURE_INTERNAL_H_
+#define MCUXCLMEMORY_CLEARSECURE_INTERNAL_H_
+
+#include // Exported features flags header
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+
+/**
+ * Sets all bytes of a memory buffer to a specified value.
+ *
+ * The two buffers must not overlap.
+ *
+ * * Data Integrity: Record(pSrc + pDst + length)
+ *
+ * @param[out] pDst pointer to the buffer to be set.
+ * @param[in] length size (in bytes) to be set.
+ *
+ * @return A status code encapsulated in a flow-protection type.
+ * @retval #MCUXCLMEMORY_STATUS_OK If @p length bytes cleared at @p pDst.
+ * @retval #MCUXCLMEMORY_STATUS_FAULT
+ */
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClMemory_clear_secure_int)
+static inline MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClMemory_Status_t) mcuxClMemory_clear_secure_int
+(
+ uint8_t * pDst,
+ uint32_t length
+)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClMemory_clear_secure_int);
+
+ MCUX_CSSL_FP_FUNCTION_CALL(retval, mcuxClMemory_set_secure_int(pDst, 0u, length));
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClMemory_clear_secure_int, retval, MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClMemory_set_secure_int));
+}
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLMEMORY_CLEARSECURE_INTERNAL_H_ */
+
+/**
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Clear_Internal.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Clear_Internal.h
new file mode 100644
index 00000000..cecd396d
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Clear_Internal.h
@@ -0,0 +1,94 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2021, 2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClMemory_Clear_Internal.h
+ * @brief Memory header for clear function.
+ * This header exposes functions that enable using memory clear function.
+ */
+
+
+/**
+ * @defgroup mcuxClMemory_Clear_Internal mcuxClMemory_Clear_Internal
+ * @brief This function clears a memory region.
+ * @ingroup mcuxClMemory
+ * @{
+ */
+
+
+#ifndef MCUXCLMEMORY_CLEAR_INTERNAL_H_
+#define MCUXCLMEMORY_CLEAR_INTERNAL_H_
+
+#include // Exported features flags header
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+
+/**
+ * Sets all bytes of a memory buffer to a specified value.
+ *
+ * The two buffers must not overlap.
+ *
+ * * Data Integrity: Record(pDst + length)
+ *
+ * @param[out] pDst pointer to the buffer to be set.
+ * @param[in] length size (in bytes) to be set.
+ *
+ * @return A status code encapsulated in a flow-protection type.
+ * @retval #MCUXCLMEMORY_STATUS_OK If @p length bytes cleared at @p pDst.
+ * @retval #MCUXCLMEMORY_STATUS_FAULT
+ */
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClMemory_clear_int)
+static inline MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClMemory_Status_t) mcuxClMemory_clear_int
+(
+ uint8_t * pDst,
+ uint32_t length
+)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClMemory_clear_int);
+
+ mcuxClMemory_Status_t retval = MCUXCLMEMORY_STATUS_FAULT;
+ MCUX_CSSL_FP_FUNCTION_CALL(csslRetval, mcuxCsslMemory_Clear(
+ mcuxCsslParamIntegrity_Protect(3u, pDst, length, length),
+ pDst,
+ length,
+ length));
+ retval = (mcuxClMemory_Status_t) csslRetval ^ (MCUXCSSLMEMORY_COMPONENT_MASK ^ MCUXCLMEMORY_COMPONENT_MASK);
+ MCUX_CSSL_DI_RECORD(identifier /* Not used */, (uint32_t) pDst + length); // Unbalance the SC
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClMemory_clear_int, retval, MCUX_CSSL_FP_FUNCTION_CALLED(mcuxCsslMemory_Clear));
+}
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLMEMORY_CLEAR_INTERNAL_H_ */
+
+/**
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CompareDPASecure_Internal.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CompareDPASecure_Internal.h
new file mode 100644
index 00000000..c8179988
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CompareDPASecure_Internal.h
@@ -0,0 +1,89 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClMemory_CompareDPASecure_Internal.h
+ * @brief Memory header for dpa secure compare function.
+ * This header exposes functions that enable dpa secure memory compare function.
+ */
+
+/**
+ * @defgroup mcuxClMemory_Compare_DPASecure_Internal mcuxClMemory_Compare_DPASecure_Internal
+ * @brief This function compares two memory region @p lhs and @p rhs.
+ * @ingroup mcuxClMemory
+ * @{
+ */
+
+#ifndef MCUXCLMEMORY_COMPARE_DPA_SECURE_INTERNAL_H_
+#define MCUXCLMEMORY_COMPARE_DPA_SECURE_INTERNAL_H_
+
+#include // Exported features flags header
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+
+/**
+ * Compares two memory buffers with security against fault and DPA.
+ *
+ * The two buffers must not overlap.
+ *
+ * * Data Integrity: Record(pLhs + pRhs + length)
+ *
+ * @param[in] session Handle for the current CL session.
+ * @param[in] pLhs pointer to the left buffer to be compared.
+ * @param[in] pRhs pointer to the right buffer to be compared.
+ * @param[in] length size (in bytes) to be compared.
+ *
+ * @return A status code encapsulated in a flow-protection type.
+ * @retval #MCUXCLMEMORY_STATUS_EQUAL If length bytes of Lhs and Rhs are equal.
+ * @retval #MCUXCLMEMORY_STATUS_NOT_EQUAL If at least one bytes differ between the two.
+ * @retval #MCUXCLMEMORY_STATUS_FAULT
+ */
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClMemory_compare_dpasecure_int)
+static inline MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClMemory_Status_t) mcuxClMemory_compare_dpasecure_int
+(
+ mcuxClSession_Handle_t session,
+ const uint8_t * pLhs,
+ const uint8_t * pRhs,
+ uint32_t length
+)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClMemory_compare_dpasecure_int);
+
+ (void)session;
+ MCUX_CSSL_FP_FUNCTION_CALL(retClCompare, mcuxClMemory_compare_secure_int(pLhs, pRhs, length));
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClMemory_compare_dpasecure_int, retClCompare, MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClMemory_compare_secure_int));
+}
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLMEMORY_COMPARE_DPA_SECURE_INTERNAL_H_ */
+
+/**
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CompareSecure_Internal.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CompareSecure_Internal.h
new file mode 100644
index 00000000..7d24f0d7
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CompareSecure_Internal.h
@@ -0,0 +1,85 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClMemory_CompareSecure_Internal.h
+ * @brief Memory header for compare function.
+ * This header exposes functions that enable secure memory compare function.
+ */
+
+/**
+ * @defgroup mcuxClMemory_Compare_Internal mcuxClMemory_Compare_Secure_Internal
+ * @brief This function compares two memory region @p lhs and @p rhs.
+ * @ingroup mcuxClMemory
+ * @{
+ */
+
+#ifndef MCUXCLMEMORY_COMPARE_SECURE_INTERNAL_H_
+#define MCUXCLMEMORY_COMPARE_SECURE_INTERNAL_H_
+
+#include // Exported features flags header
+
+#include
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+
+/**
+ * Compares two memory buffers with security against fault and SPA.
+ *
+ * The two buffers must not overlap.
+ *
+ * * Data Integrity: Record(pLhs + pRhs + length)
+ *
+ * @param[in] pLhs pointer to the left buffer to be compared.
+ * @param[in] pRhs pointer to the right buffer to be compared.
+ * @param[in] length size (in bytes) to be compared.
+ *
+ * @return A status code encapsulated in a flow-protection type.
+ * @retval #MCUXCLMEMORY_STATUS_EQUAL If length bytes of Lhs and Rhs are equal.
+ * @retval #MCUXCLMEMORY_STATUS_NOT_EQUAL If at least one bytes differ between the two.
+ * @retval #MCUXCLMEMORY_STATUS_FAULT
+ */
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClMemory_compare_secure_int)
+static inline MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClMemory_Status_t) mcuxClMemory_compare_secure_int
+(
+ const uint8_t * pLhs,
+ const uint8_t * pRhs,
+ uint32_t length
+)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClMemory_compare_secure_int);
+
+ MCUX_CSSL_FP_FUNCTION_CALL(retClCompare, mcuxClMemory_compare_int(pLhs, pRhs, length));
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClMemory_compare_secure_int, retClCompare, MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClMemory_compare_int));
+}
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLMEMORY_COMPARE_SECURE_INTERNAL_H_ */
+
+/**
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Compare_Internal.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Compare_Internal.h
new file mode 100644
index 00000000..03474aff
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Compare_Internal.h
@@ -0,0 +1,91 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClMemory_Compare_Internal.h
+ * @brief Memory header for internal compare function.
+ * This header exposes functions that enable memory compare function.
+ */
+
+/**
+ * @defgroup mcuxClMemory_Compare_Internal mcuxClMemory_Compare_Internal
+ * @brief This function compares two memory region @p lhs and @p rhs.
+ * @ingroup mcuxClMemory
+ * @{
+ */
+
+#ifndef MCUXCLMEMORY_COMPARE_INTERNAL_H_
+#define MCUXCLMEMORY_COMPARE_INTERNAL_H_
+
+#include // Exported features flags header
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+
+/**
+ * Compares two memory buffer with security agains faults.
+ *
+ * The two buffers must not overlap.
+ *
+ * * Data Integrity: Record(pLhs + pRhs + length)
+ *
+ * @param[in] pLhs pointer to the left buffer to be compared.
+ * @param[in] pRhs pointer to the right buffer to be compared.
+ * @param[in] length size (in bytes) to be compared.
+ *
+ * @return A status code encapsulated in a flow-protection type.
+ * @retval #MCUXCLMEMORY_STATUS_EQUAL If length bytes of Lhs and Rhs are equal.
+ * @retval #MCUXCLMEMORY_STATUS_NOT_EQUAL If at least one bytes differ between the two.
+ * @retval #MCUXCLMEMORY_STATUS_FAULT
+ */
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClMemory_compare_int)
+static inline MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClMemory_Status_t) mcuxClMemory_compare_int
+(
+ const uint8_t * pLhs,
+ const uint8_t * pRhs,
+ uint32_t length
+)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClMemory_compare_int);
+
+ mcuxClMemory_Status_t retval = MCUXCLMEMORY_STATUS_FAULT;
+
+ MCUX_CSSL_FP_FUNCTION_CALL(csslRetval,
+ mcuxCsslMemory_Compare(mcuxCsslParamIntegrity_Protect(3u, pLhs, pRhs, length),
+ pLhs, pRhs, length));
+ retval = (mcuxClMemory_Status_t) csslRetval ^ (MCUXCSSLMEMORY_COMPONENT_MASK ^ MCUXCLMEMORY_COMPONENT_MASK); // May return invalid parameters too.
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClMemory_compare_int, retval, MCUX_CSSL_FP_FUNCTION_CALLED(mcuxCsslMemory_Compare));
+}
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLMEMORY_COMPARE_INTERNAL_H_ */
+
+/**
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CopySecurePow2_Internal.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CopySecurePow2_Internal.h
new file mode 100644
index 00000000..2994b3d3
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CopySecurePow2_Internal.h
@@ -0,0 +1,85 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClMemory_CopySecurePow2_Internal.h
+ * @brief Memory header for copy functions.
+ * This header exposes functions that enable secure memory copy function.
+ */
+
+/**
+ * @defgroup mcuxClMemory_CopySecurePow2_Internal mcuxClMemory_CopySecurePow2_Internal
+ * @brief This function securely copies a memory region from @p src to @p dst when a secure copy is available.
+ * @ingroup mcuxClMemory
+ * @{
+ */
+
+#ifndef MCUXCLMEMORY_COPYSECURE_ALIGNED_INTERNAL_H_
+#define MCUXCLMEMORY_COPYSECURE_ALIGNED_INTERNAL_H_
+
+#include // Exported features flags header
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+
+/**
+ * Copies a memory buffer to another location with security against fault and SPA.
+ *
+ * The two buffers must not overlap.
+ *
+ * * Data Integrity: Record(pSrc + pDst + length)
+ *
+ * @param[out] pDst pointer to the buffer to be copied to.
+ * @param[in] pSrc pointer to the buffer to copy.
+ * @param[in] length size (in bytes) to be copied.
+ *
+ * @return A status code encapsulated in a flow-protection type.
+ * @retval #MCUXCLMEMORY_STATUS_OK If @p length bytes copied at @p pDst.
+ * @retval #MCUXCLMEMORY_STATUS_FAULT
+ */
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClMemory_copy_secure_pow2_int)
+static inline MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClMemory_Status_t) mcuxClMemory_copy_secure_pow2_int
+(
+ uint8_t * pDst,
+ uint8_t const * pSrc,
+ uint32_t length
+)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClMemory_copy_secure_pow2_int);
+
+ MCUX_CSSL_FP_FUNCTION_CALL(retval, mcuxClMemory_copy_secure_int(pDst, pSrc, length));
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClMemory_copy_secure_pow2_int, retval, MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClMemory_copy_secure_int));
+}
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLMEMORY_COPYSECURE_ALIGNED_INTERNAL_H_ */
+
+/**
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CopySecure_Internal.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CopySecure_Internal.h
new file mode 100644
index 00000000..8acfdeaa
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CopySecure_Internal.h
@@ -0,0 +1,85 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClMemory_CopySecure_Internal.h
+ * @brief Memory header for copy functions.
+ * This header exposes functions that enable secure memory copy function.
+ */
+
+/**
+ * @defgroup mcuxClMemory_Copy_Secure_Internal mcuxClMemory_Copy_Secure_Internal
+ * @brief This function securely copies a memory region from @p src to @p dst when a secure copy is available.
+ * @ingroup mcuxClMemory
+ * @{
+ */
+
+#ifndef MCUXCLMEMORY_COPYSECURE_INTERNAL_H_
+#define MCUXCLMEMORY_COPYSECURE_INTERNAL_H_
+
+#include // Exported features flags header
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+
+/**
+ * Copies a memory buffer to another location with security against fault and SPA.
+ *
+ * The two buffers must not overlap.
+ *
+ * * Data Integrity: Record(pSrc + pDst + length)
+ *
+ * @param[out] pDst pointer to the buffer to be copied to.
+ * @param[in] pSrc pointer to the buffer to copy.
+ * @param[in] length size (in bytes) to be copied.
+ *
+ * @return A status code encapsulated in a flow-protection type.
+ * @retval #MCUXCLMEMORY_STATUS_OK If @p length bytes copied at @p pDst.
+ * @retval #MCUXCLMEMORY_STATUS_FAULT
+ */
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClMemory_copy_secure_int)
+static inline MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClMemory_Status_t) mcuxClMemory_copy_secure_int
+(
+ uint8_t * pDst,
+ uint8_t const * pSrc,
+ uint32_t length
+)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClMemory_copy_secure_int);
+
+ MCUX_CSSL_FP_FUNCTION_CALL(retval, mcuxClMemory_copy_int(pDst, pSrc, length));
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClMemory_copy_secure_int, retval, MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClMemory_copy_int));
+}
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLMEMORY_COPYSECURE_INTERNAL_H_ */
+
+/**
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CopySecure_Reversed_Internal.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CopySecure_Reversed_Internal.h
new file mode 100644
index 00000000..470879ed
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CopySecure_Reversed_Internal.h
@@ -0,0 +1,85 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClMemory_CopySecure_Reversed_Internal.h
+ * @brief Memory header for copy functions.
+ * This header exposes functions that enable secure memory copy function.
+ */
+
+/**
+ * @defgroup mcuxClMemory_Copy_Secure_Reversed_Internal mcuxClMemory_Copy_Secure_Reversed_Internal
+ * @brief This function securely copies a memory region from @p src to @p dst when a secure copy is available.
+ * @ingroup mcuxClMemory
+ * @{
+ */
+
+#ifndef MCUXCLMEMORY_COPYSECURE_REVERSED_INTERNAL_H_
+#define MCUXCLMEMORY_COPYSECURE_REVERSED_INTERNAL_H_
+
+#include // Exported features flags header
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+
+/**
+ * Copies a memory buffer to another location with security against fault and SPA.
+ *
+ * The two buffers must not overlap.
+ *
+ * * Data Integrity: Record(pSrc + pDst + length)
+ *
+ * @param[out] pDst pointer to the buffer to be copied to.
+ * @param[in] pSrc pointer to the buffer to copy.
+ * @param[in] length size (in bytes) to be copied.
+ *
+ * @return A status code encapsulated in a flow-protection type.
+ * @retval #MCUXCLMEMORY_STATUS_OK If @p length bytes copied at @p pDst.
+ * @retval #MCUXCLMEMORY_STATUS_FAULT
+ */
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClMemory_copy_secure_reversed_int)
+static inline MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClMemory_Status_t) mcuxClMemory_copy_secure_reversed_int
+(
+ uint8_t * pDst,
+ uint8_t const * pSrc,
+ uint32_t length
+)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClMemory_copy_secure_reversed_int);
+
+ MCUX_CSSL_FP_FUNCTION_CALL(retval, mcuxClMemory_copy_reversed_int(pDst, pSrc, length));
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClMemory_copy_secure_reversed_int, retval, MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClMemory_copy_reversed_int));
+}
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLMEMORY_COPYSECURE_REVERSED_INTERNAL_H_ */
+
+/**
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CopyWords_Internal.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CopyWords_Internal.h
new file mode 100644
index 00000000..83fb72f5
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_CopyWords_Internal.h
@@ -0,0 +1,88 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClMemory_CopyWords_Internal.h
+ * @brief Memory header for copy functions.
+ * This header exposes functions that enable memory copy word function.
+ */
+
+/**
+ * @defgroup mcuxClMemory_Copy_Words_Internal mcuxClMemory_Copy_Words_Internal
+ * @brief This function copies a memory region from @p src to @p dst in a robust way
+ * when a copy is available.
+ * @ingroup mcuxClMemory
+ * @{
+ */
+
+#ifndef MCUXCLMEMORY_COPYWORDS_INTERNAL_H_
+#define MCUXCLMEMORY_COPYWORDS_INTERNAL_H_
+
+#include // Exported features flags header
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+
+/**
+ * Copies a memory buffer to another location with security against fault only.
+ *
+ * The two buffers must not overlap and with length being a multiple of 4.
+ *
+ * * Data Integrity: Record(pSrc + pDst + length)
+ *
+ * @param[out] pDst pointer to the buffer to be copied to.
+ * @param[in] pSrc pointer to the buffer to copy.
+ * @param[in] length size (in bytes) to be copied.
+ *
+ * @return A status code encapsulated in a flow-protection type.
+ * @retval #MCUXCLMEMORY_STATUS_OK If @p length bytes copied at @p pDst.
+ * @retval #MCUXCLMEMORY_STATUS_FAULT
+ */
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClMemory_copy_words_int)
+static inline MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClMemory_Status_t) mcuxClMemory_copy_words_int
+(
+ uint8_t * pDst,
+ uint8_t const * pSrc,
+ uint32_t length
+)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClMemory_copy_words_int);
+
+ MCUX_CSSL_FP_FUNCTION_CALL(retval, mcuxClMemory_copy_int(pDst, pSrc, length));
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClMemory_copy_words_int, retval, MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClMemory_copy_int));
+}
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLMEMORY_COPYWORDS_INTERNAL_H_ */
+
+/**
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Copy_Internal.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Copy_Internal.h
new file mode 100644
index 00000000..d9b816ba
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Copy_Internal.h
@@ -0,0 +1,89 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2021, 2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClMemory_Copy_Internal.h
+ * @brief Internal memory header for copy functions.
+ * This header exposes functions that enable using memory copy function.
+ */
+
+/**
+ * @defgroup mcuxClMemory_Copy_Internal mcuxClMemory_Copy_Internal
+ * @brief This function copies a memory region from @p src to @p dst.
+ * @ingroup mcuxClMemory
+ * @{
+ */
+
+#ifndef MCUXCLMEMORY_COPY_INTERNAL_H_
+#define MCUXCLMEMORY_COPY_INTERNAL_H_
+
+#include // Exported features flags header
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+
+/**
+ * Copies a memory buffer to another location with security against fault.
+ *
+ * The two buffers must not overlap.
+ *
+ * * Data Integrity: Record(pSrc + pDst + length)
+ *
+ * @param[out] pDst pointer to the buffer to be copied to.
+ * @param[in] pSrc pointer to the buffer to copy.
+ * @param[in] length size (in bytes) to be copied.
+ *
+ * @return A status code encapsulated in a flow-protection type.
+ * @retval #MCUXCLMEMORY_STATUS_OK If @p length bytes copied at @p pDst.
+ * @retval #MCUXCLMEMORY_STATUS_FAULT
+ */
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClMemory_copy_int)
+static inline MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClMemory_Status_t) mcuxClMemory_copy_int
+(
+ uint8_t * pDst,
+ uint8_t const * pSrc,
+ uint32_t length
+)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClMemory_copy_int);
+ mcuxClMemory_Status_t retval = MCUXCLMEMORY_STATUS_FAULT;
+
+ MCUX_CSSL_FP_FUNCTION_CALL_VOID(mcuxClMemory_copy(pDst, pSrc, length, length));
+ MCUX_CSSL_DI_RECORD(identifier /* Not used */, (uint32_t) pSrc + (uint32_t) pDst + length); // Balance the SC
+ retval = MCUXCLMEMORY_STATUS_OK;
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClMemory_copy_int, retval, MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClMemory_copy));
+}
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLMEMORY_COPY_INTERNAL_H_ */
+
+/**
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Copy_Reversed_Internal.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Copy_Reversed_Internal.h
new file mode 100644
index 00000000..a85c3530
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Copy_Reversed_Internal.h
@@ -0,0 +1,88 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClMemory_Copy_Reversed_Internal.h
+ * @brief Memory header for copy functions.
+ * This header exposes functions that enable secure memory copy function.
+ */
+
+/**
+ * @defgroup mcuxClMemory_Copy_Reversed_Internal mcuxClMemory_Copy_Reversed_Internal
+ * @brief This function securely copies a memory region from @p src to @p dst when a secure copy is available.
+ * @ingroup mcuxClMemory
+ * @{
+ */
+
+#ifndef MCUXCLMEMORY_COPY_REVERSED_INTERNAL_H_
+#define MCUXCLMEMORY_COPY_REVERSED_INTERNAL_H_
+
+#include // Exported features flags header
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+
+/**
+ * Copies a memory buffer to another location with security against fault.
+ *
+ * The two buffers must not overlap.
+ *
+ * * Data Integrity: Record(pSrc + pDst + length)
+ *
+ * @param[out] pDst pointer to the buffer to be copied to.
+ * @param[in] pSrc pointer to the buffer to copy.
+ * @param[in] length size (in bytes) to be copied.
+ *
+ * @return A status code encapsulated in a flow-protection type.
+ * @retval #MCUXCLMEMORY_STATUS_OK If @p length bytes copied at @p pDst.
+ * @retval #MCUXCLMEMORY_STATUS_FAULT
+ */
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClMemory_copy_reversed_int)
+static inline MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClMemory_Status_t) mcuxClMemory_copy_reversed_int
+(
+ uint8_t * pDst,
+ uint8_t const * pSrc,
+ uint32_t length
+)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClMemory_copy_int);
+ mcuxClMemory_Status_t retval = MCUXCLMEMORY_STATUS_FAULT;
+
+ MCUX_CSSL_FP_FUNCTION_CALL_VOID(mcuxClMemory_copy_reversed(pDst, pSrc, length, length));
+ MCUX_CSSL_DI_RECORD(identifier /* Not used */, (uint32_t) pSrc + (uint32_t) pDst + length); // Balance the SC
+ retval = MCUXCLMEMORY_STATUS_OK;
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClMemory_copy_int, retval, MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClMemory_copy_reversed));
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLMEMORY_COPY_REVERSED_INTERNAL_H_ */
+
+/**
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Internal.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Internal.h
new file mode 100644
index 00000000..76100219
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Internal.h
@@ -0,0 +1,43 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2021, 2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/**
+ * @file mcuxClMemory_Internal.h
+ * @brief Top-level include file for the internal memory operations.
+ */
+
+#ifndef MCUXCLMEMORY_INTERNAL_H
+#define MCUXCLMEMORY_INTERNAL_H
+
+#include // Exported features flags header
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#endif /* MCUXCLMEMORY_INTERNAL_H */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_SetSecure_Internal.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_SetSecure_Internal.h
new file mode 100644
index 00000000..cbf0e4e8
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_SetSecure_Internal.h
@@ -0,0 +1,87 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClMemory_SetSecure_Internal.h
+ * @brief Memory header for set functions.
+ * This header exposes functions that enable secure memory set function.
+ */
+
+/**
+ * @defgroup mcuxClMemory_Set_Secure_Internal mcuxClMemory_Set_Secure_Internal
+ * @brief This function sets all bytes in a memory region to a specified value in a secure way
+ * when a secure set is available.
+ * @ingroup mcuxClMemory
+ * @{
+ */
+
+#ifndef MCUXCLMEMORY_SETSECURE_INTERNAL_H_
+#define MCUXCLMEMORY_SETSECURE_INTERNAL_H_
+
+#include // Exported features flags header
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**********************************************
+ * FUNCTIONS
+ **********************************************/
+
+/**
+ * Sets all bytes of a memory buffer to a specified value.
+ *
+ * The two buffers must not overlap.
+ *
+ * * Data Integrity: Record(pDst + length)
+ *
+ * @param[out] pDst pointer to the buffer to be set.
+ * @param[in] val byte value to be set.
+ * @param[in] length size (in bytes) to be set.
+ *
+ * @return A status code encapsulated in a flow-protection type.
+ * @retval #MCUXCLMEMORY_STATUS_OK If @p length bytes copied at @p pDst.
+ * @retval #MCUXCLMEMORY_STATUS_FAULT
+ */
+
+MCUX_CSSL_FP_FUNCTION_DEF(mcuxClMemory_set_secure_int)
+static inline MCUX_CSSL_FP_PROTECTED_TYPE(mcuxClMemory_Status_t) mcuxClMemory_set_secure_int
+(
+ uint8_t * pDst,
+ uint8_t val,
+ uint32_t length
+)
+{
+ MCUX_CSSL_FP_FUNCTION_ENTRY(mcuxClMemory_set_secure_int);
+
+ MCUX_CSSL_FP_FUNCTION_CALL(retval, mcuxClMemory_set_int(pDst, val, length));
+ MCUX_CSSL_FP_FUNCTION_EXIT(mcuxClMemory_set_secure_int, retval, MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClMemory_set_int));
+}
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MCUXCLMEMORY_SETSECURE_INTERNAL_H_ */
+
+/**
+ * @}
+ */
diff --git a/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Set_Internal.h b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Set_Internal.h
new file mode 100644
index 00000000..68119dc0
--- /dev/null
+++ b/tutorials/nxp/frdm-rw612-xpresso-freertos-lwip-wifi/component/els_pkc/src/comps/mcuxClMemory/inc/internal/mcuxClMemory_Set_Internal.h
@@ -0,0 +1,94 @@
+/*--------------------------------------------------------------------------*/
+/* Copyright 2020-2021, 2023 NXP */
+/* */
+/* NXP Confidential. This software is owned or controlled by NXP and may */
+/* only be used strictly in accordance with the applicable license terms. */
+/* By expressly accepting such terms or by downloading, installing, */
+/* activating and/or otherwise using the software, you are agreeing that */
+/* you have read, and that you agree to comply with and are bound by, such */
+/* license terms. If you do not agree to be bound by the applicable license */
+/* terms, then you may not retain, install, activate or otherwise use the */
+/* software. */
+/*--------------------------------------------------------------------------*/
+
+/** @file mcuxClMemory_Set_Internal.h
+ * @brief Memory header for set function.
+ * This header exposes functions that enable using memory set functions.
+ */
+
+/**
+ * @defgroup mcuxClMemory_Set_Internal mcuxClMemory_Set_Internal
+ * @brief This function sets all bytes in a memory region to a specified value.
+ * @ingroup mcuxClMemory
+ * @{
+ */
+
+#ifndef MCUXCLMEMORY_SET_INTERNAL_H_
+#define MCUXCLMEMORY_SET_INTERNAL_H_
+
+#include // Exported features flags header
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include