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