Home | History | Annotate | Download | only in tbbr
      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