]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Include/Library/HashLib.h
SecurityPkg: Replace BSD License with BSD+Patent License
[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
289b714b 7SPDX-License-Identifier: BSD-2-Clause-Patent\r
c1d93242
JY
8\r
9**/\r
10\r
11#ifndef _HASH_LIB_H_\r
12#define _HASH_LIB_H_\r
13\r
14#include <Uefi.h>\r
15#include <Protocol/Hash.h>\r
8d7aef3d 16#include <IndustryStandard/Tpm20.h>\r
c1d93242
JY
17typedef UINTN HASH_HANDLE;\r
18\r
19/**\r
20 Start hash sequence.\r
21\r
22 @param HashHandle Hash handle.\r
23\r
24 @retval EFI_SUCCESS Hash sequence start and HandleHandle returned.\r
25 @retval EFI_OUT_OF_RESOURCES No enough resource to start hash.\r
26**/\r
27EFI_STATUS\r
28EFIAPI\r
29HashStart (\r
30 OUT HASH_HANDLE *HashHandle\r
31 );\r
32\r
33/**\r
34 Update hash sequence data.\r
35\r
36 @param HashHandle Hash handle.\r
37 @param DataToHash Data to be hashed.\r
38 @param DataToHashLen Data size.\r
39\r
40 @retval EFI_SUCCESS Hash sequence updated.\r
41**/\r
42EFI_STATUS\r
43EFIAPI\r
44HashUpdate (\r
45 IN HASH_HANDLE HashHandle,\r
46 IN VOID *DataToHash,\r
47 IN UINTN DataToHashLen\r
48 );\r
49\r
50/**\r
51 Hash sequence complete and extend to PCR.\r
52\r
53 @param HashHandle Hash handle.\r
54 @param PcrIndex PCR to be extended.\r
55 @param DataToHash Data to be hashed.\r
56 @param DataToHashLen Data size.\r
57 @param DigestList Digest list.\r
58\r
59 @retval EFI_SUCCESS Hash sequence complete and DigestList is returned.\r
60**/\r
61EFI_STATUS\r
62EFIAPI\r
63HashCompleteAndExtend (\r
64 IN HASH_HANDLE HashHandle,\r
65 IN TPMI_DH_PCR PcrIndex,\r
66 IN VOID *DataToHash,\r
67 IN UINTN DataToHashLen,\r
68 OUT TPML_DIGEST_VALUES *DigestList\r
69 );\r
70\r
71/**\r
72 Hash data and extend to PCR.\r
73\r
74 @param PcrIndex PCR to be extended.\r
75 @param DataToHash Data to be hashed.\r
76 @param DataToHashLen Data size.\r
77 @param DigestList Digest list.\r
78\r
79 @retval EFI_SUCCESS Hash data and DigestList is returned.\r
80**/\r
81EFI_STATUS\r
82EFIAPI\r
83HashAndExtend (\r
84 IN TPMI_DH_PCR PcrIndex,\r
85 IN VOID *DataToHash,\r
86 IN UINTN DataToHashLen,\r
87 OUT TPML_DIGEST_VALUES *DigestList\r
88 );\r
89\r
90/**\r
91 Start hash sequence.\r
92\r
93 @param HashHandle Hash handle.\r
94\r
95 @retval EFI_SUCCESS Hash sequence start and HandleHandle returned.\r
96 @retval EFI_OUT_OF_RESOURCES No enough resource to start hash.\r
97**/\r
98typedef\r
99EFI_STATUS\r
100(EFIAPI *HASH_INIT) (\r
101 OUT HASH_HANDLE *HashHandle\r
102 );\r
103\r
104/**\r
105 Update hash sequence data.\r
106\r
107 @param HashHandle Hash handle.\r
108 @param DataToHash Data to be hashed.\r
109 @param DataToHashLen Data size.\r
110\r
111 @retval EFI_SUCCESS Hash sequence updated.\r
112**/\r
113typedef\r
114EFI_STATUS\r
115(EFIAPI *HASH_UPDATE) (\r
116 IN HASH_HANDLE HashHandle,\r
117 IN VOID *DataToHash,\r
118 IN UINTN DataToHashLen\r
119 );\r
120\r
121/**\r
122 Complete hash sequence complete.\r
123\r
124 @param HashHandle Hash handle.\r
125 @param DigestList Digest list.\r
126\r
127 @retval EFI_SUCCESS Hash sequence complete and DigestList is returned.\r
128**/\r
129typedef\r
130EFI_STATUS\r
131(EFIAPI *HASH_FINAL) (\r
132 IN HASH_HANDLE HashHandle,\r
133 OUT TPML_DIGEST_VALUES *DigestList\r
134 );\r
135\r
136#define HASH_ALGORITHM_SHA1_GUID EFI_HASH_ALGORITHM_SHA1_GUID\r
137#define HASH_ALGORITHM_SHA256_GUID EFI_HASH_ALGORITHM_SHA256_GUID\r
138#define HASH_ALGORITHM_SHA384_GUID EFI_HASH_ALGORITHM_SHA384_GUID\r
139#define HASH_ALGORITHM_SHA512_GUID EFI_HASH_ALGORITHM_SHA512_GUID\r
140\r
141typedef struct {\r
142 EFI_GUID HashGuid;\r
143 HASH_INIT HashInit;\r
144 HASH_UPDATE HashUpdate;\r
145 HASH_FINAL HashFinal;\r
146} HASH_INTERFACE;\r
147\r
148/**\r
149 This service register Hash.\r
150\r
151 @param HashInterface Hash interface\r
152\r
153 @retval EFI_SUCCESS This hash interface is registered successfully.\r
154 @retval EFI_UNSUPPORTED System does not support register this interface.\r
155 @retval EFI_ALREADY_STARTED System already register this interface.\r
156**/\r
157EFI_STATUS\r
158EFIAPI\r
159RegisterHashInterfaceLib (\r
160 IN HASH_INTERFACE *HashInterface\r
161 );\r
162\r
163#endif\r