]> git.proxmox.com Git - mirror_edk2.git/blob - SecurityPkg/Include/Library/HashLib.h
SecurityPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / SecurityPkg / Include / Library / HashLib.h
1 /** @file
2 This library abstract TPM2 hash calculation.
3 The platform can choose multiply hash, while caller just need invoke these API.
4 Then all hash value will be returned and/or extended.
5
6 Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved. <BR>
7 SPDX-License-Identifier: BSD-2-Clause-Patent
8
9 **/
10
11 #ifndef _HASH_LIB_H_
12 #define _HASH_LIB_H_
13
14 #include <Uefi.h>
15 #include <Protocol/Hash.h>
16 #include <IndustryStandard/Tpm20.h>
17 typedef UINTN HASH_HANDLE;
18
19 /**
20 Start hash sequence.
21
22 @param HashHandle Hash handle.
23
24 @retval EFI_SUCCESS Hash sequence start and HandleHandle returned.
25 @retval EFI_OUT_OF_RESOURCES No enough resource to start hash.
26 **/
27 EFI_STATUS
28 EFIAPI
29 HashStart (
30 OUT HASH_HANDLE *HashHandle
31 );
32
33 /**
34 Update hash sequence data.
35
36 @param HashHandle Hash handle.
37 @param DataToHash Data to be hashed.
38 @param DataToHashLen Data size.
39
40 @retval EFI_SUCCESS Hash sequence updated.
41 **/
42 EFI_STATUS
43 EFIAPI
44 HashUpdate (
45 IN HASH_HANDLE HashHandle,
46 IN VOID *DataToHash,
47 IN UINTN DataToHashLen
48 );
49
50 /**
51 Hash sequence complete and extend to PCR.
52
53 @param HashHandle Hash handle.
54 @param PcrIndex PCR to be extended.
55 @param DataToHash Data to be hashed.
56 @param DataToHashLen Data size.
57 @param DigestList Digest list.
58
59 @retval EFI_SUCCESS Hash sequence complete and DigestList is returned.
60 **/
61 EFI_STATUS
62 EFIAPI
63 HashCompleteAndExtend (
64 IN HASH_HANDLE HashHandle,
65 IN TPMI_DH_PCR PcrIndex,
66 IN VOID *DataToHash,
67 IN UINTN DataToHashLen,
68 OUT TPML_DIGEST_VALUES *DigestList
69 );
70
71 /**
72 Hash data and extend to PCR.
73
74 @param PcrIndex PCR to be extended.
75 @param DataToHash Data to be hashed.
76 @param DataToHashLen Data size.
77 @param DigestList Digest list.
78
79 @retval EFI_SUCCESS Hash data and DigestList is returned.
80 **/
81 EFI_STATUS
82 EFIAPI
83 HashAndExtend (
84 IN TPMI_DH_PCR PcrIndex,
85 IN VOID *DataToHash,
86 IN UINTN DataToHashLen,
87 OUT TPML_DIGEST_VALUES *DigestList
88 );
89
90 /**
91 Start hash sequence.
92
93 @param HashHandle Hash handle.
94
95 @retval EFI_SUCCESS Hash sequence start and HandleHandle returned.
96 @retval EFI_OUT_OF_RESOURCES No enough resource to start hash.
97 **/
98 typedef
99 EFI_STATUS
100 (EFIAPI *HASH_INIT) (
101 OUT HASH_HANDLE *HashHandle
102 );
103
104 /**
105 Update hash sequence data.
106
107 @param HashHandle Hash handle.
108 @param DataToHash Data to be hashed.
109 @param DataToHashLen Data size.
110
111 @retval EFI_SUCCESS Hash sequence updated.
112 **/
113 typedef
114 EFI_STATUS
115 (EFIAPI *HASH_UPDATE) (
116 IN HASH_HANDLE HashHandle,
117 IN VOID *DataToHash,
118 IN UINTN DataToHashLen
119 );
120
121 /**
122 Complete hash sequence complete.
123
124 @param HashHandle Hash handle.
125 @param DigestList Digest list.
126
127 @retval EFI_SUCCESS Hash sequence complete and DigestList is returned.
128 **/
129 typedef
130 EFI_STATUS
131 (EFIAPI *HASH_FINAL) (
132 IN HASH_HANDLE HashHandle,
133 OUT TPML_DIGEST_VALUES *DigestList
134 );
135
136 #define HASH_ALGORITHM_SHA1_GUID EFI_HASH_ALGORITHM_SHA1_GUID
137 #define HASH_ALGORITHM_SHA256_GUID EFI_HASH_ALGORITHM_SHA256_GUID
138 #define HASH_ALGORITHM_SHA384_GUID EFI_HASH_ALGORITHM_SHA384_GUID
139 #define HASH_ALGORITHM_SHA512_GUID EFI_HASH_ALGORITHM_SHA512_GUID
140
141 typedef struct {
142 EFI_GUID HashGuid;
143 HASH_INIT HashInit;
144 HASH_UPDATE HashUpdate;
145 HASH_FINAL HashFinal;
146 } HASH_INTERFACE;
147
148 /**
149 This service register Hash.
150
151 @param HashInterface Hash interface
152
153 @retval EFI_SUCCESS This hash interface is registered successfully.
154 @retval EFI_UNSUPPORTED System does not support register this interface.
155 @retval EFI_ALREADY_STARTED System already register this interface.
156 **/
157 EFI_STATUS
158 EFIAPI
159 RegisterHashInterfaceLib (
160 IN HASH_INTERFACE *HashInterface
161 );
162
163 #endif