mirror of https://github.com/acidanthera/audk.git
SecurityPkg: Implement AuthVariableLib library instance
What to do: 1. Implement AuthVariableLib library instance. 2. Temporarily add VARIABLE_ENTRY_CONSISTENCY and variable attribute combinations definitions to AuthenticatedVariableFormat.h for git bisect. Why to do: 1. Share code. Separate auth variable service from Auth Variable driver in SecurityPkg to AuthVariableLib. Then the AuthVariableLib could benefit and be used by different implementation of Auth Variable drivers. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17758 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
b6477d820b
commit
a6811666b0
|
@ -147,6 +147,17 @@ typedef struct {
|
|||
#define VAR_ADDED 0x3f ///< Variable has been completely added.
|
||||
|
||||
///
|
||||
/// Variable Attribute combinations.
|
||||
///
|
||||
#define VARIABLE_ATTRIBUTE_NV_BS (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS)
|
||||
#define VARIABLE_ATTRIBUTE_BS_RT (EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS)
|
||||
#define VARIABLE_ATTRIBUTE_AT_AW (EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS | EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS)
|
||||
#define VARIABLE_ATTRIBUTE_NV_BS_RT (VARIABLE_ATTRIBUTE_BS_RT | EFI_VARIABLE_NON_VOLATILE)
|
||||
#define VARIABLE_ATTRIBUTE_NV_BS_RT_HR (VARIABLE_ATTRIBUTE_NV_BS_RT | EFI_VARIABLE_HARDWARE_ERROR_RECORD)
|
||||
#define VARIABLE_ATTRIBUTE_NV_BS_RT_AT (VARIABLE_ATTRIBUTE_NV_BS_RT | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS)
|
||||
#define VARIABLE_ATTRIBUTE_NV_BS_RT_AW (VARIABLE_ATTRIBUTE_NV_BS_RT | EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS)
|
||||
#define VARIABLE_ATTRIBUTE_NV_BS_RT_HR_AT_AW (VARIABLE_ATTRIBUTE_NV_BS_RT_HR | VARIABLE_ATTRIBUTE_AT_AW)
|
||||
|
||||
/// Single Variable Data Header Structure.
|
||||
///
|
||||
typedef struct {
|
||||
|
@ -189,6 +200,12 @@ typedef struct {
|
|||
EFI_GUID VendorGuid;
|
||||
} VARIABLE_HEADER;
|
||||
|
||||
typedef struct {
|
||||
EFI_GUID *Guid;
|
||||
CHAR16 *Name;
|
||||
UINTN VariableSize;
|
||||
} VARIABLE_ENTRY_CONSISTENCY;
|
||||
|
||||
#pragma pack()
|
||||
|
||||
typedef struct _VARIABLE_INFO_ENTRY VARIABLE_INFO_ENTRY;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,411 @@
|
|||
/** @file
|
||||
The internal header file includes the common header files, defines
|
||||
internal structure and functions used by AuthService module.
|
||||
|
||||
Caution: This module requires additional review when modified.
|
||||
This driver will have external input - variable data. It may be input in SMM mode.
|
||||
This external input must be validated carefully to avoid security issue like
|
||||
buffer overflow, integer overflow.
|
||||
Variable attribute should also be checked to avoid authentication bypass.
|
||||
The whole SMM authentication variable design relies on the integrity of flash part and SMM.
|
||||
which is assumed to be protected by platform. All variable code and metadata in flash/SMM Memory
|
||||
may not be modified without authorization. If platform fails to protect these resources,
|
||||
the authentication service provided in this driver will be broken, and the behavior is undefined.
|
||||
|
||||
Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _AUTHSERVICE_INTERNAL_H_
|
||||
#define _AUTHSERVICE_INTERNAL_H_
|
||||
|
||||
#include <Library/AuthVariableLib.h>
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/BaseCryptLib.h>
|
||||
#include <Library/PlatformSecureLib.h>
|
||||
|
||||
#include <Guid/AuthenticatedVariableFormat.h>
|
||||
#include <Guid/ImageAuthentication.h>
|
||||
|
||||
///
|
||||
/// Struct to record signature requirement defined by UEFI spec.
|
||||
/// For SigHeaderSize and SigDataSize, ((UINT32) ~0) means NO exact length requirement for this field.
|
||||
///
|
||||
typedef struct {
|
||||
EFI_GUID SigType;
|
||||
// Expected SignatureHeader size in Bytes.
|
||||
UINT32 SigHeaderSize;
|
||||
// Expected SignatureData size in Bytes.
|
||||
UINT32 SigDataSize;
|
||||
} EFI_SIGNATURE_ITEM;
|
||||
|
||||
typedef enum {
|
||||
AuthVarTypePk,
|
||||
AuthVarTypeKek,
|
||||
AuthVarTypePriv,
|
||||
AuthVarTypePayload
|
||||
} AUTHVAR_TYPE;
|
||||
|
||||
///
|
||||
/// "AuthVarKeyDatabase" variable for the Public Key store
|
||||
/// of variables with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS set.
|
||||
///
|
||||
/// GUID: gEfiAuthenticatedVariableGuid
|
||||
///
|
||||
/// We need maintain atomicity.
|
||||
///
|
||||
/// Format:
|
||||
/// +----------------------------+
|
||||
/// | AUTHVAR_KEY_DB_DATA | <-- First AuthVarKey
|
||||
/// +----------------------------+
|
||||
/// | ...... |
|
||||
/// +----------------------------+
|
||||
/// | AUTHVAR_KEY_DB_DATA | <-- Last AuthKey
|
||||
/// +----------------------------+
|
||||
///
|
||||
#define AUTHVAR_KEYDB_NAME L"AuthVarKeyDatabase"
|
||||
|
||||
#define EFI_CERT_TYPE_RSA2048_SHA256_SIZE 256
|
||||
#define EFI_CERT_TYPE_RSA2048_SIZE 256
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
UINT32 KeyIndex;
|
||||
UINT8 KeyData[EFI_CERT_TYPE_RSA2048_SIZE];
|
||||
} AUTHVAR_KEY_DB_DATA;
|
||||
#pragma pack()
|
||||
|
||||
///
|
||||
/// "certdb" variable stores the signer's certificates for non PK/KEK/DB/DBX
|
||||
/// variables with EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS set.
|
||||
///
|
||||
/// GUID: gEfiCertDbGuid
|
||||
///
|
||||
/// We need maintain atomicity.
|
||||
///
|
||||
/// Format:
|
||||
/// +----------------------------+
|
||||
/// | UINT32 | <-- CertDbListSize, including this UINT32
|
||||
/// +----------------------------+
|
||||
/// | AUTH_CERT_DB_DATA | <-- First CERT
|
||||
/// +----------------------------+
|
||||
/// | ........ |
|
||||
/// +----------------------------+
|
||||
/// | AUTH_CERT_DB_DATA | <-- Last CERT
|
||||
/// +----------------------------+
|
||||
///
|
||||
#define EFI_CERT_DB_NAME L"certdb"
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
EFI_GUID VendorGuid;
|
||||
UINT32 CertNodeSize;
|
||||
UINT32 NameSize;
|
||||
UINT32 CertDataSize;
|
||||
/// CHAR16 VariableName[NameSize];
|
||||
/// UINT8 CertData[CertDataSize];
|
||||
} AUTH_CERT_DB_DATA;
|
||||
#pragma pack()
|
||||
|
||||
extern UINT8 *mPubKeyStore;
|
||||
extern UINT32 mPubKeyNumber;
|
||||
extern UINT32 mMaxKeyNumber;
|
||||
extern UINT32 mMaxKeyDbSize;
|
||||
extern UINT8 *mCertDbStore;
|
||||
extern UINT32 mMaxCertDbSize;
|
||||
extern UINT32 mPlatformMode;
|
||||
extern UINT8 mVendorKeyState;
|
||||
|
||||
extern VOID *mHashCtx;
|
||||
|
||||
extern AUTH_VAR_LIB_CONTEXT_IN *mAuthVarLibContextIn;
|
||||
|
||||
/**
|
||||
Process variable with EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS set
|
||||
|
||||
Caution: This function may receive untrusted input.
|
||||
This function may be invoked in SMM mode, and datasize and data are external input.
|
||||
This function will do basic validation, before parse the data.
|
||||
This function will parse the authentication carefully to avoid security issues, like
|
||||
buffer overflow, integer overflow.
|
||||
|
||||
@param[in] VariableName Name of Variable to be found.
|
||||
@param[in] VendorGuid Variable vendor GUID.
|
||||
@param[in] Data Data pointer.
|
||||
@param[in] DataSize Size of Data found. If size is less than the
|
||||
data, this value contains the required size.
|
||||
@param[in] Attributes Attribute value of the variable.
|
||||
@param[in] AuthVarType Verify against PK, KEK database, private database or certificate in data payload.
|
||||
@param[out] VarDel Delete the variable or not.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
||||
@retval EFI_SECURITY_VIOLATION The variable does NOT pass the validation
|
||||
check carried out by the firmware.
|
||||
@retval EFI_OUT_OF_RESOURCES Failed to process variable due to lack
|
||||
of resources.
|
||||
@retval EFI_SUCCESS Variable pass validation successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
VerifyTimeBasedPayloadAndUpdate (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
IN VOID *Data,
|
||||
IN UINTN DataSize,
|
||||
IN UINT32 Attributes,
|
||||
IN AUTHVAR_TYPE AuthVarType,
|
||||
OUT BOOLEAN *VarDel
|
||||
);
|
||||
|
||||
/**
|
||||
Delete matching signer's certificates when deleting common authenticated
|
||||
variable by corresponding VariableName and VendorGuid from "certdb".
|
||||
|
||||
@param[in] VariableName Name of authenticated Variable.
|
||||
@param[in] VendorGuid Vendor GUID of authenticated Variable.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Any input parameter is invalid.
|
||||
@retval EFI_NOT_FOUND Fail to find "certdb" or matching certs.
|
||||
@retval EFI_OUT_OF_RESOURCES The operation is failed due to lack of resources.
|
||||
@retval EFI_SUCCESS The operation is completed successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
DeleteCertsFromDb (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid
|
||||
);
|
||||
|
||||
/**
|
||||
Filter out the duplicated EFI_SIGNATURE_DATA from the new data by comparing to the original data.
|
||||
|
||||
@param[in] Data Pointer to original EFI_SIGNATURE_LIST.
|
||||
@param[in] DataSize Size of Data buffer.
|
||||
@param[in, out] NewData Pointer to new EFI_SIGNATURE_LIST.
|
||||
@param[in, out] NewDataSize Size of NewData buffer.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
FilterSignatureList (
|
||||
IN VOID *Data,
|
||||
IN UINTN DataSize,
|
||||
IN OUT VOID *NewData,
|
||||
IN OUT UINTN *NewDataSize
|
||||
);
|
||||
|
||||
/**
|
||||
Process variable with platform key for verification.
|
||||
|
||||
Caution: This function may receive untrusted input.
|
||||
This function may be invoked in SMM mode, and datasize and data are external input.
|
||||
This function will do basic validation, before parse the data.
|
||||
This function will parse the authentication carefully to avoid security issues, like
|
||||
buffer overflow, integer overflow.
|
||||
This function will check attribute carefully to avoid authentication bypass.
|
||||
|
||||
@param[in] VariableName Name of Variable to be found.
|
||||
@param[in] VendorGuid Variable vendor GUID.
|
||||
@param[in] Data Data pointer.
|
||||
@param[in] DataSize Size of Data found. If size is less than the
|
||||
data, this value contains the required size.
|
||||
@param[in] Attributes Attribute value of the variable
|
||||
@param[in] IsPk Indicate whether it is to process pk.
|
||||
|
||||
@return EFI_INVALID_PARAMETER Invalid parameter.
|
||||
@return EFI_SECURITY_VIOLATION The variable does NOT pass the validation.
|
||||
check carried out by the firmware.
|
||||
@return EFI_SUCCESS Variable passed validation successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ProcessVarWithPk (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
IN VOID *Data,
|
||||
IN UINTN DataSize,
|
||||
IN UINT32 Attributes OPTIONAL,
|
||||
IN BOOLEAN IsPk
|
||||
);
|
||||
|
||||
/**
|
||||
Process variable with key exchange key for verification.
|
||||
|
||||
Caution: This function may receive untrusted input.
|
||||
This function may be invoked in SMM mode, and datasize and data are external input.
|
||||
This function will do basic validation, before parse the data.
|
||||
This function will parse the authentication carefully to avoid security issues, like
|
||||
buffer overflow, integer overflow.
|
||||
This function will check attribute carefully to avoid authentication bypass.
|
||||
|
||||
@param[in] VariableName Name of Variable to be found.
|
||||
@param[in] VendorGuid Variable vendor GUID.
|
||||
@param[in] Data Data pointer.
|
||||
@param[in] DataSize Size of Data found. If size is less than the
|
||||
data, this value contains the required size.
|
||||
@param[in] Attributes Attribute value of the variable.
|
||||
|
||||
@return EFI_INVALID_PARAMETER Invalid parameter.
|
||||
@return EFI_SECURITY_VIOLATION The variable does NOT pass the validation
|
||||
check carried out by the firmware.
|
||||
@return EFI_SUCCESS Variable pass validation successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ProcessVarWithKek (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
IN VOID *Data,
|
||||
IN UINTN DataSize,
|
||||
IN UINT32 Attributes OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Process variable with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS/EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS set
|
||||
|
||||
Caution: This function may receive untrusted input.
|
||||
This function may be invoked in SMM mode, and datasize and data are external input.
|
||||
This function will do basic validation, before parse the data.
|
||||
This function will parse the authentication carefully to avoid security issues, like
|
||||
buffer overflow, integer overflow.
|
||||
This function will check attribute carefully to avoid authentication bypass.
|
||||
|
||||
@param[in] VariableName Name of the variable.
|
||||
@param[in] VendorGuid Variable vendor GUID.
|
||||
@param[in] Data Data pointer.
|
||||
@param[in] DataSize Size of Data.
|
||||
@param[in] Attributes Attribute value of the variable.
|
||||
|
||||
@return EFI_INVALID_PARAMETER Invalid parameter.
|
||||
@return EFI_WRITE_PROTECTED Variable is write-protected and needs authentication with
|
||||
EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS set.
|
||||
@return EFI_OUT_OF_RESOURCES The Database to save the public key is full.
|
||||
@return EFI_SECURITY_VIOLATION The variable is with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS
|
||||
set, but the AuthInfo does NOT pass the validation
|
||||
check carried out by the firmware.
|
||||
@return EFI_SUCCESS Variable is not write-protected or pass validation successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ProcessVariable (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
IN VOID *Data,
|
||||
IN UINTN DataSize,
|
||||
IN UINT32 Attributes OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Finds variable in storage blocks of volatile and non-volatile storage areas.
|
||||
|
||||
This code finds variable in storage blocks of volatile and non-volatile storage areas.
|
||||
If VariableName is an empty string, then we just return the first
|
||||
qualified variable without comparing VariableName and VendorGuid.
|
||||
|
||||
@param[in] VariableName Name of the variable to be found.
|
||||
@param[in] VendorGuid Variable vendor GUID to be found.
|
||||
@param[out] Data Pointer to data address.
|
||||
@param[out] DataSize Pointer to data size.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER If VariableName is not an empty string,
|
||||
while VendorGuid is NULL.
|
||||
@retval EFI_SUCCESS Variable successfully found.
|
||||
@retval EFI_NOT_FOUND Variable not found
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
AuthServiceInternalFindVariable (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
OUT VOID **Data,
|
||||
OUT UINTN *DataSize
|
||||
);
|
||||
|
||||
/**
|
||||
Update the variable region with Variable information.
|
||||
|
||||
@param[in] VariableName Name of variable.
|
||||
@param[in] VendorGuid Guid of variable.
|
||||
@param[in] Data Data pointer.
|
||||
@param[in] DataSize Size of Data.
|
||||
@param[in] Attributes Attribute value of the variable.
|
||||
|
||||
@retval EFI_SUCCESS The update operation is success.
|
||||
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
||||
@retval EFI_WRITE_PROTECTED Variable is write-protected.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough resource.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
AuthServiceInternalUpdateVariable (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
IN VOID *Data,
|
||||
IN UINTN DataSize,
|
||||
IN UINT32 Attributes
|
||||
);
|
||||
|
||||
/**
|
||||
Update the variable region with Variable information.
|
||||
|
||||
@param[in] VariableName Name of variable.
|
||||
@param[in] VendorGuid Guid of variable.
|
||||
@param[in] Data Data pointer.
|
||||
@param[in] DataSize Size of Data.
|
||||
@param[in] Attributes Attribute value of the variable.
|
||||
@param[in] KeyIndex Index of associated public key.
|
||||
@param[in] MonotonicCount Value of associated monotonic count.
|
||||
|
||||
@retval EFI_SUCCESS The update operation is success.
|
||||
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
||||
@retval EFI_WRITE_PROTECTED Variable is write-protected.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough resource.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
AuthServiceInternalUpdateVariableWithMonotonicCount (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
IN VOID *Data,
|
||||
IN UINTN DataSize,
|
||||
IN UINT32 Attributes,
|
||||
IN UINT32 KeyIndex,
|
||||
IN UINT64 MonotonicCount
|
||||
);
|
||||
|
||||
/**
|
||||
Update the variable region with Variable information.
|
||||
|
||||
@param[in] VariableName Name of variable.
|
||||
@param[in] VendorGuid Guid of variable.
|
||||
@param[in] Data Data pointer.
|
||||
@param[in] DataSize Size of Data.
|
||||
@param[in] Attributes Attribute value of the variable.
|
||||
@param[in] TimeStamp Value of associated TimeStamp.
|
||||
|
||||
@retval EFI_SUCCESS The update operation is success.
|
||||
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
||||
@retval EFI_WRITE_PROTECTED Variable is write-protected.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough resource.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
AuthServiceInternalUpdateVariableWithTimeStamp (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
IN VOID *Data,
|
||||
IN UINTN DataSize,
|
||||
IN UINT32 Attributes,
|
||||
IN EFI_TIME *TimeStamp
|
||||
);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,460 @@
|
|||
/** @file
|
||||
Implement authentication services for the authenticated variables.
|
||||
|
||||
Caution: This module requires additional review when modified.
|
||||
This driver will have external input - variable data. It may be input in SMM mode.
|
||||
This external input must be validated carefully to avoid security issue like
|
||||
buffer overflow, integer overflow.
|
||||
Variable attribute should also be checked to avoid authentication bypass.
|
||||
The whole SMM authentication variable design relies on the integrity of flash part and SMM.
|
||||
which is assumed to be protected by platform. All variable code and metadata in flash/SMM Memory
|
||||
may not be modified without authorization. If platform fails to protect these resources,
|
||||
the authentication service provided in this driver will be broken, and the behavior is undefined.
|
||||
|
||||
Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include "AuthServiceInternal.h"
|
||||
|
||||
///
|
||||
/// Global database array for scratch
|
||||
///
|
||||
UINT8 *mPubKeyStore;
|
||||
UINT32 mPubKeyNumber;
|
||||
UINT32 mMaxKeyNumber;
|
||||
UINT32 mMaxKeyDbSize;
|
||||
UINT8 *mCertDbStore;
|
||||
UINT32 mMaxCertDbSize;
|
||||
UINT32 mPlatformMode;
|
||||
UINT8 mVendorKeyState;
|
||||
|
||||
EFI_GUID mSignatureSupport[] = {EFI_CERT_SHA1_GUID, EFI_CERT_SHA256_GUID, EFI_CERT_RSA2048_GUID, EFI_CERT_X509_GUID};
|
||||
|
||||
//
|
||||
// Hash context pointer
|
||||
//
|
||||
VOID *mHashCtx = NULL;
|
||||
|
||||
VARIABLE_ENTRY_PROPERTY mAuthVarEntry[] = {
|
||||
{
|
||||
&gEfiSecureBootEnableDisableGuid,
|
||||
EFI_SECURE_BOOT_ENABLE_NAME,
|
||||
{
|
||||
VAR_CHECK_VARIABLE_PROPERTY_REVISION,
|
||||
0,
|
||||
VARIABLE_ATTRIBUTE_NV_BS,
|
||||
sizeof (UINT8),
|
||||
sizeof (UINT8)
|
||||
}
|
||||
},
|
||||
{
|
||||
&gEfiCustomModeEnableGuid,
|
||||
EFI_CUSTOM_MODE_NAME,
|
||||
{
|
||||
VAR_CHECK_VARIABLE_PROPERTY_REVISION,
|
||||
0,
|
||||
VARIABLE_ATTRIBUTE_NV_BS,
|
||||
sizeof (UINT8),
|
||||
sizeof (UINT8)
|
||||
}
|
||||
},
|
||||
{
|
||||
&gEfiVendorKeysNvGuid,
|
||||
EFI_VENDOR_KEYS_NV_VARIABLE_NAME,
|
||||
{
|
||||
VAR_CHECK_VARIABLE_PROPERTY_REVISION,
|
||||
VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,
|
||||
VARIABLE_ATTRIBUTE_NV_BS_RT_AT,
|
||||
sizeof (UINT8),
|
||||
sizeof (UINT8)
|
||||
}
|
||||
},
|
||||
{
|
||||
&gEfiAuthenticatedVariableGuid,
|
||||
AUTHVAR_KEYDB_NAME,
|
||||
{
|
||||
VAR_CHECK_VARIABLE_PROPERTY_REVISION,
|
||||
VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,
|
||||
VARIABLE_ATTRIBUTE_NV_BS_RT_AW,
|
||||
sizeof (UINT8),
|
||||
MAX_UINTN
|
||||
}
|
||||
},
|
||||
{
|
||||
&gEfiCertDbGuid,
|
||||
EFI_CERT_DB_NAME,
|
||||
{
|
||||
VAR_CHECK_VARIABLE_PROPERTY_REVISION,
|
||||
VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY,
|
||||
VARIABLE_ATTRIBUTE_NV_BS_RT_AT,
|
||||
sizeof (UINT32),
|
||||
MAX_UINTN
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
VOID *mAddressPointer[3];
|
||||
|
||||
AUTH_VAR_LIB_CONTEXT_IN *mAuthVarLibContextIn = NULL;
|
||||
|
||||
/**
|
||||
Initialization for authenticated varibale services.
|
||||
If this initialization returns error status, other APIs will not work
|
||||
and expect to be not called then.
|
||||
|
||||
@param[in] AuthVarLibContextIn Pointer to input auth variable lib context.
|
||||
@param[out] AuthVarLibContextOut Pointer to output auth variable lib context.
|
||||
|
||||
@retval EFI_SUCCESS Function successfully executed.
|
||||
@retval EFI_INVALID_PARAMETER If AuthVarLibContextIn == NULL or AuthVarLibContextOut == NULL.
|
||||
@retval EFI_OUT_OF_RESOURCES Fail to allocate enough resource.
|
||||
@retval EFI_UNSUPPORTED Unsupported to process authenticated variable.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AuthVariableLibInitialize (
|
||||
IN AUTH_VAR_LIB_CONTEXT_IN *AuthVarLibContextIn,
|
||||
OUT AUTH_VAR_LIB_CONTEXT_OUT *AuthVarLibContextOut
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINT8 VarValue;
|
||||
UINT32 VarAttr;
|
||||
UINT8 *Data;
|
||||
UINTN DataSize;
|
||||
UINTN CtxSize;
|
||||
UINT8 SecureBootMode;
|
||||
UINT8 SecureBootEnable;
|
||||
UINT8 CustomMode;
|
||||
UINT32 ListSize;
|
||||
|
||||
if ((AuthVarLibContextIn == NULL) || (AuthVarLibContextOut == NULL)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
mAuthVarLibContextIn = AuthVarLibContextIn;
|
||||
|
||||
//
|
||||
// Initialize hash context.
|
||||
//
|
||||
CtxSize = Sha256GetContextSize ();
|
||||
mHashCtx = AllocateRuntimePool (CtxSize);
|
||||
if (mHashCtx == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
//
|
||||
// Reserve runtime buffer for public key database. The size excludes variable header and name size.
|
||||
//
|
||||
mMaxKeyDbSize = (UINT32) (mAuthVarLibContextIn->MaxAuthVariableSize - sizeof (AUTHVAR_KEYDB_NAME));
|
||||
mMaxKeyNumber = mMaxKeyDbSize / sizeof (AUTHVAR_KEY_DB_DATA);
|
||||
mPubKeyStore = AllocateRuntimePool (mMaxKeyDbSize);
|
||||
if (mPubKeyStore == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
//
|
||||
// Reserve runtime buffer for certificate database. The size excludes variable header and name size.
|
||||
//
|
||||
mMaxCertDbSize = (UINT32) (mAuthVarLibContextIn->MaxAuthVariableSize - sizeof (EFI_CERT_DB_NAME));
|
||||
mCertDbStore = AllocateRuntimePool (mMaxCertDbSize);
|
||||
if (mCertDbStore == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
//
|
||||
// Check "AuthVarKeyDatabase" variable's existence.
|
||||
// If it doesn't exist, create a new one with initial value of 0 and EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS set.
|
||||
//
|
||||
Status = AuthServiceInternalFindVariable (
|
||||
AUTHVAR_KEYDB_NAME,
|
||||
&gEfiAuthenticatedVariableGuid,
|
||||
(VOID **) &Data,
|
||||
&DataSize
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
VarAttr = EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS;
|
||||
VarValue = 0;
|
||||
mPubKeyNumber = 0;
|
||||
Status = AuthServiceInternalUpdateVariable (
|
||||
AUTHVAR_KEYDB_NAME,
|
||||
&gEfiAuthenticatedVariableGuid,
|
||||
&VarValue,
|
||||
sizeof(UINT8),
|
||||
VarAttr
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
} else {
|
||||
//
|
||||
// Load database in global variable for cache.
|
||||
//
|
||||
ASSERT ((DataSize != 0) && (Data != NULL));
|
||||
//
|
||||
// "AuthVarKeyDatabase" is an internal variable. Its DataSize is always ensured not to exceed mPubKeyStore buffer size(See definition before)
|
||||
// Therefore, there is no memory overflow in underlying CopyMem.
|
||||
//
|
||||
CopyMem (mPubKeyStore, (UINT8 *) Data, DataSize);
|
||||
mPubKeyNumber = (UINT32) (DataSize / sizeof (AUTHVAR_KEY_DB_DATA));
|
||||
}
|
||||
|
||||
Status = AuthServiceInternalFindVariable (EFI_PLATFORM_KEY_NAME, &gEfiGlobalVariableGuid, (VOID **) &Data, &DataSize);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((EFI_D_INFO, "Variable %s does not exist.\n", EFI_PLATFORM_KEY_NAME));
|
||||
} else {
|
||||
DEBUG ((EFI_D_INFO, "Variable %s exists.\n", EFI_PLATFORM_KEY_NAME));
|
||||
}
|
||||
|
||||
//
|
||||
// Create "SetupMode" variable with BS+RT attribute set.
|
||||
//
|
||||
if (EFI_ERROR (Status)) {
|
||||
mPlatformMode = SETUP_MODE;
|
||||
} else {
|
||||
mPlatformMode = USER_MODE;
|
||||
}
|
||||
Status = AuthServiceInternalUpdateVariable (
|
||||
EFI_SETUP_MODE_NAME,
|
||||
&gEfiGlobalVariableGuid,
|
||||
&mPlatformMode,
|
||||
sizeof(UINT8),
|
||||
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Create "SignatureSupport" variable with BS+RT attribute set.
|
||||
//
|
||||
Status = AuthServiceInternalUpdateVariable (
|
||||
EFI_SIGNATURE_SUPPORT_NAME,
|
||||
&gEfiGlobalVariableGuid,
|
||||
mSignatureSupport,
|
||||
sizeof(mSignatureSupport),
|
||||
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// If "SecureBootEnable" variable exists, then update "SecureBoot" variable.
|
||||
// If "SecureBootEnable" variable is SECURE_BOOT_ENABLE and in USER_MODE, Set "SecureBoot" variable to SECURE_BOOT_MODE_ENABLE.
|
||||
// If "SecureBootEnable" variable is SECURE_BOOT_DISABLE, Set "SecureBoot" variable to SECURE_BOOT_MODE_DISABLE.
|
||||
//
|
||||
SecureBootEnable = SECURE_BOOT_DISABLE;
|
||||
Status = AuthServiceInternalFindVariable (EFI_SECURE_BOOT_ENABLE_NAME, &gEfiSecureBootEnableDisableGuid, (VOID **) &Data, &DataSize);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
if (mPlatformMode == SETUP_MODE){
|
||||
//
|
||||
// PK is cleared in runtime. "SecureBootMode" is not updated before reboot
|
||||
// Delete "SecureBootMode" in SetupMode
|
||||
//
|
||||
Status = AuthServiceInternalUpdateVariable (
|
||||
EFI_SECURE_BOOT_ENABLE_NAME,
|
||||
&gEfiSecureBootEnableDisableGuid,
|
||||
&SecureBootEnable,
|
||||
0,
|
||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS
|
||||
);
|
||||
} else {
|
||||
SecureBootEnable = *(UINT8 *) Data;
|
||||
}
|
||||
} else if (mPlatformMode == USER_MODE) {
|
||||
//
|
||||
// "SecureBootEnable" not exist, initialize it in USER_MODE.
|
||||
//
|
||||
SecureBootEnable = SECURE_BOOT_ENABLE;
|
||||
Status = AuthServiceInternalUpdateVariable (
|
||||
EFI_SECURE_BOOT_ENABLE_NAME,
|
||||
&gEfiSecureBootEnableDisableGuid,
|
||||
&SecureBootEnable,
|
||||
sizeof (UINT8),
|
||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Create "SecureBoot" variable with BS+RT attribute set.
|
||||
//
|
||||
if (SecureBootEnable == SECURE_BOOT_ENABLE && mPlatformMode == USER_MODE) {
|
||||
SecureBootMode = SECURE_BOOT_MODE_ENABLE;
|
||||
} else {
|
||||
SecureBootMode = SECURE_BOOT_MODE_DISABLE;
|
||||
}
|
||||
Status = AuthServiceInternalUpdateVariable (
|
||||
EFI_SECURE_BOOT_MODE_NAME,
|
||||
&gEfiGlobalVariableGuid,
|
||||
&SecureBootMode,
|
||||
sizeof (UINT8),
|
||||
EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
DEBUG ((EFI_D_INFO, "Variable %s is %x\n", EFI_SETUP_MODE_NAME, mPlatformMode));
|
||||
DEBUG ((EFI_D_INFO, "Variable %s is %x\n", EFI_SECURE_BOOT_MODE_NAME, SecureBootMode));
|
||||
DEBUG ((EFI_D_INFO, "Variable %s is %x\n", EFI_SECURE_BOOT_ENABLE_NAME, SecureBootEnable));
|
||||
|
||||
//
|
||||
// Initialize "CustomMode" in STANDARD_SECURE_BOOT_MODE state.
|
||||
//
|
||||
CustomMode = STANDARD_SECURE_BOOT_MODE;
|
||||
Status = AuthServiceInternalUpdateVariable (
|
||||
EFI_CUSTOM_MODE_NAME,
|
||||
&gEfiCustomModeEnableGuid,
|
||||
&CustomMode,
|
||||
sizeof (UINT8),
|
||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
DEBUG ((EFI_D_INFO, "Variable %s is %x\n", EFI_CUSTOM_MODE_NAME, CustomMode));
|
||||
|
||||
//
|
||||
// Check "certdb" variable's existence.
|
||||
// If it doesn't exist, then create a new one with
|
||||
// EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS set.
|
||||
//
|
||||
Status = AuthServiceInternalFindVariable (
|
||||
EFI_CERT_DB_NAME,
|
||||
&gEfiCertDbGuid,
|
||||
(VOID **) &Data,
|
||||
&DataSize
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
VarAttr = EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS;
|
||||
ListSize = sizeof (UINT32);
|
||||
Status = AuthServiceInternalUpdateVariable (
|
||||
EFI_CERT_DB_NAME,
|
||||
&gEfiCertDbGuid,
|
||||
&ListSize,
|
||||
sizeof (UINT32),
|
||||
VarAttr
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Check "VendorKeysNv" variable's existence and create "VendorKeys" variable accordingly.
|
||||
//
|
||||
Status = AuthServiceInternalFindVariable (EFI_VENDOR_KEYS_NV_VARIABLE_NAME, &gEfiVendorKeysNvGuid, (VOID **) &Data, &DataSize);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
mVendorKeyState = *(UINT8 *)Data;
|
||||
} else {
|
||||
//
|
||||
// "VendorKeysNv" not exist, initialize it in VENDOR_KEYS_VALID state.
|
||||
//
|
||||
mVendorKeyState = VENDOR_KEYS_VALID;
|
||||
Status = AuthServiceInternalUpdateVariable (
|
||||
EFI_VENDOR_KEYS_NV_VARIABLE_NAME,
|
||||
&gEfiVendorKeysNvGuid,
|
||||
&mVendorKeyState,
|
||||
sizeof (UINT8),
|
||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Create "VendorKeys" variable with BS+RT attribute set.
|
||||
//
|
||||
Status = AuthServiceInternalUpdateVariable (
|
||||
EFI_VENDOR_KEYS_VARIABLE_NAME,
|
||||
&gEfiGlobalVariableGuid,
|
||||
&mVendorKeyState,
|
||||
sizeof (UINT8),
|
||||
EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
DEBUG ((EFI_D_INFO, "Variable %s is %x\n", EFI_VENDOR_KEYS_VARIABLE_NAME, mVendorKeyState));
|
||||
|
||||
AuthVarLibContextOut->StructVersion = AUTH_VAR_LIB_CONTEXT_OUT_STRUCT_VERSION;
|
||||
AuthVarLibContextOut->StructSize = sizeof (AUTH_VAR_LIB_CONTEXT_OUT);
|
||||
AuthVarLibContextOut->AuthVarEntry = mAuthVarEntry;
|
||||
AuthVarLibContextOut->AuthVarEntryCount = sizeof (mAuthVarEntry) / sizeof (mAuthVarEntry[0]);
|
||||
mAddressPointer[0] = mHashCtx;
|
||||
mAddressPointer[1] = mPubKeyStore;
|
||||
mAddressPointer[2] = mCertDbStore;
|
||||
AuthVarLibContextOut->AddressPointer = mAddressPointer;
|
||||
AuthVarLibContextOut->AddressPointerCount = sizeof (mAddressPointer) / sizeof (mAddressPointer[0]);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Process variable with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS/EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS set.
|
||||
|
||||
@param[in] VariableName Name of the variable.
|
||||
@param[in] VendorGuid Variable vendor GUID.
|
||||
@param[in] Data Data pointer.
|
||||
@param[in] DataSize Size of Data.
|
||||
@param[in] Attributes Attribute value of the variable.
|
||||
|
||||
@retval EFI_SUCCESS The firmware has successfully stored the variable and its data as
|
||||
defined by the Attributes.
|
||||
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
||||
@retval EFI_WRITE_PROTECTED Variable is write-protected.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough resource.
|
||||
@retval EFI_SECURITY_VIOLATION The variable is with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS
|
||||
or EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACESS
|
||||
set, but the AuthInfo does NOT pass the validation
|
||||
check carried out by the firmware.
|
||||
@retval EFI_UNSUPPORTED Unsupported to process authenticated variable.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AuthVariableLibProcessVariable (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
IN VOID *Data,
|
||||
IN UINTN DataSize,
|
||||
IN UINT32 Attributes
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
if (CompareGuid (VendorGuid, &gEfiGlobalVariableGuid) && (StrCmp (VariableName, EFI_PLATFORM_KEY_NAME) == 0)){
|
||||
Status = ProcessVarWithPk (VariableName, VendorGuid, Data, DataSize, Attributes, TRUE);
|
||||
} else if (CompareGuid (VendorGuid, &gEfiGlobalVariableGuid) && (StrCmp (VariableName, EFI_KEY_EXCHANGE_KEY_NAME) == 0)) {
|
||||
Status = ProcessVarWithPk (VariableName, VendorGuid, Data, DataSize, Attributes, FALSE);
|
||||
} else if (CompareGuid (VendorGuid, &gEfiImageSecurityDatabaseGuid) &&
|
||||
((StrCmp (VariableName, EFI_IMAGE_SECURITY_DATABASE) == 0) ||
|
||||
(StrCmp (VariableName, EFI_IMAGE_SECURITY_DATABASE1) == 0) ||
|
||||
(StrCmp (VariableName, EFI_IMAGE_SECURITY_DATABASE2) == 0)
|
||||
)) {
|
||||
Status = ProcessVarWithPk (VariableName, VendorGuid, Data, DataSize, Attributes, FALSE);
|
||||
if (EFI_ERROR (Status)) {
|
||||
Status = ProcessVarWithKek (VariableName, VendorGuid, Data, DataSize, Attributes);
|
||||
}
|
||||
} else {
|
||||
Status = ProcessVariable (VariableName, VendorGuid, Data, DataSize, Attributes);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
## @file
|
||||
# Provides authenticated variable services.
|
||||
#
|
||||
# Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions
|
||||
# of the BSD License which accompanies this distribution. The
|
||||
# full text of the license may be found at
|
||||
# http://opensource.org/licenses/bsd-license.php
|
||||
#
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = AuthVariableLib
|
||||
MODULE_UNI_FILE = AuthVariableLib.uni
|
||||
FILE_GUID = B23CF5FB-6FCC-4422-B145-D855DBC05457
|
||||
MODULE_TYPE = DXE_RUNTIME_DRIVER
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = AuthVariableLib|DXE_RUNTIME_DRIVER DXE_SMM_DRIVER
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64
|
||||
#
|
||||
|
||||
[Sources]
|
||||
AuthVariableLib.c
|
||||
AuthService.c
|
||||
AuthServiceInternal.h
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
SecurityPkg/SecurityPkg.dec
|
||||
CryptoPkg/CryptoPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
BaseLib
|
||||
BaseMemoryLib
|
||||
DebugLib
|
||||
MemoryAllocationLib
|
||||
BaseCryptLib
|
||||
PlatformSecureLib
|
||||
|
||||
[Guids]
|
||||
## CONSUMES ## Variable:L"SetupMode"
|
||||
## PRODUCES ## Variable:L"SetupMode"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"PK"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"KEK"
|
||||
## CONSUMES ## Variable:L"SecureBoot"
|
||||
## PRODUCES ## Variable:L"SecureBoot"
|
||||
## CONSUMES ## Variable:L"SignatureSupport"
|
||||
## PRODUCES ## Variable:L"SignatureSupport"
|
||||
## PRODUCES ## Variable:L"VendorKeys"
|
||||
gEfiGlobalVariableGuid
|
||||
|
||||
## SOMETIMES_CONSUMES ## Variable:L"DB"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"DBX"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"DBT"
|
||||
gEfiImageSecurityDatabaseGuid
|
||||
|
||||
## CONSUMES ## Variable:L"SecureBootEnable"
|
||||
## PRODUCES ## Variable:L"SecureBootEnable"
|
||||
gEfiSecureBootEnableDisableGuid
|
||||
|
||||
## CONSUMES ## Variable:L"CustomMode"
|
||||
## PRODUCES ## Variable:L"CustomMode"
|
||||
gEfiCustomModeEnableGuid
|
||||
|
||||
## CONSUMES ## Variable:L"certdb"
|
||||
## PRODUCES ## Variable:L"certdb"
|
||||
gEfiCertDbGuid
|
||||
|
||||
## CONSUMES ## Variable:L"VendorKeysNv"
|
||||
## PRODUCES ## Variable:L"VendorKeysNv"
|
||||
gEfiVendorKeysNvGuid
|
||||
|
||||
gEfiCertTypeRsa2048Sha256Guid ## SOMETIMES_CONSUMES ## GUID # Unique ID for the type of the certificate.
|
||||
gEfiCertPkcs7Guid ## SOMETIMES_CONSUMES ## GUID # Unique ID for the type of the certificate.
|
||||
gEfiCertX509Guid ## SOMETIMES_CONSUMES ## GUID # Unique ID for the type of the signature.
|
Binary file not shown.
|
@ -175,7 +175,9 @@
|
|||
#
|
||||
SecurityPkg/Library/DxeRsa2048Sha256GuidedSectionExtractLib/DxeRsa2048Sha256GuidedSectionExtractLib.inf
|
||||
SecurityPkg/Library/PeiRsa2048Sha256GuidedSectionExtractLib/PeiRsa2048Sha256GuidedSectionExtractLib.inf
|
||||
|
||||
|
||||
SecurityPkg/Library/AuthVariableLib/AuthVariableLib.inf
|
||||
|
||||
[Components.IA32, Components.X64, Components.IPF]
|
||||
# SecurityPkg/UserIdentification/PwdCredentialProviderDxe/PwdCredentialProviderDxe.inf
|
||||
# SecurityPkg/UserIdentification/UsbCredentialProviderDxe/UsbCredentialProviderDxe.inf
|
||||
|
|
|
@ -121,12 +121,6 @@ typedef struct {
|
|||
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvbInstance;
|
||||
} VARIABLE_MODULE_GLOBAL;
|
||||
|
||||
typedef struct {
|
||||
EFI_GUID *Guid;
|
||||
CHAR16 *Name;
|
||||
UINTN VariableSize;
|
||||
} VARIABLE_ENTRY_CONSISTENCY;
|
||||
|
||||
typedef struct {
|
||||
LIST_ENTRY Link;
|
||||
EFI_GUID Guid;
|
||||
|
|
Loading…
Reference in New Issue