Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 1 addition & 38 deletions examples/htool.c
Original file line number Diff line number Diff line change
Expand Up @@ -800,44 +800,7 @@ static int command_opentitan_version(const struct htool_invocation* inv) {
return rv;
}

printf("OpenTitan Version:\n");
printf("Current Boot Slot: %s\n", bootslot_str(output.primary_bl0_slot));
printf("Boot Slot A: rom_ext version %d.%d\n", output.rom_ext.slots[0].major,
output.rom_ext.slots[0].minor);
printf("Boot Slot A: rom_ext security version %d\n", output.rom_ext.slots[0].security_version);
printf("Boot Slot B: rom_ext version %d.%d\n", output.rom_ext.slots[1].major,
output.rom_ext.slots[1].minor);
printf("Boot Slot B: rom_ext security version %d\n", output.rom_ext.slots[1].security_version);

printf("Boot Slot A: rom_ext measurements\n");
for(int i = 0; i < OPENTITAN_VERSION_HASH_SIZE; i++) {
printf("[0x%08x] ", output.rom_ext.slots[0].measurement[i]);
}
printf("\n");
printf("Boot Slot B: rom_ext measurements\n");
for(int i = 0; i < OPENTITAN_VERSION_HASH_SIZE; i++) {
printf("[0x%08x] ", output.rom_ext.slots[1].measurement[i]);
}
printf("\n");

printf("Boot Slot A: APP version %d.%d\n", output.app.slots[0].major,
output.app.slots[0].minor);
printf("Boot Slot A: APP security version %d\n", output.app.slots[0].security_version);
printf("Boot Slot B: APP version %d.%d\n", output.app.slots[1].major,
output.app.slots[1].minor);
printf("Boot Slot B: APP security version %d\n", output.app.slots[1].security_version);

printf("Boot Slot A: APP measurements\n");
for(int i = 0; i < OPENTITAN_VERSION_HASH_SIZE; i++) {
printf("[0x%08x] ", output.app.slots[0].measurement[i]);
}
printf("\n");
printf("Boot Slot B: APP measurements\n");
for(int i = 0; i < OPENTITAN_VERSION_HASH_SIZE; i++) {
printf("[0x%08x] ", output.app.slots[1].measurement[i]);
}
printf("\n");

libhoth_print_ot_version_resp(&output);
return 0;
}

Expand Down
38 changes: 33 additions & 5 deletions protocol/opentitan_version.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,17 +78,45 @@ bool libhoth_ot_version_eq(const struct opentitan_image_version * a,

}

char * bootslot_str(enum opentitan_boot_slot input) {
void libhoth_print_ot_version(const char* prefix, const struct opentitan_image_version* ver) {
printf("%s: %d.%d, sv=%d\n", prefix, ver->major, ver->minor, ver->security_version);
printf(" measurement=");
for(int i = 0; i < OPENTITAN_VERSION_HASH_SIZE; i++) {
printf("[0x%08x] ", ver->measurement[i]);
}
printf("\n");
}

void libhoth_print_ot_version_resp(const struct opentitan_get_version_resp* ver) {
printf("primary bl0 slot: %s\n", bootslot_str(ver->primary_bl0_slot));
libhoth_print_ot_version("ROM_EXT Slot A", &ver->rom_ext.slots[0]);
libhoth_print_ot_version("ROM_EXT Slot B", &ver->rom_ext.slots[1]);
libhoth_print_ot_version("App Slot A", &ver->app.slots[0]);
libhoth_print_ot_version("App Slot B", &ver->app.slots[1]);

const struct opentitan_image_version* curr_romext =
(ver->rom_ext.booted_slot == kOpentitanBootSlotA) ? &ver->rom_ext.slots[0] : &ver->rom_ext.slots[1];
const struct opentitan_image_version* curr_app =
(ver->app.booted_slot == kOpentitanBootSlotA) ? &ver->app.slots[0] : &ver->app.slots[1];

printf("Booted out of: App=slot %s, ROMEXT=slot %s\n",
bootslot_str(ver->app.booted_slot),
bootslot_str(ver->rom_ext.booted_slot));
printf("Currently running: %d.%d/%d.%d\n",
curr_app->major, curr_app->minor,
curr_romext->major, curr_romext->minor);
}

const char * bootslot_str(enum opentitan_boot_slot input) {
// Primary BL0 slot values are hardcoded in pie_rot
// Boot slotA: 0x5f5f4141
// Boot slotB: 0x42425f5f)
if (input == kOpentitanBootSlotA) {
return "Boot slot A";
return "A";
} else if (input == kOpentitanBootSlotB) {
return "Boot slot B";
return "B";
} else {
return "Unknown boot slot";
return "Unknown";
}
}

Expand All @@ -105,4 +133,4 @@ int bootslot_int(enum opentitan_boot_slot input) {
return 0x0;
}

}
}
5 changes: 3 additions & 2 deletions protocol/opentitan_version.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,9 @@ int libhoth_extract_ot_bundle(const uint8_t* image,
bool libhoth_ot_version_eq(const struct opentitan_image_version * a,
const struct opentitan_image_version * b);

char *bootslot_str(enum opentitan_boot_slot input);

void libhoth_print_ot_version(const char* prefix, const struct opentitan_image_version* ver);
void libhoth_print_ot_version_resp(const struct opentitan_get_version_resp* ver);
const char *bootslot_str(enum opentitan_boot_slot input);
int bootslot_int(enum opentitan_boot_slot input);

#ifdef __cplusplus
Expand Down
Loading