From d8f8107227afba075954cf5589668336f689d1aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20H=C3=A4user?= <8659494+mhaeuser@users.noreply.github.com> Date: Fri, 26 Mar 2021 00:32:37 +0100 Subject: [PATCH] OcBmLib: Add password processing status --- .../Acidanthera/Library/OcBootManagementLib.h | 1 + Library/OcBootManagementLib/BuiltinPicker.c | 42 ++++++++++++++++--- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/Include/Acidanthera/Library/OcBootManagementLib.h b/Include/Acidanthera/Library/OcBootManagementLib.h index 53d19fd6..6a83b6c2 100755 --- a/Include/Acidanthera/Library/OcBootManagementLib.h +++ b/Include/Acidanthera/Library/OcBootManagementLib.h @@ -41,6 +41,7 @@ typedef struct OC_HOTKEY_CONTEXT_ OC_HOTKEY_CONTEXT; #define OC_MENU_RESET_NVRAM_ENTRY L"Reset NVRAM" #define OC_MENU_UEFI_SHELL_ENTRY L"UEFI Shell" #define OC_MENU_PASSWORD_REQUEST L"Password: " +#define OC_MENU_PASSWORD_PROCESSING L"Verifying password..." #define OC_MENU_PASSWORD_RETRY_LIMIT L"Password retry limit exceeded." #define OC_MENU_CHOOSE_OS L"Choose the Operating System: " #define OC_MENU_SHOW_AUXILIARY L"Show Auxiliary" diff --git a/Library/OcBootManagementLib/BuiltinPicker.c b/Library/OcBootManagementLib/BuiltinPicker.c index e49ead76..c3438e5f 100644 --- a/Library/OcBootManagementLib/BuiltinPicker.c +++ b/Library/OcBootManagementLib/BuiltinPicker.c @@ -628,6 +628,7 @@ OcShowSimplePasswordRequest ( UINT8 Index; OC_PICKER_KEY_INFO PickerKeyInfo; + UINT8 SpaceIndex; Privilege = Context->PrivilegeContext; @@ -680,7 +681,6 @@ OcShowSimplePasswordRequest ( } if (PickerKeyInfo.UnicodeChar == CHAR_CARRIAGE_RETURN) { - gST->ConOut->ClearScreen (gST->ConOut); // // RETURN finalizes the input. // @@ -739,6 +739,25 @@ OcShowSimplePasswordRequest ( OcPlayAudioFile (Context, AppleVoiceOverAudioFileBeep, TRUE); ++PwIndex; } + // + // Output password processing status. + // + gST->ConOut->SetCursorPosition ( + gST->ConOut, + 0, + gST->ConOut->Mode->CursorRow + ); + gST->ConOut->OutputString (gST->ConOut, OC_MENU_PASSWORD_PROCESSING); + // + // Clear remaining password prompt status. + // + for ( + SpaceIndex = L_STR_LEN (OC_MENU_PASSWORD_PROCESSING); + SpaceIndex < L_STR_LEN (OC_MENU_PASSWORD_REQUEST) + PwIndex; + ++SpaceIndex + ) { + gST->ConOut->OutputString (gST->ConOut, L" "); + } Result = OcVerifyPasswordSha512 ( Password, @@ -749,9 +768,24 @@ OcShowSimplePasswordRequest ( ); SecureZeroMem (Password, PwIndex); + // + // Clear password processing status. + // + gST->ConOut->SetCursorPosition ( + gST->ConOut, + 0, + gST->ConOut->Mode->CursorRow + ); + for (SpaceIndex = 0; SpaceIndex < L_STR_LEN (OC_MENU_PASSWORD_PROCESSING); ++SpaceIndex) { + gST->ConOut->OutputString (gST->ConOut, L" "); + } + gST->ConOut->SetCursorPosition ( + gST->ConOut, + 0, + gST->ConOut->Mode->CursorRow + ); if (Result) { - gST->ConOut->ClearScreen (gST->ConOut); Privilege->CurrentLevel = Level; OcPlayAudioFile (Context, OcVoiceOverAudioFilePasswordAccepted, TRUE); return EFI_SUCCESS; @@ -761,9 +795,7 @@ OcShowSimplePasswordRequest ( } } - gST->ConOut->ClearScreen (gST->ConOut); - gST->ConOut->OutputString (gST->ConOut, OC_MENU_PASSWORD_RETRY_LIMIT); - gST->ConOut->OutputString (gST->ConOut, L"\r\n"); + gST->ConOut->OutputString (gST->ConOut, OC_MENU_PASSWORD_RETRY_LIMIT L"\r\n"); OcPlayAudioFile (Context, OcVoiceOverAudioFilePasswordRetryLimit, TRUE); DEBUG ((DEBUG_WARN, "OCB: User failed to verify password %d times running\n", OC_PASSWORD_MAX_RETRIES)); -- GitLab