Skip to content
Open
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
468 changes: 468 additions & 0 deletions DasharoModulePkg/Application/SovereignBootWizard/BootOptionParsing.c

Large diffs are not rendered by default.

778 changes: 778 additions & 0 deletions DasharoModulePkg/Application/SovereignBootWizard/SovereignBootWizard.c

Large diffs are not rendered by default.

180 changes: 180 additions & 0 deletions DasharoModulePkg/Application/SovereignBootWizard/SovereignBootWizard.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
/** @file

Copyright (c) 2025, 3mdeb Sp z o.o. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

Module Name:

SovereignBootWizard.h

Abstract:


Revision History


**/

#ifndef _SV_BOOT_WIZARD_H_
#define _SV_BOOT_WIZARD_H_

#include <Uefi.h>

#include <Pi/PiBootMode.h>
#include <Pi/PiHob.h>

#include <Protocol/HiiConfigRouting.h>
#include <Protocol/FormBrowser2.h>
#include <Protocol/HiiConfigAccess.h>
#include <Protocol/HiiDatabase.h>
#include <Protocol/HiiString.h>
#include <Protocol/FormBrowserEx2.h>
#include <Protocol/HiiConfigKeyword.h>
#include <Protocol/HiiPopup.h>
#include <Protocol/DevicePathToText.h>

#include <Guid/MdeModuleHii.h>
#include <Guid/ImageAuthentication.h>
#include <Guid/FileSystemVolumeLabelInfo.h>

#include <UefiSecureBoot.h>

#include <Library/DebugLib.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/HobLib.h>
#include <Library/UefiBootManagerLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Library/UefiDriverEntryPoint.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/HiiLib.h>
#include <Library/DevicePathLib.h>
#include <Library/PrintLib.h>
#include <Library/UefiLib.h>
#include <Library/PeCoffLib.h>
#include <Library/SecureBootVariableLib.h>
#include <Library/SecureBootVariableProvisionLib.h>


#include "SovereignBootWizardHii.h"

extern UINT8 SovereignBootWizardVfrBin[];
extern UINT8 SovereignBootWizardStrings[];

#define NAME_VALUE_NAME_NUMBER 3

#define DEFAULT_CLASS_MANUFACTURING_VALUE 0xFF
#define DEFAULT_CLASS_STANDARD_VALUE 0x0

#define SOVEREIGN_BOOT_PRIVATE_SIGNATURE SIGNATURE_32 ('S', 'B', 'p', 's')
#define SOVEREIGN_BOOT_MENU_OPTION_SIGNATURE SIGNATURE_32 ('m', 'e', 'n', 'u')
#define SOVEREIGN_BOOT_LOAD_OPTION_SIGNATURE SIGNATURE_32 ('l', 'o', 'a', 'd')
#define SOVEREIGN_BOOT_MENU_ENTRY_SIGNATURE SIGNATURE_32 ('e', 'n', 't', 'r')

#define SOVEREIGN_BOOT_LOAD_CONTEXT_SELECT 0x0
#define SOVEREIGN_BOOT_FILE_CONTEXT_SELECT 0x2

typedef struct {
UINTN Signature;

EFI_HANDLE AppHandle;
EFI_HII_HANDLE HiiHandle;
SOVEREIGN_BOOT_WIZARD_CONFIG_DATA ConfigData;
SOVEREIGN_BOOT_WIZARD_NV_CONFIG NvConfig;
SOVEREIGN_BOOT_WIZARD_FORM_DATA FormData;

EFI_STRING_ID NameStringId[NAME_VALUE_NAME_NUMBER];
EFI_STRING NameValueName[NAME_VALUE_NAME_NUMBER];

EFI_HII_DATABASE_PROTOCOL *HiiDatabase;
EFI_HII_STRING_PROTOCOL *HiiString;
EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;
EFI_CONFIG_KEYWORD_HANDLER_PROTOCOL *HiiKeywordHandler;
EFI_HII_POPUP_PROTOCOL *HiiPopup;

EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;

EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;

EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *DevPathToText;
} SOVEREIGN_BOOT_WIZARD_PRIVATE_DATA;

