Lines Matching refs:img

67 static u32 check_ie(struct fsl_secboot_img_priv *img)
69 if (img->hdr.ie_flag & IE_FLAG_MASK)
187 static u32 check_srk(struct fsl_secboot_img_priv *img)
192 return !check_ie(img);
196 if (img->hdr.len_kr.srk_table_flag & SRK_FLAG)
224 static u32 read_validate_srk_tbl(struct fsl_secboot_img_priv *img)
228 struct fsl_secboot_img_hdr *hdr = &img->hdr;
229 void *esbc = (u8 *)(uintptr_t)img->ehdrloc;
247 memcpy(&img->srk_tbl, esbc + hdr->srk_tbl_off, size);
250 if (!CHECK_KEY_LEN(img->srk_tbl[i].key_len))
254 img->key_len = img->srk_tbl[key_num - 1].key_len;
256 memcpy(&img->img_key, &(img->srk_tbl[key_num - 1].pkey),
257 img->key_len);
264 static u32 read_validate_single_key(struct fsl_secboot_img_priv *img)
266 struct fsl_secboot_img_hdr *hdr = &img->hdr;
267 void *esbc = (u8 *)(uintptr_t)img->ehdrloc;
273 memcpy(&img->img_key, esbc + hdr->pkey, hdr->key_len);
275 img->key_len = hdr->key_len;
284 struct fsl_secboot_img_priv *img)
288 img->ie_addr = (uintptr_t)&glb.ie_tbl;
289 glb.ie_addr = img->ie_addr;
292 static u32 read_validate_ie_tbl(struct fsl_secboot_img_priv *img)
294 struct fsl_secboot_img_hdr *hdr = &img->hdr;
298 if (!img->ie_addr) {
299 if (get_ie_info_addr(&img->ie_addr))
302 install_ie_tbl(img->ie_addr, img);
305 ie_info = (struct ie_key_info *)(uintptr_t)img->ie_addr;
322 memcpy(&img->img_key, &(ie_info->ie_key_tbl[ie_num - 1].pkey),
325 img->key_len = ie_key_len;
332 static inline u32 get_key_len(struct fsl_secboot_img_priv *img)
334 return img->key_len;
490 static int calc_img_key_hash(struct fsl_secboot_img_priv *img)
508 if (check_srk(img)) {
510 (u8 *)(uintptr_t)(img->ehdrloc + img->hdr.srk_tbl_off),
511 img->hdr.len_kr.num_srk * sizeof(struct srk_table), 1);
517 img->img_key, img->key_len, 1);
527 img->img_key_hash[i] = hash_val[i];
537 static int calc_esbchdr_esbc_hash(struct fsl_secboot_img_priv *img)
557 (u8 *)&img->hdr, sizeof(struct fsl_secboot_img_hdr), 0);
567 if (check_srk(img)) {
569 (u8 *)(uintptr_t)(img->ehdrloc + img->hdr.srk_tbl_off),
570 img->hdr.len_kr.num_srk * sizeof(struct srk_table), 0);
575 if (!key_hash && check_ie(img))
582 img->img_key, img->hdr.key_len, 0);
594 (u8 *)(*(img->img_addr_ptr)), img->img_size, 1);
613 static void construct_img_encoded_hash_second(struct fsl_secboot_img_priv *img)
638 len = (get_key_len(img) / 2) - 1;
639 representative = img->img_encoded_hash_second;
669 static int read_validate_esbc_client_header(struct fsl_secboot_img_priv *img)
671 struct fsl_secboot_img_hdr *hdr = &img->hdr;
672 void *esbc = (u8 *)(uintptr_t)img->ehdrloc;
685 if (*(img->img_addr_ptr) == 0) {
687 *(img->img_addr_ptr) = hdr->pimg64;
689 *(img->img_addr_ptr) = hdr->pimg;
696 img->img_size = hdr->img_size;
700 if (check_srk(img)) {
701 ret = read_validate_srk_tbl(img);
709 if (!key_found && check_ie(img)) {
710 ret = read_validate_ie_tbl(img);
719 ret = read_validate_single_key(img);
729 if (get_key_len(img) == 2 * hdr->sign_len) {
739 memcpy(&img->img_sign, esbc + hdr->psign, hdr->sign_len);
748 k = (u8 *)&img->img_key;
754 if ((k[get_key_len(img) / 2 - 1] & 0x1) == 0)
758 s = (u8 *)&img->img_sign;
788 static int calculate_cmp_img_sig(struct fsl_secboot_img_priv *img)
796 ret = calc_esbchdr_esbc_hash(img);
801 construct_img_encoded_hash_second(img);
805 key_len = get_key_len(img) / 2;
806 prop.modulus = img->img_key;
807 prop.public_exponent = img->img_key + key_len;
824 ret = rsa_mod_exp(mod_exp_dev, img->img_sign, img->hdr.sign_len,
825 &prop, img->img_encoded_hash);
834 ret = memcmp(&img->img_encoded_hash_second, &img->img_encoded_hash,
835 img->hdr.sign_len);
842 /* Function to initialize img priv and global data structure
848 struct fsl_secboot_img_priv *img = *img_ptr;
850 if (!img)
852 memset(img, 0, sizeof(struct fsl_secboot_img_priv));
856 img->ie_addr = glb.ie_addr;
877 struct fsl_secboot_img_priv *img;
915 ret = secboot_init(&img);
920 hdr = &img->hdr;
921 img->ehdrloc = haddr;
922 img->img_addr_ptr = img_addr_ptr;
923 esbc = (u8 *)img->ehdrloc;
928 ret = read_validate_esbc_client_header(img);
943 ret = calc_img_key_hash(img);
951 ret = memcmp(&hash, &img->img_key_hash, SHA256_BYTES);
953 ret = memcmp(srk_hash, img->img_key_hash, SHA256_BYTES);
956 if (!hash_cmd && check_ie(img))
965 ret = calculate_cmp_img_sig(img);
973 free(img);