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