summaryrefslogtreecommitdiff
path: root/Core/EM/HashService
diff options
context:
space:
mode:
authorraywu <raywu0301@gmail.com>2018-06-15 00:00:50 +0800
committerraywu <raywu0301@gmail.com>2018-06-15 00:00:50 +0800
commitb7c51c9cf4864df6aabb99a1ae843becd577237c (patch)
treeeebe9b0d0ca03062955223097e57da84dd618b9a /Core/EM/HashService
downloadzprj-b7c51c9cf4864df6aabb99a1ae843becd577237c.tar.xz
init. 1AQQW051HEADmaster
Diffstat (limited to 'Core/EM/HashService')
-rw-r--r--Core/EM/HashService/HashService.c277
-rw-r--r--Core/EM/HashService/HashService.cif10
-rw-r--r--Core/EM/HashService/HashService.mak65
-rw-r--r--Core/EM/HashService/HashService.sdl28
4 files changed, 380 insertions, 0 deletions
diff --git a/Core/EM/HashService/HashService.c b/Core/EM/HashService/HashService.c
new file mode 100644
index 0000000..7518355
--- /dev/null
+++ b/Core/EM/HashService/HashService.c
@@ -0,0 +1,277 @@
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (C)Copyright 1985-2012, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//**********************************************************************
+//**********************************************************************
+
+//**********************************************************************
+// $Header: /Alaska/SOURCE/Core/Modules/HashService/HashService.c 2 8/28/12 4:28p Artems $
+//
+// $Revision: 2 $
+//
+// $Date: 8/28/12 4:28p $
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Core/Modules/HashService/HashService.c $
+//
+// 2 8/28/12 4:28p Artems
+// [TAG] EIP N/A
+// [Category] New Feature
+// [Description] Implementation of hash protocol
+// [Files] HasService.c HashService.sdl
+//
+// 1 5/24/12 3:33p Artems
+// [TAG] EIP N/A
+// [Category] New Feature
+// [Description] Added HashService protocol infrastructure
+// [Files] HashService.cif
+// HashService.sdl
+// HashService.mak
+// HashService.c
+//
+//
+//**********************************************************************
+//<AMI_FHDR_START>
+//
+// Name: HashService.c
+//
+// Description:
+//
+//<AMI_FHDR_END>
+//**********************************************************************
+#include <AmiDxeLib.h>
+#include <Protocol\Hash.h>
+#include <Protocol\DriverBinding.h>
+#include <Protocol\ServiceBinding.h>
+#include <Protocol\AmiDigitalSignature.h>
+
+
+/* Dummy DriverBinding protocol */
+EFI_STATUS HashServiceDriverBindingSupported (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE ControllerHandle,
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
+{ return EFI_UNSUPPORTED; }
+
+EFI_STATUS HashServiceDriverBindingStart (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE ControllerHandle,
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
+{ return EFI_UNSUPPORTED; }
+
+EFI_STATUS HashServiceDriverBindingStop (
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,
+ IN EFI_HANDLE ControllerHandle,
+ IN UINTN NumberOfChildren,
+ IN EFI_HANDLE *ChildHandleBuffer)
+{ return EFI_UNSUPPORTED; }
+
+EFI_DRIVER_BINDING_PROTOCOL HashServiceDriverBindingProtocol = {
+ HashServiceDriverBindingSupported,
+ HashServiceDriverBindingStart,
+ HashServiceDriverBindingStop,
+ 0x10,
+ NULL,
+ NULL
+};
+
+static EFI_GUID AmiDigitalSignatureProtocolGuid = AMI_DIGITAL_SIGNATURE_PROTOCOL_GUID;
+static AMI_DIGITAL_SIGNATURE_PROTOCOL *AmiDigitalSignatureProtocol = NULL;
+static DLIST HashChildList;
+
+typedef struct {
+ DLINK Link;
+ EFI_HANDLE Handle;
+ EFI_HASH_PROTOCOL Protocol;
+} HASH_CHILD_LINK;
+
+/* Hash service binding protocol */
+EFI_STATUS HashServiceCreateChild (
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,
+ IN OUT EFI_HANDLE *ChildHandle
+);
+
+EFI_STATUS HashServiceDestroyChild (
+ IN EFI_SERVICE_BINDING_PROTOCOL*This,
+ IN EFI_HANDLE ChildHandle
+);
+
+EFI_SERVICE_BINDING_PROTOCOL HashServiceBindingProtocol = {
+ HashServiceCreateChild,
+ HashServiceDestroyChild
+};
+
+EFI_STATUS HsGetHashSize(
+ IN CONST EFI_HASH_PROTOCOL *This,
+ IN CONST EFI_GUID *HashAlgorithm,
+ OUT UINTN *HashSize
+)
+{
+ if(HashSize == NULL || This == NULL || HashAlgorithm == NULL)
+ return EFI_INVALID_PARAMETER;
+
+ if(!guidcmp((EFI_GUID*)HashAlgorithm, &gEfiHashAlgorithmSha1Guid)) {
+ *HashSize = SHA1_DIGEST_SIZE;
+ } else if(!guidcmp((EFI_GUID*)HashAlgorithm, &gEfiHashAlgorithmSha256Guid)) {
+ *HashSize = SHA256_DIGEST_SIZE;
+ } else {
+ return EFI_UNSUPPORTED;
+ }
+
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS HsHash(
+ IN CONST EFI_HASH_PROTOCOL *This,
+ IN CONST EFI_GUID *HashAlgorithm,
+ IN BOOLEAN Extend,
+ IN CONST UINT8 *Message,
+ IN UINT64 MessageSize,
+ IN OUT EFI_HASH_OUTPUT *Hash
+)
+{
+ UINTN Count;
+ UINTN Size[2];
+ UINT8 *Chunks[2];
+ UINTN HashSize;
+ EFI_STATUS Status;
+ UINT8 *Buffer;
+
+ if(Message == NULL || Hash == NULL || This == NULL || HashAlgorithm == NULL)
+ return EFI_INVALID_PARAMETER;
+
+ if(!guidcmp((EFI_GUID*)HashAlgorithm, &gEfiHashAlgorithmSha1Guid)) {
+ Buffer = *(Hash->Sha1Hash);
+ HashSize = SHA1_DIGEST_SIZE;
+ } else if(!guidcmp((EFI_GUID*)HashAlgorithm, &gEfiHashAlgorithmSha256Guid)) {
+ Buffer = *(Hash->Sha256Hash);
+ HashSize = SHA256_DIGEST_SIZE;
+ } else {
+ return EFI_UNSUPPORTED;
+ }
+
+ if(Extend) {
+/*
+ Count = 2;
+ Size[0] = (UINTN)MessageSize;
+ Chunks[0] = (UINT8*)Message;
+*/
+ return EFI_UNSUPPORTED;
+ } else {
+ Count = 1;
+ Size[0] = (UINTN)MessageSize;
+ Chunks[0] = (UINT8*)Message;
+ }
+
+ Status = AmiDigitalSignatureProtocol->Hash(AmiDigitalSignatureProtocol,
+ HashAlgorithm,
+ Count,
+ Chunks,
+ Size,
+ Buffer);
+
+ return Status;
+}
+
+
+EFI_STATUS HashServiceEntryPoint(
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+)
+{
+ EFI_STATUS Status;
+ EFI_HANDLE Handle = NULL;
+
+ InitAmiLib(ImageHandle,SystemTable);
+
+ Status = pBS->LocateProtocol(&AmiDigitalSignatureProtocolGuid, NULL, &AmiDigitalSignatureProtocol);
+ if(EFI_ERROR(Status))
+ return Status;
+
+ DListInit(&HashChildList);
+
+ HashServiceDriverBindingProtocol.ImageHandle = ImageHandle;
+ HashServiceDriverBindingProtocol.DriverBindingHandle = NULL;
+
+ Status = pBS->InstallMultipleProtocolInterfaces(
+ &HashServiceDriverBindingProtocol.DriverBindingHandle,
+ &gEfiDriverBindingProtocolGuid,
+ &HashServiceDriverBindingProtocol,
+ &gEfiHashServiceBindingProtocolGuid,
+ &HashServiceBindingProtocol,
+ NULL);
+
+
+ return Status;
+}
+
+EFI_STATUS HashServiceCreateChild (
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,
+ IN OUT EFI_HANDLE *ChildHandle
+)
+{
+ EFI_STATUS Status;
+ HASH_CHILD_LINK *NewLink;
+
+ Status = pBS->AllocatePool(EfiBootServicesData, sizeof(HASH_CHILD_LINK), &NewLink);
+ if(EFI_ERROR(Status))
+ return Status;
+
+ NewLink->Handle = *ChildHandle;
+ NewLink->Protocol.GetHashSize = HsGetHashSize;
+ NewLink->Protocol.Hash = HsHash;
+
+ DListAdd(&HashChildList, (DLINK *)NewLink);
+
+ Status = pBS->InstallMultipleProtocolInterfaces(&(NewLink->Handle), &gEfiHashProtocolGuid, &(NewLink->Protocol), NULL);
+ if(!EFI_ERROR(Status) && *ChildHandle == NULL)
+ *ChildHandle = NewLink->Handle;
+
+ return Status;
+}
+
+EFI_STATUS HashServiceDestroyChild (
+ IN EFI_SERVICE_BINDING_PROTOCOL*This,
+ IN EFI_HANDLE ChildHandle
+)
+{
+ EFI_STATUS Status;
+ EFI_HASH_PROTOCOL *Instance;
+ VOID *Start;
+
+ Status = pBS->HandleProtocol(ChildHandle, &gEfiHashProtocolGuid, &Instance);
+ if(EFI_ERROR(Status))
+ return Status;
+
+ Status = pBS->UninstallMultipleProtocolInterfaces(ChildHandle, &gEfiHashProtocolGuid, Instance);
+ if(!EFI_ERROR(Status)) {
+ Start = OUTTER(Instance, Protocol, HASH_CHILD_LINK);
+ DListDelete(&HashChildList, (DLINK *)Start);
+ pBS->FreePool(Start);
+ }
+
+ return Status;
+}
+
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (C)Copyright 1985-2012, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//**********************************************************************
+//********************************************************************** \ No newline at end of file
diff --git a/Core/EM/HashService/HashService.cif b/Core/EM/HashService/HashService.cif
new file mode 100644
index 0000000..101f7af
--- /dev/null
+++ b/Core/EM/HashService/HashService.cif
@@ -0,0 +1,10 @@
+<component>
+ name = "HashService"
+ category = ModulePart
+ LocalRoot = "Core\EM\HashService"
+ RefName = "HashService"
+[files]
+"HashService.sdl"
+"HashService.mak"
+"HashService.c"
+<endComponent>
diff --git a/Core/EM/HashService/HashService.mak b/Core/EM/HashService/HashService.mak
new file mode 100644
index 0000000..1b747a1
--- /dev/null
+++ b/Core/EM/HashService/HashService.mak
@@ -0,0 +1,65 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#**********************************************************************
+
+#**********************************************************************
+# $Header: /Alaska/SOURCE/Core/Modules/HashService/HashService.mak 1 5/24/12 3:33p Artems $
+#
+# $Revision: 1 $
+#
+# $Date: 5/24/12 3:33p $
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Core/Modules/HashService/HashService.mak $
+#
+# 1 5/24/12 3:33p Artems
+# [TAG] EIP N/A
+# [Category] New Feature
+# [Description] Added HashService protocol infrastructure
+# [Files] HashService.cif
+# HashService.sdl
+# HashService.mak
+# HashService.c
+#
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: HashService.mak
+#
+# Description: Make file to create Hash Service Binding Driver
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+
+CORE_DXEBin : $(BUILD_DIR)\HashService.obj
+
+$(BUILD_DIR)\HashService.obj : $(HashService_DIR)\HashService.c
+
+{$(HashService_DIR)}.c{$(BUILD_DIR)}.obj::
+ $(CC) $(CFLAGS) /Fo$(BUILD_DIR)\ $<
+
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#**********************************************************************
diff --git a/Core/EM/HashService/HashService.sdl b/Core/EM/HashService/HashService.sdl
new file mode 100644
index 0000000..9b193bd
--- /dev/null
+++ b/Core/EM/HashService/HashService.sdl
@@ -0,0 +1,28 @@
+TOKEN
+ Name = "HashService_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable hash service support in Project"
+ TokenType = Boolean
+ TargetMAK = Yes
+ TargetH = Yes
+ Master = Yes
+ Token = "CryptoAPI_SUPPORT" "=" "1"
+End
+
+PATH
+ Name = "HashService_DIR"
+ Help = "Path to PlatformToDriver Module in Project"
+End
+
+MODULE
+ Help = "Includes HashService.mak to Project"
+ File = "HashService.mak"
+End
+
+ELINK
+ Name = "HashServiceEntryPoint,"
+ Parent = "BdsEntryInitialize"
+ InvokeOrder = AfterParent
+End
+
+