172 lines
9.4 KiB
C
172 lines
9.4 KiB
C
|
|
/***********************************************************************************************************************
|
||
|
|
* FILE DESCRIPTION
|
||
|
|
* ------------------------------------------------------------------------------------------------------------------*/
|
||
|
|
/** \file
|
||
|
|
* \brief Implementation of a download check by using an embedded validation structure
|
||
|
|
* Declaration of functions, variables and constants
|
||
|
|
*
|
||
|
|
* --------------------------------------------------------------------------------------------------------------------
|
||
|
|
* COPYRIGHT
|
||
|
|
* --------------------------------------------------------------------------------------------------------------------
|
||
|
|
* \par Copyright
|
||
|
|
* \verbatim
|
||
|
|
* Copyright (c) 2023 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
|
||
|
|
*/
|
||
|
|
/**********************************************************************************************************************/
|
||
|
|
|
||
|
|
/***********************************************************************************************************************
|
||
|
|
* REVISION HISTORY
|
||
|
|
* --------------------------------------------------------------------------------------------------------------------
|
||
|
|
* Version Date Author Change Id Description
|
||
|
|
* --------------------------------------------------------------------------------------------------------------------
|
||
|
|
* 01.00.00 2016-07-01 visci - Initial version
|
||
|
|
* 01.01.00 2017-02-03 visci ESCAN00093858 Added support for compatibility check
|
||
|
|
* vacel Added blank check functionality
|
||
|
|
* Added API for external public key
|
||
|
|
* Reworked return value handling
|
||
|
|
* 01.01.01 2017-11-09 visci ESCAN00096836 No changes
|
||
|
|
* 01.01.02 2018-03-23 visdkl ESCAN00097287 Bootloader does not properly use configuration of CLASS_DDD
|
||
|
|
* 01.02.00 2018-06-15 visci ESCAN00098963 No changes
|
||
|
|
* 01.03.00 2019-01-25 visci ESCAN00098904 Improved verification sequence
|
||
|
|
* ESCAN00101065 Alignment for Blank Check is not applied correctly
|
||
|
|
* ESCAN00101321 Added option to skip download segment check
|
||
|
|
* 01.03.01 2019-02-06 visci ESCAN00102005 No changes
|
||
|
|
* 01.04.00 2019-06-14 visci ESCAN00102956 No changes
|
||
|
|
* ESCAN00102957 No changes
|
||
|
|
* 01.05.00 2019-06-25 visdlm ESCAN00103492 Added gap fill mechanism
|
||
|
|
* 01.05.01 2021-01-18 visjdn ESCAN00107640 No changes
|
||
|
|
* 01.05.02 2021-06-01 vishor ESCAN00109198 No changes
|
||
|
|
* 01.06.00 2022-04-28 visstn FBL-4366 Perform MISRA 2012 migration
|
||
|
|
* 01.07.00 2022-10-12 visjdn FBL-5694 Support of Xiaomi validation structure
|
||
|
|
* 01.08.00 2022-11-25 vistbe FBL-6055 Extend configurability of checksum and signature
|
||
|
|
* 01.08.01 2023-02-02 vistbe ESCAN00113401 Compiler error: error directive "Unsupported blockcount size"
|
||
|
|
**********************************************************************************************************************/
|
||
|
|
|
||
|
|
#ifndef FBL_VALSTRUCT_H
|
||
|
|
#define FBL_VALSTRUCT_H
|
||
|
|
|
||
|
|
/***********************************************************************************************************************
|
||
|
|
* VERSION
|
||
|
|
**********************************************************************************************************************/
|
||
|
|
|
||
|
|
/* ##V_CFG_MANAGEMENT ##CQProject : FblLib_ValStruct CQComponent : Implementation */
|
||
|
|
#define FBLVALSTRUCT_VERSION 0x0108u
|
||
|
|
#define FBLVALSTRUCT_RELEASE_VERSION 0x01u
|
||
|
|
|
||
|
|
/***********************************************************************************************************************
|
||
|
|
* INCLUDES
|
||
|
|
**********************************************************************************************************************/
|
||
|
|
|
||
|
|
#include "fbl_valstruct_oem.h"
|
||
|
|
|
||
|
|
/***********************************************************************************************************************
|
||
|
|
* DEFINES
|
||
|
|
**********************************************************************************************************************/
|
||
|
|
|
||
|
|
/* Defines used to request specific ValStruct processing options */
|
||
|
|
#define FBL_VALSTRUCT_OPTION_NONE (0x00u)
|
||
|
|
#define FBL_VALSTRUCT_OPTION_CHECKSUM_INTERNAL FBL_BIT0
|
||
|
|
#define FBL_VALSTRUCT_OPTION_BLANKCHECK FBL_BIT1
|
||
|
|
#define FBL_VALSTRUCT_OPTION_GAP_FILL FBL_BIT2
|
||
|
|
|
||
|
|
/***********************************************************************************************************************
|
||
|
|
* TYPEDEFS
|
||
|
|
**********************************************************************************************************************/
|
||
|
|
|
||
|
|
/* Define dedicated return value type based on tFblResult to indicate the deviation:
|
||
|
|
* - The return value in case of successful execution matches kFblOk
|
||
|
|
* - The negative return values (!= kFblOk) are module specific error codes (see fbl_valstruct_oem.h)
|
||
|
|
*/
|
||
|
|
typedef tFblResult tFblValStructResult;
|
||
|
|
|
||
|
|
/* Data type which is used to pass processing options to FblValStructValidateBlockExtended() */
|
||
|
|
typedef vuint8 tFblValStructOption;
|
||
|
|
|
||
|
|
/***********************************************************************************************************************
|
||
|
|
* PROTOTYPES
|
||
|
|
**********************************************************************************************************************/
|
||
|
|
|
||
|
|
#define FBL_VALSTRUCT_START_SEC_CODE
|
||
|
|
#include "MemMap.h" /* PRQA S 5087 */ /* MD_MSR_MemMap */
|
||
|
|
tFblValStructResult FblValStructValidateBlockExtended( const tBlockDescriptor * blockDescriptor,
|
||
|
|
const tFblValStructOption option );
|
||
|
|
tFblValStructResult FblValStructValidateBlock( const tBlockDescriptor * blockDescriptor );
|
||
|
|
#define FBL_VALSTRUCT_STOP_SEC_CODE
|
||
|
|
#include "MemMap.h" /* PRQA S 5087 */ /* MD_MSR_MemMap */
|
||
|
|
|
||
|
|
/***********************************************************************************************************************
|
||
|
|
* CONFIGURATION CHECKS
|
||
|
|
**********************************************************************************************************************/
|
||
|
|
|
||
|
|
#if defined( FBL_ENABLE_VALSTRUCT )
|
||
|
|
# if defined( FBL_VALSTRUCT_READ_BUFFER_SIZE )
|
||
|
|
/* Pre-defined buffer size, check validity */
|
||
|
|
# if ( FBL_VALSTRUCT_READ_BUFFER_SIZE < FBL_VALSTRUCT_MAX_SIZE )
|
||
|
|
# error "Validation structure: structure does not fit into read buffer"
|
||
|
|
# endif
|
||
|
|
# if ( SEC_SECURITY_CLASS_VERIFY == SEC_CLASS_CCC ) && (FBL_VALSTRUCT_READ_BUFFER_SIZE < SEC_VERIFY_CLASS_CCC_VERIFY_SIZE)
|
||
|
|
# error "Validation structure: signature does not fit into read buffer"
|
||
|
|
# endif
|
||
|
|
# endif /* FBL_VALSTRUCT_READ_BUFFER_SIZE */
|
||
|
|
|
||
|
|
# if ( FBL_VALSTRUCT_BLOCKCOUNT_MAX > 254 )
|
||
|
|
# error "Validation functionality: invalid maximum block count configured (max. value: 254)"
|
||
|
|
# endif
|
||
|
|
|
||
|
|
/* Automatic definition of verification output buffer size (FBL_VALSTRUCT_VERIFY_SIZE) currently supports Class DDD
|
||
|
|
* with option "CRC Written" only */
|
||
|
|
# if !defined( SEC_ENABLE_SECURITY_CLASS_DDD ) || \
|
||
|
|
defined( SEC_ENABLE_CRC_TOTAL ) || \
|
||
|
|
defined( SEC_ENABLE_VENDOR_CHECKSUM )
|
||
|
|
# error "Validation structure: unsupported verification configuration"
|
||
|
|
# endif
|
||
|
|
|
||
|
|
/* Check if blank check and gap filling functionality are enabled at the same time */
|
||
|
|
# if defined( FBL_VALSTRUCT_ENABLE_BLANK_CHECK ) && \
|
||
|
|
defined( FBL_VALSTRUCT_ENABLE_GAP_FILL )
|
||
|
|
# error "Validation structure: unsupported validation structure processing configuration"
|
||
|
|
# endif /* FBL_VALSTRUCT_ENABLE_BLANK_CHECK && FBL_VALSTRUCT_ENABLE_GAP_FILL */
|
||
|
|
|
||
|
|
/* Check the size of the Blockcount to be 1 or 2 */
|
||
|
|
# if (FBL_VALSTRUCT_BLOCKCOUNT_SIZE != 1u) && (FBL_VALSTRUCT_BLOCKCOUNT_SIZE != 2u)
|
||
|
|
# error "Unsupported blockcount size"
|
||
|
|
# endif /* (FBL_VALSTRUCT_BLOCKCOUNT_SIZE != 1u) && (FBL_VALSTRUCT_BLOCKCOUNT_SIZE != 2u) */
|
||
|
|
#endif /* FBL_ENABLE_VALSTRUCT */
|
||
|
|
|
||
|
|
/* Automatic definition of the Alfi size in case it is not previously defined */
|
||
|
|
#if !defined(FBL_VALSTRUCT_ALFI_SIZE)
|
||
|
|
# define FBL_VALSTRUCT_ALFI_SIZE 0x00u
|
||
|
|
#endif
|
||
|
|
|
||
|
|
/* Default definition for checksum and signature size and function (can be overwritten) */
|
||
|
|
#if !defined( FBL_VALSTRUCT_BLOCKCHECKSUM_SIZE )
|
||
|
|
# define FBL_VALSTRUCT_BLOCKCHECKSUM_SIZE SEC_VERIFY_CLASS_DDD_VERIFY_SIZE
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if !defined( FBL_VALSTRUCT_BLOCKCHECKSUM_VERIFY_OFFSET )
|
||
|
|
# define FBL_VALSTRUCT_BLOCKCHECKSUM_VERIFY_OFFSET SEC_VERIFY_CLASS_DDD_VERIFY_OFFSET
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if !defined( FblValStructChecksumVerification )
|
||
|
|
# define FblValStructChecksumVerification SecM_VerificationClassDDD
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if !defined( FBL_VALSTRUCT_SIGNATURE_SIZE )
|
||
|
|
# define FBL_VALSTRUCT_SIGNATURE_SIZE SEC_VERIFY_CLASS_CCC_VERIFY_SIZE
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if !defined( FblValStructSignatureVerification )
|
||
|
|
# define FblValStructSignatureVerification SecM_VerificationClassCCC
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#endif /* FBL_VALSTRUCT_H */
|
||
|
|
|
||
|
|
/***********************************************************************************************************************
|
||
|
|
* END OF FILE: FBL_VALSTRUCT.H
|
||
|
|
**********************************************************************************************************************/
|