KeyTool: add support for dbt
dbt is the signature timestamp database supported by UEFI 2.4
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
diff --git a/KeyTool.c b/KeyTool.c
index 3bc7516..dfb22bf 100644
--- a/KeyTool.c
+++ b/KeyTool.c
@@ -16,7 +16,7 @@
#include <efiauthenticated.h>
static EFI_HANDLE im;
-static UINT8 SetupMode, SecureBoot;
+static UINT8 SetupMode, SecureBoot, display_dbt;
#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
@@ -25,6 +25,7 @@
KEY_KEK,
KEY_DB,
KEY_DBX,
+ KEY_DBT,
KEY_MOK,
MAX_KEYS
};
@@ -64,6 +65,13 @@
.authenticated = 1,
.hash = 1,
},
+ [KEY_DBT] = {
+ .name = L"dbt",
+ .text = L"The Timestamp Signatures Database (dbt)",
+ .guid = &SIG_DB,
+ .authenticated = 1,
+ .hash = 0,
+ },
[KEY_MOK] = {
.name = L"MokList",
.text = L"The Machine Owner Key List (MokList)",
@@ -611,12 +619,17 @@
static void
select_key(void)
{
- int i;
+ int i, j;
+ int keymap[keyinfo_size + 1];
CHAR16 *keys[keyinfo_size + 1];
- for (i = 0; i < keyinfo_size; i++)
- keys[i] = keyinfo[i].text;
- keys[i] = NULL;
+ for (i = 0, j = 0; i < keyinfo_size; i++) {
+ if (i == KEY_DBT && !display_dbt)
+ continue;
+ keys[j] = keyinfo[i].text;
+ keymap[j++] = i;
+ }
+ keys[j] = NULL;
i = 0;
@@ -624,7 +637,7 @@
i = console_select( (CHAR16 *[]){ L"Select Key to Manipulate", NULL }, keys, i);
if (i == -1)
break;
- manipulate_key(i);
+ manipulate_key(keymap[i]);
}
}
@@ -657,6 +670,8 @@
title[t_c++] = L"";
for (i = 0; i < MAX_KEYS; i++) {
+ if (i == KEY_DBT && !display_dbt)
+ continue;
save_key_internal(i, vol, &buf[b_c]);
title[t_c++] = &buf[b_c];
b_c += StrLen(&buf[b_c]) + 1;
@@ -716,6 +731,9 @@
InitializeLib(image, systab);
+ if (GetOSIndications() & EFI_OS_INDICATIONS_TIMESTAMP_REVOCATION)
+ display_dbt = 1;
+
efi_status = uefi_call_wrapper(RT->GetVariable, 5, L"SetupMode", &GV_GUID, NULL, &DataSize, &SetupMode);
if (efi_status != EFI_SUCCESS) {