2 Unified Hash API Implementation
4 This file implements the Unified Hash API.
6 This API, when called, will calculate the Hash using the
7 hashing algorithm specified by PcdHashApiLibPolicy.
9 Copyright (c) 2020-2022, Intel Corporation. All rights reserved.<BR>
10 SPDX-License-Identifier: BSD-2-Clause-Patent
15 #include <IndustryStandard/Tpm20.h>
16 #include <Library/BaseLib.h>
17 #include <Library/BaseMemoryLib.h>
18 #include <Library/MemoryAllocationLib.h>
19 #include <Library/BaseCryptLib.h>
20 #include <Library/DebugLib.h>
21 #include <Library/PcdLib.h>
22 #include <Library/HashApiLib.h>
25 Retrieves the size, in bytes, of the context buffer required for hash operations.
27 @return The size, in bytes, of the context buffer required for hash operations.
31 HashApiGetContextSize (
35 switch (PcdGet32 (PcdHashApiLibPolicy
)) {
36 #ifndef DISABLE_SHA1_DEPRECATED_INTERFACES
38 return Sha1GetContextSize ();
43 return Sha256GetContextSize ();
47 return Sha384GetContextSize ();
51 return Sha512GetContextSize ();
54 case HASH_ALG_SM3_256
:
55 return Sm3GetContextSize ();
68 @param[out] HashContext Hash context.
70 @retval TRUE Hash start and HashHandle returned.
71 @retval FALSE Hash Init unsuccessful.
76 OUT HASH_API_CONTEXT HashContext
79 switch (PcdGet32 (PcdHashApiLibPolicy
)) {
80 #ifndef DISABLE_SHA1_DEPRECATED_INTERFACES
82 return Sha1Init (HashContext
);
87 return Sha256Init (HashContext
);
91 return Sha384Init (HashContext
);
95 return Sha512Init (HashContext
);
98 case HASH_ALG_SM3_256
:
99 return Sm3Init (HashContext
);
110 Makes a copy of an existing hash context.
112 @param[in] HashContext Hash context.
113 @param[out] NewHashContext New copy of hash context.
115 @retval TRUE Hash context copy succeeded.
116 @retval FALSE Hash context copy failed.
121 IN HASH_API_CONTEXT HashContext
,
122 OUT HASH_API_CONTEXT NewHashContext
125 switch (PcdGet32 (PcdHashApiLibPolicy
)) {
126 #ifndef DISABLE_SHA1_DEPRECATED_INTERFACES
128 return Sha1Duplicate (HashContext
, NewHashContext
);
132 case HASH_ALG_SHA256
:
133 return Sha256Duplicate (HashContext
, NewHashContext
);
136 case HASH_ALG_SHA384
:
137 return Sha384Duplicate (HashContext
, NewHashContext
);
140 case HASH_ALG_SHA512
:
141 return Sha512Duplicate (HashContext
, NewHashContext
);
144 case HASH_ALG_SM3_256
:
145 return Sm3Duplicate (HashContext
, NewHashContext
);
158 @param[in] HashContext Hash context.
159 @param[in] DataToHash Data to be hashed.
160 @param[in] DataToHashLen Data size.
162 @retval TRUE Hash updated.
163 @retval FALSE Hash updated unsuccessful.
168 IN HASH_API_CONTEXT HashContext
,
170 IN UINTN DataToHashLen
173 switch (PcdGet32 (PcdHashApiLibPolicy
)) {
174 #ifndef DISABLE_SHA1_DEPRECATED_INTERFACES
176 return Sha1Update (HashContext
, DataToHash
, DataToHashLen
);
180 case HASH_ALG_SHA256
:
181 return Sha256Update (HashContext
, DataToHash
, DataToHashLen
);
184 case HASH_ALG_SHA384
:
185 return Sha384Update (HashContext
, DataToHash
, DataToHashLen
);
188 case HASH_ALG_SHA512
:
189 return Sha512Update (HashContext
, DataToHash
, DataToHashLen
);
192 case HASH_ALG_SM3_256
:
193 return Sm3Update (HashContext
, DataToHash
, DataToHashLen
);
206 @param[in] HashContext Hash context.
207 @param[out] Digest Hash Digest.
209 @retval TRUE Hash complete and Digest is returned.
210 @retval FALSE Hash complete unsuccessful.
215 IN HASH_API_CONTEXT HashContext
,
219 switch (PcdGet32 (PcdHashApiLibPolicy
)) {
220 #ifndef DISABLE_SHA1_DEPRECATED_INTERFACES
222 return Sha1Final (HashContext
, Digest
);
226 case HASH_ALG_SHA256
:
227 return Sha256Final (HashContext
, Digest
);
230 case HASH_ALG_SHA384
:
231 return Sha384Final (HashContext
, Digest
);
234 case HASH_ALG_SHA512
:
235 return Sha512Final (HashContext
, Digest
);
238 case HASH_ALG_SM3_256
:
239 return Sm3Final (HashContext
, Digest
);
250 Computes hash message digest of a input data buffer.
252 @param[in] DataToHash Data to be hashed.
253 @param[in] DataToHashLen Data size.
254 @param[out] Digest Hash Digest.
256 @retval TRUE Hash digest computation succeeded.
257 @retval FALSE Hash digest computation failed.
262 IN CONST VOID
*DataToHash
,
263 IN UINTN DataToHashLen
,
267 switch (PcdGet32 (PcdHashApiLibPolicy
)) {
268 #ifndef DISABLE_SHA1_DEPRECATED_INTERFACES
270 return Sha1HashAll (DataToHash
, DataToHashLen
, Digest
);
274 case HASH_ALG_SHA256
:
275 return Sha256HashAll (DataToHash
, DataToHashLen
, Digest
);
278 case HASH_ALG_SHA384
:
279 return Sha384HashAll (DataToHash
, DataToHashLen
, Digest
);
282 case HASH_ALG_SHA512
:
283 return Sha512HashAll (DataToHash
, DataToHashLen
, Digest
);
286 case HASH_ALG_SM3_256
:
287 return Sm3HashAll (DataToHash
, DataToHashLen
, Digest
);