]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/VariableAuthenticated/RuntimeDxe/AuthService.h
If setting variable in Runtime and there has been a same GUID and name variable exist...
[mirror_edk2.git] / SecurityPkg / VariableAuthenticated / RuntimeDxe / AuthService.h
CommitLineData
0c18794e 1/** @file\r
2 The internal header file includes the common header files, defines\r
3 internal structure and functions used by AuthService module.\r
4\r
5Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>\r
2d3fb919 6This program and the accompanying materials\r
7are licensed and made available under the terms and conditions of the BSD License\r
8which accompanies this distribution. The full text of the license may be found at\r
0c18794e 9http://opensource.org/licenses/bsd-license.php\r
10\r
2d3fb919 11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
0c18794e 12WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#ifndef _AUTHSERVICE_H_\r
17#define _AUTHSERVICE_H_\r
18\r
19#define EFI_CERT_TYPE_RSA2048_SHA256_SIZE 256\r
20#define EFI_CERT_TYPE_RSA2048_SIZE 256\r
21\r
22///\r
2d3fb919 23/// Size of AuthInfo prior to the data payload.\r
0c18794e 24///\r
2d3fb919 25#define AUTHINFO_SIZE ((OFFSET_OF (EFI_VARIABLE_AUTHENTICATION, AuthInfo)) + \\r
26 (OFFSET_OF (WIN_CERTIFICATE_UEFI_GUID, CertData)) + \\r
27 sizeof (EFI_CERT_BLOCK_RSA_2048_SHA256))\r
28\r
29#define AUTHINFO2_SIZE(VarAuth2) ((OFFSET_OF (EFI_VARIABLE_AUTHENTICATION_2, AuthInfo)) + \\r
30 (UINTN) ((EFI_VARIABLE_AUTHENTICATION_2 *) (VarAuth2))->AuthInfo.Hdr.dwLength)\r
31\r
32#define OFFSET_OF_AUTHINFO2_CERT_DATA ((OFFSET_OF (EFI_VARIABLE_AUTHENTICATION_2, AuthInfo)) + \\r
33 (OFFSET_OF (WIN_CERTIFICATE_UEFI_GUID, CertData)))\r
0c18794e 34\r
35///\r
36/// "AuthVarKeyDatabase" variable for the Public Key store.\r
37///\r
38#define AUTHVAR_KEYDB_NAME L"AuthVarKeyDatabase"\r
39#define AUTHVAR_KEYDB_NAME_SIZE 38\r
40\r
41///\r
42/// Max size of public key database, restricted by max individal EFI varible size, exclude variable header and name size.\r
43///\r
44#define MAX_KEYDB_SIZE (FixedPcdGet32 (PcdMaxVariableSize) - sizeof (VARIABLE_HEADER) - AUTHVAR_KEYDB_NAME_SIZE)\r
45#define MAX_KEY_NUM (MAX_KEYDB_SIZE / EFI_CERT_TYPE_RSA2048_SIZE)\r
46\r
d912bad7 47///\r
48/// Struct to record signature requirement defined by UEFI spec.\r
49/// For SigHeaderSize and SigDataSize, ((UINT32) ~0) means NO exact length requirement for this field.\r
50///\r
51typedef struct {\r
52 EFI_GUID SigType;\r
53 // Expected SignatureHeader size in Bytes.\r
54 UINT32 SigHeaderSize;\r
55 // Expected SignatureData size in Bytes.\r
56 UINT32 SigDataSize;\r
57} EFI_SIGNATURE_ITEM;\r
0c18794e 58\r
59/**\r
60 Process variable with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS/EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS set.\r
61\r
62 @param[in] VariableName Name of Variable to be found.\r
63 @param[in] VendorGuid Variable vendor GUID.\r
64\r
65 @param[in] Data Data pointer.\r
66 @param[in] DataSize Size of Data found. If size is less than the\r
67 data, this value contains the required size.\r
68 @param[in] Variable The variable information which is used to keep track of variable usage.\r
69 @param[in] Attributes Attribute value of the variable.\r
70\r
71 @return EFI_INVALID_PARAMETER Invalid parameter\r
72 @return EFI_WRITE_PROTECTED Variable is write-protected and needs authentication with\r
73 EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS set.\r
74 @return EFI_SECURITY_VIOLATION The variable is with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS\r
2d3fb919 75 set, but the AuthInfo does NOT pass the validation\r
76 check carried out by the firmware.\r
0c18794e 77 @return EFI_SUCCESS Variable is not write-protected, or passed validation successfully.\r
78\r
79**/\r
80EFI_STATUS\r
81ProcessVariable (\r
82 IN CHAR16 *VariableName,\r
83 IN EFI_GUID *VendorGuid,\r
84 IN VOID *Data,\r
85 IN UINTN DataSize,\r
86 IN VARIABLE_POINTER_TRACK *Variable,\r
87 IN UINT32 Attributes\r
88 );\r
89\r
2d3fb919 90/**\r
91 Update platform mode.\r
92\r
93 @param[in] Mode SETUP_MODE or USER_MODE.\r
94\r
95 @return EFI_INVALID_PARAMETER Invalid parameter.\r
96 @return EFI_SUCCESS Update platform mode successfully.\r
97\r
98**/\r
99EFI_STATUS\r
100UpdatePlatformMode (\r
101 IN UINT32 Mode\r
102 );\r
103\r
0c18794e 104/**\r
105 Initializes for authenticated varibale service.\r
106\r
107 @retval EFI_SUCCESS Function successfully executed.\r
108 @retval EFI_OUT_OF_RESOURCES Fail to allocate enough memory resource.\r
109\r
110**/\r
111EFI_STATUS\r
112AutenticatedVariableServiceInitialize (\r
113 VOID\r
114 );\r
115\r
116/**\r
117 Initializes for cryptlib service before use, include register algrithm and allocate scratch.\r
118\r
119**/\r
120VOID\r
121CryptLibraryInitialize (\r
122 VOID\r
123 );\r
124\r
d912bad7 125/**\r
126 Check input data form to make sure it is a valid EFI_SIGNATURE_LIST for PK/KEK variable.\r
127\r
128 @param[in] VariableName Name of Variable to be check.\r
129 @param[in] VendorGuid Variable vendor GUID.\r
130 @param[in] Data Point to the variable data to be checked.\r
131 @param[in] DataSize Size of Data.\r
132\r
133 @return EFI_INVALID_PARAMETER Invalid signature list format.\r
134 @return EFI_SUCCESS Passed signature list format check successfully.\r
135 \r
136**/\r
137EFI_STATUS\r
138CheckSignatureListFormat(\r
139 IN CHAR16 *VariableName,\r
140 IN EFI_GUID *VendorGuid,\r
141 IN VOID *Data,\r
142 IN UINTN DataSize\r
143 );\r
144\r
0c18794e 145/**\r
146 Process variable with platform key for verification.\r
147\r
148 @param[in] VariableName Name of Variable to be found.\r
149 @param[in] VendorGuid Variable vendor GUID.\r
150 @param[in] Data Data pointer.\r
151 @param[in] DataSize Size of Data found. If size is less than the\r
152 data, this value contains the required size.\r
153 @param[in] Variable The variable information which is used to keep track of variable usage.\r
154 @param[in] Attributes Attribute value of the variable.\r
155 @param[in] IsPk Indicate whether it is to process pk.\r
156\r
157 @return EFI_INVALID_PARAMETER Invalid parameter\r
2d3fb919 158 @return EFI_SECURITY_VIOLATION The variable does NOT pass the validation\r
159 check carried out by the firmware.\r
0c18794e 160 @return EFI_SUCCESS Variable passed validation successfully.\r
161\r
162**/\r
163EFI_STATUS\r
164ProcessVarWithPk (\r
165 IN CHAR16 *VariableName,\r
166 IN EFI_GUID *VendorGuid,\r
167 IN VOID *Data,\r
168 IN UINTN DataSize,\r
169 IN VARIABLE_POINTER_TRACK *Variable,\r
170 IN UINT32 Attributes OPTIONAL,\r
171 IN BOOLEAN IsPk\r
172 );\r
173\r
174/**\r
175 Process variable with key exchange key for verification.\r
176\r
177 @param[in] VariableName Name of Variable to be found.\r
178 @param[in] VendorGuid Variable vendor GUID.\r
179 @param[in] Data Data pointer.\r
180 @param[in] DataSize Size of Data found. If size is less than the\r
181 data, this value contains the required size.\r
182 @param[in] Variable The variable information that is used to keep track of variable usage.\r
183 @param[in] Attributes Attribute value of the variable.\r
184\r
185 @return EFI_INVALID_PARAMETER Invalid parameter.\r
2d3fb919 186 @return EFI_SECURITY_VIOLATION The variable does NOT pass the validation\r
187 check carried out by the firmware.\r
0c18794e 188 @return EFI_SUCCESS Variable passed validation successfully.\r
189\r
190**/\r
191EFI_STATUS\r
192ProcessVarWithKek (\r
193 IN CHAR16 *VariableName,\r
194 IN EFI_GUID *VendorGuid,\r
195 IN VOID *Data,\r
196 IN UINTN DataSize,\r
197 IN VARIABLE_POINTER_TRACK *Variable,\r
198 IN UINT32 Attributes OPTIONAL\r
199 );\r
200\r
2d3fb919 201/**\r
202 Merge two buffers which formatted as EFI_SIGNATURE_LIST. Only the new EFI_SIGNATURE_DATA\r
203 will be appended to the original EFI_SIGNATURE_LIST, duplicate EFI_SIGNATURE_DATA\r
204 will be ignored.\r
205\r
206 @param[in, out] Data Pointer to original EFI_SIGNATURE_LIST.\r
207 @param[in] DataSize Size of Data buffer.\r
208 @param[in] NewData Pointer to new EFI_SIGNATURE_LIST to be appended.\r
209 @param[in] NewDataSize Size of NewData buffer.\r
210\r
211 @return Size of the merged buffer.\r
212\r
213**/\r
214UINTN\r
215AppendSignatureList (\r
216 IN OUT VOID *Data,\r
217 IN UINTN DataSize,\r
218 IN VOID *NewData,\r
219 IN UINTN NewDataSize\r
220 );\r
221\r
0c18794e 222/**\r
223 Compare two EFI_TIME data.\r
224\r
225\r
226 @param FirstTime A pointer to the first EFI_TIME data.\r
227 @param SecondTime A pointer to the second EFI_TIME data.\r
228\r
229 @retval TRUE The FirstTime is not later than the SecondTime.\r
230 @retval FALSE The FirstTime is later than the SecondTime.\r
231\r
232**/\r
233BOOLEAN\r
234CompareTimeStamp (\r
235 IN EFI_TIME *FirstTime,\r
236 IN EFI_TIME *SecondTime\r
237 );\r
238\r
239\r
240/**\r
241 Process variable with EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS set\r
242\r
243 @param[in] VariableName Name of Variable to be found.\r
244 @param[in] VendorGuid Variable vendor GUID.\r
245 @param[in] Data Data pointer.\r
246 @param[in] DataSize Size of Data found. If size is less than the\r
247 data, this value contains the required size.\r
248 @param[in] Variable The variable information which is used to keep track of variable usage.\r
249 @param[in] Attributes Attribute value of the variable.\r
250 @param[in] Pk Verify against PK or KEK database.\r
251 @param[out] VarDel Delete the variable or not.\r
252\r
253 @retval EFI_INVALID_PARAMETER Invalid parameter.\r
2d3fb919 254 @retval EFI_SECURITY_VIOLATION The variable does NOT pass the validation\r
255 check carried out by the firmware.\r
0c18794e 256 @retval EFI_OUT_OF_RESOURCES Failed to process variable due to lack\r
257 of resources.\r
258 @retval EFI_SUCCESS Variable pass validation successfully.\r
259\r
260**/\r
261EFI_STATUS\r
262VerifyTimeBasedPayload (\r
263 IN CHAR16 *VariableName,\r
264 IN EFI_GUID *VendorGuid,\r
265 IN VOID *Data,\r
266 IN UINTN DataSize,\r
267 IN VARIABLE_POINTER_TRACK *Variable,\r
268 IN UINT32 Attributes,\r
269 IN BOOLEAN Pk,\r
270 OUT BOOLEAN *VarDel\r
271 );\r
272\r
273extern UINT8 mPubKeyStore[MAX_KEYDB_SIZE];\r
274extern UINT32 mPubKeyNumber;\r
275extern VOID *mHashCtx;\r
276extern VOID *mStorageArea;\r
2d3fb919 277extern UINT8 *mSerializationRuntimeBuffer;\r
278\r
0c18794e 279#endif\r