• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <auth_mod.h>
8 #include <platform_def.h>
9 #include <stddef.h>
10 
11 #if USE_TBBR_DEFS
12 #include <tbbr_oid.h>
13 #else
14 #include <platform_oid.h>
15 #endif
16 
17 
18 /*
19  * Maximum key and hash sizes (in DER format)
20  */
21 #define PK_DER_LEN			294
22 #define HASH_DER_LEN			51
23 
24 /*
25  * The platform must allocate buffers to store the authentication parameters
26  * extracted from the certificates. In this case, because of the way the CoT is
27  * established, we can reuse some of the buffers on different stages
28  */
29 static unsigned char tb_fw_hash_buf[HASH_DER_LEN];
30 static unsigned char scp_fw_hash_buf[HASH_DER_LEN];
31 static unsigned char soc_fw_hash_buf[HASH_DER_LEN];
32 static unsigned char tos_fw_hash_buf[HASH_DER_LEN];
33 static unsigned char tos_fw_extra1_hash_buf[HASH_DER_LEN];
34 static unsigned char tos_fw_extra2_hash_buf[HASH_DER_LEN];
35 static unsigned char nt_world_bl_hash_buf[HASH_DER_LEN];
36 static unsigned char trusted_world_pk_buf[PK_DER_LEN];
37 static unsigned char non_trusted_world_pk_buf[PK_DER_LEN];
38 static unsigned char content_pk_buf[PK_DER_LEN];
39 
40 /*
41  * Parameter type descriptors
42  */
43 static auth_param_type_desc_t trusted_nv_ctr = AUTH_PARAM_TYPE_DESC(
44 		AUTH_PARAM_NV_CTR, TRUSTED_FW_NVCOUNTER_OID);
45 static auth_param_type_desc_t non_trusted_nv_ctr = AUTH_PARAM_TYPE_DESC(
46 		AUTH_PARAM_NV_CTR, NON_TRUSTED_FW_NVCOUNTER_OID);
47 
48 static auth_param_type_desc_t subject_pk = AUTH_PARAM_TYPE_DESC(
49 		AUTH_PARAM_PUB_KEY, 0);
50 static auth_param_type_desc_t sig = AUTH_PARAM_TYPE_DESC(
51 		AUTH_PARAM_SIG, 0);
52 static auth_param_type_desc_t sig_alg = AUTH_PARAM_TYPE_DESC(
53 		AUTH_PARAM_SIG_ALG, 0);
54 static auth_param_type_desc_t raw_data = AUTH_PARAM_TYPE_DESC(
55 		AUTH_PARAM_RAW_DATA, 0);
56 
57 static auth_param_type_desc_t trusted_world_pk = AUTH_PARAM_TYPE_DESC(
58 		AUTH_PARAM_PUB_KEY, TRUSTED_WORLD_PK_OID);
59 static auth_param_type_desc_t non_trusted_world_pk = AUTH_PARAM_TYPE_DESC(
60 		AUTH_PARAM_PUB_KEY, NON_TRUSTED_WORLD_PK_OID);
61 
62 static auth_param_type_desc_t scp_fw_content_pk = AUTH_PARAM_TYPE_DESC(
63 		AUTH_PARAM_PUB_KEY, SCP_FW_CONTENT_CERT_PK_OID);
64 static auth_param_type_desc_t soc_fw_content_pk = AUTH_PARAM_TYPE_DESC(
65 		AUTH_PARAM_PUB_KEY, SOC_FW_CONTENT_CERT_PK_OID);
66 static auth_param_type_desc_t tos_fw_content_pk = AUTH_PARAM_TYPE_DESC(
67 		AUTH_PARAM_PUB_KEY, TRUSTED_OS_FW_CONTENT_CERT_PK_OID);
68 static auth_param_type_desc_t nt_fw_content_pk = AUTH_PARAM_TYPE_DESC(
69 		AUTH_PARAM_PUB_KEY, NON_TRUSTED_FW_CONTENT_CERT_PK_OID);
70 
71 static auth_param_type_desc_t tb_fw_hash = AUTH_PARAM_TYPE_DESC(
72 		AUTH_PARAM_HASH, TRUSTED_BOOT_FW_HASH_OID);
73 static auth_param_type_desc_t scp_fw_hash = AUTH_PARAM_TYPE_DESC(
74 		AUTH_PARAM_HASH, SCP_FW_HASH_OID);
75 static auth_param_type_desc_t soc_fw_hash = AUTH_PARAM_TYPE_DESC(
76 		AUTH_PARAM_HASH, SOC_AP_FW_HASH_OID);
77 static auth_param_type_desc_t tos_fw_hash = AUTH_PARAM_TYPE_DESC(
78 		AUTH_PARAM_HASH, TRUSTED_OS_FW_HASH_OID);
79 static auth_param_type_desc_t tos_fw_extra1_hash = AUTH_PARAM_TYPE_DESC(
80 		AUTH_PARAM_HASH, TRUSTED_OS_FW_EXTRA1_HASH_OID);
81 static auth_param_type_desc_t tos_fw_extra2_hash = AUTH_PARAM_TYPE_DESC(
82 		AUTH_PARAM_HASH, TRUSTED_OS_FW_EXTRA2_HASH_OID);
83 static auth_param_type_desc_t nt_world_bl_hash = AUTH_PARAM_TYPE_DESC(
84 		AUTH_PARAM_HASH, NON_TRUSTED_WORLD_BOOTLOADER_HASH_OID);
85 static auth_param_type_desc_t scp_bl2u_hash = AUTH_PARAM_TYPE_DESC(
86 		AUTH_PARAM_HASH, SCP_FWU_CFG_HASH_OID);
87 static auth_param_type_desc_t bl2u_hash = AUTH_PARAM_TYPE_DESC(
88 		AUTH_PARAM_HASH, AP_FWU_CFG_HASH_OID);
89 static auth_param_type_desc_t ns_bl2u_hash = AUTH_PARAM_TYPE_DESC(
90 		AUTH_PARAM_HASH, FWU_HASH_OID);
91 
92 /*
93  * TBBR Chain of trust definition
94  */
95 static const auth_img_desc_t cot_desc[] = {
96 	/*
97 	 * BL2
98 	 */
99 	[TRUSTED_BOOT_FW_CERT_ID] = {
100 		.img_id = TRUSTED_BOOT_FW_CERT_ID,
101 		.img_type = IMG_CERT,
102 		.parent = NULL,
103 		.img_auth_methods = {
104 			[0] = {
105 				.type = AUTH_METHOD_SIG,
106 				.param.sig = {
107 					.pk = &subject_pk,
108 					.sig = &sig,
109 					.alg = &sig_alg,
110 					.data = &raw_data,
111 				}
112 			},
113 			[1] = {
114 				.type = AUTH_METHOD_NV_CTR,
115 				.param.nv_ctr = {
116 					.cert_nv_ctr = &trusted_nv_ctr,
117 					.plat_nv_ctr = &trusted_nv_ctr
118 				}
119 			}
120 		},
121 		.authenticated_data = {
122 			[0] = {
123 				.type_desc = &tb_fw_hash,
124 				.data = {
125 					.ptr = (void *)tb_fw_hash_buf,
126 					.len = (unsigned int)HASH_DER_LEN
127 				}
128 			}
129 		}
130 	},
131 	[BL2_IMAGE_ID] = {
132 		.img_id = BL2_IMAGE_ID,
133 		.img_type = IMG_RAW,
134 		.parent = &cot_desc[TRUSTED_BOOT_FW_CERT_ID],
135 		.img_auth_methods = {
136 			[0] = {
137 				.type = AUTH_METHOD_HASH,
138 				.param.hash = {
139 					.data = &raw_data,
140 					.hash = &tb_fw_hash,
141 				}
142 			}
143 		}
144 	},
145 	/*
146 	 * Trusted key certificate
147 	 */
148 	[TRUSTED_KEY_CERT_ID] = {
149 		.img_id = TRUSTED_KEY_CERT_ID,
150 		.img_type = IMG_CERT,
151 		.parent = NULL,
152 		.img_auth_methods = {
153 			[0] = {
154 				.type = AUTH_METHOD_SIG,
155 				.param.sig = {
156 					.pk = &subject_pk,
157 					.sig = &sig,
158 					.alg = &sig_alg,
159 					.data = &raw_data,
160 				}
161 			},
162 			[1] = {
163 				.type = AUTH_METHOD_NV_CTR,
164 				.param.nv_ctr = {
165 					.cert_nv_ctr = &trusted_nv_ctr,
166 					.plat_nv_ctr = &trusted_nv_ctr
167 				}
168 			}
169 		},
170 		.authenticated_data = {
171 			[0] = {
172 				.type_desc = &trusted_world_pk,
173 				.data = {
174 					.ptr = (void *)trusted_world_pk_buf,
175 					.len = (unsigned int)PK_DER_LEN
176 				}
177 			},
178 			[1] = {
179 				.type_desc = &non_trusted_world_pk,
180 				.data = {
181 					.ptr = (void *)non_trusted_world_pk_buf,
182 					.len = (unsigned int)PK_DER_LEN
183 				}
184 			}
185 		}
186 	},
187 	/*
188 	 * SCP Firmware
189 	 */
190 	[SCP_FW_KEY_CERT_ID] = {
191 		.img_id = SCP_FW_KEY_CERT_ID,
192 		.img_type = IMG_CERT,
193 		.parent = &cot_desc[TRUSTED_KEY_CERT_ID],
194 		.img_auth_methods = {
195 			[0] = {
196 				.type = AUTH_METHOD_SIG,
197 				.param.sig = {
198 					.pk = &trusted_world_pk,
199 					.sig = &sig,
200 					.alg = &sig_alg,
201 					.data = &raw_data,
202 				}
203 			},
204 			[1] = {
205 				.type = AUTH_METHOD_NV_CTR,
206 				.param.nv_ctr = {
207 					.cert_nv_ctr = &trusted_nv_ctr,
208 					.plat_nv_ctr = &trusted_nv_ctr
209 				}
210 			}
211 		},
212 		.authenticated_data = {
213 			[0] = {
214 				.type_desc = &scp_fw_content_pk,
215 				.data = {
216 					.ptr = (void *)content_pk_buf,
217 					.len = (unsigned int)PK_DER_LEN
218 				}
219 			}
220 		}
221 	},
222 	[SCP_FW_CONTENT_CERT_ID] = {
223 		.img_id = SCP_FW_CONTENT_CERT_ID,
224 		.img_type = IMG_CERT,
225 		.parent = &cot_desc[SCP_FW_KEY_CERT_ID],
226 		.img_auth_methods = {
227 			[0] = {
228 				.type = AUTH_METHOD_SIG,
229 				.param.sig = {
230 					.pk = &scp_fw_content_pk,
231 					.sig = &sig,
232 					.alg = &sig_alg,
233 					.data = &raw_data,
234 				}
235 			},
236 			[1] = {
237 				.type = AUTH_METHOD_NV_CTR,
238 				.param.nv_ctr = {
239 					.cert_nv_ctr = &trusted_nv_ctr,
240 					.plat_nv_ctr = &trusted_nv_ctr
241 				}
242 			}
243 		},
244 		.authenticated_data = {
245 			[0] = {
246 				.type_desc = &scp_fw_hash,
247 				.data = {
248 					.ptr = (void *)scp_fw_hash_buf,
249 					.len = (unsigned int)HASH_DER_LEN
250 				}
251 			}
252 		}
253 	},
254 	[SCP_BL2_IMAGE_ID] = {
255 		.img_id = SCP_BL2_IMAGE_ID,
256 		.img_type = IMG_RAW,
257 		.parent = &cot_desc[SCP_FW_CONTENT_CERT_ID],
258 		.img_auth_methods = {
259 			[0] = {
260 				.type = AUTH_METHOD_HASH,
261 				.param.hash = {
262 					.data = &raw_data,
263 					.hash = &scp_fw_hash,
264 				}
265 			}
266 		}
267 	},
268 	/*
269 	 * SoC Firmware
270 	 */
271 	[SOC_FW_KEY_CERT_ID] = {
272 		.img_id = SOC_FW_KEY_CERT_ID,
273 		.img_type = IMG_CERT,
274 		.parent = &cot_desc[TRUSTED_KEY_CERT_ID],
275 		.img_auth_methods = {
276 			[0] = {
277 				.type = AUTH_METHOD_SIG,
278 				.param.sig = {
279 					.pk = &trusted_world_pk,
280 					.sig = &sig,
281 					.alg = &sig_alg,
282 					.data = &raw_data,
283 				}
284 			},
285 			[1] = {
286 				.type = AUTH_METHOD_NV_CTR,
287 				.param.nv_ctr = {
288 					.cert_nv_ctr = &trusted_nv_ctr,
289 					.plat_nv_ctr = &trusted_nv_ctr
290 				}
291 			}
292 		},
293 		.authenticated_data = {
294 			[0] = {
295 				.type_desc = &soc_fw_content_pk,
296 				.data = {
297 					.ptr = (void *)content_pk_buf,
298 					.len = (unsigned int)PK_DER_LEN
299 				}
300 			}
301 		}
302 	},
303 	[SOC_FW_CONTENT_CERT_ID] = {
304 		.img_id = SOC_FW_CONTENT_CERT_ID,
305 		.img_type = IMG_CERT,
306 		.parent = &cot_desc[SOC_FW_KEY_CERT_ID],
307 		.img_auth_methods = {
308 			[0] = {
309 				.type = AUTH_METHOD_SIG,
310 				.param.sig = {
311 					.pk = &soc_fw_content_pk,
312 					.sig = &sig,
313 					.alg = &sig_alg,
314 					.data = &raw_data,
315 				}
316 			},
317 			[1] = {
318 				.type = AUTH_METHOD_NV_CTR,
319 				.param.nv_ctr = {
320 					.cert_nv_ctr = &trusted_nv_ctr,
321 					.plat_nv_ctr = &trusted_nv_ctr
322 				}
323 			}
324 		},
325 		.authenticated_data = {
326 			[0] = {
327 				.type_desc = &soc_fw_hash,
328 				.data = {
329 					.ptr = (void *)soc_fw_hash_buf,
330 					.len = (unsigned int)HASH_DER_LEN
331 				}
332 			}
333 		}
334 	},
335 	[BL31_IMAGE_ID] = {
336 		.img_id = BL31_IMAGE_ID,
337 		.img_type = IMG_RAW,
338 		.parent = &cot_desc[SOC_FW_CONTENT_CERT_ID],
339 		.img_auth_methods = {
340 			[0] = {
341 				.type = AUTH_METHOD_HASH,
342 				.param.hash = {
343 					.data = &raw_data,
344 					.hash = &soc_fw_hash,
345 				}
346 			}
347 		}
348 	},
349 	/*
350 	 * Trusted OS Firmware
351 	 */
352 	[TRUSTED_OS_FW_KEY_CERT_ID] = {
353 		.img_id = TRUSTED_OS_FW_KEY_CERT_ID,
354 		.img_type = IMG_CERT,
355 		.parent = &cot_desc[TRUSTED_KEY_CERT_ID],
356 		.img_auth_methods = {
357 			[0] = {
358 				.type = AUTH_METHOD_SIG,
359 				.param.sig = {
360 					.pk = &trusted_world_pk,
361 					.sig = &sig,
362 					.alg = &sig_alg,
363 					.data = &raw_data,
364 				}
365 			},
366 			[1] = {
367 				.type = AUTH_METHOD_NV_CTR,
368 				.param.nv_ctr = {
369 					.cert_nv_ctr = &trusted_nv_ctr,
370 					.plat_nv_ctr = &trusted_nv_ctr
371 				}
372 			}
373 		},
374 		.authenticated_data = {
375 			[0] = {
376 				.type_desc = &tos_fw_content_pk,
377 				.data = {
378 					.ptr = (void *)content_pk_buf,
379 					.len = (unsigned int)PK_DER_LEN
380 				}
381 			}
382 		}
383 	},
384 	[TRUSTED_OS_FW_CONTENT_CERT_ID] = {
385 		.img_id = TRUSTED_OS_FW_CONTENT_CERT_ID,
386 		.img_type = IMG_CERT,
387 		.parent = &cot_desc[TRUSTED_OS_FW_KEY_CERT_ID],
388 		.img_auth_methods = {
389 			[0] = {
390 				.type = AUTH_METHOD_SIG,
391 				.param.sig = {
392 					.pk = &tos_fw_content_pk,
393 					.sig = &sig,
394 					.alg = &sig_alg,
395 					.data = &raw_data,
396 				}
397 			},
398 			[1] = {
399 				.type = AUTH_METHOD_NV_CTR,
400 				.param.nv_ctr = {
401 					.cert_nv_ctr = &trusted_nv_ctr,
402 					.plat_nv_ctr = &trusted_nv_ctr
403 				}
404 			}
405 		},
406 		.authenticated_data = {
407 			[0] = {
408 				.type_desc = &tos_fw_hash,
409 				.data = {
410 					.ptr = (void *)tos_fw_hash_buf,
411 					.len = (unsigned int)HASH_DER_LEN
412 				}
413 			},
414 			[1] = {
415 				.type_desc = &tos_fw_extra1_hash,
416 				.data = {
417 					.ptr = (void *)tos_fw_extra1_hash_buf,
418 					.len = (unsigned int)HASH_DER_LEN
419 				}
420 			},
421 			[2] = {
422 				.type_desc = &tos_fw_extra2_hash,
423 				.data = {
424 					.ptr = (void *)tos_fw_extra2_hash_buf,
425 					.len = (unsigned int)HASH_DER_LEN
426 				}
427 			}
428 		}
429 	},
430 	[BL32_IMAGE_ID] = {
431 		.img_id = BL32_IMAGE_ID,
432 		.img_type = IMG_RAW,
433 		.parent = &cot_desc[TRUSTED_OS_FW_CONTENT_CERT_ID],
434 		.img_auth_methods = {
435 			[0] = {
436 				.type = AUTH_METHOD_HASH,
437 				.param.hash = {
438 					.data = &raw_data,
439 					.hash = &tos_fw_hash,
440 				}
441 			}
442 		}
443 	},
444 	[BL32_EXTRA1_IMAGE_ID] = {
445 		.img_id = BL32_EXTRA1_IMAGE_ID,
446 		.img_type = IMG_RAW,
447 		.parent = &cot_desc[TRUSTED_OS_FW_CONTENT_CERT_ID],
448 		.img_auth_methods = {
449 			[0] = {
450 				.type = AUTH_METHOD_HASH,
451 				.param.hash = {
452 					.data = &raw_data,
453 					.hash = &tos_fw_extra1_hash,
454 				}
455 			}
456 		}
457 	},
458 	[BL32_EXTRA2_IMAGE_ID] = {
459 		.img_id = BL32_EXTRA2_IMAGE_ID,
460 		.img_type = IMG_RAW,
461 		.parent = &cot_desc[TRUSTED_OS_FW_CONTENT_CERT_ID],
462 		.img_auth_methods = {
463 			[0] = {
464 				.type = AUTH_METHOD_HASH,
465 				.param.hash = {
466 					.data = &raw_data,
467 					.hash = &tos_fw_extra2_hash,
468 				}
469 			}
470 		}
471 	},
472 	/*
473 	 * Non-Trusted Firmware
474 	 */
475 	[NON_TRUSTED_FW_KEY_CERT_ID] = {
476 		.img_id = NON_TRUSTED_FW_KEY_CERT_ID,
477 		.img_type = IMG_CERT,
478 		.parent = &cot_desc[TRUSTED_KEY_CERT_ID],
479 		.img_auth_methods = {
480 			[0] = {
481 				.type = AUTH_METHOD_SIG,
482 				.param.sig = {
483 					.pk = &non_trusted_world_pk,
484 					.sig = &sig,
485 					.alg = &sig_alg,
486 					.data = &raw_data,
487 				}
488 			},
489 			[1] = {
490 				.type = AUTH_METHOD_NV_CTR,
491 				.param.nv_ctr = {
492 					.cert_nv_ctr = &non_trusted_nv_ctr,
493 					.plat_nv_ctr = &non_trusted_nv_ctr
494 				}
495 			}
496 		},
497 		.authenticated_data = {
498 			[0] = {
499 				.type_desc = &nt_fw_content_pk,
500 				.data = {
501 					.ptr = (void *)content_pk_buf,
502 					.len = (unsigned int)PK_DER_LEN
503 				}
504 			}
505 		}
506 	},
507 	[NON_TRUSTED_FW_CONTENT_CERT_ID] = {
508 		.img_id = NON_TRUSTED_FW_CONTENT_CERT_ID,
509 		.img_type = IMG_CERT,
510 		.parent = &cot_desc[NON_TRUSTED_FW_KEY_CERT_ID],
511 		.img_auth_methods = {
512 			[0] = {
513 				.type = AUTH_METHOD_SIG,
514 				.param.sig = {
515 					.pk = &nt_fw_content_pk,
516 					.sig = &sig,
517 					.alg = &sig_alg,
518 					.data = &raw_data,
519 				}
520 			},
521 			[1] = {
522 				.type = AUTH_METHOD_NV_CTR,
523 				.param.nv_ctr = {
524 					.cert_nv_ctr = &non_trusted_nv_ctr,
525 					.plat_nv_ctr = &non_trusted_nv_ctr
526 				}
527 			}
528 		},
529 		.authenticated_data = {
530 			[0] = {
531 				.type_desc = &nt_world_bl_hash,
532 				.data = {
533 					.ptr = (void *)nt_world_bl_hash_buf,
534 					.len = (unsigned int)HASH_DER_LEN
535 				}
536 			}
537 		}
538 	},
539 	[BL33_IMAGE_ID] = {
540 		.img_id = BL33_IMAGE_ID,
541 		.img_type = IMG_RAW,
542 		.parent = &cot_desc[NON_TRUSTED_FW_CONTENT_CERT_ID],
543 		.img_auth_methods = {
544 			[0] = {
545 				.type = AUTH_METHOD_HASH,
546 				.param.hash = {
547 					.data = &raw_data,
548 					.hash = &nt_world_bl_hash,
549 				}
550 			}
551 		}
552 	},
553 	/*
554 	 * FWU auth descriptor.
555 	 */
556 	[FWU_CERT_ID] = {
557 		.img_id = FWU_CERT_ID,
558 		.img_type = IMG_CERT,
559 		.parent = NULL,
560 		.img_auth_methods = {
561 			[0] = {
562 				.type = AUTH_METHOD_SIG,
563 				.param.sig = {
564 					.pk = &subject_pk,
565 					.sig = &sig,
566 					.alg = &sig_alg,
567 					.data = &raw_data,
568 				}
569 			}
570 		},
571 		.authenticated_data = {
572 			[0] = {
573 				.type_desc = &scp_bl2u_hash,
574 				.data = {
575 					.ptr = (void *)scp_fw_hash_buf,
576 					.len = (unsigned int)HASH_DER_LEN
577 				}
578 			},
579 			[1] = {
580 				.type_desc = &bl2u_hash,
581 				.data = {
582 					.ptr = (void *)tb_fw_hash_buf,
583 					.len = (unsigned int)HASH_DER_LEN
584 				}
585 			},
586 			[2] = {
587 				.type_desc = &ns_bl2u_hash,
588 				.data = {
589 					.ptr = (void *)nt_world_bl_hash_buf,
590 					.len = (unsigned int)HASH_DER_LEN
591 				}
592 			}
593 		}
594 	},
595 	/*
596 	 * SCP_BL2U
597 	 */
598 	[SCP_BL2U_IMAGE_ID] = {
599 		.img_id = SCP_BL2U_IMAGE_ID,
600 		.img_type = IMG_RAW,
601 		.parent = &cot_desc[FWU_CERT_ID],
602 		.img_auth_methods = {
603 			[0] = {
604 				.type = AUTH_METHOD_HASH,
605 				.param.hash = {
606 					.data = &raw_data,
607 					.hash = &scp_bl2u_hash,
608 				}
609 			}
610 		}
611 	},
612 	/*
613 	 * BL2U
614 	 */
615 	[BL2U_IMAGE_ID] = {
616 		.img_id = BL2U_IMAGE_ID,
617 		.img_type = IMG_RAW,
618 		.parent = &cot_desc[FWU_CERT_ID],
619 		.img_auth_methods = {
620 			[0] = {
621 				.type = AUTH_METHOD_HASH,
622 				.param.hash = {
623 					.data = &raw_data,
624 					.hash = &bl2u_hash,
625 				}
626 			}
627 		}
628 	},
629 	/*
630 	 * NS_BL2U
631 	 */
632 	[NS_BL2U_IMAGE_ID] = {
633 		.img_id = NS_BL2U_IMAGE_ID,
634 		.img_type = IMG_RAW,
635 		.parent = &cot_desc[FWU_CERT_ID],
636 		.img_auth_methods = {
637 			[0] = {
638 				.type = AUTH_METHOD_HASH,
639 				.param.hash = {
640 					.data = &raw_data,
641 					.hash = &ns_bl2u_hash,
642 				}
643 			}
644 		}
645 	}
646 };
647 
648 /* Register the CoT in the authentication module */
649 REGISTER_COT(cot_desc);
650