NXP_PN512_NFCReaderLibrary/intfs/phKeyStore.h

408 lines
19 KiB
C

/*
* Copyright (c), NXP Semiconductors Gratkorn / Austria
*
* (C)NXP Semiconductors
* All rights are reserved. Reproduction in whole or in part is
* prohibited without the written consent of the copyright owner.
* NXP reserves the right to make changes without notice at any time.
* NXP makes no warranty, expressed, implied or statutory, including but
* not limited to any implied warranty of merchantability or fitness for any
*particular purpose, or that the use will not infringe any third party patent,
* copyright or trademark. NXP must not be liable for any loss or damage
* arising from its use.
*/
/** \file
* Generic KeyStore Component of Reader Library Framework.
* $Author: Purnank G (ing05193) $
* $Revision: 5076 $ (v4.040.05.011646)
* $Date: 2016-06-13 17:29:09 +0530 (Mon, 13 Jun 2016) $
*
* History:
* CHu: Generated 19. May 2009
*
*/
#ifndef PHKEYSTORE_H
#define PHKEYSTORE_H
#include <ph_Status.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifdef NXPBUILD__PH_KEYSTORE_SW
/** \defgroup phKeyStore_Sw Component : Software
* \brief Keystore implementation in Software.
* @{
*/
#define PH_KEYSTORE_SW_ID 0x01 /**< ID for Software KeyStore component. */
#define PH_KEYSTORE_SW_MAX_KEY_SIZE 32U /**< Maximum size of a Key. */
/**
* \brief Sw KeyVersionPair structure
*/
typedef struct
{
uint8_t pKey[PH_KEYSTORE_SW_MAX_KEY_SIZE]; /**< Array containing a Key */
uint16_t wVersion; /**< Versions related to the Key*/
} phKeyStore_Sw_KeyVersionPair_t;
/**
* \brief Sw KeyEntry structure
*/
typedef struct
{
uint16_t wKeyType; /**< Type of the keys in pKeys. */
uint16_t wRefNoKUC; /**< Key usage counter number of the keys in pKeys. */
} phKeyStore_Sw_KeyEntry_t;
/**
* \brief Sw KeyUsageCounter structure
*/
typedef struct
{
uint32_t dwLimit; /**< Limit of the Key Usage Counter. */
uint32_t dwCurVal; /**< Current Value of the KUC. */
} phKeyStore_Sw_KUCEntry_t;
/**
* \brief Sw parameter structure
*/
typedef struct
{
uint16_t wId; /**< Layer ID for this component, NEVER MODIFY! */
phKeyStore_Sw_KeyEntry_t * pKeyEntries; /**< Key entry storage, size = sizeof(#phKeyStore_Sw_KeyEntry_t) * wNumKeyEntries. */
phKeyStore_Sw_KeyVersionPair_t * pKeyVersionPairs; /**< Key version pairs, size = sizeof(#phKeyStore_Sw_KeyVersionPair_t)* wNumKeyEntries * wNumVersions. */
uint16_t wNoOfKeyEntries; /**< Number of key entries in that storage. */
uint16_t wNoOfVersions; /**< Number of versions in each key entry. */
phKeyStore_Sw_KUCEntry_t * pKUCEntries; /**< Key usage counter entry storage, size = sizeof(#phKeyStore_Sw_KUCEntry_t) * wNumKUCEntries. */
uint16_t wNoOfKUCEntries; /**< Number of Key usage counter entries. */
} phKeyStore_Sw_DataParams_t;
/**
* \brief Initialise this layer.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
*/
phStatus_t phKeyStore_Sw_Init(
phKeyStore_Sw_DataParams_t * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wSizeOfDataParams, /**< [In] Specifies the size of the data parameter structure. */
phKeyStore_Sw_KeyEntry_t * pKeyEntries, /**< [In] Pointer to a storage containing the key entries. */
uint16_t wNoOfKeyEntries, /**< [In] size of pKeyEntries. */
phKeyStore_Sw_KeyVersionPair_t * pKeyVersionPairs, /**< [In] Pointer to a storage containing the key version pairs. */
uint16_t wNoOfVersionPairs, /**< [In] amount of key versions available in each key entry. */
phKeyStore_Sw_KUCEntry_t * pKUCEntries, /**< [In] Key usage counter entry storage, size = sizeof(phKeyStore_Sw_KUCEntry_t) * wNumKUCEntries */
uint16_t wNoOfKUCEntries /**< [In] Number of Key usage counter entries. */
);
/** @} */
#endif /* NXPBUILD__PH_KEYSTORE_SW */
#ifdef NXPBUILD__PH_KEYSTORE_RC663
#include <phhalHw.h>
/** \defgroup phKeyStore_Rc663 Component : Rc663
* @{
*/
#define PH_KEYSTORE_RC663_ID 0x02 /**< ID for Rc663 KeyStore component. */
#define PH_KEYSTORE_RC663_NUM_KEYS 0x80U /**< Maximum number of keys storable in Rc663. */
#define PH_KEYSTORE_RC663_NUM_VERSIONS 01U /**< Amount of versions for each key entry in the key store. */
/**
* \brief Rc663 parameter structure
*/
typedef struct
{
uint16_t wId; /**< Layer ID for this component, NEVER MODIFY! */
void * pHalDataParams; /**< Pointer to the parameter structure of the underlying layer.*/
} phKeyStore_Rc663_DataParams_t;
/**
* \brief Initialise this layer.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
*/
phStatus_t phKeyStore_Rc663_Init(
phKeyStore_Rc663_DataParams_t * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wSizeOfDataParams, /**< [In] Specifies the size of the data parameter structure. */
void * pHalDataParams /**< [In] Pointer to a HAL based on NXP RC663 IC. */
);
/** @} */
#endif /* NXPBUILD__PH_KEYSTORE_RC663 */
#ifdef NXPBUILD__PH_KEYSTORE
/** \defgroup phKeyStore KeyStore
*
* \brief This is only a wrapper layer to abstract the different KeyStore implementations.
* @{
*/
#define PH_KEYSTORE_INVALID_ID 0xFFFFU /**< ID used for various parameters as a invalid default **/
#define PH_KEYSTORE_DEFAULT_ID 0x0000 /**< ID used for various parameters as a default **/
/**
* \name Key Types
*/
/*@{*/
#define PH_KEYSTORE_KEY_TYPE_AES128 0x00U /**< AES 128 Key [16]. */
#define PH_KEYSTORE_KEY_TYPE_AES192 0x01U /**< AES 192 Key [24]. */
#define PH_KEYSTORE_KEY_TYPE_AES256 0x02U /**< AES 256 Key [32]. */
#define PH_KEYSTORE_KEY_TYPE_DES 0x03U /**< DES Single Key. */
#define PH_KEYSTORE_KEY_TYPE_2K3DES 0x04U /**< 2 Key Triple Des. */
#define PH_KEYSTORE_KEY_TYPE_3K3DES 0x05U /**< 3 Key Triple Des. */
#define PH_KEYSTORE_KEY_TYPE_MIFARE 0x06U /**< MIFARE (R) Key. */
#define PH_KEYSTORE_KEY_TYPE_MIFARE_SIZE 0x0CU /**< Size of an MIFARE Key. */
#define PH_KEYSTORE_KEY_TYPE_AES128_SIZE 0x10U /**< Size of an AES128 Key. */
/*@}*/
/**
* \name KeyStoreConfigs
*/
/*@{*/
#define PH_KEYSTORE_CONFIG_SET_DEFAULT 0xFFFFU /**< Reset all bit of SET param. */
/*@}*/
#ifdef NXPRDLIB_REM_GEN_INTFS
#include "../comps/phKeyStore/src/Sw/phKeyStore_Sw.h"
#define phKeyStore_FormatKeyEntry(pDataParams,wKeyNo,wNewKeyType) \
phKeyStore_Sw_FormatKeyEntry((phKeyStore_Sw_DataParams_t *)pDataParams,wKeyNo,wNewKeyType)
#define phKeyStore_SetKey(pDataParams, wKeyNo, wKeyVersion, wKeyType, pNewKey, wNewKeyVersion) \
phKeyStore_Sw_SetKey((phKeyStore_Sw_DataParams_t *)pDataParams, wKeyNo, wKeyVersion, wKeyType, pNewKey, wNewKeyVersion)
#define phKeyStore_SetKeyAtPos(pDataParams, wKeyNo, wPos, wKeyType, pNewKey, wNewKeyVersion) \
phKeyStore_Sw_SetKeyAtPos((phKeyStore_Sw_DataParams_t *)pDataParams, wKeyNo, wPos, wKeyType, pNewKey, wNewKeyVersion)
#define phKeyStore_SetKUC(pDataParams, wKeyNo, wRefNoKUC) \
phKeyStore_Sw_SetKUC((phKeyStore_Sw_DataParams_t *)pDataParams, wKeyNo, wRefNoKUC)
#define phKeyStore_SetFullKeyEntry(pDataParams, wNoOfKeys, wKeyNo, wNewRefNoKUC, wNewKeyType, pNewKeys, pNewKeyVersionList) \
phKeyStore_Sw_SetFullKeyEntry((phKeyStore_Sw_DataParams_t *)pDataParams, wNoOfKeys, wKeyNo, wNewRefNoKUC, wNewKeyType, pNewKeys, pNewKeyVersionList)
#define phKeyStore_GetKeyEntry(pDataParams, wKeyNo, wKeyVersionBufSize, wKeyVersion, wKeyVersionLength, pKeyType) \
phKeyStore_Sw_GetKeyEntry((phKeyStore_Sw_DataParams_t *)pDataParams, wKeyNo, wKeyVersionBufSize, wKeyVersion, wKeyVersionLength, pKeyType)
#define phKeyStore_GetKey(pDataParams, wKeyNo, wKeyVersion, bKeyBufSize, pKey, pKeyType) \
phKeyStore_Sw_GetKey((phKeyStore_Sw_DataParams_t *)pDataParams, wKeyNo, wKeyVersion, bKeyBufSize, pKey, pKeyType)
#define phKeyStore_SetConfig(pDataParams,wConfig,wValue) \
phKeyStore_Sw_SetConfig((phKeyStore_Sw_DataParams_t *)pDataParams,wConfig,wValue)
#define phKeyStore_SetConfigStr(pDataParams,wConfig,pBuffer,wBufferLength) \
phKeyStore_Sw_SetConfigStr((phKeyStore_Sw_DataParams_t *)pDataParams,wConfig,pBuffer,wBufferLength)
#define phKeyStore_GetConfig(pDataParams,wConfig,pValue) \
phKeyStore_Sw_GetConfig((phKeyStore_Sw_DataParams_t *)pDataParams,wConfig,pValue)
#define phKeyStore_GetConfigStr(pDataParams,wConfig,ppBuffer,pBufferLength) \
phKeyStore_Sw_GetConfigStr((phKeyStore_Sw_DataParams_t *)pDataParams,wConfig,ppBuffer,pBufferLength)
#define phKeyStore_ChangeKUC(pDataParams, wRefNoKUC, dwLimit) \
phKeyStore_Sw_ChangeKUC((phKeyStore_Sw_DataParams_t *)pDataParams, wRefNoKUC, dwLimit)
#define phKeyStore_GetKUC(pDataParams, wRefNoKUC, pdwLimit, pdwCurVal) \
phKeyStore_Sw_GetKUC((phKeyStore_Sw_DataParams_t *)pDataParams, wRefNoKUC, pdwLimit, pdwCurVal)
#else
/**
* \brief Format a key entry to a new KeyType.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phKeyStore_FormatKeyEntry(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wKeyNo, /**< [In] KeyEntry number to be Formatted. */
uint16_t wNewKeyType /**< [In] New Key type of the KeyEntry (predefined type of KeyType).*/
);
/**
* \brief Change a key entry at a given version.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phKeyStore_SetKey(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wKeyNo, /**< [In] Key number of the key to be loaded. */
uint16_t wKeyVersion, /**< [In] Key version of the key to be loaded. */
uint16_t wKeyType, /**< [In] Key type of the key to be loaded.*/
uint8_t * pNewKey, /**< [In] Pointer to the key itself.*/
uint16_t wNewKeyVersion /**< [In] New Key version of the key to be updated. */
);
/**
* \brief Change a key entry at the specified position.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phKeyStore_SetKeyAtPos(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wKeyNo, /**< [In] Key number of the key to be loaded. */
uint16_t wPos, /**< [In] Key position to be updated. */
uint16_t wKeyType, /**< [In] Key type of the key to be loaded.*/
uint8_t * pNewKey, /**< [In] Pointer to the key itself.*/
uint16_t wNewKeyVersion /**< [In] New Key version of the key to be updated. */
);
/**
* \brief Change the KUC of a key entry.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phKeyStore_SetKUC(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wKeyNo, /**< [In] KeyEntry number. */
uint16_t wRefNoKUC /**< [In] Reference Number of the key usage counter used together with that key.*/
);
/**
* \brief Change a full key entry.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phKeyStore_SetFullKeyEntry(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wNoOfKeys, /**< [In] Number of keys in pNewKeys. */
uint16_t wKeyNo, /**< [In] Key number of the key to be loaded. */
uint16_t wNewRefNoKUC, /**< [In] Number of the key usage counter used together with that key. */
uint16_t wNewKeyType, /**< [In] Key type of the key (if the current keyType of KeyEntry is different, error). */
uint8_t * pNewKeys, /**< [In] Array of Keys to load. */
uint16_t * pNewKeyVersionList /**< [In] KeyVersionList of the key to be loaded . */
);
/**
* \brief Get a key entry information block.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phKeyStore_GetKeyEntry(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wKeyNo, /**< [In] Key number of the key entry of interest. */
uint16_t wKeyVersionBufSize, /**< [In] Buffer Size of wKeyVersion in Bytes. */
uint16_t * wKeyVersion, /**< [Out] Array for version information. */
uint16_t * wKeyVersionLength, /**< [Out] Length of valid data in wKeyVersion. */
uint16_t * pKeyType /**< [Out] Type of the key. */
);
/**
* \brief Get a key.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phKeyStore_GetKey(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wKeyNo, /**< [In] Key number of the key to be retrieved. */
uint16_t wKeyVersion, /**< [In] Key version of the key to be retrieved. */
uint8_t bKeyBufSize, /**< [In] Size of the key buffer. */
uint8_t * pKey, /**< [Out] Pointer to the key itself. */
uint16_t * pKeyType /**< [Out] Type of the key. */
);
/**
* \brief Set configuration parameter.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phKeyStore_SetConfig(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wConfig, /**< [In] Configuration Identifier */
uint16_t wValue /**< [In] Configuration Value */
);
/**
* \brief Set configuration parameter.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phKeyStore_SetConfigStr(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wConfig, /**< [In] Configuration Identifier. */
uint8_t *pBuffer, /**< [In] Buffer containing the configuration string. */
uint16_t wBufferLength /**< [In] Length of configuration string. */
);
/**
* \brief Get configuration parameter.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phKeyStore_GetConfig(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wConfig, /**< [In] Configuration Identifier */
uint16_t * pValue /**< [Out] Configuration Value */
);
/**
* \brief Get configuration parameter.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phKeyStore_GetConfigStr(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wConfig, /**< [In] Configuration Identifier */
uint8_t ** ppBuffer, /**< [Out] Pointer to the buffer containing the configuration string. */
uint16_t * pBufferLength /**< [Out] Amount of valid bytes in the configuration string buffer. */
);
/**
* \brief Change a key usage counter entry.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phKeyStore_ChangeKUC(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wRefNoKUC, /**< [In] Number of key entry.*/
uint32_t dwLimit /**< [In] Limit of the Key Usage Counter*/
);
/**
* \brief Obtain a key usage counter entry.
* \return Status code
* \retval #PH_ERR_SUCCESS Operation successful.
* \retval Other Depending on implementation and underlying component.
*/
phStatus_t phKeyStore_GetKUC(
void * pDataParams, /**< [In] Pointer to this layer's parameter structure. */
uint16_t wRefNoKUC, /**< [In] number of the key usage counter to be looked at (00h to 0Fh)*/
uint32_t * pdwLimit, /**< [Out] Currently Set Limit in the KUC */
uint32_t * pdwCurVal /**< [Out] Currently set value in the KUC */
);
/** @} */
#endif /* NXPRDLIB_REM_GEN_INTFS */
#endif /* NXPBUILD__PH_KEYSTORE */
#ifdef __cplusplus
} /* Extern C */
#endif
#endif /* PHKEYSTORE_H */