638 lines
25 KiB
C
638 lines
25 KiB
C
/* Copyright Statement:
|
|
*
|
|
* This software/firmware and related documentation ("AutoChips Software") are
|
|
* protected under relevant copyright laws. The information contained herein is
|
|
* confidential and proprietary to AutoChips Inc. and/or its licensors. Without
|
|
* the prior written permission of AutoChips inc. and/or its licensors, any
|
|
* reproduction, modification, use or disclosure of AutoChips Software, and
|
|
* information contained herein, in whole or in part, shall be strictly
|
|
* prohibited.
|
|
*
|
|
* AutoChips Inc. (C) 2021. All rights reserved.
|
|
*
|
|
* BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
|
|
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("AUTOCHIPS SOFTWARE")
|
|
* RECEIVED FROM AUTOCHIPS AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
|
|
* ON AN "AS-IS" BASIS ONLY. AUTOCHIPS EXPRESSLY DISCLAIMS ANY AND ALL
|
|
* WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
|
|
* NONINFRINGEMENT. NEITHER DOES AUTOCHIPS PROVIDE ANY WARRANTY WHATSOEVER WITH
|
|
* RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
|
|
* INCORPORATED IN, OR SUPPLIED WITH THE AUTOCHIPS SOFTWARE, AND RECEIVER AGREES
|
|
* TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
|
|
* RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
|
|
* OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN AUTOCHIPS
|
|
* SOFTWARE. AUTOCHIPS SHALL ALSO NOT BE RESPONSIBLE FOR ANY AUTOCHIPS SOFTWARE
|
|
* RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
|
|
* STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND AUTOCHIPS'S
|
|
* ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE AUTOCHIPS SOFTWARE
|
|
* RELEASED HEREUNDER WILL BE, AT AUTOCHIPS'S OPTION, TO REVISE OR REPLACE THE
|
|
* AUTOCHIPS SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
|
|
* CHARGE PAID BY RECEIVER TO AUTOCHIPS FOR SUCH AUTOCHIPS SOFTWARE AT ISSUE.
|
|
*/
|
|
|
|
/*!
|
|
* @file cse_drv.h
|
|
*
|
|
* @brief This file provides CSE integration functions interface.
|
|
*
|
|
*/
|
|
|
|
|
|
#ifndef CSE_DRV_H
|
|
#define CSE_DRV_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
/* =========================================== Includes =========================================== */
|
|
#include "device_register.h"
|
|
|
|
/*=====================================SOURCE FILE VERSION INFORMATION==============================*/
|
|
#define CSE_HAL_MODULE_ID (221U)
|
|
#define CSE_HAL_SW_MAJOR_VERSION (1U)
|
|
#define CSE_HAL_SW_MINOR_VERSION (2U)
|
|
#define CSE_HAL_SW_PATCH_VERSION (1U)
|
|
|
|
/* ============================================ Define ============================================ */
|
|
|
|
/* =========================================== Typedef ============================================ */
|
|
/*!< Callback typedef for security module */
|
|
typedef void (*security_callback_t)(uint32_t completedCmd, void *callbackParam);
|
|
|
|
typedef uint8_t cse_status_t;
|
|
|
|
/*!
|
|
* @brief Specify the KeyID to be used to implement the requested cryptographic operation.
|
|
*/
|
|
typedef enum {
|
|
CSE_SECRET_KEY = 0x0U,
|
|
CSE_MASTER_ECU,
|
|
CSE_BOOT_MAC_KEY,
|
|
CSE_BOOT_MAC,
|
|
CSE_KEY_1,
|
|
CSE_KEY_2,
|
|
CSE_KEY_3,
|
|
CSE_KEY_4,
|
|
CSE_KEY_5,
|
|
CSE_KEY_6,
|
|
CSE_KEY_7,
|
|
CSE_KEY_8,
|
|
CSE_KEY_9,
|
|
CSE_KEY_10,
|
|
CSE_RAM_KEY = 0xFU,
|
|
CSE_KEY_11 = 0x14U,
|
|
CSE_KEY_12,
|
|
CSE_KEY_13,
|
|
CSE_KEY_14,
|
|
CSE_KEY_15,
|
|
CSE_KEY_16,
|
|
CSE_KEY_17
|
|
} cse_key_id_t;
|
|
|
|
/*!
|
|
* @brief CSE commands which follow the same values as the SHE command definition.
|
|
*/
|
|
typedef enum {
|
|
CSE_CMD_ENC_ECB = 0x1U,
|
|
CSE_CMD_ENC_CBC,
|
|
CSE_CMD_DEC_ECB,
|
|
CSE_CMD_DEC_CBC,
|
|
CSE_CMD_GENERATE_MAC,
|
|
CSE_CMD_VERIFY_MAC,
|
|
CSE_CMD_LOAD_KEY,
|
|
CSE_CMD_LOAD_PLAIN_KEY,
|
|
CSE_CMD_EXPORT_RAM_KEY,
|
|
CSE_CMD_INIT_RNG,
|
|
CSE_CMD_EXTEND_SEED,
|
|
CSE_CMD_RND,
|
|
CSE_CMD_RESERVED_1,
|
|
CSE_CMD_BOOT_FAILURE,
|
|
CSE_CMD_BOOT_OK,
|
|
CSE_CMD_GET_ID,
|
|
CSE_CMD_BOOT_DEFINE,
|
|
CSE_CMD_DBG_CHAL,
|
|
CSE_CMD_DBG_AUTH,
|
|
CSE_CMD_CANCEL,
|
|
CSE_CMD_MP_COMPRESS,
|
|
CSE_CMD_RESERVED_2
|
|
} cse_cmd_t;
|
|
|
|
/*!
|
|
* @brief Specifies how the data is transferred to/from the CSE.
|
|
*/
|
|
typedef enum {
|
|
CSE_FUNC_FORMAT_COPY,
|
|
CSE_FUNC_FORMAT_ADDR
|
|
} cse_func_format_t;
|
|
|
|
/*!
|
|
* @brief Specifies if the information is the first or a following function call.
|
|
*/
|
|
typedef enum {
|
|
CSE_CALL_SEQ_FIRST,
|
|
CSE_CALL_SEQ_SUBSEQUENT
|
|
} cse_call_sequence_t;
|
|
|
|
/*!
|
|
* @brief Specifies the boot type for the BOOT_DEFINE command.
|
|
*/
|
|
typedef enum {
|
|
CSE_BOOT_STRICT,
|
|
CSE_BOOT_SERIAL,
|
|
CSE_BOOT_PARALLEL,
|
|
CSE_BOOT_NOT_DEFINED
|
|
} cse_boot_flavor_t;
|
|
|
|
/*!
|
|
* @brief Internal driver state information.
|
|
*/
|
|
typedef struct {
|
|
bool cmdInProgress; /*!< Specifies if a command is in progress */
|
|
cse_cmd_t cmd; /*!< Specifies the type of the command in execution */
|
|
const uint8_t *inputBuff; /*!< Specifies the input of the command in execution */
|
|
uint8_t *outputBuff; /*!< Specifies the output of the command in execution */
|
|
uint32_t index; /*!< Specifies the index in the input buffer of the command in execution */
|
|
uint32_t fullSize; /*!< Specifies the size of the input of the command in execution */
|
|
uint32_t partSize; /*!< Specifies the size of the chunck of the input currently processed */
|
|
cse_key_id_t keyId; /*!< Specifies the key used for the command in execution */
|
|
status_t errCode; /*!< Specifies the error code of the last executed command */
|
|
const uint8_t *iv; /*!< Specifies the IV of the command in execution (for encryption/decryption using CBC mode) */
|
|
cse_call_sequence_t seq; /*!< Specifies if the information is the first or a following function call. */
|
|
uint32_t msgLen; /*!< Specifies the message size (in bits) for the command in execution (for MAC generation/verification) */
|
|
bool *verifStatus; /*!< Specifies the result of the last executed MAC verification command */
|
|
bool macWritten; /*!< Specifies if the MAC to be verified was written in CSE_PRAM for a MAC verification command */
|
|
const uint8_t *mac; /*!< Specifies the MAC to be verified for a MAC verification command */
|
|
uint32_t macLen; /*!< Specifies the number of bits of the MAC to be verified for a MAC verification command */
|
|
uint32_t leftLen;
|
|
security_callback_t callback; /*!< The callback invoked when an asynchronous command is completed */
|
|
void *callbackParam; /*!< User parameter for the command completion callback */
|
|
} cse_state_t;
|
|
|
|
/* ========================================== Variables =========================================== */
|
|
|
|
/* ==================================== Functions declaration ===================================== */
|
|
/*!
|
|
* @brief CSE driver initialize.
|
|
*
|
|
* @param[in] instance: state Pointer to the state structure
|
|
* @return none
|
|
*/
|
|
void CSE_DRV_Init(cse_state_t *state);
|
|
|
|
/*!
|
|
* @brief Uninitialize CSE module and disables the CSE interrupt.
|
|
*
|
|
* @param[in] none
|
|
* @return none
|
|
*/
|
|
void CSE_DRV_Deinit(void);
|
|
|
|
/*!
|
|
* @brief Performs the AES-128 encryption in ECB mode of the input plain text with the Key ID and returns the cipher text.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform encryption in ECB mode
|
|
* @param[in] plainText: pointer to the plain text buffer
|
|
* @param[in] length: number in bytes of cipher text message to be encrypted
|
|
* @param[out] cipherText: pointer to the cipher text buffer
|
|
* @param[in] timeout: timeout value in milliseconds
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_EncryptECB(cse_key_id_t keyId, const uint8_t *plainText, uint32_t length,
|
|
uint8_t *cipherText, uint32_t timeout);
|
|
|
|
/*!
|
|
* @brief Performs the AES-128 decryption in ECB mode of the input cipher text with the Key ID and returns the plain text.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform encryption in ECB mode
|
|
* @param[in] cipherText: pointer to the cipher text buffer
|
|
* @param[in] length: number in bytes of cipher text message to be decrypted
|
|
* @param[out] plainText: pointer to the plain text buffer
|
|
* @param[in] timeout: timeout value in milliseconds
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_DecryptECB(cse_key_id_t keyId, const uint8_t *cipherText, uint32_t length,
|
|
uint8_t *plainText, uint32_t timeout);
|
|
|
|
/*!
|
|
* @brief Performs the AES-128 encryption in CBC mode of the input plain text with the Key ID and returns the cipher text.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform encryption in ECB mode
|
|
* @param[in] plainText: pointer to the plain text buffer
|
|
* @param[in] length: number in bytes of cipher text message to be encrypted
|
|
* @param[in] iv: pointer to the initialization vector buffer
|
|
* @param[out] cipherText: pointer to the cipher text buffer
|
|
* @param[in] timeout: timeout value in milliseconds
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_EncryptCBC(cse_key_id_t keyId, const uint8_t *plainText, uint32_t length,
|
|
const uint8_t *iv, uint8_t *cipherText, uint32_t timeout);
|
|
|
|
/*!
|
|
* @brief Performs the AES-128 decryption in CBC mode of the input cipher text with the Key ID and returns the plain text.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform encryption in CBC mode
|
|
* @param[in] cipherText: pointer to the cipher text buffer
|
|
* @param[in] length: number in bytes of cipher text message to be decrypted
|
|
* @param[in] iv: pointer to the initialization vector buffer
|
|
* @param[out] plainText: pointer to the plain text buffer
|
|
* @param[in] timeout: timeout value in milliseconds
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_DecryptCBC(cse_key_id_t keyId, const uint8_t *cipherText, uint32_t length,
|
|
const uint8_t *iv, uint8_t *plainText, uint32_t timeout);
|
|
|
|
/*!
|
|
* @brief Generate the MAC of a given message using CMAC with AES-128.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform generate CMAC
|
|
* @param[in] msg: pointer to the message buffer
|
|
* @param[in] msgLen: number in bits of message which CMAC will be computed
|
|
* @param[out] cmac: pointer to the CMAC buffer
|
|
* @param[in] timeout: timeout value in milliseconds
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_GenerateMAC(cse_key_id_t keyId, const uint8_t *msg, uint32_t msgLen,
|
|
uint8_t *cmac, uint32_t timeout);
|
|
|
|
/*!
|
|
* @brief Generate the MAC of a given message(locate in FLASH) using CMAC with AES-128.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform generate CMAC
|
|
* @param[in] msg: pointer to the message buffer that pointing to Flash memory
|
|
* @param[in] msgLen: number in bits of message which CMAC will be computed
|
|
* @param[out] cmac: pointer to the CMAC buffer
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_GenerateMACAddrMode(cse_key_id_t keyId, const uint8_t *msg, uint32_t msgLen, uint8_t *cmac);
|
|
|
|
/*!
|
|
* @brief Verifies the MAC of a given message using CMAC with AES-128.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform verify MAC
|
|
* @param[in] msg: pointer to the message buffer
|
|
* @param[in] msgLen: number in bits of message which CMAC will be verified
|
|
* @param[in] mac: pointer to the CMAC buffer which CMAC will be verified
|
|
* @param[in] macLen: number in bits of CMAC which CMAC will be verified
|
|
* @param[out] verifStatus: status of MAC verification command
|
|
* - true: verification operation passed
|
|
* - false: verification operation failed
|
|
* @param[in] timeout: timeout value in milliseconds
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_VerifyMAC(cse_key_id_t keyId, const uint8_t *msg, uint32_t msgLen, const uint8_t *mac,
|
|
uint16_t macLen, bool *verifStatus, uint32_t timeout);
|
|
|
|
/*!
|
|
* @brief Verifies the MAC of a given message(locate in FLASH) using CMAC with AES-128.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform CMAC
|
|
* @param[in] msg: pointer to the message buffer that pointing to Flash memory
|
|
* @param[in] msgLen: number in bits of message which CMAC will be verified
|
|
* @param[in] mac: pointer to the CMAC buffer which CMAC will be verified
|
|
* @param[in] macLen: number in bits of CMAC which CMAC will be verified
|
|
* @param[out] verifStatus: status of MAC verification command
|
|
* - true: verification operation passed
|
|
* - false: verification operation failed
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_VerifyMACAddrMode(cse_key_id_t keyId, const uint8_t *msg, uint32_t msgLen,
|
|
const uint8_t *mac, uint16_t macLen, bool *verifStatus);
|
|
|
|
/*!
|
|
* @brief Generate the MAC of a given message block input flow using CMAC with AES-128.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform generate CMAC
|
|
* @param[in] msg: pointer to the message buffer
|
|
* @param[in] totalMsgBitLen: number in bits of total message which CMAC will be computed
|
|
* @param[in] curMsgBitLen: number in bits of current message which CMAC will be computed
|
|
* @param[out] cmac: pointer to the CMAC buffer
|
|
* @param[in] isFirst: the flow of the first calculation
|
|
* - true: first calculation msg mac
|
|
* - false: subsequent calculation msg mac
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_GenerateMACStream(cse_key_id_t keyId, const uint8_t *msg, uint32_t totalMsgBitLen,
|
|
uint32_t curMsgBitLen, uint8_t *cmac, bool isFirst);
|
|
|
|
/*!
|
|
* @brief Verifies the MAC of a given message block input flow using CMAC with AES-128.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform verify MAC
|
|
* @param[in] msg: pointer to the message buffer
|
|
* @param[in] mac: pointer to the CMAC buffer which CMAC will be verified
|
|
* @param[out] verifStatus: status of MAC verification command
|
|
* - true: verification operation passed
|
|
* - false: verification operation failed
|
|
* @param[in] totalMsgBitLen: number in bits of total message which CMAC will be verified
|
|
* @param[in] curMsgBitLen: number in bits of current message
|
|
* @param[in] isFirst: the flow of the first calculation
|
|
* - true: first calculation msg mac
|
|
* - false: subsequent calculation msg mac
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_VerifyMACStream(cse_key_id_t keyId, const uint8_t *msg, const uint8_t *mac, bool *verifyStatus,
|
|
uint32_t totalMsgBitLen, uint32_t curMsgBitLen, bool isFirst);
|
|
/*!
|
|
* @brief Updates an internal key to CSE module.
|
|
*
|
|
* @param[in] KeyID: the key to be updated
|
|
* @param[in] m1: pointer to the 128-bit M1 message buffer
|
|
* @param[in] m2: pointer to the 128-bit M2 message buffer
|
|
* @param[in] m3: pointer to the 128-bit M3 message buffer
|
|
* @param[in] m4: pointer to the 128-bit M4 message buffer
|
|
* @param[in] m5: pointer to the 128-bit M5 message buffer
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_LoadKey(cse_key_id_t keyId, const uint8_t *m1, const uint8_t *m2,
|
|
const uint8_t *m3, uint8_t *m4, uint8_t *m5);
|
|
|
|
/*!
|
|
* @brief Updates the RAM key memory slot with a 128-bit plaintext.
|
|
*
|
|
* @param[in] plainKey: pointer to the 128-bit plain text
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_LoadPlainKey(const uint8_t *plainKey);
|
|
|
|
/*!
|
|
* @brief Exports the RAM_KEY into a format protected by SECRET_KEY.
|
|
*
|
|
* @param[out] m1: pointer to the 128-bit M1 message buffer that export from RAM KEY slot
|
|
* @param[out] m2: pointer to the 128-bit M2 message buffer that export from RAM KEY slot
|
|
* @param[out] m3: pointer to the 128-bit M3 message buffer that export from RAM KEY slot
|
|
* @param[out] m4: pointer to the 128-bit M4 message buffer that export from RAM KEY slot
|
|
* @param[out] m5: pointer to the 128-bit M5 message buffer that export from RAM KEY slot
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_ExportRAMKey(uint8_t *m1, uint8_t *m2, uint8_t *m3, uint8_t *m4, uint8_t *m5);
|
|
|
|
/*!
|
|
* @brief Initializes the PRNG.
|
|
*
|
|
* @param[in] none
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_InitRNG(void);
|
|
|
|
/*!
|
|
* @brief Extends the seed of the PRNG.
|
|
*
|
|
* @param[in] entropy: pointer to a 128-bit buffer containing the entropy
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_ExtendSeed(const uint8_t *entropy);
|
|
|
|
/*!
|
|
* @brief Extends the seed of the PRNG.
|
|
*
|
|
* @param[out] entropy: pointer to a 128-bit buffer containing the PRNG value
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_GenerateRND(uint8_t *rnd);
|
|
|
|
/*!
|
|
* @brief Mark failure boot verification.
|
|
*
|
|
* @param[in] none
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_BootFailure(void);
|
|
|
|
/*!
|
|
* @brief Mark successful boot verification.
|
|
*
|
|
* @param[in] none
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_BootOK(void);
|
|
|
|
/*!
|
|
* @brief Define bootcode size and secure boot type.
|
|
*
|
|
* @param[in] bootSize: number of blocks of 128-bit data to check on boot
|
|
* @param[in] bootFlavor: secure boot type
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_BootDefine(uint32_t bootSize, cse_boot_flavor_t bootFlavor);
|
|
|
|
/*!
|
|
* @brief Returns the content of the status register.
|
|
*
|
|
* @param[in] none
|
|
* @return Value of the status register
|
|
*/
|
|
uint32_t CSE_DRV_GetStatus(void);
|
|
|
|
/*!
|
|
* @brief Get the UID from CSE module.
|
|
*
|
|
* @param[in] challenge: pointer to the 128-bit buffer containing challenge data
|
|
* @param[out] uid: pointer to 120 bit buffer containing UID data
|
|
* @param[out] sreg: Value of the status register.
|
|
* @param[out] mac: pointer to the 128 bit buffer containing MAC data
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_GetID(const uint8_t *challenge, uint8_t *uid, uint8_t *sreg, uint8_t *mac);
|
|
|
|
/*!
|
|
* @brief Get a random challenge data.
|
|
*
|
|
* @param[out] challenge: pointer to the 128-bit buffer containing challenge data
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_DbgChal(uint8_t *challenge);
|
|
|
|
/*!
|
|
* @brief Erases all keys that stored in FLASH memory.
|
|
*
|
|
* @param[in] authorization: pointer to the 128-bit buffer containing the authorization value that get from CSE_DRV_DbgChal
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_DbgAuth(const uint8_t *authorization);
|
|
|
|
/*!
|
|
* @brief Compresses the given messages.
|
|
*
|
|
* @param[in] msg: pointer to the messages which will be compressed
|
|
* @param[in] msgLen: number in bits of message
|
|
* @param[out] mpCompress: pointer to the 128 bit buffer storing the compressed data
|
|
* @param[in] timeout: timeout value in milliseconds
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_MPCompress(const uint8_t *msg, uint16_t msgLen, uint8_t *mpCompress, uint32_t timeout);
|
|
|
|
/*!
|
|
* @brief Asynchronously performs the AES-128 encryption in ECB mode.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform encryption in ECB mode
|
|
* @param[in] plainText: pointer to the plain text buffer
|
|
* @param[in] length: number in bytes of cipher text message to be encrypted
|
|
* @param[out] cipherText: pointer to the cipher text buffer
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_EncryptECBAsync(cse_key_id_t keyId, const uint8_t *plainText, uint32_t length, uint8_t *cipherText);
|
|
|
|
/*!
|
|
* @brief Asynchronously performs the AES-128 decryption in ECB mode.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform encryption in ECB mode
|
|
* @param[in] cipherText: pointer to the cipher text buffer
|
|
* @param[in] length: number in bytes of cipher text message to be decrypted
|
|
* @param[out] plainText: pointer to the plain text buffer
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_DecryptECBAsync(cse_key_id_t keyId, const uint8_t *cipherText, uint32_t length, uint8_t *plainText);
|
|
|
|
/*!
|
|
* @brief Start the AES-128 encryption in CBC mode of
|
|
* the input plain text buffer, in an asynchronous manner.
|
|
*
|
|
* @param[in] keyId:key id
|
|
* @param[in] plainText:plian text buffer
|
|
* @param[in] length:text length
|
|
* @param[in] iV:initial vector buffer
|
|
* @param[in] cipherText:cipher text buffer
|
|
* @return status_t
|
|
*/
|
|
status_t CSE_DRV_EncryptCBCAsync(cse_key_id_t keyId, const uint8_t *plainText, uint32_t length,
|
|
const uint8_t *iv, uint8_t *cipherText);
|
|
|
|
/*!
|
|
* @brief Asynchronously performs the AES-128 decryption in CBC mode.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform encryption in CBC mode
|
|
* @param[in] cipherText: pointer to the cipher text buffer
|
|
* @param[in] length: number in bytes of cipher text message to be decrypted
|
|
* @param[in] iv: pointer to the initialization vector buffer
|
|
* @param[out] plainText: pointer to the plain text buffer
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_DecryptCBCAsync(cse_key_id_t keyId, const uint8_t *cipherText, uint32_t length,
|
|
const uint8_t *iv, uint8_t *plainText);
|
|
|
|
/*!
|
|
* @brief Asynchronously generate the MAC of a given message using CMAC with AES-128.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform generate CMAC
|
|
* @param[in] msg: pointer to the message buffer
|
|
* @param[in] length: number in bits of message which CMAC will be computed
|
|
* @param[out] cmac: pointer to the CMAC buffer
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_GenerateMACAsync(cse_key_id_t keyId, const uint8_t *msg, uint32_t msgLen, uint8_t *cmac);
|
|
|
|
/*!
|
|
* @brief Asynchronously verifies the MAC of a given message using CMAC with AES-128.
|
|
*
|
|
* @param[in] KeyID: Key ID that used to perform CMAC
|
|
* @param[in] msg: pointer to the message buffer
|
|
* @param[in] msgLen: number in bits of message which CMAC will be verified
|
|
* @param[in] cmac: pointer to the CMAC buffer which CMAC will be verified
|
|
* @param[in] macLen: number in bits of CMAC which CMAC will be verified
|
|
* @param[out] verifStatus: status of MAC verification command
|
|
* - true: verification operation passed
|
|
* - false: verification operation failed
|
|
* @return operation status
|
|
* - STATUS_SUCCESS: operation was successful
|
|
* - Other Valule: operation was fail
|
|
*/
|
|
status_t CSE_DRV_VerifyMACAsync(cse_key_id_t keyId, const uint8_t *msg, uint32_t msgLen,
|
|
const uint8_t *mac, uint16_t macLen, bool *verifStatus);
|
|
|
|
/*!
|
|
* @brief Asynchronously get operation status.
|
|
*
|
|
* @param[in] none
|
|
* @return operation status
|
|
*/
|
|
status_t CSE_DRV_GetAsyncCmdStatus(void);
|
|
|
|
/*!
|
|
* @brief Installs a callback function for CSE driver
|
|
*
|
|
* @param[in] callbackFunc: The function to be invoked
|
|
* @param[in] callbackParam: The parameter to be passed to the callback function
|
|
* @return none
|
|
*/
|
|
void CSE_DRV_InstallCallback(security_callback_t callbackFunc, void *callbackParam);
|
|
|
|
/*!
|
|
* @brief Cancels a previously launched asynchronous command.
|
|
*
|
|
* @param none
|
|
* @return none
|
|
*/
|
|
void CSE_DRV_CancelCommand(void);
|
|
|
|
/*!
|
|
* @brief Get module version information.
|
|
*
|
|
* @param[out] versionInfo: Module version information address.
|
|
* @return void
|
|
*/
|
|
void CSE_DRV_GetVersionInfo(Drv_VersionInfo_Type *versionInfo);
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* CSE_DRV_H */
|
|
|
|
/* ============================================= EOF ============================================== */
|