650 lines
46 KiB
C
650 lines
46 KiB
C
/**********************************************************************************************************************
|
|
* COPYRIGHT
|
|
* -------------------------------------------------------------------------------------------------------------------
|
|
* \verbatim
|
|
* Copyright (c) 2025 by Vector Informatik GmbH. All rights reserved.
|
|
*
|
|
* This software is copyright protected and proprietary to Vector Informatik GmbH.
|
|
* Vector Informatik GmbH grants to you only those rights as set out in the license conditions.
|
|
* All other rights remain with Vector Informatik GmbH.
|
|
* \endverbatim
|
|
* -------------------------------------------------------------------------------------------------------------------
|
|
* FILE DESCRIPTION
|
|
* -----------------------------------------------------------------------------------------------------------------*/
|
|
/* \file CryIf.h
|
|
* \brief MICROSAR Crypto Interface (CRYIF)
|
|
* \details The Crypto Interface module provides a unique interface to manage different Crypto HW and SW
|
|
* solutions.
|
|
*********************************************************************************************************************/
|
|
|
|
/**********************************************************************************************************************
|
|
* REVISION HISTORY
|
|
* -------------------------------------------------------------------------------------------------------------------
|
|
* Version Date Author Change Id Description
|
|
* -------------------------------------------------------------------------------------------------------------------
|
|
* 01.00.00 2016-12-01 vismss - Initial creation of Crypto Interface
|
|
* 01.00.01 2016-12-06 visrpp ESCAN00093184 Renamed CryIf_KeyValidSet to CryIf_KeySetValid
|
|
* 01.00.02 2016-12-16 vismss ESCAN00093334 Adapted CryIf_CallbackNotification
|
|
* 01.00.03 2017-01-24 vismss ESCAN00093699 Correction of error and service id codes
|
|
* 01.01.00 2017-02-14 visgut FEATC-815 Support CRYIF
|
|
* Support CryIf_CancelJob
|
|
* Fix Reference of Driver Object
|
|
* 01.02.00 2017-05-05 visrpp FEATC-1228 FEAT-2902 Release of AR4.3 CryIf
|
|
* 02.00.00 2017-05-12 vismaw ESCAN00095159 Validity of cryIfKeyId is not checked
|
|
* Silent BSW
|
|
* 04.00.00 2018-11-07 vismaw STORYC-6541 Support redirection of input/output buffers from/to key elements
|
|
* STORYC-6546 Support partial key element copy
|
|
* 04.01.00 2019-03-15 vismaw STORYC-7654 Release of CryIf 4.x
|
|
* STORYC-5723 MISRA-C:2012 Compliance
|
|
* 05.00.00 2019-12-04 visenc SEC-19 Asynchronous Key Handling
|
|
* ESCAN00105151 Compiler error due to incompatible function pointer declaration and
|
|
* function definition
|
|
* 05.01.00 2020-08-18 vismxe SEC-1838 Migration to QAC Helix
|
|
* vismxe ESCAN00105785 Fix comment before case label not recognized by compiler
|
|
* 06.00.00 2023-02-28 rstemmler SEC-5474 Introduce APIs KeyGetStatus and KeySetInvalid
|
|
* SEC-3020 Add stub functions for non-autosar services CertificateVerify and
|
|
* CertificateParse
|
|
* SEC-5682 Improve parameter checks in CryIf_KeyElementSet
|
|
* SEC-3644 <Mip>_MemMap migration
|
|
* ESCAN00114084 Avoid possible endless loop when copying keys between crypto drivers
|
|
* 07.00.00 2023-04-26 kwiedom HSM-3726 Multi Core support: remove CryIf_ModuleInitialized variable and checks
|
|
* 07.01.00 2023-11-07 coechsler ESCAN00116074 CryIf_KeyCopy may not copy key elements as expected when copying from one driver to another
|
|
* main-1 2024-04-23 viseag CRY-717 Change history is maintained in the global ChangeHistory.txt file starting with this release.
|
|
*********************************************************************************************************************/
|
|
|
|
#if !defined (CRYIF_H)
|
|
# define CRYIF_H
|
|
|
|
/**********************************************************************************************************************
|
|
* INCLUDES
|
|
*********************************************************************************************************************/
|
|
# include "Std_Types.h"
|
|
# include "Crypto_GeneralTypes.h"
|
|
# include "CryIf_Cfg.h"
|
|
# include "CryIf_Cbk.h"
|
|
|
|
/**********************************************************************************************************************
|
|
* GLOBAL CONSTANT MACROS
|
|
*********************************************************************************************************************/
|
|
|
|
/* Vendor and module identification */
|
|
# define CRYIF_VENDOR_ID (30u)
|
|
# define CRYIF_MODULE_ID (112u)
|
|
|
|
/* AUTOSAR Software specification version information */
|
|
# define CRYIF_AR_RELEASE_MAJOR_VERSION (4u)
|
|
# define CRYIF_AR_RELEASE_MINOR_VERSION (4u)
|
|
# define CRYIF_AR_RELEASE_REVISION_VERSION (0u)
|
|
|
|
/* ----- Component version information (decimal version of ALM implementation package) ----- */
|
|
# define CRYIF_SW_MAJOR_VERSION (9u)
|
|
# define CRYIF_SW_MINOR_VERSION (1u)
|
|
# define CRYIF_SW_PATCH_VERSION (0u)
|
|
|
|
# define CRYIF_INSTANCE_ID_DET (0x00u)
|
|
|
|
/* ----- API service IDs ----- */
|
|
# define CRYIF_SID_INIT (0x00u) /*!< Service ID: CryIf_Init() */
|
|
# define CRYIF_SID_GET_VERSION_INFO (0x01u) /*!< Service ID: CryIf_GetVersionInfo() */
|
|
# define CRYIF_SID_PROCESS_JOB (0x02u) /*!< Service ID: CryIf_ProcessJob() */
|
|
# define CRYIF_SID_CANCEL_JOB (0x03u) /*!< Service ID: CryIf_CancelJob() */
|
|
# define CRYIF_SID_KEY_ELEMENT_SET (0x04u) /*!< Service ID: CryIf_KeyElementSet() */
|
|
# define CRYIF_SID_KEY_SET_VALID (0x05u) /*!< Service ID: CryIf_KeySetValid() */
|
|
# define CRYIF_SID_KEY_ELEMENT_GET (0x06u) /*!< Service ID: CryIf_KeyElementGet() */
|
|
# define CRYIF_SID_KEY_ELEMENT_COPY (0x0fu) /*!< Service ID: CryIf_KeyElementCopy() */
|
|
# define CRYIF_SID_KEY_ELEMENT_COPY_PARTIAL (0x12u) /*!< Service ID: CryIf_KeyElementCopyPartial() */
|
|
# define CRYIF_SID_KEY_COPY (0x10u) /*!< Service ID: CryIf_KeyCopy() */
|
|
# define CRYIF_SID_RANDOM_SEED (0x07u) /*!< Service ID: CryIf_RandomSeed() */
|
|
# define CRYIF_SID_KEY_GENERATE (0x08u) /*!< Service ID: CryIf_KeyGenerate() */
|
|
# define CRYIF_SID_KEY_DERIVE (0x09u) /*!< Service ID: CryIf_KeyDerive() */
|
|
# define CRYIF_SID_KEY_EXCHANGE_CALC_PUB_VAL (0x0au) /*!< Service ID: CryIf_KeyExchangeCalcPubVal() */
|
|
# define CRYIF_SID_KEY_EXCHANGE_CALC_SECRET (0x0bu) /*!< Service ID: CryIf_KeyExchangeCalcSecret() */
|
|
# define CRYIF_SID_CERTIFICATE_PARSE (0x0cu) /*!< Service ID: CryIf_CertificateParse() */
|
|
# define CRYIF_SID_CERTIFICATE_VERIFY (0x11u) /*!< Service ID: CryIf_CertificateVerify() */
|
|
# define CRYIF_SID_KEY_GET_STATUS (0x13u) /*!< Service ID: CryIf_KeyGetStatus() */
|
|
# define CRYIF_SID_KEY_SET_INVALID (0x14u) /*!< Service ID: CryIf_KeySetInvalid() */
|
|
# define CRYIF_SID_CUSTOM_SYNC (0x15u) /*!< Service ID: CryIf_CustomSync()*/
|
|
|
|
/* ----- Error codes ----- */
|
|
# define CRYIF_E_NO_ERROR (0xFFu) /*!< used to check if no error occurred - use a value unequal to any error code */
|
|
# define CRYIF_E_UNINIT (0x00u) /*!< Error code: API service used without module initialization */
|
|
# define CRYIF_E_INIT_FAILED (0x01u) /*!< Error code: Initialisation of CRYIF module failed */
|
|
# define CRYIF_E_PARAM_POINTER (0x02u) /*!< Error code: API request called with invalid parameter (null pointer) */
|
|
# define CRYIF_E_PARAM_HANDLE (0x03u) /*!< Error code: API request called with invalid parameter (out of range) */
|
|
# define CRYIF_E_PARAM_VALUE (0x04u) /*!< Error code: API request called with invalid parameter (invalid value) */
|
|
# define CRYIF_E_ALREADY_INITIALIZED (0x11u) /*!< Error code: The service CryIf_Init() is called while the module is already initialized */
|
|
# define CRYIF_E_REQUEST_NOT_SUPPORTED (0x12u) /*!< Error code: API request called but request is not supported by Crypto */
|
|
|
|
/* ----- Modes ----- */
|
|
# define CRYIF_UNINIT (0x00u) /*!< State: Module was not initialized */
|
|
# define CRYIF_INIT (0x01u) /*!< State: Module is initialized */
|
|
|
|
/* ----- Other constants ----- */
|
|
# define CRYIF_UINT32_MAX (0xFFFFFFFFuL)
|
|
|
|
/**********************************************************************************************************************
|
|
* GLOBAL FUNCTION MACROS
|
|
*********************************************************************************************************************/
|
|
|
|
# define CryIf_NoUInt32Overflow(Value1, Value2) (((Value2) <= (uint32)(CRYIF_UINT32_MAX - Value1)) ? TRUE:FALSE )
|
|
|
|
/**********************************************************************************************************************
|
|
* GLOBAL FUNCTION PROTOTYPES
|
|
*********************************************************************************************************************/
|
|
|
|
# define CRYIF_START_SEC_CODE
|
|
# include "CryIf_MemMap.h" /* PRQA S 5087 */ /* MD_MSR_MemMap */
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_InitMemory()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Power-up memory initialization.
|
|
* \details Initialize component variables at power up. No action is performed, CryIf is stateless.
|
|
* \pre Module is uninitialized.
|
|
* \context TASK
|
|
* \reentrant FALSE
|
|
* \synchronous TRUE
|
|
*********************************************************************************************************************/
|
|
FUNC(void, CRYIF_CODE) CryIf_InitMemory(void);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_Init()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Initialization function.
|
|
* \details This function initializes the module CryIf. No action is performed, CryIf is stateless.
|
|
* \pre Interrupts are disabled.
|
|
* \context TASK
|
|
* \reentrant FALSE
|
|
* \synchronous TRUE
|
|
*********************************************************************************************************************/
|
|
FUNC(void, CRYIF_CODE) CryIf_Init(void);
|
|
|
|
# if (CRYIF_VERSION_INFO_API == STD_ON)
|
|
/**********************************************************************************************************************
|
|
* CryIf_GetVersionInfo()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Returns the version information.
|
|
* \details CryIf_GetVersionInfo() returns version information, vendor ID and AUTOSAR module ID of the component.
|
|
* \param[out] versioninfo Pointer to where to store the version information. Parameter must not be NULL.
|
|
* \pre -
|
|
* \context TASK|ISR2
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
*********************************************************************************************************************/
|
|
FUNC(void, CRYIF_CODE) CryIf_GetVersionInfo(P2VAR(Std_VersionInfoType, AUTOMATIC, CRYIF_APPL_VAR) versioninfo);
|
|
# endif /* (CRYIF_VERSION_INFO_API == STD_ON) */
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_ProcessJob()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Process the received job.
|
|
* \details This interface dispatches the received jobs to the configured crypto driver object.
|
|
* \param[in] channelId Holds the identifier of the crypto channel.
|
|
* \param[in,out] job Pointer to the configuration of the job. Contains structures with user and
|
|
* primitive relevant information.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \return CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy.
|
|
* \return CRYPTO_E_KEY_NOT_VALID Request failed, the key is not valid.
|
|
* \return CRYPTO_E_KEY_NOT_AVAILABLE Request failed, the key is not available.
|
|
* \return CRYPTO_E_QUEUE_FULL Request failed, the queue is full.
|
|
* \return CRYPTO_E_SMALL_BUFFER Request failed, the provided buffer is too small to store the result.
|
|
* \return CRYPTO_E_CUSTOM_ERROR Remote processing failed.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \spec requires job->jobPrimitiveInfo != NULL_PTR;
|
|
* requires job->jobPrimitiveInfo->primitiveInfo != NULL_PTR;
|
|
* \endspec
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_ProcessJob(uint32 channelId,
|
|
P2VAR(Crypto_JobType, AUTOMATIC, CRYIF_APPL_VAR) job);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_CancelJob()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Cancels the received job.
|
|
* \details This interface removes the provided job from the underlying Crypto Driver Object queue.
|
|
* \param[in] channelId Holds the identifier of the crypto channel.
|
|
* \param[in,out] job Pointer to the configuration of the job. Contains structures with user and
|
|
* primitive relevant information.
|
|
* \return E_OK Request successful, job has been removed.
|
|
* \return E_NOT_OK Request failed, job could not be removed.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \trace CREQ-127561
|
|
* \spec requires job->jobPrimitiveInfo != NULL_PTR;
|
|
* requires job->jobPrimitiveInfo->primitiveInfo != NULL_PTR;
|
|
* requires job->jobInfo != NULL_PTR;
|
|
* \endspec
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_CancelJob(uint32 channelId,
|
|
P2VAR(Crypto_JobType, AUTOMATIC, CRYIF_APPL_VAR) job);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_KeyElementSet()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Sets a key element.
|
|
* \details This function shall dispatch the set key element function to the configured crypto driver object.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key whose key element shall be set.
|
|
* \param[in] keyElementId Holds the identifier of the key element which shall be set.
|
|
* \param[in] keyPtr Holds the pointer to the key data which shall be set as key element.
|
|
* \param[in] keyLength Contains the length of the key element in bytes.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \return CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy.
|
|
* \return CRYPTO_E_KEY_WRITE_FAIL Request failed, write access was denied.
|
|
* \return CRYPTO_E_KEY_NOT_AVAILABLE Request failed, the key is not available.
|
|
* \return CRYPTO_E_KEY_SIZE_MISMATCH Request failed, the key element size does not match size of provided
|
|
* data.
|
|
* \pre -
|
|
* \note NULL_PTR check for P2CONST keyPtr is not executed to save runtime.
|
|
* Zero value check for keyLength is not executed to be able to support key deletion.
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \trace CREQ-127562
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_KeyElementSet(uint32 cryIfKeyId,
|
|
uint32 keyElementId,
|
|
P2CONST(uint8, AUTOMATIC, CRYIF_APPL_DATA) keyPtr,
|
|
uint32 keyLength);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_KeySetValid()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Sets the key to valid.
|
|
* \details This function shall dispatch the set key valid function to the configured crypto driver object.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key whose key elements shall be set to valid.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \return CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \trace CREQ-127563
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_KeySetValid(uint32 cryIfKeyId);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_KeyElementGet()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Exports the key element.
|
|
* \details This function shall dispatch the get key element function to the configured crypto driver object.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key whose key element shall be set.
|
|
* \param[in] keyElementId Holds the identifier of the key element which shall be set.
|
|
* \param[in,out] resultPtr Holds the pointer to the key data which shall be set as key element.
|
|
* \param[in,out] resultLengthPtr Contains the length of the key element in bytes.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \return CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy.
|
|
* \return CRYPTO_E_KEY_READ_FAIL Request failed, read access was denied.
|
|
* \return CRYPTO_E_KEY_NOT_AVAILABLE Request failed, the key is not available.
|
|
* \return CRYPTO_E_SMALL_BUFFER Request failed, the provided buffer is too small to store the result.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \trace CREQ-127564
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_KeyElementGet(uint32 cryIfKeyId,
|
|
uint32 keyElementId,
|
|
P2VAR(uint8, AUTOMATIC, CRYIF_APPL_VAR) resultPtr,
|
|
P2VAR(uint32, AUTOMATIC, CRYIF_APPL_VAR) resultLengthPtr);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_KeyElementCopy()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Copy key element.
|
|
* \details This function shall copy a key element from one key to a target key.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key whose key element shall be the source
|
|
* element.
|
|
* \param[in] keyElementId Holds the identifier of the key element which shall be the source for the
|
|
* copy operation.
|
|
* \param[in] targetCryIfKeyId Holds the identifier of the key whose key element shall be the destination
|
|
* element.
|
|
* \param[in] targetKeyElementId Holds the identifier of the key element which shall be the destination for
|
|
* the copy operation.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \return CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy.
|
|
* \return CRYPTO_E_KEY_READ_FAIL Request failed, read access was denied.
|
|
* \return CRYPTO_E_KEY_WRITE_FAIL Request failed, write access was denied.
|
|
* \return CRYPTO_E_KEY_EXTRACT_DENIED Request failed, not allowed to extract key material.
|
|
* \return CRYPTO_E_KEY_NOT_AVAILABLE Request failed, the key is not available.
|
|
* \return CRYPTO_E_KEY_SIZE_MISMATCH Request failed, the key element sizes are not compatible.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \trace CREQ-127565
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_KeyElementCopy(uint32 cryIfKeyId,
|
|
uint32 keyElementId,
|
|
uint32 targetCryIfKeyId,
|
|
uint32 targetKeyElementId);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_KeyElementCopyPartial()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Copies a key element partially.
|
|
* \details This function copies a key element partially from one key to a target key.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key whose key element shall be the source
|
|
* element.
|
|
* \param[in] keyElementId Holds the identifier of the key element which shall be the source for the
|
|
* copy operation.
|
|
* \param[in] keyElementSourceOffset This is the offset of the source key element indicating the start index
|
|
* of the copy operation.
|
|
* \param[in] keyElementTargetOffset This is the offset of the destination key element indicating the start index
|
|
* of the copy operation.
|
|
* \param[in] keyElementCopyLength Specifies the number of bytes that shall be copied.
|
|
* \param[in] targetCryIfKeyId Holds the identifier of the key whose key element shall be the destination
|
|
* element.
|
|
* \param[in] targetKeyElementId Holds the identifier of the key element which shall be the destination for
|
|
* the copy operation.
|
|
* \return E_OK Request successful
|
|
* E_NOT_OK Request failed
|
|
* CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy
|
|
* CRYPTO_E_KEY_READ_FAIL Request failed because read access was denied
|
|
* CRYPTO_E_KEY_WRITE_FAIL Request failed because write access was denied
|
|
* CRYPTO_E_KEY_NOT_AVAILABLE Request failed because the key is not available
|
|
* CRYPTO_E_KEY_SIZE_MISMATCH Request failed, key element size does not match size of provided data.
|
|
* CRYPTO_E_KEY_EMPTY Request failed because of uninitialized source key element.
|
|
* \context TASK
|
|
* \reentrant TRUE, but not for the same cryIfKeyId
|
|
* \synchronous TRUE
|
|
* \pre -
|
|
* \trace CREQ-188329
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_KeyElementCopyPartial(uint32 cryIfKeyId,
|
|
uint32 keyElementId,
|
|
uint32 keyElementSourceOffset,
|
|
uint32 keyElementTargetOffset,
|
|
uint32 keyElementCopyLength,
|
|
uint32 targetCryIfKeyId,
|
|
uint32 targetKeyElementId);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_KeyCopy()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Copy the key
|
|
* \details This function shall copy all key elements from the source key to a target key.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key whose key element shall be the source
|
|
* element.
|
|
* \param[in] targetCryIfKeyId Holds the identifier of the key whose key element shall be the destination
|
|
* element.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \return CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy.
|
|
* \return CRYPTO_E_KEY_READ_FAIL Request failed, read access was denied.
|
|
* \return CRYPTO_E_KEY_WRITE_FAIL Request failed, write access was denied.
|
|
* \return CRYPTO_E_KEY_NOT_AVAILABLE Request failed, the key is not available.
|
|
* \return CRYPTO_E_KEY_SIZE_MISMATCH Request failed, the key element sizes are not compatible.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \trace CREQ-127566
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_KeyCopy(uint32 cryIfKeyId,
|
|
uint32 targetCryIfKeyId);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_RandomSeed()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Initialize the seed
|
|
* \details This function shall dispatch the random seed function to the configured crypto driver object.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key for which a new material shall be generated.
|
|
* \param[in] seedPtr Holds a pointer to the memory location which contains the data to feed the
|
|
* seed.
|
|
* \param[in] seedLength Contains the length of the seed in bytes.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \trace CREQ-127567
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_RandomSeed(uint32 cryIfKeyId,
|
|
P2CONST(uint8, AUTOMATIC, CRYIF_APPL_DATA) seedPtr,
|
|
uint32 seedLength);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_KeyGenerate()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Generates a key.
|
|
* \details This function shall dispatch the key generate function to the configured crypto driver object.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key which is to be updated with the generated
|
|
* value.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \return CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \trace CREQ-127568
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_KeyGenerate(uint32 cryIfKeyId);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_KeyDerive()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Derives a key.
|
|
* \details This function shall dispatch the key derive function to the configured crypto driver object.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key which is used for key derivation.
|
|
* \param[in] targetCryIfKeyId Holds the identifier of the key which is used to store the derived key.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \return CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \trace CREQ-127569
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_KeyDerive(uint32 cryIfKeyId,
|
|
uint32 targetCryIfKeyId);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_KeyExchangeCalcPubVal()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Calculation of the public value.
|
|
* \details This function shall dispatch the key exchange public value calculation function to the configured
|
|
* crypto driver object.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key which shall be used for the key exchange
|
|
* protocol.
|
|
* \param[out] publicValuePtr Contains the pointer to the data where the public value shall be stored.
|
|
* \param[in,out] publicValueLengthPtr Holds a pointer to the memory location in which the public value length
|
|
* information is stored. On calling this function, this parameter shall
|
|
* contain the size of the buffer provided by publicValuePtr. When the request
|
|
* has finished, the actual length of the returned value shall be stored.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \return CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy.
|
|
* \return CRYPTO_E_SMALL_BUFFER Request failed, the provided buffer is too small to store the result.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \trace CREQ-127570
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_KeyExchangeCalcPubVal(uint32 cryIfKeyId,
|
|
P2VAR(uint8, AUTOMATIC, CRYIF_APPL_VAR) publicValuePtr,
|
|
P2VAR(uint32, AUTOMATIC, CRYIF_APPL_VAR) publicValueLengthPtr);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_KeyExchangeCalcSecret()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Calculation of the secret.
|
|
* \details This function shall dispatch the key exchange common shared secret calculation function to the
|
|
* configured crypto driver object.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key which shall be used for the key exchange
|
|
* protocol.
|
|
* \param[in] partnerPublicValuePtr Holds the pointer to the memory location which contains the partners
|
|
* public value.
|
|
* \param[in] partnerPublicValueLength Contains the length of the partners public value in bytes.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \return CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy.
|
|
* \return CRYPTO_E_SMALL_BUFFER Request failed, the provided buffer is too small to store the result.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \trace CREQ-127571
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_KeyExchangeCalcSecret(uint32 cryIfKeyId,
|
|
P2CONST(uint8, AUTOMATIC, CRYIF_APPL_DATA) partnerPublicValuePtr,
|
|
uint32 partnerPublicValueLength);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_CertificateParse()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Parse stored certificate.
|
|
* \details This function shall dispatch the certificate parse function to the configured crypto driver object.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key slot in which the certificate has been
|
|
* stored.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \return CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \note If API support is disabled (/MICROSAR/CryIf/CryIfCryptoModule/CryIfSupportsCertificateAPI)
|
|
* for a specific driver, the service will always return E_NOT_OK for this driver.
|
|
* \trace CREQ-127572
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_CertificateParse(uint32 cryIfKeyId);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_CertificateVerify()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Certificate verification.
|
|
* \details Verifies the certificate stored in the key referenced by verifyCryptoKeyId with the certificate
|
|
* stored in the key referenced by cryIfKeyId.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key which shall be used to validate the
|
|
* certificate.
|
|
* \param[in] verifyCryIfKeyId Holds the identifier of the key containing the certificate, which shall be
|
|
* verified.
|
|
* \param[out] verifyPtr Holds a pointer to the memory location which will contain the result of the
|
|
* certificate verification.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \return CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \note If API support is disabled (/MICROSAR/CryIf/CryIfCryptoModule/CryIfSupportsCertificateAPI)
|
|
* for a specific driver, the service will always return E_NOT_OK for this driver.
|
|
* \trace CREQ-127573
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_CertificateVerify(uint32 cryIfKeyId,
|
|
uint32 verifyCryIfKeyId,
|
|
P2VAR(Crypto_VerifyResultType, AUTOMATIC, CRYIF_APPL_VAR) verifyPtr);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_KeySetInvalid()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Set crypto key to invalid.
|
|
* \details If no errors are detected by CryIf, the service calls Crypto_KeySetInvalid() of the configured
|
|
* crypto driver for the crypto key which is mapped to cryIfKeyId and returns the service result.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key which shall be set to invalid.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \return CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \note If API support is disabled (/MICROSAR/CryIf/CryIfCryptoModule/CryIfSupportsKeyStatusAPI)
|
|
* for a specific driver, the service will always return E_NOT_OK for this driver.
|
|
* \trace CREQ-324923
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_KeySetInvalid(uint32 cryIfKeyId);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_KeyGetStatus()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Get status of a key.
|
|
* \details If no errors are detected by CryIf, the service calls Crypto_KeyGetStatus() of the configured
|
|
* crypto driver for the crypto key which is mapped to cryIfKeyId. The driver writes the key status to
|
|
* keyStatusPtr and returns the service result.
|
|
* \param[in] cryIfKeyId Holds the identifier of the key of which the status shall be read.
|
|
* \param[out] keyStatusPtr Holds a pointer to the memory where the key status shall be written to.
|
|
* \return E_OK Request successful.
|
|
* \return E_NOT_OK Request failed.
|
|
* \return CRYPTO_E_BUSY Request failed, Crypto Driver Object is busy.
|
|
* \pre All pointers need to be valid.
|
|
* \context TASK
|
|
* \reentrant TRUE
|
|
* \synchronous TRUE
|
|
* \note If API support is disabled (/MICROSAR/CryIf/CryIfCryptoModule/CryIfSupportsKeyStatusAPI)
|
|
* for a specific driver, the service will always return E_NOT_OK for this driver.
|
|
* \trace CREQ-324922
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_KeyGetStatus(uint32 cryIfKeyId,
|
|
P2VAR(Crypto_KeyStatusType, AUTOMATIC, CRYIF_APPL_VAR) keyStatusPtr);
|
|
|
|
/**********************************************************************************************************************
|
|
* CryIf_CustomSync()
|
|
*********************************************************************************************************************/
|
|
/*! \brief Requests the execution of a function that is specified by the given dispatch id.
|
|
* \details If no errors are detected by CryIf, the service calls Crypto_CustomSync() of the configured
|
|
* crypto driver and passes on the return value.
|
|
* The driver executes the custom cryptographic operation and returns the service result.
|
|
* \param[in] dispatchId Unique id to identify the request.
|
|
* \param[in] keyId Key Id (e.g. of the key in which the certificate is stored).
|
|
* \param[in] keyElementId Key element id.
|
|
* \param[in] targetKeyId Holds the target key id.
|
|
* If the service does not require a target key, the targetKeyId still
|
|
* must reference a valid key
|
|
* \param[in] targetKeyElementId Key element id of target key.
|
|
* \param[in] inputPtr Pointer to the input data.
|
|
* \param[in] inputLength Contains the input length in bytes.
|
|
* \param[out] outputPtr Pointer to the output data.
|
|
* \param[out] outputLengthPtr Contains the output length in bytes.
|
|
* \param[out] secondaryOutputPtr Pointer to the secondary output data.
|
|
* \param[out] secondaryOutputLengthPtr Contains the secondary output length in bytes.
|
|
* \return E_OK: Request successful.
|
|
* \return E_NOT_OK: Request failed.
|
|
* \return CRYPTO_E_BUSY: Request failed, Crypto Driver Object is busy.
|
|
* \return CRYPTO_E_CUSTOM_ERROR: Custom processing failed.
|
|
* \pre -
|
|
* \context TASK
|
|
* \reentrant FALSE
|
|
* \synchronous TRUE
|
|
* \note If API support is disabled (/MICROSAR/CryIf/CryIfCryptoModule/CryIfSupportsCustomSyncService)
|
|
* for a specific driver, the service will always return E_NOT_OK for this driver.
|
|
* If the service does not require a target key, the key referenced by targetKeyId will not be used.
|
|
* However, its id must be valid.
|
|
* \trace CREQ-CryIf-CustomSyncService
|
|
*********************************************************************************************************************/
|
|
FUNC(Std_ReturnType, CRYIF_CODE) CryIf_CustomSync(uint32 dispatchId,
|
|
uint32 keyId,
|
|
uint32 keyElementId,
|
|
uint32 targetKeyId,
|
|
uint32 targetKeyElementId,
|
|
P2CONST(uint8, AUTOMATIC, CRYIF_APPL_DATA) inputPtr,
|
|
uint32 inputLength,
|
|
P2VAR(uint8, AUTOMATIC, CRYIF_APPL_VAR) outputPtr,
|
|
P2VAR(uint32, AUTOMATIC, CRYIF_APPL_VAR) outputLengthPtr,
|
|
P2VAR(uint8, AUTOMATIC, CRYIF_APPL_VAR) secondaryOutputPtr,
|
|
P2VAR(uint32, AUTOMATIC, CRYIF_APPL_VAR) secondaryOutputLengthPtr);
|
|
|
|
# define CRYIF_STOP_SEC_CODE
|
|
# include "CryIf_MemMap.h" /* PRQA S 5087 */ /* MD_MSR_MemMap */
|
|
|
|
#endif /* !defined (CRYIF_H) */
|
|
|
|
/**********************************************************************************************************************
|
|
* END OF FILE: CryIf.h
|
|
*********************************************************************************************************************/
|