5 #include "perso_tlv_data.h"
8 #include "sw/device/lib/testing/test_framework/status.h"
9 #include "sw/device/lib/testing/test_framework/ujson_ottf.h"
10 #include "sw/device/silicon_creator/lib/attestation.h"
11 #include "sw/device/silicon_creator/lib/cert/cert.h"
12 #include "sw/device/silicon_creator/lib/cert/tpm.h"
13 #include "sw/device/silicon_creator/lib/cert/tpm_ek.h"
14 #include "sw/device/silicon_creator/lib/drivers/flash_ctrl.h"
15 #include "sw/device/silicon_creator/lib/drivers/hmac.h"
16 #include "sw/device/silicon_creator/lib/otbn_boot_services.h"
17 #include "sw/device/silicon_creator/manuf/base/personalize_ext.h"
18 #include "sw/device/silicon_creator/manuf/lib/personalize.h"
33 .cert = &tpm_pubkey_id};
39 static status_t peripheral_handles_init(
void) {
49 static status_t config_and_erase_tpm_certificate_flash_pages(
void) {
50 flash_ctrl_cert_info_page_creator_cfg(&kFlashCtrlInfoPageOwnerReserved6);
51 TRY(flash_ctrl_info_erase(&kFlashCtrlInfoPageOwnerReserved6,
52 kFlashCtrlEraseTypePage));
57 static uint8_t cert_buffer[kTpmEkMaxTbsSizeBytes];
59 static status_t personalize_gen_tpm_ek_certificate(
60 manuf_certgen_inputs_t *certgen_inputs, perso_blob_t *perso_blob,
62 size_t curr_cert_size = 0;
64 memcpy(tpm_endorsement_key_id.digest, certgen_inputs->ext_auth_key_key_id,
65 kCertKeyIdSizeInBytes);
68 cert_flash_layout[kCertFlashLayoutExt0Idx].
used =
true;
69 cert_flash_layout[kCertFlashLayoutExt0Idx].
group_name =
"TPM";
70 cert_flash_layout[kCertFlashLayoutExt0Idx].
num_certs = 1;
73 TRY(manuf_personalize_flash_asymm_key_seed(
74 &flash_ctrl_state, kFlashInfoFieldTpmEkAttestationKeySeed,
75 kAttestationSeedWords));
78 TRY(otbn_boot_cert_ecc_p256_keygen(kTpmKeyEk, &tpm_pubkey_id, &curr_pubkey));
80 curr_cert_size =
sizeof(cert_buffer);
81 TRY(tpm_ek_tbs_cert_build(&tpm_key_ids, &curr_pubkey, cert_buffer,
83 TRY(perso_tlv_push_cert_to_perso_blob(
"TPM EK",
true,
84 kDiceCertFormatX509TcbInfo, cert_buffer,
85 curr_cert_size, perso_blob));
89 status_t personalize_extension_pre_cert_endorse(
91 LOG_INFO(
"Running TPM perso extension ...");
92 TRY(peripheral_handles_init());
93 TRY(config_and_erase_tpm_certificate_flash_pages());
100 status_t personalize_extension_post_cert_endorse(