]> git.proxmox.com Git - mirror_edk2.git/blame - CryptoPkg/Library/BaseHashApiLib/BaseHashApiLib.c
CryptoPkg: Sha1 functions causing build errors
[mirror_edk2.git] / CryptoPkg / Library / BaseHashApiLib / BaseHashApiLib.c
CommitLineData
3feea54e
AS
1/** @file\r
2 Unified Hash API Implementation\r
3\r
4 This file implements the Unified Hash API.\r
5\r
6 This API, when called, will calculate the Hash using the\r
7 hashing algorithm specified by PcdHashApiLibPolicy.\r
8\r
50bee4cc 9 Copyright (c) 2020-2022, Intel Corporation. All rights reserved.<BR>\r
3feea54e
AS
10 SPDX-License-Identifier: BSD-2-Clause-Patent\r
11\r
12**/\r
13\r
14#include <Base.h>\r
c70bdf9d 15#include <IndustryStandard/Tpm20.h>\r
3feea54e
AS
16#include <Library/BaseLib.h>\r
17#include <Library/BaseMemoryLib.h>\r
18#include <Library/MemoryAllocationLib.h>\r
19#include <Library/BaseCryptLib.h>\r
20#include <Library/DebugLib.h>\r
21#include <Library/PcdLib.h>\r
22#include <Library/HashApiLib.h>\r
23\r
24/**\r
25 Retrieves the size, in bytes, of the context buffer required for hash operations.\r
26\r
27 @return The size, in bytes, of the context buffer required for hash operations.\r
28**/\r
29UINTN\r
30EFIAPI\r
31HashApiGetContextSize (\r
32 VOID\r
33 )\r
34{\r
c70bdf9d 35 switch (PcdGet32 (PcdHashApiLibPolicy)) {\r
50bee4cc 36 #ifndef DISABLE_SHA1_DEPRECATED_INTERFACES\r
c70bdf9d 37 case HASH_ALG_SHA1:\r
3feea54e
AS
38 return Sha1GetContextSize ();\r
39 break;\r
50bee4cc 40 #endif\r
3feea54e 41\r
c70bdf9d 42 case HASH_ALG_SHA256:\r
3feea54e
AS
43 return Sha256GetContextSize ();\r
44 break;\r
45\r
c70bdf9d 46 case HASH_ALG_SHA384:\r
3feea54e
AS
47 return Sha384GetContextSize ();\r
48 break;\r
49\r
c70bdf9d 50 case HASH_ALG_SHA512:\r
3feea54e
AS
51 return Sha512GetContextSize ();\r
52 break;\r
53\r
c70bdf9d 54 case HASH_ALG_SM3_256:\r
3feea54e
AS
55 return Sm3GetContextSize ();\r
56 break;\r
57\r
58 default:\r
59 ASSERT (FALSE);\r
60 return 0;\r
61 break;\r
62 }\r
63}\r
64\r
65/**\r
66 Init hash sequence.\r
67\r
68 @param[out] HashContext Hash context.\r
69\r
70 @retval TRUE Hash start and HashHandle returned.\r
71 @retval FALSE Hash Init unsuccessful.\r
72**/\r
73BOOLEAN\r
74EFIAPI\r
75HashApiInit (\r
76 OUT HASH_API_CONTEXT HashContext\r
77 )\r
78{\r
c70bdf9d 79 switch (PcdGet32 (PcdHashApiLibPolicy)) {\r
50bee4cc 80 #ifndef DISABLE_SHA1_DEPRECATED_INTERFACES\r
c70bdf9d 81 case HASH_ALG_SHA1:\r
3feea54e
AS
82 return Sha1Init (HashContext);\r
83 break;\r
50bee4cc 84 #endif\r
3feea54e 85\r
c70bdf9d 86 case HASH_ALG_SHA256:\r
3feea54e
AS
87 return Sha256Init (HashContext);\r
88 break;\r
89\r
c70bdf9d 90 case HASH_ALG_SHA384:\r
3feea54e
AS
91 return Sha384Init (HashContext);\r
92 break;\r
93\r
c70bdf9d 94 case HASH_ALG_SHA512:\r
3feea54e
AS
95 return Sha512Init (HashContext);\r
96 break;\r
97\r
c70bdf9d 98 case HASH_ALG_SM3_256:\r
3feea54e
AS
99 return Sm3Init (HashContext);\r
100 break;\r
101\r
102 default:\r
103 ASSERT (FALSE);\r
104 return FALSE;\r
105 break;\r
106 }\r
107}\r
108\r
109/**\r
110 Makes a copy of an existing hash context.\r
111\r
112 @param[in] HashContext Hash context.\r
113 @param[out] NewHashContext New copy of hash context.\r
114\r
115 @retval TRUE Hash context copy succeeded.\r
116 @retval FALSE Hash context copy failed.\r
117**/\r
118BOOLEAN\r
119EFIAPI\r
120HashApiDuplicate (\r
121 IN HASH_API_CONTEXT HashContext,\r
122 OUT HASH_API_CONTEXT NewHashContext\r
123 )\r
124{\r
c70bdf9d 125 switch (PcdGet32 (PcdHashApiLibPolicy)) {\r
50bee4cc 126 #ifndef DISABLE_SHA1_DEPRECATED_INTERFACES\r
c70bdf9d 127 case HASH_ALG_SHA1:\r
3feea54e
AS
128 return Sha1Duplicate (HashContext, NewHashContext);\r
129 break;\r
50bee4cc 130 #endif\r
3feea54e 131\r
c70bdf9d 132 case HASH_ALG_SHA256:\r
3feea54e
AS
133 return Sha256Duplicate (HashContext, NewHashContext);\r
134 break;\r
135\r
c70bdf9d 136 case HASH_ALG_SHA384:\r
3feea54e
AS
137 return Sha384Duplicate (HashContext, NewHashContext);\r
138 break;\r
139\r
c70bdf9d 140 case HASH_ALG_SHA512:\r
3feea54e
AS
141 return Sha512Duplicate (HashContext, NewHashContext);\r
142 break;\r
143\r
c70bdf9d 144 case HASH_ALG_SM3_256:\r
3feea54e
AS
145 return Sm3Duplicate (HashContext, NewHashContext);\r
146 break;\r
147\r
148 default:\r
149 ASSERT (FALSE);\r
150 return FALSE;\r
151 break;\r
152 }\r
153}\r
154\r
155/**\r
156 Update hash data.\r
157\r
158 @param[in] HashContext Hash context.\r
159 @param[in] DataToHash Data to be hashed.\r
160 @param[in] DataToHashLen Data size.\r
161\r
162 @retval TRUE Hash updated.\r
163 @retval FALSE Hash updated unsuccessful.\r
164**/\r
165BOOLEAN\r
166EFIAPI\r
167HashApiUpdate (\r
168 IN HASH_API_CONTEXT HashContext,\r
169 IN VOID *DataToHash,\r
170 IN UINTN DataToHashLen\r
171 )\r
172{\r
c70bdf9d 173 switch (PcdGet32 (PcdHashApiLibPolicy)) {\r
50bee4cc 174 #ifndef DISABLE_SHA1_DEPRECATED_INTERFACES\r
c70bdf9d 175 case HASH_ALG_SHA1:\r
3feea54e
AS
176 return Sha1Update (HashContext, DataToHash, DataToHashLen);\r
177 break;\r
50bee4cc 178 #endif\r
3feea54e 179\r
c70bdf9d 180 case HASH_ALG_SHA256:\r
3feea54e
AS
181 return Sha256Update (HashContext, DataToHash, DataToHashLen);\r
182 break;\r
183\r
c70bdf9d 184 case HASH_ALG_SHA384:\r
3feea54e
AS
185 return Sha384Update (HashContext, DataToHash, DataToHashLen);\r
186 break;\r
187\r
c70bdf9d 188 case HASH_ALG_SHA512:\r
3feea54e
AS
189 return Sha512Update (HashContext, DataToHash, DataToHashLen);\r
190 break;\r
191\r
c70bdf9d 192 case HASH_ALG_SM3_256:\r
3feea54e
AS
193 return Sm3Update (HashContext, DataToHash, DataToHashLen);\r
194 break;\r
195\r
196 default:\r
197 ASSERT (FALSE);\r
198 return FALSE;\r
199 break;\r
200 }\r
201}\r
202\r
203/**\r
204 Hash complete.\r
205\r
206 @param[in] HashContext Hash context.\r
207 @param[out] Digest Hash Digest.\r
208\r
209 @retval TRUE Hash complete and Digest is returned.\r
210 @retval FALSE Hash complete unsuccessful.\r
211**/\r
212BOOLEAN\r
213EFIAPI\r
214HashApiFinal (\r
215 IN HASH_API_CONTEXT HashContext,\r
216 OUT UINT8 *Digest\r
217 )\r
218{\r
c70bdf9d 219 switch (PcdGet32 (PcdHashApiLibPolicy)) {\r
50bee4cc 220 #ifndef DISABLE_SHA1_DEPRECATED_INTERFACES\r
c70bdf9d 221 case HASH_ALG_SHA1:\r
3feea54e
AS
222 return Sha1Final (HashContext, Digest);\r
223 break;\r
50bee4cc 224 #endif\r
3feea54e 225\r
c70bdf9d 226 case HASH_ALG_SHA256:\r
3feea54e
AS
227 return Sha256Final (HashContext, Digest);\r
228 break;\r
229\r
c70bdf9d 230 case HASH_ALG_SHA384:\r
3feea54e
AS
231 return Sha384Final (HashContext, Digest);\r
232 break;\r
233\r
c70bdf9d 234 case HASH_ALG_SHA512:\r
3feea54e
AS
235 return Sha512Final (HashContext, Digest);\r
236 break;\r
237\r
c70bdf9d 238 case HASH_ALG_SM3_256:\r
3feea54e
AS
239 return Sm3Final (HashContext, Digest);\r
240 break;\r
241\r
242 default:\r
243 ASSERT (FALSE);\r
244 return FALSE;\r
245 break;\r
246 }\r
247}\r
248\r
249/**\r
250 Computes hash message digest of a input data buffer.\r
251\r
252 @param[in] DataToHash Data to be hashed.\r
253 @param[in] DataToHashLen Data size.\r
254 @param[out] Digest Hash Digest.\r
255\r
256 @retval TRUE Hash digest computation succeeded.\r
257 @retval FALSE Hash digest computation failed.\r
258**/\r
259BOOLEAN\r
260EFIAPI\r
261HashApiHashAll (\r
262 IN CONST VOID *DataToHash,\r
263 IN UINTN DataToHashLen,\r
264 OUT UINT8 *Digest\r
265 )\r
266{\r
c70bdf9d 267 switch (PcdGet32 (PcdHashApiLibPolicy)) {\r
50bee4cc 268 #ifndef DISABLE_SHA1_DEPRECATED_INTERFACES\r
c70bdf9d 269 case HASH_ALG_SHA1:\r
3feea54e
AS
270 return Sha1HashAll (DataToHash, DataToHashLen, Digest);\r
271 break;\r
50bee4cc 272 #endif\r
3feea54e 273\r
c70bdf9d 274 case HASH_ALG_SHA256:\r
3feea54e
AS
275 return Sha256HashAll (DataToHash, DataToHashLen, Digest);\r
276 break;\r
277\r
c70bdf9d 278 case HASH_ALG_SHA384:\r
3feea54e
AS
279 return Sha384HashAll (DataToHash, DataToHashLen, Digest);\r
280 break;\r
281\r
c70bdf9d 282 case HASH_ALG_SHA512:\r
3feea54e
AS
283 return Sha512HashAll (DataToHash, DataToHashLen, Digest);\r
284 break;\r
285\r
c70bdf9d 286 case HASH_ALG_SM3_256:\r
3feea54e
AS
287 return Sm3HashAll (DataToHash, DataToHashLen, Digest);\r
288 break;\r
289\r
290 default:\r
291 ASSERT (FALSE);\r
292 return FALSE;\r
293 break;\r
294 }\r
295}\r