| /* |
| * |
| * Copyright 2018-2020 NXP |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef SSS_APIS_INC_FSL_SSS_SE05X_TYPES_H_ |
| #define SSS_APIS_INC_FSL_SSS_SE05X_TYPES_H_ |
| |
| /* ************************************************************************** */ |
| /* Includes */ |
| /* ************************************************************************** */ |
| |
| #include <fsl_sss_api.h> |
| #include <fsl_sss_policy.h> |
| |
| #if defined(SSS_USE_FTR_FILE) |
| #include "fsl_sss_ftr.h" |
| #else |
| #include "fsl_sss_ftr_default.h" |
| #endif |
| |
| #if SSS_HAVE_APPLET_SE05X_IOT |
| #include "nxScp03_Types.h" |
| #include "se05x_const.h" |
| #include "se05x_tlv.h" |
| #include "sm_api.h" |
| #if (__GNUC__ && !AX_EMBEDDED) |
| #include <pthread.h> |
| /* Only for base session with os */ |
| #endif |
| /* FreeRTOS includes. */ |
| #if AX_EMBEDDED && USE_RTOS |
| #include "FreeRTOS.h" |
| #include "FreeRTOSIPConfig.h" |
| #include "semphr.h" |
| #include "task.h" |
| #endif |
| |
| /*! |
| * @addtogroup sss_sw_se05x |
| * @{ |
| */ |
| |
| /* ************************************************************************** */ |
| /* Defines */ |
| /* ************************************************************************** */ |
| |
| /** Are we using SE05X as crypto subsystem? */ |
| #define SSS_SUBSYSTEM_TYPE_IS_SE05X(subsystem) (subsystem == kType_SSS_SE_SE05x) |
| |
| /** Are we using SE05X as crypto subsystem? */ |
| #define SSS_SESSION_TYPE_IS_SE05X(session) (session && SSS_SUBSYSTEM_TYPE_IS_SE05X(session->subsystem)) |
| |
| /** Are we using SE05X as crypto subsystem? */ |
| #define SSS_KEY_STORE_TYPE_IS_SE05X(keyStore) (keyStore && SSS_SESSION_TYPE_IS_SE05X(keyStore->session)) |
| |
| /** Are we using SE05X as crypto subsystem? */ |
| #define SSS_OBJECT_TYPE_IS_SE05X(pObject) (pObject && SSS_KEY_STORE_TYPE_IS_SE05X(pObject->keyStore)) |
| |
| /** Are we using SE05X as crypto subsystem? */ |
| #define SSS_ASYMMETRIC_TYPE_IS_SE05X(context) (context && SSS_SESSION_TYPE_IS_SE05X(context->session)) |
| |
| /** Are we using SE05X as crypto subsystem? */ |
| #define SSS_DERIVE_KEY_TYPE_IS_SE05X(context) (context && SSS_SESSION_TYPE_IS_SE05X(context->session)) |
| |
| /** Are we using SE05X as crypto subsystem? */ |
| #define SSS_SYMMETRIC_TYPE_IS_SE05X(context) (context && SSS_SESSION_TYPE_IS_SE05X(context->session)) |
| |
| /** Are we using SE05X as crypto subsystem? */ |
| #define SSS_MAC_TYPE_IS_SE05X(context) (context && SSS_SESSION_TYPE_IS_SE05X(context->session)) |
| |
| /** Are we using SE05X as crypto subsystem? */ |
| #define SSS_RNG_CONTEXT_TYPE_IS_SE05X(context) (context && SSS_SESSION_TYPE_IS_SE05X(context->session)) |
| |
| /** Are we using SE05X as crypto subsystem? */ |
| #define SSS_DIGEST_TYPE_IS_SE05X(context) (context && SSS_SESSION_TYPE_IS_SE05X(context->session)) |
| |
| /** Are we using SE05X as crypto subsystem? */ |
| #define SSS_AEAD_TYPE_IS_SE05X(context) (context && SSS_SESSION_TYPE_IS_SE05X(context->session)) |
| |
| /** Are we using SE05X as crypto subsystem? */ |
| #define SSS_TUNNEL_CONTEXT_TYPE_IS_SE05X(context) (context && SSS_SESSION_TYPE_IS_SE05X(context->session)) |
| |
| /** Are we using SE05X as crypto subsystem? */ |
| #define SSS_TUNNEL_TYPE_IS_SE05X(context) (context && SSS_SESSION_TYPE_IS_SE05X(context->session)) |
| |
| /* ************************************************************************** */ |
| /* Structrues and Typedefs */ |
| /* ************************************************************************** */ |
| |
| struct _sss_se05x_session; |
| |
| /** @copydoc sss_tunnel_t */ |
| typedef struct _sss_se05x_tunnel_context |
| { |
| /** Pointer to the base SE050 SEssion */ |
| struct _sss_se05x_session *se05x_session; |
| /** Where exectly this tunner terminate to */ |
| sss_tunnel_dest_t tunnelDest; |
| #if (__GNUC__ && !AX_EMBEDDED) |
| /** For systems where we potentially have multi-threaded operations, have a lock */ |
| pthread_mutex_t channelLock; |
| #elif AX_EMBEDDED && USE_RTOS |
| SemaphoreHandle_t channelLock; |
| #endif |
| } sss_se05x_tunnel_context_t; |
| |
| /** @copydoc sss_session_t */ |
| typedef struct _sss_se05x_session |
| { |
| /** Indicates which security subsystem is selected to be used. */ |
| sss_type_t subsystem; |
| |
| /** Connection context to SE050 */ |
| |
| Se05xSession_t s_ctx; |
| |
| /** In case connection is tunneled, context to the tunnel */ |
| |
| sss_se05x_tunnel_context_t *ptun_ctx; |
| } sss_se05x_session_t; |
| |
| struct _sss_se05x_object; |
| |
| /** @copydoc sss_key_store_t */ |
| typedef struct |
| { |
| /** Pointer to the session */ |
| sss_se05x_session_t *session; |
| /** In case the we are using Key Wrapping while injecting the keys, pointer to key used for wrapping */ |
| struct _sss_se05x_object *kekKey; |
| |
| } sss_se05x_key_store_t; |
| |
| /** @copydoc sss_object_t */ |
| typedef struct _sss_se05x_object |
| { |
| /** key store holding the data and other properties */ |
| sss_se05x_key_store_t *keyStore; |
| /** @copydoc sss_object_t::objectType */ |
| uint32_t objectType; |
| /** @copydoc sss_object_t::cipherType */ |
| uint32_t cipherType; |
| /** Application specific key identifier. The keyId is kept in the key store |
| * along with the key data and other properties. */ |
| uint32_t keyId; |
| |
| /** If this is an ECC Key, the Curve ID of the key */ |
| #if APPLET_SE050_VER_MAJOR_MINOR >= 20000u |
| SE05x_ECCurve_t curve_id; |
| #else |
| uint32_t curve_id; |
| #endif |
| |
| /** Whether this is a persistant or tansient object */ |
| uint8_t isPersistant : 1; |
| |
| } sss_se05x_object_t; |
| |
| /** @copydoc sss_derive_key_t */ |
| typedef struct |
| { |
| /** @copydoc sss_derive_key_t::session */ |
| sss_se05x_session_t *session; |
| /** @copydoc sss_derive_key_t::keyObject */ |
| sss_se05x_object_t *keyObject; |
| /** @copydoc sss_derive_key_t::algorithm */ |
| sss_algorithm_t algorithm; |
| /** @copydoc sss_derive_key_t::mode */ |
| sss_mode_t mode; |
| |
| } sss_se05x_derive_key_t; |
| |
| /** @copydoc sss_asymmetric_t */ |
| typedef struct |
| { |
| /** @copydoc sss_asymmetric_t::session */ |
| sss_se05x_session_t *session; |
| /** @copydoc sss_asymmetric_t::keyObject */ |
| sss_se05x_object_t *keyObject; |
| /** @copydoc sss_asymmetric_t::algorithm */ |
| sss_algorithm_t algorithm; |
| /** @copydoc sss_asymmetric_t::mode */ |
| sss_mode_t mode; |
| |
| } sss_se05x_asymmetric_t; |
| |
| /** @copydoc sss_symmetric_t */ |
| typedef struct |
| { |
| /** Virtual connection between application (user context) and specific |
| * security subsystem and function thereof. */ |
| sss_se05x_session_t *session; |
| /** Reference to key and it's properties. */ |
| sss_se05x_object_t *keyObject; |
| /** @copydoc sss_symmetric_t::algorithm */ |
| sss_algorithm_t algorithm; |
| /** @copydoc sss_symmetric_t::mode */ |
| sss_mode_t mode; |
| |
| /* Implementation specific part */ |
| |
| /** Used crypto object ID for this operation */ |
| SE05x_CryptoObjectID_t cryptoObjectId; |
| /** Since underlying system conly only process in fixed chunks, chache them on host |
| * to complete the operation sanely */ |
| uint8_t cache_data[16]; |
| /** Length of bytes cached on host */ |
| size_t cache_data_len; |
| } sss_se05x_symmetric_t; |
| |
| /** @copydoc sss_mac_t */ |
| typedef struct |
| { |
| /** copydoc sss_mac_t::session */ |
| sss_se05x_session_t *session; |
| /** copydoc sss_mac_t::keyObject */ |
| sss_se05x_object_t *keyObject; |
| |
| /** copydoc sss_mac_t::algorithm */ |
| sss_algorithm_t algorithm; |
| /** copydoc sss_mac_t::mode */ |
| sss_mode_t mode; |
| /* Implementation specific part */ |
| |
| /** Used crypto object ID for this operation */ |
| SE05x_CryptoObjectID_t cryptoObjectId; |
| } sss_se05x_mac_t; |
| |
| /** @copydoc sss_aead_t */ |
| typedef struct |
| { |
| /** @copydoc sss_aead_t::session */ |
| sss_se05x_session_t *session; |
| /** @copydoc sss_aead_t::keyObject */ |
| sss_se05x_object_t *keyObject; |
| /** @copydoc sss_aead_t::algorithm */ |
| sss_algorithm_t algorithm; |
| /** @copydoc sss_aead_t::mode */ |
| sss_mode_t mode; |
| |
| /** Implementation specific part */ |
| SE05x_CryptoObjectID_t cryptoObjectId; |
| /** Cache in case of un-alined inputs */ |
| uint8_t cache_data[16]; |
| /** How much we have cached */ |
| size_t cache_data_len; |
| } sss_se05x_aead_t; |
| |
| /** @copydoc sss_digest_t */ |
| typedef struct |
| { |
| /** Virtual connection between application (user context) and specific |
| * security subsystem and function thereof. */ |
| sss_se05x_session_t *session; |
| /** @copydoc sss_digest_t::algorithm */ |
| sss_algorithm_t algorithm; |
| /** @copydoc sss_digest_t::mode */ |
| sss_mode_t mode; |
| /** @copydoc sss_digest_t::digestFullLen */ |
| size_t digestFullLen; |
| /** Implementation specific part */ |
| |
| SE05x_CryptoObjectID_t cryptoObjectId; |
| } sss_se05x_digest_t; |
| |
| /** @copydoc sss_rng_context_t */ |
| typedef struct |
| { |
| /** @copydoc sss_rng_context_t::session */ |
| sss_se05x_session_t *session; |
| } sss_se05x_rng_context_t; |
| |
| /** SE050 Properties that can be represented as an array */ |
| typedef enum |
| { |
| kSSS_SE05x_SessionProp_CertUID = kSSS_SessionProp_au8_Proprietary_Start + 1, |
| } sss_s05x_sesion_prop_au8_t; |
| |
| /** SE050 Properties that can be represented as 32bit numbers */ |
| typedef enum |
| { |
| kSSS_SE05x_SessionProp_CertUIDLen = kSSS_SessionProp_u32_Optional_Start + 1, |
| } sss_s05x_sesion_prop_u32_t; |
| |
| /** deprecated : Used only for backwards compatibility */ |
| #define SE05x_Connect_Ctx_t SE_Connect_Ctx_t |
| /** deprecated : Used only for backwards compatibility */ |
| #define se05x_auth_context_t SE_Connect_Ctx_t |
| |
| /** Used to enable Applet Features via ``sss_se05x_set_feature`` */ |
| typedef struct |
| { |
| /** Use of curve TPM_ECC_BN_P256 */ |
| uint8_t AppletConfig_ECDAA : 1; |
| /** EC DSA and DH support */ |
| uint8_t AppletConfig_ECDSA_ECDH_ECDHE : 1; |
| /** Use of curve RESERVED_ID_ECC_ED_25519 */ |
| uint8_t AppletConfig_EDDSA : 1; |
| /** Use of curve RESERVED_ID_ECC_MONT_DH_25519 */ |
| uint8_t AppletConfig_DH_MONT : 1; |
| /** Writing HMACKey objects */ |
| uint8_t AppletConfig_HMAC : 1; |
| /** Writing RSAKey objects */ |
| uint8_t AppletConfig_RSA_PLAIN : 1; |
| /** Writing RSAKey objects */ |
| uint8_t AppletConfig_RSA_CRT : 1; |
| /** Writing AESKey objects */ |
| uint8_t AppletConfig_AES : 1; |
| /** Writing DESKey objects */ |
| uint8_t AppletConfig_DES : 1; |
| /** PBKDF2 */ |
| uint8_t AppletConfig_PBKDF : 1; |
| /** TLS Handshake support commands (see 4.16) in APDU Spec*/ |
| uint8_t AppletConfig_TLS : 1; |
| /** Mifare DESFire support (see 4.15) in APDU Spec*/ |
| uint8_t AppletConfig_MIFARE : 1; |
| /** Allocated value undefined and reserved for future use */ |
| uint8_t AppletConfig_RFU1 : 1; |
| /** I2C Master support (see 4.17) in APDU Spec*/ |
| uint8_t AppletConfig_I2CM : 1; |
| /** RFU */ |
| uint8_t AppletConfig_RFU21 : 1; |
| } SE05x_Applet_Feature_t; |
| |
| /** Used to disable Applet Features via ``sss_se05x_set_feature`` */ |
| typedef struct |
| { |
| /** Disable feature ECDH B2b8 */ |
| uint8_t EXTCFG_FORBID_ECDH : 1; |
| /** Disable feature ECDAA B2b7 */ |
| uint8_t EXTCFG_FORBID_ECDAA : 1; |
| /** Disable feature RSA_LT_2K B6b8 */ |
| uint8_t EXTCFG_FORBID_RSA_LT_2K : 1; |
| /** Disable feature RSA_SHA1 B6b7 */ |
| uint8_t EXTCFG_FORBID_RSA_SHA1 : 1; |
| /** Disable feature AES_GCM B8b8 */ |
| uint8_t EXTCFG_FORBID_AES_GCM : 1; |
| /** Disable feature AES_GCM_EXT_IV B8b7 */ |
| uint8_t EXTCFG_FORBID_AES_GCM_EXT_IV : 1; |
| /** Disable feature HKDF_EXTRACT B10b7 */ |
| uint8_t EXTCFG_FORBID_HKDF_EXTRACT : 1; |
| } SE05x_Applet_Feature_Disable_t; |
| |
| /** Attestation data */ |
| typedef struct |
| { |
| /** Random used during attestation */ |
| uint8_t outrandom[16]; |
| /** length of outrandom */ |
| size_t outrandomLen; |
| /** time stamp */ |
| SE05x_TimeStamp_t timeStamp; |
| /** Length of timeStamp */ |
| size_t timeStampLen; |
| /** Uinquie ID of SE050 */ |
| uint8_t chipId[SE050_MODULE_UNIQUE_ID_LEN]; |
| /** Lenght of the Unique ID */ |
| size_t chipIdLen; |
| /** Attributes */ |
| uint8_t attribute[MAX_POLICY_BUFFER_SIZE + 15]; |
| /** Length of Attribute */ |
| size_t attributeLen; |
| /** Signature for attestation */ |
| uint8_t signature[512]; |
| /** Lenght of signature */ |
| size_t signatureLen; |
| } sss_se05x_attst_comp_data_t; |
| |
| /** Data to be read with attestation */ |
| typedef struct |
| { |
| /** Whle reading RSA Objects, modulus and public exporent get attested separately, */ |
| sss_se05x_attst_comp_data_t data[SE05X_MAX_ATTST_DATA]; |
| /** How many entries to attest */ |
| uint8_t valid_number; |
| } sss_se05x_attst_data_t; |
| |
| /** @} */ |
| |
| /** @addtogroup se050_i2cm |
| * |
| * @{ */ |
| |
| /** Types of entries in an I2CM Transaction */ |
| typedef enum |
| { |
| /** Do nothing */ |
| kSE05x_I2CM_None = 0, |
| /** Configure the address, baudrate */ |
| kSE05x_I2CM_Configure, |
| /** Write to I2C Slave */ |
| kSE05x_I2CM_Write = 3, |
| /** Read from I2C Slave */ |
| kSE05x_I2CM_Read, |
| |
| /** Response from SE05x that there is something wrong */ |
| kSE05x_I2CM_StructuralIssue = 0xFF |
| } SE05x_I2CM_TLV_type_t; |
| |
| /** Status of I2CM Transaction */ |
| typedef enum |
| { |
| kSE05x_I2CM_Success = 0x5A, |
| kSE05x_I2CM_I2C_Nack_Fail = 0x01, |
| kSE05x_I2CM_I2C_Write_Error = 0x02, |
| kSE05x_I2CM_I2C_Read_Error = 0x03, |
| kSE05x_I2CM_I2C_Time_Out_Error = 0x05, |
| kSE05x_I2CM_Invalid_Tag = 0x11, |
| kSE05x_I2CM_Invalid_Length = 0x12, |
| kSE05x_I2CM_Invalid_Length_Encode = 0x13, |
| kSE05x_I2CM_I2C_Config = 0x21 |
| } SE05x_I2CM_status_t; |
| |
| /** Additional operation on data read by I2C */ |
| typedef enum |
| { |
| kSE05x_Security_None = 0, |
| kSE05x_Sign_Request, |
| kSE05x_Sign_Enc_Request, |
| } SE05x_I2CM_securityReq_t; |
| |
| /** Configuration for I2CM */ |
| typedef enum |
| { |
| kSE05x_I2CM_Baud_Rate_100Khz = 0, |
| kSE05x_I2CM_Baud_Rate_400Khz, |
| } SE05x_I2CM_Baud_Rate_t; |
| |
| /** Data Configuration for I2CM */ |
| typedef struct |
| { |
| /** 7 Bit address of I2C slave */ |
| uint8_t I2C_addr; |
| /** What baud rate */ |
| SE05x_I2CM_Baud_Rate_t I2C_baudRate; |
| /** return status of the config operation */ |
| SE05x_I2CM_status_t status; |
| } SE05x_I2CM_configData_t; |
| |
| /** @brief Security Configuration for I2CM */ |
| typedef struct |
| { |
| /** @copydoc SE05x_I2CM_securityReq_t */ |
| SE05x_I2CM_securityReq_t operation; |
| /** object used for the operation */ |
| uint32_t keyObject; |
| } SE05x_I2CM_securityData_t; |
| |
| /** @brief Write From I2CM to I2C Slave */ |
| typedef struct |
| { |
| /** How many bytes to write */ |
| uint8_t writeLength; |
| /** [Out] status of the operation */ |
| SE05x_I2CM_status_t wrStatus; |
| /** Buffer to be written */ |
| uint8_t *writebuf; /* Input */ |
| } SE05x_I2CM_writeData_t; |
| |
| /** Read to I2CM from I2C Slave */ |
| typedef struct |
| { |
| /** How many bytes to read */ |
| uint16_t readLength; |
| /** [Out] status of the operation */ |
| SE05x_I2CM_status_t rdStatus; |
| /** Output. rdBuf will point to Host buffer. */ |
| uint8_t *rdBuf; |
| } SE05x_I2CM_readData_t; |
| |
| /** Used to report error response, not for outgoing command */ |
| typedef struct |
| { |
| /** [Out] In case there is any structural issue */ |
| SE05x_I2CM_status_t issueStatus; |
| } SE05x_I2CM_structuralIssue_t; |
| |
| /** @brief Individual entry in array of TLV commands */ |
| typedef union { |
| /** @copydoc SE05x_I2CM_configData_t */ |
| SE05x_I2CM_configData_t cfg; |
| /** @copydoc SE05x_I2CM_securityData_t */ |
| SE05x_I2CM_securityData_t sec; |
| /** @copydoc SE05x_I2CM_writeData_t */ |
| SE05x_I2CM_writeData_t w; |
| /** @copydoc SE05x_I2CM_readData_t */ |
| SE05x_I2CM_readData_t rd; |
| /** @copydoc SE05x_I2CM_structuralIssue_t */ |
| SE05x_I2CM_structuralIssue_t issue; |
| } SE05x_I2CM_INS_type_t; |
| |
| /** Individual entry in array of TLV commands, with type |
| * |
| * @ref Se05x_i2c_master_txn would expect an array of these. |
| */ |
| typedef struct _SE05x_I2CM_cmd |
| { |
| /** @copybrief SE05x_I2CM_TLV_type_t */ |
| SE05x_I2CM_TLV_type_t type; |
| /** @copybrief SE05x_I2CM_INS_type_t */ |
| SE05x_I2CM_INS_type_t cmd; |
| } SE05x_I2CM_cmd_t; |
| |
| /*! |
| *@} |
| */ /* end of se050_i2cm */ |
| |
| /* ************************************************************************** */ |
| /* Global Variables */ |
| /* ************************************************************************** */ |
| |
| /* ************************************************************************** */ |
| /* Functions */ |
| /* ************************************************************************** */ |
| |
| /** MAC Validate |
| * |
| */ |
| sss_status_t sss_se05x_mac_validate_one_go( |
| sss_se05x_mac_t *context, const uint8_t *message, size_t messageLen, uint8_t *mac, size_t macLen); |
| |
| /** Similar to @ref sss_se05x_asymmetric_sign_digest, |
| * |
| * but hashing/digest done by SE |
| */ |
| sss_status_t sss_se05x_asymmetric_sign( |
| sss_se05x_asymmetric_t *context, uint8_t *srcData, size_t srcLen, uint8_t *signature, size_t *signatureLen); |
| |
| /** Similar to @ref sss_se05x_asymmetric_verify_digest, |
| * but hashing/digest done by SE |
| * |
| */ |
| sss_status_t sss_se05x_asymmetric_verify( |
| sss_se05x_asymmetric_t *context, uint8_t *srcData, size_t srcLen, uint8_t *signature, size_t signatureLen); |
| |
| /** Read with attestation |
| * |
| */ |
| sss_status_t sss_se05x_key_store_get_key_attst(sss_se05x_key_store_t *keyStore, |
| sss_se05x_object_t *keyObject, |
| uint8_t *key, |
| size_t *keylen, |
| size_t *pKeyBitLen, |
| sss_se05x_object_t *keyObject_attst, |
| sss_algorithm_t algorithm_attst, |
| uint8_t *random_attst, |
| size_t randomLen_attst, |
| sss_se05x_attst_data_t *attst_data); |
| |
| uint32_t se05x_sssKeyTypeLenToCurveId(sss_cipher_type_t keyType, size_t keyBits); |
| |
| /** @addtogroup se050_i2cm |
| * |
| * @{ |
| */ |
| |
| /** @brief Se05x_i2c_master_txn |
| * |
| * I2CM Transaction |
| * |
| * @param[in] sess session identifier |
| * @param[in,out] cmds Array of structure type capturing a sequence of i2c master cmd/rsp transactions. |
| * @param[in] cmdLen Amount of structures contained in cmds |
| * |
| * @pre p describes I2C master commands. |
| * @post p contains execution state of I2C master commands, the I2C master commands can be overwritten to report on execution failure. |
| */ |
| smStatus_t Se05x_i2c_master_txn(sss_session_t *sess, SE05x_I2CM_cmd_t *cmds, uint8_t cmdLen); |
| |
| /** @brief Se05x_i2c_master_attst_txn |
| * |
| * I2CM Read With Attestation |
| * |
| * @param[in] sess session identifier |
| * @param[in] keyObject Keyobject which contains 4 byte attestaion KeyId |
| * @param[in,out] p Array of structure type capturing a sequence of i2c master cmd/rsp transactions. |
| * @param[in] random_attst 16-byte freshness random |
| * @param[in] random_attstLen length of freshness random |
| * @param[in] attst_algo 1 byte attestationAlgo |
| * @param[out] ptimeStamp timestamp |
| * @param[out] timeStampLen Length for timestamp |
| * @param[out] freshness freshness (random) |
| * @param[out] pfreshnessLen Length for freshness |
| * @param[out] chipId unique chip Id |
| * @param[out] pchipIdLen Length for chipId |
| * @param[out] signature signature |
| * @param[out] psignatureLen Length for signature |
| * @param[in] noOftags Amount of structures contained in ``p`` |
| * |
| * @pre p describes I2C master commands. |
| * @post p contains execution state of I2C master commands, the I2C master commands can be overwritten to report on execution failure. |
| */ |
| smStatus_t Se05x_i2c_master_attst_txn(sss_session_t *sess, |
| sss_object_t *keyObject, |
| SE05x_I2CM_cmd_t *p, |
| uint8_t *random_attst, |
| size_t random_attstLen, |
| SE05x_AttestationAlgo_t attst_algo, |
| SE05x_TimeStamp_t *ptimeStamp, |
| size_t *timeStampLen, |
| uint8_t *freshness, |
| size_t *pfreshnessLen, |
| uint8_t *chipId, |
| size_t *pchipIdLen, |
| uint8_t *signature, |
| size_t *psignatureLen, |
| uint8_t noOftags); |
| |
| /*! |
| *@} |
| */ /* end of se050_i2cm */ |
| |
| #endif /* SSS_HAVE_APPLET_SE05X_IOT */ |
| |
| #endif /* SSS_APIS_INC_FSL_SSS_SE05X_TYPES_H_ */ |