2 This library is BaseCrypto SHA384 hash instance.
3 It can be registered to BaseCrypto router, to serve as hash engine.
5 Copyright (c) 2018, Intel Corporation. All rights reserved. <BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
12 #include <Library/BaseLib.h>
13 #include <Library/BaseMemoryLib.h>
14 #include <Library/DebugLib.h>
15 #include <Library/BaseCryptLib.h>
16 #include <Library/MemoryAllocationLib.h>
17 #include <Library/HashLib.h>
20 The function set SHA384 to digest list.
22 @param DigestList digest list
23 @param Sha384Digest SHA384 digest
26 Tpm2SetSha384ToDigestList (
27 IN TPML_DIGEST_VALUES
*DigestList
,
28 IN UINT8
*Sha384Digest
31 DigestList
->count
= 1;
32 DigestList
->digests
[0].hashAlg
= TPM_ALG_SHA384
;
34 DigestList
->digests
[0].digest
.sha384
,
43 @param HashHandle Hash handle.
45 @retval EFI_SUCCESS Hash sequence start and HandleHandle returned.
46 @retval EFI_OUT_OF_RESOURCES No enough resource to start hash.
51 OUT HASH_HANDLE
*HashHandle
57 CtxSize
= Sha384GetContextSize ();
58 Sha384Ctx
= AllocatePool (CtxSize
);
59 ASSERT (Sha384Ctx
!= NULL
);
61 Sha384Init (Sha384Ctx
);
63 *HashHandle
= (HASH_HANDLE
)Sha384Ctx
;
69 Update hash sequence data.
71 @param HashHandle Hash handle.
72 @param DataToHash Data to be hashed.
73 @param DataToHashLen Data size.
75 @retval EFI_SUCCESS Hash sequence updated.
80 IN HASH_HANDLE HashHandle
,
82 IN UINTN DataToHashLen
87 Sha384Ctx
= (VOID
*)HashHandle
;
88 Sha384Update (Sha384Ctx
, DataToHash
, DataToHashLen
);
94 Complete hash sequence complete.
96 @param HashHandle Hash handle.
97 @param DigestList Digest list.
99 @retval EFI_SUCCESS Hash sequence complete and DigestList is returned.
104 IN HASH_HANDLE HashHandle
,
105 OUT TPML_DIGEST_VALUES
*DigestList
108 UINT8 Digest
[SHA384_DIGEST_SIZE
];
111 Sha384Ctx
= (VOID
*)HashHandle
;
112 Sha384Final (Sha384Ctx
, Digest
);
114 FreePool (Sha384Ctx
);
116 Tpm2SetSha384ToDigestList (DigestList
, Digest
);
121 HASH_INTERFACE mSha384InternalHashInstance
= {
122 HASH_ALGORITHM_SHA384_GUID
,
129 The function register SHA384 instance.
131 @retval EFI_SUCCESS SHA384 instance is registered, or system does not support register SHA384 instance
135 HashInstanceLibSha384Constructor (
141 Status
= RegisterHashInterfaceLib (&mSha384InternalHashInstance
);
142 if ((Status
== EFI_SUCCESS
) || (Status
== EFI_UNSUPPORTED
)) {
144 // Unsupported means platform policy does not need this instance enabled.