]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Include/Library/HashLib.h
SecurityPkg: Fix typo 'Ihis' with 'This' in codes
[mirror_edk2.git] / SecurityPkg / Include / Library / HashLib.h
CommitLineData
c1d93242 1/** @file\r
07309c3d 2 This library abstract TPM2 hash calculation.\r
c1d93242
JY
3 The platform can choose multiply hash, while caller just need invoke these API.\r
4 Then all hash value will be returned and/or extended.\r
5\r
07309c3d 6Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved. <BR>\r
c1d93242
JY
7This program and the accompanying materials\r
8are licensed and made available under the terms and conditions of the BSD License\r
9which accompanies this distribution. The full text of the license may be found at\r
10http://opensource.org/licenses/bsd-license.php\r
11\r
12THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
13WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
14\r
15**/\r
16\r
17#ifndef _HASH_LIB_H_\r
18#define _HASH_LIB_H_\r
19\r
20#include <Uefi.h>\r
21#include <Protocol/Hash.h>\r
22\r
23typedef UINTN HASH_HANDLE;\r
24\r
25/**\r
26 Start hash sequence.\r
27\r
28 @param HashHandle Hash handle.\r
29\r
30 @retval EFI_SUCCESS Hash sequence start and HandleHandle returned.\r
31 @retval EFI_OUT_OF_RESOURCES No enough resource to start hash.\r
32**/\r
33EFI_STATUS\r
34EFIAPI\r
35HashStart (\r
36 OUT HASH_HANDLE *HashHandle\r
37 );\r
38\r
39/**\r
40 Update hash sequence data.\r
41\r
42 @param HashHandle Hash handle.\r
43 @param DataToHash Data to be hashed.\r
44 @param DataToHashLen Data size.\r
45\r
46 @retval EFI_SUCCESS Hash sequence updated.\r
47**/\r
48EFI_STATUS\r
49EFIAPI\r
50HashUpdate (\r
51 IN HASH_HANDLE HashHandle,\r
52 IN VOID *DataToHash,\r
53 IN UINTN DataToHashLen\r
54 );\r
55\r
56/**\r
57 Hash sequence complete and extend to PCR.\r
58\r
59 @param HashHandle Hash handle.\r
60 @param PcrIndex PCR to be extended.\r
61 @param DataToHash Data to be hashed.\r
62 @param DataToHashLen Data size.\r
63 @param DigestList Digest list.\r
64\r
65 @retval EFI_SUCCESS Hash sequence complete and DigestList is returned.\r
66**/\r
67EFI_STATUS\r
68EFIAPI\r
69HashCompleteAndExtend (\r
70 IN HASH_HANDLE HashHandle,\r
71 IN TPMI_DH_PCR PcrIndex,\r
72 IN VOID *DataToHash,\r
73 IN UINTN DataToHashLen,\r
74 OUT TPML_DIGEST_VALUES *DigestList\r
75 );\r
76\r
77/**\r
78 Hash data and extend to PCR.\r
79\r
80 @param PcrIndex PCR to be extended.\r
81 @param DataToHash Data to be hashed.\r
82 @param DataToHashLen Data size.\r
83 @param DigestList Digest list.\r
84\r
85 @retval EFI_SUCCESS Hash data and DigestList is returned.\r
86**/\r
87EFI_STATUS\r
88EFIAPI\r
89HashAndExtend (\r
90 IN TPMI_DH_PCR PcrIndex,\r
91 IN VOID *DataToHash,\r
92 IN UINTN DataToHashLen,\r
93 OUT TPML_DIGEST_VALUES *DigestList\r
94 );\r
95\r
96/**\r
97 Start hash sequence.\r
98\r
99 @param HashHandle Hash handle.\r
100\r
101 @retval EFI_SUCCESS Hash sequence start and HandleHandle returned.\r
102 @retval EFI_OUT_OF_RESOURCES No enough resource to start hash.\r
103**/\r
104typedef\r
105EFI_STATUS\r
106(EFIAPI *HASH_INIT) (\r
107 OUT HASH_HANDLE *HashHandle\r
108 );\r
109\r
110/**\r
111 Update hash sequence data.\r
112\r
113 @param HashHandle Hash handle.\r
114 @param DataToHash Data to be hashed.\r
115 @param DataToHashLen Data size.\r
116\r
117 @retval EFI_SUCCESS Hash sequence updated.\r
118**/\r
119typedef\r
120EFI_STATUS\r
121(EFIAPI *HASH_UPDATE) (\r
122 IN HASH_HANDLE HashHandle,\r
123 IN VOID *DataToHash,\r
124 IN UINTN DataToHashLen\r
125 );\r
126\r
127/**\r
128 Complete hash sequence complete.\r
129\r
130 @param HashHandle Hash handle.\r
131 @param DigestList Digest list.\r
132\r
133 @retval EFI_SUCCESS Hash sequence complete and DigestList is returned.\r
134**/\r
135typedef\r
136EFI_STATUS\r
137(EFIAPI *HASH_FINAL) (\r
138 IN HASH_HANDLE HashHandle,\r
139 OUT TPML_DIGEST_VALUES *DigestList\r
140 );\r
141\r
142#define HASH_ALGORITHM_SHA1_GUID EFI_HASH_ALGORITHM_SHA1_GUID\r
143#define HASH_ALGORITHM_SHA256_GUID EFI_HASH_ALGORITHM_SHA256_GUID\r
144#define HASH_ALGORITHM_SHA384_GUID EFI_HASH_ALGORITHM_SHA384_GUID\r
145#define HASH_ALGORITHM_SHA512_GUID EFI_HASH_ALGORITHM_SHA512_GUID\r
146\r
147typedef struct {\r
148 EFI_GUID HashGuid;\r
149 HASH_INIT HashInit;\r
150 HASH_UPDATE HashUpdate;\r
151 HASH_FINAL HashFinal;\r
152} HASH_INTERFACE;\r
153\r
154/**\r
155 This service register Hash.\r
156\r
157 @param HashInterface Hash interface\r
158\r
159 @retval EFI_SUCCESS This hash interface is registered successfully.\r
160 @retval EFI_UNSUPPORTED System does not support register this interface.\r
161 @retval EFI_ALREADY_STARTED System already register this interface.\r
162**/\r
163EFI_STATUS\r
164EFIAPI\r
165RegisterHashInterfaceLib (\r
166 IN HASH_INTERFACE *HashInterface\r
167 );\r
168\r
169#endif\r