blob: 6e557be3a9d68ca82c132f4357f58c7342d90c50 [file] [log] [blame]
/*
*
* Copyright 2018-2020 NXP
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @par Description
* This file is the communication specific Host API of the A70CM/CI and A71CH secure module.
* It also customizes the Generic Ax library for this specific product instance
* @par History
* 1.0 27-march-2014 : Initial version
* 7-may-2017 : Unified version for A70CM, CI and A71CH
*
*****************************************************************************/
#ifndef _SM_API_
#define _SM_API_
#include "sm_types.h"
#ifdef __cplusplus
extern "C" {
#endif
#include <PlugAndTrust_HostLib_Ver.h>
#define AX_HOST_LIB_MAJOR (PLUGANDTRUST_HOSTLIB_VER_MAJOR) //!< Major number A71CH Host Library
#define AX_HOST_LIB_MINOR (PLUGANDTRUST_HOSTLIB_VER_MINOR) //!< Minor (High Nibble)/Patch number (Low Nibble) of A71CH Host Library
/*!
* @addtogroup sss_sscp_a71ch
* @{
*/
#define SE_CONNECT_TYPE_START 0x000
typedef enum
{
kType_SE_Conn_Type_NONE = 0,
/** Used for A71XX Family */
kType_SE_Conn_Type_SCII2C = SE_CONNECT_TYPE_START + 2,
/** Used for PC/OSX for virtual COM Port */
kType_SE_Conn_Type_VCOM = SE_CONNECT_TYPE_START + 3,
/** Used for Legacy JRCP V1 protocol with iMX Linux Proxy */
kType_SE_Conn_Type_JRCP_V1 = SE_CONNECT_TYPE_START + 4,
/** Used for New JRCP Protocol */
kType_SE_Conn_Type_JRCP_V2 = SE_CONNECT_TYPE_START + 5,
/** Used for T=1 over I2C for SE050 family */
kType_SE_Conn_Type_T1oI2C = SE_CONNECT_TYPE_START + 6,
/** Used for Use NFC Interface to talk to SE */
kType_SE_Conn_Type_NFC = SE_CONNECT_TYPE_START + 7,
/** Used for Use a software layer to talk to SE
* This logicaly allows double encryption of packets
* from same host and allows multi-tenenancy
*
* Channel can be deemed as "Secure Channel" where applicable.
*
* Or it may be a plain "arbiter" to allow plain communication from
* multiple threads on the same application.
*/
kType_SE_Conn_Type_Channel = SE_CONNECT_TYPE_START + 8,
kType_SE_Conn_Type_PCSC = SE_CONNECT_TYPE_START + 9,
kType_SE_Conn_Type_LAST,
kType_SE_Conn_Type_SIZE = 0x7FFF
} SSS_Conn_Type_t;
#define SELECT_APPLET 0 //!< Select predefined applet
#define SELECT_NONE 1 //!< Don't issue a select
#define SELECT_SSD 2 //!< Select SSD
/**
* Contains the information required to resume a connection with the Security Module.
* Its content is only to be interpreted by the Host Library.
* The semantics of the param1 and param2 fields depends on the link layer.
*/
typedef struct {
U16 connType;
U16 param1; //!< Useage depends on link layer
U16 param2; //!< Useage depends on link layer
U16 hostLibVersion; //!< MSByte contains major version (::AX_HOST_LIB_MAJOR); LSByte contains minor version of HostLib (::AX_HOST_LIB_MINOR)
U32 appletVersion; /*!< MSByte contains major version;
3 leading bits of LSByte contains minor version of Applet;
Last bit of LSByte encodes whether Applet is in Debug Mode, a '1' means 'Debug Mode' is available */
U16 sbVersion; //!< Expected to be 0x0000
U8 select; //!< Applet selection mode
} SmCommState_t;
/** \name Communication functions
@{ */
U16 SM_Close(void *conn_ctx, U8 mode);
U16 SM_Connect(void *conn_ctx, SmCommState_t *commState, U8 *atr, U16 *atrLen);
U16 SM_ConnectWithAID(SmCommState_t *commState, U8* appletAID, U16 appletAIDLen, U8 *atr, U16 *atrLen);
U16 SM_RjctConnect(void **conn_ctx, const char *connectString, SmCommState_t *commState, U8 *atr, U16 *atrLen);
U16 SM_RjctConnectWithAID(const char *connectString, SmCommState_t *commState, U8* appletAID, U16 appletAIDLen, U8 *atr, U16 *atrLen);
U16 SM_I2CConnect(void **conn_ctx, SmCommState_t *commState, U8 *atr, U16 *atrLen, const char *pConnString);
U16 SM_SendAPDU(U8 *cmd, U16 cmdLen, U8 *resp, U16 *respLen);
/** @}*/
#ifdef __cplusplus
}
#endif
#endif //_SM_API_