]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Library/HashInstanceLibSha512/HashInstanceLibSha512.c
SecurityPkg: Fix spelling errors
[mirror_edk2.git] / SecurityPkg / Library / HashInstanceLibSha512 / HashInstanceLibSha512.c
CommitLineData
3a347533
ZC
1/** @file\r
2 This library is BaseCrypto SHA512 hash instance.\r
3 It can be registered to BaseCrypto router, to serve as hash engine.\r
4\r
5Copyright (c) 2018, Intel Corporation. All rights reserved. <BR>\r
289b714b 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
3a347533
ZC
7\r
8**/\r
9\r
10#include <PiPei.h>\r
11#include <Library/BaseLib.h>\r
12#include <Library/BaseMemoryLib.h>\r
13#include <Library/DebugLib.h>\r
14#include <Library/BaseCryptLib.h>\r
15#include <Library/MemoryAllocationLib.h>\r
16#include <Library/HashLib.h>\r
17\r
18/**\r
19 The function set SHA512 to digest list.\r
20\r
21 @param DigestList digest list\r
22 @param Sha512Digest SHA512 digest\r
23**/\r
24VOID\r
25Tpm2SetSha512ToDigestList (\r
26 IN TPML_DIGEST_VALUES *DigestList,\r
27 IN UINT8 *Sha512Digest\r
28 )\r
29{\r
30 DigestList->count = 1;\r
31 DigestList->digests[0].hashAlg = TPM_ALG_SHA512;\r
32 CopyMem (\r
33 DigestList->digests[0].digest.sha512,\r
34 Sha512Digest,\r
35 SHA512_DIGEST_SIZE\r
36 );\r
37}\r
38\r
39/**\r
40 Start hash sequence.\r
41\r
42 @param HashHandle Hash handle.\r
43\r
44 @retval EFI_SUCCESS Hash sequence start and HandleHandle returned.\r
45 @retval EFI_OUT_OF_RESOURCES No enough resource to start hash.\r
46**/\r
47EFI_STATUS\r
48EFIAPI\r
49Sha512HashInit (\r
50 OUT HASH_HANDLE *HashHandle\r
51 )\r
52{\r
53 VOID *Sha512Ctx;\r
54 UINTN CtxSize;\r
55\r
56 CtxSize = Sha512GetContextSize ();\r
57 Sha512Ctx = AllocatePool (CtxSize);\r
58 ASSERT (Sha512Ctx != NULL);\r
59\r
60 Sha512Init (Sha512Ctx);\r
61\r
62 *HashHandle = (HASH_HANDLE)Sha512Ctx;\r
63\r
64 return EFI_SUCCESS;\r
65}\r
66\r
67/**\r
68 Update hash sequence data.\r
69\r
70 @param HashHandle Hash handle.\r
71 @param DataToHash Data to be hashed.\r
72 @param DataToHashLen Data size.\r
73\r
74 @retval EFI_SUCCESS Hash sequence updated.\r
75**/\r
76EFI_STATUS\r
77EFIAPI\r
78Sha512HashUpdate (\r
79 IN HASH_HANDLE HashHandle,\r
80 IN VOID *DataToHash,\r
81 IN UINTN DataToHashLen\r
82 )\r
83{\r
84 VOID *Sha512Ctx;\r
85\r
86 Sha512Ctx = (VOID *)HashHandle;\r
87 Sha512Update (Sha512Ctx, DataToHash, DataToHashLen);\r
88\r
89 return EFI_SUCCESS;\r
90}\r
91\r
92/**\r
93 Complete hash sequence complete.\r
94\r
95 @param HashHandle Hash handle.\r
96 @param DigestList Digest list.\r
97\r
98 @retval EFI_SUCCESS Hash sequence complete and DigestList is returned.\r
99**/\r
100EFI_STATUS\r
101EFIAPI\r
102Sha512HashFinal (\r
103 IN HASH_HANDLE HashHandle,\r
104 OUT TPML_DIGEST_VALUES *DigestList\r
105 )\r
106{\r
107 UINT8 Digest[SHA512_DIGEST_SIZE];\r
108 VOID *Sha512Ctx;\r
109\r
110 Sha512Ctx = (VOID *)HashHandle;\r
111 Sha512Final (Sha512Ctx, Digest);\r
112\r
113 FreePool (Sha512Ctx);\r
114\r
115 Tpm2SetSha512ToDigestList (DigestList, Digest);\r
116\r
117 return EFI_SUCCESS;\r
118}\r
119\r
120HASH_INTERFACE mSha512InternalHashInstance = {\r
121 HASH_ALGORITHM_SHA512_GUID,\r
122 Sha512HashInit,\r
123 Sha512HashUpdate,\r
124 Sha512HashFinal,\r
125};\r
126\r
127/**\r
128 The function register SHA512 instance.\r
129\r
d6b926e7 130 @retval EFI_SUCCESS SHA512 instance is registered, or system does not support register SHA512 instance\r
3a347533
ZC
131**/\r
132EFI_STATUS\r
133EFIAPI\r
134HashInstanceLibSha512Constructor (\r
135 VOID\r
136 )\r
137{\r
138 EFI_STATUS Status;\r
139\r
140 Status = RegisterHashInterfaceLib (&mSha512InternalHashInstance);\r
141 if ((Status == EFI_SUCCESS) || (Status == EFI_UNSUPPORTED)) {\r
142 //\r
143 // Unsupported means platform policy does not need this instance enabled.\r
144 //\r
145 return EFI_SUCCESS;\r
146 }\r
147 return Status;\r
148}\r