blob: 63b15ec17d9f6800bac213a7f1b9dc6b5da691e8 [file] [log] [blame]
/*
*
* Copyright 2016-2020 NXP
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @par Description
* This file defines A7-series specific types
* @par History
* 1.0 20-feb-2012 : Initial version
*
*/
#ifndef _SM_TYPES_H_
#define _SM_TYPES_H_
#ifdef __cplusplus
extern "C" {
#endif
#if defined(__GNUC__) || defined(__arm__) || defined(__ICCARM__)
#include <stdint.h>
#include <stdlib.h>
#include <stdbool.h>
#endif /* __GNUC__ || __arm__ || iccarm */
#if defined(__ICCARM__)
#include "stddef.h"
#endif /* __ICCARM__ */
#if defined(_MSC_VER) && _MSC_VER >= 1600
#include <stdint.h>
#if _MSC_VER >= 1800
#include <stdbool.h>
#endif
#endif /* _MSC_VER */
typedef uint8_t U8;
typedef uint16_t U16;
typedef uint32_t U32;
typedef int8_t S8;
typedef int16_t S16;
typedef int32_t S32;
#if !defined(__cplusplus) && !defined(__GNUC__) && !defined(__arm__) && !defined(__ICCARM__)
#ifdef _MSC_VER
#if _MSC_VER < 1600
typedef unsigned char bool; // C++ and GCC has bool.
#define false(0)
#define true(1)
#endif //_MSC_VER < 1600
#else // _MSC_VER
typedef unsigned char bool; // C++ and GCC has bool.
#endif
#endif /* bool */
#ifndef FALSE
#define FALSE false
#endif
#ifndef TRUE
#define TRUE true
#endif
/** @define AX_EMBEDDED Plaform is embedded like Kinetis / LPC / i.MX RT / Freedom Series */
#if defined(FREEDOM) || defined(IMX_RT) || defined(CPU_LPC54018) || defined(LPC_55x)
#define AX_EMBEDDED 1
#elif defined(AX_EMBEDDED)
/* OK */
#else
#define AX_EMBEDDED 0
#endif
/**
* Identification of ECC curve. Not all turnkey solutions cover all these ECC curves.
*/
typedef enum
{
ECCCurve_NIST_P192 = 0x01,
ECCCurve_NIST_P224 = 0x02,
ECCCurve_NIST_P256 = 0x03, /**< NIST Curve with 256 bits */
ECCCurve_BrainPoolP192r1 = 0x04,
ECCCurve_BrainPoolP224r1 = 0x05,
ECCCurve_BrainPoolP256r1 = 0x06
} ECCCurve_t;
/**
* Identification of hash algorithm
*/
typedef enum
{
HASHAlgo_SHA1 = 0x01,
HASHAlgo_SHA256 = 0x02
} HASHAlgo_t;
typedef U16 SM_Error_t;
#define AX_UNUSED_ARG(x) (void)(x)
// The following defines are visible at the smCom layer
// Because they are also used in the platform specific implementation
// layer, they have ended up in this include file.
// They do not belong here from a structural point of view.
#define SMCOM_CLOSE_MODE_STD 0x00
#define SMCOM_CLOSE_MODE_TERMINATE 0x01
// The following is a set of predefined return values.
/* Don't use
// Protocol error codes
#define BAD_SEQ_NUMBER 0x8000
#define UNAUTH_CLIENT 0x8001
#define SEND_ERROR 0x8002
#define UNKNOW_ORDER 0x8003
*/
/* ------------------------------ */
// Error/status word
#define SW_OK (0x9000) //!< Operation successfull
#define ERR_CONNECT_LINK_FAILED (0x7001)
#define ERR_CONNECT_SELECT_FAILED (0x7002)
#define ERR_COMM_ERROR (0x7003) //!< Generic communication error
#define ERR_NO_VALID_IP_PORT_PATTERN (0x8000)
#define ERR_COM_ALREADY_OPEN (0x7016) //!< Communication link is already open with device
/* Range 0x701x is reserved for Error codes defined in smCom.h */
// #define SMCOM_SND_FAILED 0x7010
// #define SMCOM_RCV_FAILED 0x7011
#define ERR_MEMORY (0x7020) //!< Memory allocation error
#define ERR_GENERAL_ERROR (0x7021) //!< Non-specific error code
#define ERR_WRONG_RESPONSE (0x7022) //!< Semantic error discovered while parsing APDU response
#define ERR_API_ERROR (0x7023) //!< Illegal parameter value passed to API
#define ERR_TLV_MISSING (0x7024) //!< Specific TAG is missing from APDU response
#define ERR_HASH_COMPARE_FAILS (0x7025)
#define ERR_BUF_TOO_SMALL (0x7026) //!< Buffer provided is too small
#define ERR_CRYPTO_ENGINE_FAILED \
(0x7027) //!< The crypto engine (implemented underneath a crypto abstraction layer) failed to provide a crypto service.
#define ERR_PATTERN_COMPARE_FAILED (0x7028)
#define ERR_NOT_IMPLEMENTED (0x7029)
#define ERR_FILE_SYSTEM (0x7030)
#define ERR_NO_PRIVATE_KEY (0x7031)
#define ERR_IDENT_IDX_RANGE (0x7032) //!< Identifier or Index of Reference Key is out of bounds
#define ERR_CRC_CHKSUM_VERIFY (0x7033) //!< CRC checksum verify error
#define ERR_INTERNAL_BUF_TOO_SMALL (0x7034) //!< In A71CH PSP 1.6 this had value 0x7033. Code was already taken by A71CL
#define SCP_OK (SW_OK)
#define SCP_UNDEFINED_CHANNEL_ID (0x7041) //!< Undefined SCP channel identifier
#define SCP_FAIL (0x7042)
#define SCP_CARD_CRYPTOGRAM_FAILS_TO_VERIFY (0x7043)
#define SCP_PARAMETER_ERROR (0x7044)
#define SCP_RSP_MAC_FAIL (0x7050) //!< MAC on APDU response is not correct
#define SCP_DECODE_FAIL (0x7051) //!< Encrypted Response did not decode to correctly padded plaintext
#ifdef __cplusplus
}
#endif
#endif // _SM_TYPES_H_