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, Intel Corporation. All rights reserved.<BR>
10 SPDX-License-Identifier: BSD-2-Clause-Patent
15 #include <Library/BaseLib.h>
16 #include <Library/BaseMemoryLib.h>
17 #include <Library/MemoryAllocationLib.h>
18 #include <Library/BaseCryptLib.h>
19 #include <Library/DebugLib.h>
20 #include <Library/PcdLib.h>
21 #include <Library/HashApiLib.h>
24 Retrieves the size, in bytes, of the context buffer required for hash operations.
26 @return The size, in bytes, of the context buffer required for hash operations.
30 HashApiGetContextSize (
34 switch (PcdGet8 (PcdHashApiLibPolicy
)) {
35 case HASH_API_ALGO_MD4
:
36 return Md4GetContextSize ();
39 case HASH_API_ALGO_MD5
:
40 return Md5GetContextSize ();
43 case HASH_API_ALGO_SHA1
:
44 return Sha1GetContextSize ();
47 case HASH_API_ALGO_SHA256
:
48 return Sha256GetContextSize ();
51 case HASH_API_ALGO_SHA384
:
52 return Sha384GetContextSize ();
55 case HASH_API_ALGO_SHA512
:
56 return Sha512GetContextSize ();
59 case HASH_API_ALGO_SM3_256
:
60 return Sm3GetContextSize ();
73 @param[out] HashContext Hash context.
75 @retval TRUE Hash start and HashHandle returned.
76 @retval FALSE Hash Init unsuccessful.
81 OUT HASH_API_CONTEXT HashContext
84 switch (PcdGet8 (PcdHashApiLibPolicy
)) {
85 case HASH_API_ALGO_MD4
:
86 return Md4Init (HashContext
);
89 case HASH_API_ALGO_MD5
:
90 return Md5Init (HashContext
);
93 case HASH_API_ALGO_SHA1
:
94 return Sha1Init (HashContext
);
97 case HASH_API_ALGO_SHA256
:
98 return Sha256Init (HashContext
);
101 case HASH_API_ALGO_SHA384
:
102 return Sha384Init (HashContext
);
105 case HASH_API_ALGO_SHA512
:
106 return Sha512Init (HashContext
);
109 case HASH_API_ALGO_SM3_256
:
110 return Sm3Init (HashContext
);
121 Makes a copy of an existing hash context.
123 @param[in] HashContext Hash context.
124 @param[out] NewHashContext New copy of hash context.
126 @retval TRUE Hash context copy succeeded.
127 @retval FALSE Hash context copy failed.
132 IN HASH_API_CONTEXT HashContext
,
133 OUT HASH_API_CONTEXT NewHashContext
136 switch (PcdGet8 (PcdHashApiLibPolicy
)) {
137 case HASH_API_ALGO_MD4
:
138 return Md4Duplicate (HashContext
, NewHashContext
);
141 case HASH_API_ALGO_MD5
:
142 return Md5Duplicate (HashContext
, NewHashContext
);
145 case HASH_API_ALGO_SHA1
:
146 return Sha1Duplicate (HashContext
, NewHashContext
);
149 case HASH_API_ALGO_SHA256
:
150 return Sha256Duplicate (HashContext
, NewHashContext
);
153 case HASH_API_ALGO_SHA384
:
154 return Sha384Duplicate (HashContext
, NewHashContext
);
157 case HASH_API_ALGO_SHA512
:
158 return Sha512Duplicate (HashContext
, NewHashContext
);
161 case HASH_API_ALGO_SM3_256
:
162 return Sm3Duplicate (HashContext
, NewHashContext
);
175 @param[in] HashContext Hash context.
176 @param[in] DataToHash Data to be hashed.
177 @param[in] DataToHashLen Data size.
179 @retval TRUE Hash updated.
180 @retval FALSE Hash updated unsuccessful.
185 IN HASH_API_CONTEXT HashContext
,
187 IN UINTN DataToHashLen
190 switch (PcdGet8 (PcdHashApiLibPolicy
)) {
191 case HASH_API_ALGO_MD4
:
192 return Md4Update (HashContext
, DataToHash
, DataToHashLen
);
195 case HASH_API_ALGO_MD5
:
196 return Md5Update (HashContext
, DataToHash
, DataToHashLen
);
199 case HASH_API_ALGO_SHA1
:
200 return Sha1Update (HashContext
, DataToHash
, DataToHashLen
);
203 case HASH_API_ALGO_SHA256
:
204 return Sha256Update (HashContext
, DataToHash
, DataToHashLen
);
207 case HASH_API_ALGO_SHA384
:
208 return Sha384Update (HashContext
, DataToHash
, DataToHashLen
);
211 case HASH_API_ALGO_SHA512
:
212 return Sha512Update (HashContext
, DataToHash
, DataToHashLen
);
215 case HASH_API_ALGO_SM3_256
:
216 return Sm3Update (HashContext
, DataToHash
, DataToHashLen
);
229 @param[in] HashContext Hash context.
230 @param[out] Digest Hash Digest.
232 @retval TRUE Hash complete and Digest is returned.
233 @retval FALSE Hash complete unsuccessful.
238 IN HASH_API_CONTEXT HashContext
,
242 switch (PcdGet8 (PcdHashApiLibPolicy
)) {
243 case HASH_API_ALGO_MD4
:
244 return Md4Final (HashContext
, Digest
);
247 case HASH_API_ALGO_MD5
:
248 return Md5Final (HashContext
, Digest
);
251 case HASH_API_ALGO_SHA1
:
252 return Sha1Final (HashContext
, Digest
);
255 case HASH_API_ALGO_SHA256
:
256 return Sha256Final (HashContext
, Digest
);
259 case HASH_API_ALGO_SHA384
:
260 return Sha384Final (HashContext
, Digest
);
263 case HASH_API_ALGO_SHA512
:
264 return Sha512Final (HashContext
, Digest
);
267 case HASH_API_ALGO_SM3_256
:
268 return Sm3Final (HashContext
, Digest
);
279 Computes hash message digest of a input data buffer.
281 @param[in] DataToHash Data to be hashed.
282 @param[in] DataToHashLen Data size.
283 @param[out] Digest Hash Digest.
285 @retval TRUE Hash digest computation succeeded.
286 @retval FALSE Hash digest computation failed.
291 IN CONST VOID
*DataToHash
,
292 IN UINTN DataToHashLen
,
296 switch (PcdGet8 (PcdHashApiLibPolicy
)) {
297 case HASH_API_ALGO_MD4
:
298 return Md4HashAll (DataToHash
, DataToHashLen
, Digest
);
301 case HASH_API_ALGO_MD5
:
302 return Md5HashAll (DataToHash
, DataToHashLen
, Digest
);
305 case HASH_API_ALGO_SHA1
:
306 return Sha1HashAll (DataToHash
, DataToHashLen
, Digest
);
309 case HASH_API_ALGO_SHA256
:
310 return Sha256HashAll (DataToHash
, DataToHashLen
, Digest
);
313 case HASH_API_ALGO_SHA384
:
314 return Sha384HashAll (DataToHash
, DataToHashLen
, Digest
);
317 case HASH_API_ALGO_SHA512
:
318 return Sha512HashAll (DataToHash
, DataToHashLen
, Digest
);
321 case HASH_API_ALGO_SM3_256
:
322 return Sm3HashAll (DataToHash
, DataToHashLen
, Digest
);