summaryrefslogtreecommitdiff
path: root/MokManager.c
diff options
context:
space:
mode:
Diffstat (limited to 'MokManager.c')
-rw-r--r--MokManager.c97
1 files changed, 51 insertions, 46 deletions
diff --git a/MokManager.c b/MokManager.c
index ae8d4eb4..8224d753 100644
--- a/MokManager.c
+++ b/MokManager.c
@@ -392,24 +392,64 @@ static UINT8 list_keys (void *MokNew, UINTN MokNewSize)
return 1;
}
-static UINT8 mok_enrollment_prompt (void *MokNew, UINTN MokNewSize)
+static UINT8 get_line (UINT32 *length, CHAR16 *line, UINT32 line_max, UINT8 show)
{
EFI_INPUT_KEY key;
+ int count = 0;
+
+ do {
+ key = get_keystroke();
+
+ if ((count >= line_max &&
+ key.UnicodeChar != CHAR_BACKSPACE) ||
+ key.UnicodeChar == CHAR_NULL ||
+ key.UnicodeChar == CHAR_TAB ||
+ key.UnicodeChar == CHAR_LINEFEED ||
+ key.UnicodeChar == CHAR_CARRIAGE_RETURN) {
+ continue;
+ }
+
+ if (count == 0 && key.UnicodeChar == CHAR_BACKSPACE) {
+ continue;
+ } else if (key.UnicodeChar == CHAR_BACKSPACE) {
+ if (show) {
+ Print(L"\b");
+ }
+ line[--count] = '\0';
+ continue;
+ }
+
+ if (show) {
+ Print(L"%c", key.UnicodeChar);
+ }
+
+ line[count++] = key.UnicodeChar;
+ } while (key.UnicodeChar != CHAR_CARRIAGE_RETURN);
+ Print(L"\n");
+
+ *length = count;
+
+ return 1;
+}
+
+static UINT8 mok_enrollment_prompt (void *MokNew, UINTN MokNewSize)
+{
+ CHAR16 line[1];
+ UINT32 length;
do {
if (!list_keys(MokNew, MokNewSize)) {
return 0;
}
- Print(L"Enroll the key(s) or list the key(s) again? (y/n/l): ");
+ Print(L"Enroll the key(s)? (y/n): ");
- key = get_keystroke();
- Print(L"%c\n", key.UnicodeChar);
+ get_line (&length, line, 1, 1);
- if (key.UnicodeChar == 'Y' || key.UnicodeChar == 'y') {
+ if (line[0] == 'Y' || line[0] == 'y') {
return 1;
}
- } while (key.UnicodeChar == 'L' || key.UnicodeChar == 'l');
+ } while (line[0] != 'N' && line[0] != 'n');
Print(L"Abort\n");
@@ -417,14 +457,14 @@ static UINT8 mok_enrollment_prompt (void *MokNew, UINTN MokNewSize)
}
static UINT8 mok_deletion_prompt () {
- EFI_INPUT_KEY key;
+ CHAR16 line[1];
+ UINT32 length;
Print(L"Erase all stored keys? (y/N): ");
- key = get_keystroke();
- Print(L"%c\n", key.UnicodeChar);
+ get_line (&length, line, 1, 1);
- if (key.UnicodeChar == 'Y' || key.UnicodeChar == 'y') {
+ if (line[0] == 'Y' || line[0] == 'y') {
return 1;
}
@@ -433,41 +473,6 @@ static UINT8 mok_deletion_prompt () {
return 0;
}
-static UINT8 get_password (UINT32 *length, CHAR16 *password)
-{
- EFI_INPUT_KEY key;
- CHAR16 input[PASSWORD_MAX];
- int count = 0;
-
- do {
- key = get_keystroke();
-
- if ((count >= PASSWORD_MAX &&
- key.UnicodeChar != CHAR_BACKSPACE) ||
- key.UnicodeChar == CHAR_NULL ||
- key.UnicodeChar == CHAR_TAB ||
- key.UnicodeChar == CHAR_LINEFEED ||
- key.UnicodeChar == CHAR_CARRIAGE_RETURN) {
- continue;
- }
-
- if (count == 0 && key.UnicodeChar == CHAR_BACKSPACE) {
- continue;
- } else if (key.UnicodeChar == CHAR_BACKSPACE) {
- input[--count] = '\0';
- continue;
- }
-
- input[count++] = key.UnicodeChar;
- } while (key.UnicodeChar != CHAR_CARRIAGE_RETURN);
- Print(L"\n");
-
- *length = count;
- CopyMem(password, input, count * sizeof(CHAR16));
-
- return 1;
-}
-
static EFI_STATUS compute_pw_hash (void *MokNew, UINTN MokNewSize, CHAR16 *password,
UINT32 pw_length, UINT8 *hash)
{
@@ -538,7 +543,7 @@ static EFI_STATUS store_keys (void *MokNew, UINTN MokNewSize)
while (fail_count < 3) {
Print(L"Password(%d-%d characters): ",
PASSWORD_MIN, PASSWORD_MAX);
- get_password(&pw_length, password);
+ get_line(&pw_length, password, PASSWORD_MAX, 0);
if (pw_length < 8) {
Print(L"At least %d characters for the password\n",