FLEX-FORD-OBC-BM/Source/bsw/Fbl/fbl_valstruct_oem.h

179 lines
10 KiB
C
Raw Normal View History

2026-03-19 11:49:16 +01:00
/***********************************************************************************************************************
* 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) 2026 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
*/
/**********************************************************************************************************************/
/***********************************************************************************************************************
* TEMPLATE REVISION HISTORY
* --------------------------------------------------------------------------------------------------------------------
* Version Date Author Change Id Description
* --------------------------------------------------------------------------------------------------------------------
* 01.00.00 2016-07-01 visci - Initial version
* 01.01.00 2017-02-03 vadcel ESCAN00093858 Added support for compatibility check
* 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 Corrected return value for public key read failure
* 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
* --------------------------------------------------------------------------------------------------------------------
* REVISION HISTORY
* --------------------------------------------------------------------------------------------------------------------
* Version Date Author Change Id Description
* --------------------------------------------------------------------------------------------------------------------
* 05.00.00 2022-08-15 vistmo FBL-5514 Support Additional OTA functionality
* ESCAN00112435 No changes
* ESCAN00112575 No changes
* 05.01.00 2022-10-04 jschmitding FBL-5917 No changes
* ESCAN00113919 No changes
* 05.01.01 2022-10-17 fmenke ESCAN00112879 No changes
* 05.01.02 2023-01-13 fmenke ESCAN00112890 No changes
* ESCAN00113612 No changes
* 05.02.00 2023-02-09 vistmo ESCAN00112972 No changes
* ESCAN00113292 No changes
* ESCAN00113835 No changes
* ESCAN00113843 No changes
* ESCAN00113764 No changes
* FBL-6438 No changes
* 05.02.01 2023-05-11 fmenke ESCAN00113831 No changes
* 05.03.00 2023-07-24 fmenke FBL-7335 No changes
* 05.03.01 2023-08-31 lhopfhauer ESCAN00115494 No changes
* 05.03.02 2024-07-16 erizk ESCAN00117344 No changes
* 05.03.03 2025-02-06 virchl ESCAN00118587 No changes
* 05.04.00 2025-02-28 jjohnson FBL-10065 No changes
* 05.04.01 2025-06-10 jostravsky ESCAN00120315 No changes
* 05.04.02 2025-07-08 visarcmijo ESCAN00119833 No changes
* 05.05.00 2025-09-01 fmenke FBL-11218 No changes
* ESCAN00120917 No changes
* 05.06.00 2025-10-28 mpatil FBL-11690 No changes
* 05.07.00 2026-01-13 dganesh FBL-12162 No changes
**********************************************************************************************************************/
#ifndef FBL_VALSTRUCT_OEM_H
#define FBL_VALSTRUCT_OEM_H
/***********************************************************************************************************************
* DEFINES
**********************************************************************************************************************/
#if defined( FBL_ENABLE_VALSTRUCT )
/** Specify default options for validation structure processing */
# define FBL_VALSTRUCT_OPTION_DEFAULT (FBL_VALSTRUCT_OPTION_NONE)
/** Maximum number of blocks in validation struct */
# if !defined( FBL_VALSTRUCT_BLOCKCOUNT_MAX )
/* At least two segments required for SBL */
# define FBL_VALSTRUCT_BLOCKCOUNT_MAX (SWM_DATA_MAX_NOAR - 2u)
# endif
/** Size of validation struct members */
# if ( SEC_SECURITY_CLASS_VERIFY == SEC_CLASS_CCC )
# define FBL_VALSTRUCT_TAG_SIZE 0x00u
# define FBL_VALSTRUCT_VERSION_SIZE 0x02u
# define FBL_VALSTRUCT_BLOCKCOUNT_SIZE 0x02u
# define FBL_VALSTRUCT_BLOCKADDRESS_SIZE 0x04u
# define FBL_VALSTRUCT_BLOCKLENGTH_SIZE 0x04u
# define FBL_VALSTRUCT_BLOCKCHECKSUM_SIZE 0x20u
# define FBL_VALSTRUCT_VALIDATESUM_SIZE 0x00u
# else
# define FBL_VALSTRUCT_TAG_SIZE 0x04u
# define FBL_VALSTRUCT_VERSION_SIZE 0x00u
# define FBL_VALSTRUCT_BLOCKCOUNT_SIZE 0x02u
# define FBL_VALSTRUCT_BLOCKADDRESS_SIZE 0x04u
# define FBL_VALSTRUCT_BLOCKLENGTH_SIZE 0x04u
# define FBL_VALSTRUCT_BLOCKCHECKSUM_SIZE 0x02u
# define FBL_VALSTRUCT_VALIDATESUM_SIZE 0x02u
# endif /* SEC_SECURITY_CLASS_VERIFY == SEC_CLASS_CCC */
/** Supported Valstruct version can be overwritten */
# ifndef FBL_VALSTRUCT_VERSION
# define FBL_VALSTRUCT_VERSION 0x0000u
# endif /* FBL_VALSTRUCT_VERSION */
/** Define supported structure versions */
# define FblValStructIsVersionSupported(ver) ((FBL_VALSTRUCT_VERSION == (ver)) ? kFblValStructOk : kFblValStructNotAuthentic)
/** Provide base address of validation structure and signature as well as the respective download segment dimension */
/****** Ford (CCC + DDD use case, signature embedded before validation structure ******/
# if ( SEC_SECURITY_CLASS_VERIFY == SEC_CLASS_CCC )
/* Block header points to the verification structure, the signature is located below */
# define FblValStructGetSigAddress(block) ((block)->headerAddress - SEC_VERIFY_CLASS_CCC_VERIFY_SIZE)
# define FblValStructGetVsAddress(block) ((block)->headerAddress)
# define FblValStructGetVsSegAddress(block) FblValStructGetSigAddress(block)
# define FblValStructGetVsSegLength(vsLength) (SEC_VERIFY_CLASS_CCC_VERIFY_SIZE + (vsLength))
/* Provide signature data */
# define FblValStructGetSignature(block, buffer) (tFblValStructResult)((SEC_VERIFY_CLASS_CCC_VERIFY_SIZE == \
FblReadProm(FblValStructGetSigAddress(block), (buffer), SEC_VERIFY_CLASS_CCC_VERIFY_SIZE)) ? \
kFblValStructOk : kFblValStructMemoryReadError)
# if defined( FBL_VALSTRUCT_ENABLE_EXTERNAL_KEY )
/** Provide public key */
# define FblValStructGetPublicKey(key) ApplFblReadVerificationKey(key)
# endif
# else /* SEC_ENABLE_SECURITY_CLASS_DDD */
/* Block header points to the verification structure */
# define FblValStructGetVsAddress(block) ((block)->headerAddress)
# define FblValStructGetVsSegAddress(block) FblValStructGetVsAddress(block)
# define FblValStructGetVsSegLength(vsLength) (vsLength)
# endif /* SEC_SECURITY_CLASS_VERIFY == SEC_CLASS_CCC */
/** Provide segment list with address, length and checksum for each segment */
# define FblValStructGetSegmentList(block, segList) FblDiagGetSegmentList(block, segList)
/** Options only relevant for OTA */
# if defined( FBL_ENABLE_GAP_FILL )
# if defined( FBL_VALSTRUCT_ENABLE_GAP_FILL) || \
defined( FBL_VALSTRUCT_DISABLE_GAP_FILL )
/* Valstruct gap fill handling explicitly defined outside */
# else
# define FBL_VALSTRUCT_ENABLE_GAP_FILL
# endif /* FBL_VALSTRUCT_ENABLE_GAP_FILL */
# endif /* FBL_ENABLE_GAP_FILL */
#endif /* FBL_ENABLE_VALSTRUCT */
/** OEM specific return code mapping (tFblValStructResult) */
#define kFblValStructOk 0u
#define kFblValStructNotAuthentic 1u
#define kFblValStructInvalidFormat 2u
#define kFblValStructBlockNumberMismatch 3u
#define kFblValStructChecksumValueMismatch 4u
#define kFblValStructMemoryReadError 5u
#define kFblValStructBlockMismatch 6u
#define kFblValStructKeyError 7u
#define kFblValStructBlankCheckFailed 8u
#define kFblValStructGapFillFailed 9u
#endif /* FBL_VALSTRUCT_OEM_H */
/***********************************************************************************************************************
* END OF FILE: FBL_VALSTRUCT_OEM.H
**********************************************************************************************************************/