#define SOVEREIGN_BOOT_WIZARD_PRIVATE_FROM_THIS(a) CR (a, SOVEREIGN_BOOT_WIZARD_PRIVATE_DATA, ConfigAccess, SOVEREIGN_BOOT_PRIVATE_SIGNATURE)

#pragma pack(1)

typedef struct {
VENDOR_DEVICE_PATH VendorDevicePath;
EFI_DEVICE_PATH_PROTOCOL End;
} HII_VENDOR_DEVICE_PATH;

#pragma pack()

typedef struct {
UINTN Signature;
LIST_ENTRY Head;
UINTN MenuNumber;
} BM_MENU_OPTION;

typedef struct {
UINTN Signature;
LIST_ENTRY Link;
UINTN OptionNumber;
UINT16 *DisplayString;
UINT16 *DevicePathString;
UINT16 *FilePathString;
EFI_STRING_ID DisplayStringToken;
EFI_STRING_ID DevicePathStringToken;
EFI_STRING_ID FilePathStringToken;
UINTN ContextSelection;
VOID *VariableContext;
} BM_MENU_ENTRY;

typedef struct {
BOOLEAN IsBootNext;
BOOLEAN Deleted;

BOOLEAN IsLegacy;
BOOLEAN IsFvOption;

UINT32 Attributes;
UINT16 FilePathListLength;
UINT16 *Description;
EFI_DEVICE_PATH_PROTOCOL *FilePathList;
} BM_LOAD_CONTEXT;

typedef struct {
EFI_HANDLE Handle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_FILE_HANDLE FHandle;
UINT16 *FileName;
EFI_FILE_SYSTEM_VOLUME_LABEL *Info;

BOOLEAN IsRoot;
BOOLEAN IsDir;
BOOLEAN IsRemovableMedia;
BOOLEAN IsLoadFile;
BOOLEAN IsBootLegacy;
} BM_FILE_CONTEXT;

extern BM_MENU_OPTION BootOptionMenu;

EFI_STATUS
GetBootOptions (
IN SOVEREIGN_BOOT_WIZARD_PRIVATE_DATA *Private
);

BM_MENU_ENTRY *
GetMenuEntry (
BM_MENU_OPTION *MenuOption,
UINTN MenuNumber
);

EFI_STATUS
UpdateBootloaderPage (
IN SOVEREIGN_BOOT_WIZARD_PRIVATE_DATA *Private,
IN UINTN OptionNumber
);

#endif
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
## @file
# This is a Sovereign Boot Wizard application.
#
# This application help configuring UEFI Secure Boot.
#
# Copyright (c) 2025, 3mdeb Sp z o.o. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
#
##

[Defines]
INF_VERSION = 0x00010005
BASE_NAME = SovereignBootWizard
MODULE_UNI_FILE = SovereignBootWizard.uni
FILE_GUID = B57031B9-1ABB-45F8-A9CB-AC5AAD72AD31
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 1.0
ENTRY_POINT = SovereignBootWizardInit

#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = IA32 X64 EBC
#

[Sources]
BootOptionParsing.c
SovereignBootWizard.c
SovereignBootWizardHii.h
SovereignBootWizardVfrStrings.uni
SovereignBootWizard.h
SovereignBootWizardVfr.vfr

