@ -35,7 +35,13 @@ static const u8 hash_identifier[] = { 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60,
} ;
static u8 hash_val [ SHA256_BYTES ] ;
# ifdef CONFIG_ESBC_HDR_LS
/* New Barker Code for LS ESBC Header */
static const u8 barker_code [ ESBC_BARKER_LEN ] = { 0x12 , 0x19 , 0x20 , 0x01 } ;
# else
static const u8 barker_code [ ESBC_BARKER_LEN ] = { 0x68 , 0x39 , 0x27 , 0x81 } ;
# endif
void branch_to_self ( void ) __attribute__ ( ( noreturn ) ) ;
@ -157,10 +163,15 @@ static int get_ie_info_addr(u32 *ie_addr)
/* This function checks srk_table_flag in header and set/reset srk_flag.*/
static u32 check_srk ( struct fsl_secboot_img_priv * img )
{
# ifdef CONFIG_ESBC_HDR_LS
/* In LS, No SRK Flag as SRK is always present*/
return 1 ;
# else
if ( img - > hdr . len_kr . srk_table_flag & SRK_FLAG )
return 1 ;
return 0 ;
# endif
}
/* This function returns ospr's key_revoc values.*/
@ -223,6 +234,7 @@ static u32 read_validate_srk_tbl(struct fsl_secboot_img_priv *img)
}
# endif
# ifndef CONFIG_ESBC_HDR_LS
static u32 read_validate_single_key ( struct fsl_secboot_img_priv * img )
{
struct fsl_secboot_img_hdr * hdr = & img - > hdr ;
@ -238,6 +250,7 @@ static u32 read_validate_single_key(struct fsl_secboot_img_priv *img)
return 0 ;
}
# endif /* CONFIG_ESBC_HDR_LS */
# if defined(CONFIG_FSL_ISBC_KEY_EXT)
static u32 read_validate_ie_tbl ( struct fsl_secboot_img_priv * img )
@ -388,6 +401,7 @@ void fsl_secboot_handle_error(int error)
case ERROR_ESBC_CLIENT_HEADER_SIG_KEY_MOD :
case ERROR_ESBC_CLIENT_HEADER_SG_ESBC_EP :
case ERROR_ESBC_CLIENT_HEADER_SG_ENTIRES_BAD :
case ERROR_KEY_TABLE_NOT_FOUND :
# ifdef CONFIG_KEY_REVOCATION
case ERROR_ESBC_CLIENT_HEADER_KEY_REVOKED :
case ERROR_ESBC_CLIENT_HEADER_INVALID_SRK_NUM_ENTRY :
@ -536,11 +550,18 @@ static int calc_esbchdr_esbc_hash(struct fsl_secboot_img_priv *img)
if ( ! key_hash & & check_ie ( img ) )
key_hash = 1 ;
# endif
if ( ! key_hash )
# ifndef CONFIG_ESBC_HDR_LS
/* No single key support in LS ESBC header */
if ( ! key_hash ) {
ret = algo - > hash_update ( algo , ctx ,
img - > img_key , img - > hdr . key_len , 0 ) ;
key_hash = 1 ;
}
# endif
if ( ret )
return ret ;
if ( ! key_hash )
return ERROR_KEY_TABLE_NOT_FOUND ;
/* Update hash for actual Image */
ret = algo - > hash_update ( algo , ctx ,
@ -626,8 +647,6 @@ static int read_validate_esbc_client_header(struct fsl_secboot_img_priv *img)
u8 * k , * s ;
u32 ret = 0 ;
# ifdef CONFIG_KEY_REVOCATION
# endif
int key_found = 0 ;
/* check barker code */
@ -671,13 +690,17 @@ static int read_validate_esbc_client_header(struct fsl_secboot_img_priv *img)
key_found = 1 ;
}
# endif
# ifndef CONFIG_ESBC_HDR_LS
/* Single Key Feature not available in LS ESBC Header */
if ( key_found = = 0 ) {
ret = read_validate_single_key ( img ) ;
if ( ret ! = 0 )
return ret ;
key_found = 1 ;
}
# endif
if ( ! key_found )
return ERROR_KEY_TABLE_NOT_FOUND ;
/* check signaure */
if ( get_key_len ( img ) = = 2 * hdr - > sign_len ) {
@ -691,10 +714,12 @@ static int read_validate_esbc_client_header(struct fsl_secboot_img_priv *img)
}
memcpy ( & img - > img_sign , esbc + hdr - > psign , hdr - > sign_len ) ;
/* No SG support in LS-CH3 */
# ifndef CONFIG_ESBC_HDR_LS
/* No SG support */
if ( hdr - > sg_flag )
return ERROR_ESBC_CLIENT_HEADER_SG ;
# endif
/* modulus most significant bit should be set */
k = ( u8 * ) & img - > img_key ;