]> git.proxmox.com Git - mirror_edk2.git/blob - SecurityPkg/Hash2DxeCrypto/Driver.h
Add restriction that HashFinal() must be after at least one HashUpdate().
[mirror_edk2.git] / SecurityPkg / Hash2DxeCrypto / Driver.h
1 /** @file
2 This is definition for service binding for Hash driver.
3
4 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials are licensed and made available under
6 the terms and conditions of the BSD License that accompanies this distribution.
7 The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #ifndef _HASH2_DRIVER_H_
16 #define _HASH2_DRIVER_H_
17
18 #include <Uefi.h>
19
20 #include <Protocol/ServiceBinding.h>
21 #include <Protocol/Hash2.h>
22
23 #include <Library/BaseLib.h>
24 #include <Library/BaseMemoryLib.h>
25 #include <Library/DebugLib.h>
26 #include <Library/MemoryAllocationLib.h>
27 #include <Library/UefiBootServicesTableLib.h>
28 #include <Library/UefiRuntimeServicesTableLib.h>
29 #include <Library/DevicePathLib.h>
30 #include <Library/UefiLib.h>
31
32 #define HASH2_SERVICE_DATA_SIGNATURE SIGNATURE_32 ('H', 'S', '2', 'S')
33
34 typedef struct {
35 UINT32 Signature;
36 EFI_HANDLE ServiceHandle;
37 EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;
38
39 LIST_ENTRY ChildrenList;
40 } HASH2_SERVICE_DATA;
41
42 #define HASH2_SERVICE_DATA_FROM_THIS(a) \
43 CR ( \
44 (a), \
45 HASH2_SERVICE_DATA, \
46 ServiceBinding, \
47 HASH2_SERVICE_DATA_SIGNATURE \
48 )
49
50 #define HASH2_INSTANCE_DATA_SIGNATURE SIGNATURE_32 ('H', 's', '2', 'I')
51
52 typedef struct {
53 UINT32 Signature;
54 HASH2_SERVICE_DATA *Hash2ServiceData;
55 EFI_HANDLE Handle;
56 LIST_ENTRY InstEntry;
57 EFI_HASH2_PROTOCOL Hash2Protocol;
58 VOID *HashContext;
59 VOID *HashInfoContext;
60 BOOLEAN Updated;
61 } HASH2_INSTANCE_DATA;
62
63 #define HASH2_INSTANCE_DATA_FROM_THIS(a) \
64 CR ( \
65 (a), \
66 HASH2_INSTANCE_DATA, \
67 Hash2Protocol, \
68 HASH2_INSTANCE_DATA_SIGNATURE \
69 )
70
71 #define HASH2_INSTANCE_DATA_FROM_LINK(a) \
72 CR ( \
73 (a), \
74 HASH2_INSTANCE_DATA, \
75 InstEntry, \
76 HASH2_INSTANCE_DATA_SIGNATURE \
77 )
78
79 /**
80 Creates a child handle with a set of I/O services.
81
82 @param[in] This Protocol instance pointer.
83 @param[in, out] ChildHandle Pointer to the handle of the child to create. If
84 it is NULL, then a new handle is created. If
85 it is not NULL, then the I/O services are added
86 to the existing child handle.
87
88 @retval EFI_SUCCES The protocol was added to ChildHandle.
89 @retval EFI_INVALID_PARAMETER ChildHandle is NULL.
90 @retval EFI_OUT_OF_RESOURCES There are not enough resources availabe to
91 create the child.
92 @retval Others The child handle was not created.
93
94 **/
95 EFI_STATUS
96 EFIAPI
97 Hash2ServiceBindingCreateChild (
98 IN EFI_SERVICE_BINDING_PROTOCOL *This,
99 IN OUT EFI_HANDLE *ChildHandle
100 );
101
102 /**
103 Destroys a child handle with a set of I/O services.
104
105 The DestroyChild() function does the opposite of CreateChild(). It removes a
106 protocol that was installed by CreateChild() from ChildHandle. If the removed
107 protocol is the last protocol on ChildHandle, then ChildHandle is destroyed.
108
109 @param[in] This Pointer to the EFI_SERVICE_BINDING_PROTOCOL
110 instance.
111 @param[in] ChildHandle Handle of the child to destroy.
112
113 @retval EFI_SUCCES The protocol was removed from ChildHandle.
114 @retval EFI_UNSUPPORTED ChildHandle does not support the protocol that
115 is being removed.
116 @retval EFI_INVALID_PARAMETER ChildHandle is NULL.
117 @retval EFI_ACCESS_DENIED The protocol could not be removed from the
118 ChildHandle because its services are being
119 used.
120 @retval Others The child handle was not destroyed.
121
122 **/
123 EFI_STATUS
124 EFIAPI
125 Hash2ServiceBindingDestroyChild (
126 IN EFI_SERVICE_BINDING_PROTOCOL *This,
127 IN EFI_HANDLE ChildHandle
128 );
129
130 extern EFI_HASH2_PROTOCOL mHash2Protocol;
131
132 #endif