[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
DasharoModulePkg/DasharoModulePkg.dec
SecurityPkg/SecurityPkg.dec

[LibraryClasses]
BaseLib
BaseCryptLib
MemoryAllocationLib
UefiBootManagerLib
UefiBootServicesTableLib
UefiApplicationEntryPoint
UefiRuntimeServicesTableLib
BaseMemoryLib
DebugLib
HobLib
HiiLib
PrintLib
UefiLib
DevicePathLib
PeCoffLib
SecureBootVariableLib
SecureBootVariableProvisionLib

[Guids]
gSovereignBootWizardFormSetGuid

[Protocols]
## PRODUCES # SovereignBootWizardFormSet
## PRODUCES # SovereignBootWizardInventory
gEfiDevicePathProtocolGuid
gEfiHiiStringProtocolGuid ## CONSUMES
gEfiHiiConfigRoutingProtocolGuid ## CONSUMES
gEfiHiiConfigAccessProtocolGuid ## PRODUCES
gEfiFormBrowser2ProtocolGuid ## CONSUMES
gEfiHiiDatabaseProtocolGuid ## CONSUMES
gEfiSimpleTextInputExProtocolGuid ## SOMETIMES_CONSUMES
gEdkiiFormBrowserEx2ProtocolGuid ## CONSUMES
gEfiConfigKeywordHandlerProtocolGuid ## CONSUMES
gEfiHiiPopupProtocolGuid ## CONSUMES
gEfiDevicePathToTextProtocolGuid ## CONSUMES
gEfiFirmwareVolume2ProtocolGuid ## CONSUMES

[UserExtensions.TianoCore."ExtraFiles"]
SovereignBootWizardExtra.uni
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// /** @file
// Sovereign Boot Provisioning Wizard.
//
// This application helps in configuring UEFI Secure Boot.
//
// Copyright (c) 2025, 3mdeb Sp. z o.o. All rights reserved.<BR>
//
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
// **/


#string STR_MODULE_ABSTRACT #language en-US "Sovereign Boot Provisioning Wizard"

#string STR_MODULE_DESCRIPTION #language en-US "This application helps in configuring UEFI Secure Boot."
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// /** @file
// SovereignBootWizard Localized Strings and Content
//
// Copyright (c) 2025, 3mdeb Sp. z o.o. All rights reserved.<BR>
//
// SPDX-License-Identifier: BSD-2-Clause-Patent
//
// **/

#string STR_PROPERTIES_MODULE_NAME
#language en-US
"Sovereign Boot Wizard"
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/** @file

Copyright (c) 2025, 3mdeb Sp. z o.o. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

Module Name:

SovereignBootWizardHii.h

Abstract:

HII Data used by the Sovereign Boot Wizard application

Revision History:


**/

#ifndef SOVEREIGN_BOOT_WIZARD_HII_H_
#define SOVEREIGN_BOOT_WIZARD_HII_H_

#include <Guid/HiiPlatformSetupFormset.h>
#include <Guid/HiiFormMapMethodGuid.h>
#include <Guid/SovereignBoot.h>
#include <Guid/ZeroGuid.h>

#define SOVEREIGN_BOOT_WIZARD_FORM_DATA_VARSTORE_ID 0x0001

#define SOVEREIGN_BOOT_WIZARD_WELCOME_FORM_ID 1
#define SOVEREIGN_BOOT_WIZARD_CONFIG_FORM_ID 2
#define SOVEREIGN_BOOT_WIZARD_MS_SECURE_BOOT_FORM_ID 3
#define SOVEREIGN_BOOT_WIZARD_INTERACTIVE_MODE_FORM_ID 9

// Question IDs
// Each form will reserve 0x100 IDs
#define SOVEREIGN_BOOT_WIZARD_FORM_QUESTION_ID_BASE 0x1000
// Welcome form
#define WELCOME_FORM_QUESTION_ID_BASE 0x1100
#define SELECT_SOVEREIGN_BOOT_QUESTION_ID 0x1101
#define SELECT_DEFAULT_SECURE_BOOT_QUESTION_ID 0x1102

// Configuration form
#define CONFIG_FORM_QUESTION_ID_BASE 0x1200
#define DO_NOT_TRUST_KEY_FORM2_QUESTION_ID 0x1201
#define TRUST_KEY_AND_BOOT_FORM2_QUESTION_ID 0x1202
#define TRUST_KEY_FORM2_QUESTION_ID 0x1203
#define SHOW_KEY_DETAILS_FORM2_QUESTION_ID 0x1204

#define EXIT_FORM_QUESTION_ID_BASE 0x1F00
#define EXIT_FORM1_QUESTION_ID 0x1F01
#define EXIT_FORM2_QUESTION_ID 0x1F02
#define EXIT_FORM3_QUESTION_ID 0x1F03
#define EXIT_FORM9_QUESTION_ID 0x1F09


#pragma pack(1)

// Form Data
typedef struct {
UINT8 Unused;
} SOVEREIGN_BOOT_WIZARD_FORM_DATA;

#pragma pack()

#endif
Loading