text: /*
   * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
   *
   * SPDX-License-Identifier: BSD-3-Clause
   */
  
  #ifndef AUTH_MOD_H
  #define AUTH_MOD_H
  
  #if TRUSTED_BOARD_BOOT
  
  #include <common/tbbr/cot_def.h>
  #include <common/tbbr/tbbr_img_def.h>
  #include <drivers/auth/auth_common.h>
  #include <drivers/auth/img_parser_mod.h>
  
  #include <lib/utils_def.h>
  
  /*
   * Image flags
   */
  #define IMG_FLAG_AUTHENTICATED		(1 << 0)
  
  #if COT_DESC_IN_DTB && !IMAGE_BL1
  /*
   * Authentication image descriptor
   */
  typedef struct auth_img_desc_s {
  	unsigned int img_id;
  	img_type_t img_type;
  	const struct auth_img_desc_s *parent;
  	auth_method_desc_t *img_auth_methods;
  	auth_param_desc_t *authenticated_data;
  } auth_img_desc_t;
  #else
  /*
   * Authentication image descriptor
   */
  typedef struct auth_img_desc_s {
  	unsigned int img_id;
  	img_type_t img_type;
  	const struct auth_img_desc_s *parent;
  	const auth_method_desc_t *const img_auth_methods;
  	const auth_param_desc_t *const authenticated_data;
  } auth_img_desc_t;
  #endif /* COT_DESC_IN_DTB && !IMAGE_BL1 */
  
  /* Public functions */
  void auth_mod_init(void);
  int auth_mod_get_parent_id(unsigned int img_id, unsigned int *parent_id);
  int auth_mod_verify_img(unsigned int img_id,
  			void *img_ptr,
  			unsigned int img_len);
  
  /* Macro to register a CoT defined as an array of auth_img_desc_t pointers */
  #define REGISTER_COT(_cot) \
  	const auth_img_desc_t *const *const cot_desc_ptr = (_cot); \
  	const size_t cot_desc_size = ARRAY_SIZE(_cot);		   \
  	unsigned int auth_img_flags[MAX_NUMBER_IDS]
  
  extern const auth_img_desc_t *const *const cot_desc_ptr;
  extern const size_t cot_desc_size;
  extern unsigned int auth_img_flags[MAX_NUMBER_IDS];
  
  #if defined(SPD_spmd)
  
  #define DEFINE_SIP_SP_PKG(n)		DEFINE_SP_PKG(n, sip_sp_content_cert)
  #define DEFINE_PLAT_SP_PKG(n)		DEFINE_SP_PKG(n, plat_sp_content_cert)
  
  #define DEFINE_SP_PKG(n, cert) \
  	static const auth_img_desc_t sp_pkg##n = { \
  		.img_id = SP_PKG##n##_ID, \
  		.img_type = IMG_RAW, \
  		.parent = &cert, \
  		.img_auth_methods = (const auth_method_desc_t[AUTH_METHOD_NUM]) { \
  			[0] = { \
  				.type = AUTH_METHOD_HASH, \
  				.param.hash = { \
  					.data = &raw_data, \
  					.hash = &sp_pkg##n##_hash \
  				} \
  			} \
  		} \
  	}
  
  #endif
  
  #endif /* TRUSTED_BOARD_BOOT */
  
  #endif /* AUTH_MOD_H */
  