1*54fd6939SJiyong Park /* 2*54fd6939SJiyong Park * Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved. 3*54fd6939SJiyong Park * 4*54fd6939SJiyong Park * SPDX-License-Identifier: BSD-3-Clause 5*54fd6939SJiyong Park */ 6*54fd6939SJiyong Park 7*54fd6939SJiyong Park #ifndef AUTH_MOD_H 8*54fd6939SJiyong Park #define AUTH_MOD_H 9*54fd6939SJiyong Park 10*54fd6939SJiyong Park #if TRUSTED_BOARD_BOOT 11*54fd6939SJiyong Park 12*54fd6939SJiyong Park #include <common/tbbr/cot_def.h> 13*54fd6939SJiyong Park #include <common/tbbr/tbbr_img_def.h> 14*54fd6939SJiyong Park #include <drivers/auth/auth_common.h> 15*54fd6939SJiyong Park #include <drivers/auth/img_parser_mod.h> 16*54fd6939SJiyong Park 17*54fd6939SJiyong Park #include <lib/utils_def.h> 18*54fd6939SJiyong Park 19*54fd6939SJiyong Park /* 20*54fd6939SJiyong Park * Image flags 21*54fd6939SJiyong Park */ 22*54fd6939SJiyong Park #define IMG_FLAG_AUTHENTICATED (1 << 0) 23*54fd6939SJiyong Park 24*54fd6939SJiyong Park #if COT_DESC_IN_DTB && !IMAGE_BL1 25*54fd6939SJiyong Park /* 26*54fd6939SJiyong Park * Authentication image descriptor 27*54fd6939SJiyong Park */ 28*54fd6939SJiyong Park typedef struct auth_img_desc_s { 29*54fd6939SJiyong Park unsigned int img_id; 30*54fd6939SJiyong Park img_type_t img_type; 31*54fd6939SJiyong Park const struct auth_img_desc_s *parent; 32*54fd6939SJiyong Park auth_method_desc_t *img_auth_methods; 33*54fd6939SJiyong Park auth_param_desc_t *authenticated_data; 34*54fd6939SJiyong Park } auth_img_desc_t; 35*54fd6939SJiyong Park #else 36*54fd6939SJiyong Park /* 37*54fd6939SJiyong Park * Authentication image descriptor 38*54fd6939SJiyong Park */ 39*54fd6939SJiyong Park typedef struct auth_img_desc_s { 40*54fd6939SJiyong Park unsigned int img_id; 41*54fd6939SJiyong Park img_type_t img_type; 42*54fd6939SJiyong Park const struct auth_img_desc_s *parent; 43*54fd6939SJiyong Park const auth_method_desc_t *const img_auth_methods; 44*54fd6939SJiyong Park const auth_param_desc_t *const authenticated_data; 45*54fd6939SJiyong Park } auth_img_desc_t; 46*54fd6939SJiyong Park #endif /* COT_DESC_IN_DTB && !IMAGE_BL1 */ 47*54fd6939SJiyong Park 48*54fd6939SJiyong Park /* Public functions */ 49*54fd6939SJiyong Park void auth_mod_init(void); 50*54fd6939SJiyong Park int auth_mod_get_parent_id(unsigned int img_id, unsigned int *parent_id); 51*54fd6939SJiyong Park int auth_mod_verify_img(unsigned int img_id, 52*54fd6939SJiyong Park void *img_ptr, 53*54fd6939SJiyong Park unsigned int img_len); 54*54fd6939SJiyong Park 55*54fd6939SJiyong Park /* Macro to register a CoT defined as an array of auth_img_desc_t pointers */ 56*54fd6939SJiyong Park #define REGISTER_COT(_cot) \ 57*54fd6939SJiyong Park const auth_img_desc_t *const *const cot_desc_ptr = (_cot); \ 58*54fd6939SJiyong Park const size_t cot_desc_size = ARRAY_SIZE(_cot); \ 59*54fd6939SJiyong Park unsigned int auth_img_flags[MAX_NUMBER_IDS] 60*54fd6939SJiyong Park 61*54fd6939SJiyong Park extern const auth_img_desc_t *const *const cot_desc_ptr; 62*54fd6939SJiyong Park extern const size_t cot_desc_size; 63*54fd6939SJiyong Park extern unsigned int auth_img_flags[MAX_NUMBER_IDS]; 64*54fd6939SJiyong Park 65*54fd6939SJiyong Park #if defined(SPD_spmd) 66*54fd6939SJiyong Park 67*54fd6939SJiyong Park #define DEFINE_SIP_SP_PKG(n) DEFINE_SP_PKG(n, sip_sp_content_cert) 68*54fd6939SJiyong Park #define DEFINE_PLAT_SP_PKG(n) DEFINE_SP_PKG(n, plat_sp_content_cert) 69*54fd6939SJiyong Park 70*54fd6939SJiyong Park #define DEFINE_SP_PKG(n, cert) \ 71*54fd6939SJiyong Park static const auth_img_desc_t sp_pkg##n = { \ 72*54fd6939SJiyong Park .img_id = SP_PKG##n##_ID, \ 73*54fd6939SJiyong Park .img_type = IMG_RAW, \ 74*54fd6939SJiyong Park .parent = &cert, \ 75*54fd6939SJiyong Park .img_auth_methods = (const auth_method_desc_t[AUTH_METHOD_NUM]) { \ 76*54fd6939SJiyong Park [0] = { \ 77*54fd6939SJiyong Park .type = AUTH_METHOD_HASH, \ 78*54fd6939SJiyong Park .param.hash = { \ 79*54fd6939SJiyong Park .data = &raw_data, \ 80*54fd6939SJiyong Park .hash = &sp_pkg##n##_hash \ 81*54fd6939SJiyong Park } \ 82*54fd6939SJiyong Park } \ 83*54fd6939SJiyong Park } \ 84*54fd6939SJiyong Park } 85*54fd6939SJiyong Park 86*54fd6939SJiyong Park #endif 87*54fd6939SJiyong Park 88*54fd6939SJiyong Park #endif /* TRUSTED_BOARD_BOOT */ 89*54fd6939SJiyong Park 90*54fd6939SJiyong Park #endif /* AUTH_MOD_H */ 91