]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Include/Library/HashLib.h
SecurityPkg: add RpmcLib and VariableKeyLib public headers
[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
edf6ef24
ID
140#define HASH_ALGORITHM_SM3_256_GUID \\r
141 { \\r
142 0x251C7818, 0x0DBF, 0xE619, { 0x7F, 0xC2, 0xD6, 0xAC, 0x43, 0x42, 0x7D, 0xA3 } \\r
143 }\r
c1d93242
JY
144\r
145typedef struct {\r
146 EFI_GUID HashGuid;\r
147 HASH_INIT HashInit;\r
148 HASH_UPDATE HashUpdate;\r
149 HASH_FINAL HashFinal;\r
150} HASH_INTERFACE;\r
151\r
152/**\r
153 This service register Hash.\r
154\r
155 @param HashInterface Hash interface\r
156\r
157 @retval EFI_SUCCESS This hash interface is registered successfully.\r
158 @retval EFI_UNSUPPORTED System does not support register this interface.\r
159 @retval EFI_ALREADY_STARTED System already register this interface.\r
160**/\r
161EFI_STATUS\r
162EFIAPI\r
163RegisterHashInterfaceLib (\r
164 IN HASH_INTERFACE *HashInterface\r
165 );\r
166\r
167#endif\r