]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Include/Guid/ImageAuthentication.h
MdePkg/MdeModulePkg/SecurityPkg Variable: Forbid creation of non-spec variables in...
[mirror_edk2.git] / MdePkg / Include / Guid / ImageAuthentication.h
CommitLineData
bd86cb02 1/** @file\r
6675a21f 2 Image signature database are defined for the signed image validation.\r
bd86cb02 3\r
6675a21f 4 Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>\r
9df063a0 5 This program and the accompanying materials \r
bd86cb02
LG
6 are licensed and made available under the terms and conditions of the BSD License \r
7 which accompanies this distribution. The full text of the license may be found at \r
8 http://opensource.org/licenses/bsd-license.php \r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
12\r
13 @par Revision Reference:\r
05c82e51 14 GUIDs defined in UEFI 2.3.1 spec.\r
bd86cb02
LG
15**/\r
16\r
17#ifndef __IMAGE_AUTHTICATION_H__\r
18#define __IMAGE_AUTHTICATION_H__\r
19\r
20#include <Guid/GlobalVariable.h>\r
21\r
22#define EFI_IMAGE_SECURITY_DATABASE_GUID \\r
23 { \\r
24 0xd719b2cb, 0x3d3a, 0x4596, { 0xa3, 0xbc, 0xda, 0xd0, 0xe, 0x67, 0x65, 0x6f } \\r
25 }\r
26\r
27///\r
28/// Varialbe name with guid EFI_IMAGE_SECURITY_DATABASE_GUID \r
29/// for the authorized signature database.\r
30///\r
31#define EFI_IMAGE_SECURITY_DATABASE L"db"\r
32///\r
33/// Varialbe name with guid EFI_IMAGE_SECURITY_DATABASE_GUID \r
34/// for the forbidden signature database.\r
35///\r
36#define EFI_IMAGE_SECURITY_DATABASE1 L"dbx"\r
6675a21f 37\r
ab0eecec 38#define SECURE_BOOT_MODE_ENABLE 1\r
39#define SECURE_BOOT_MODE_DISABLE 0\r
bd86cb02
LG
40#define SETUP_MODE 1\r
41#define USER_MODE 0\r
bd86cb02 42\r
ab0eecec 43\r
bd86cb02
LG
44//***********************************************************************\r
45// Signature Database\r
46//***********************************************************************\r
47///\r
48/// The format of a signature database. \r
49///\r
50#pragma pack(1)\r
51\r
52typedef struct {\r
53 ///\r
54 /// An identifier which identifies the agent which added the signature to the list.\r
55 ///\r
60bd4ccd 56 EFI_GUID SignatureOwner;\r
bd86cb02
LG
57 ///\r
58 /// The format of the signature is defined by the SignatureType.\r
59 ///\r
60bd4ccd 60 UINT8 SignatureData[1];\r
bd86cb02
LG
61} EFI_SIGNATURE_DATA;\r
62\r
63typedef struct {\r
64 ///\r
65 /// Type of the signature. GUID signature types are defined in below.\r
66 ///\r
60bd4ccd 67 EFI_GUID SignatureType;\r
bd86cb02
LG
68 ///\r
69 /// Total size of the signature list, including this header.\r
70 ///\r
60bd4ccd 71 UINT32 SignatureListSize;\r
bd86cb02
LG
72 ///\r
73 /// Size of the signature header which precedes the array of signatures.\r
74 ///\r
60bd4ccd 75 UINT32 SignatureHeaderSize;\r
bd86cb02
LG
76 ///\r
77 /// Size of each signature.\r
78 ///\r
79 UINT32 SignatureSize; \r
80 ///\r
81 /// Header before the array of signatures. The format of this header is specified \r
82 /// by the SignatureType.\r
83 /// UINT8 SignatureHeader[SignatureHeaderSize];\r
84 ///\r
85 /// An array of signatures. Each signature is SignatureSize bytes in length. \r
86 /// EFI_SIGNATURE_DATA Signatures[][SignatureSize];\r
87 ///\r
88} EFI_SIGNATURE_LIST;\r
89\r
90#pragma pack()\r
91\r
92///\r
f704fc85 93/// This identifies a signature containing a SHA-256 hash. The SignatureHeader size shall\r
94/// always be 0. The SignatureSize shall always be 16 (size of SignatureOwner component) +\r
95/// 32 bytes.\r
bd86cb02
LG
96///\r
97#define EFI_CERT_SHA256_GUID \\r
98 { \\r
99 0xc1c41626, 0x504c, 0x4092, {0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28} \\r
100 }\r
101\r
102///\r
f704fc85 103/// This identifies a signature containing an RSA-2048 key. The key (only the modulus\r
104/// since the public key exponent is known to be 0x10001) shall be stored in big-endian\r
105/// order.\r
106/// The SignatureHeader size shall always be 0. The SignatureSize shall always be 16 (size \r
6048a5b0 107/// of SignatureOwner component) + 256 bytes.\r
bd86cb02
LG
108///\r
109#define EFI_CERT_RSA2048_GUID \\r
110 { \\r
111 0x3c5766e8, 0x269c, 0x4e34, {0xaa, 0x14, 0xed, 0x77, 0x6e, 0x85, 0xb3, 0xb6} \\r
112 }\r
113\r
114///\r
f704fc85 115/// This identifies a signature containing a RSA-2048 signature of a SHA-256 hash. The \r
116/// SignatureHeader size shall always be 0. The SignatureSize shall always be 16 (size of \r
6048a5b0 117/// SignatureOwner component) + 256 bytes.\r
bd86cb02
LG
118///\r
119#define EFI_CERT_RSA2048_SHA256_GUID \\r
120 { \\r
121 0xe2b36190, 0x879b, 0x4a3d, {0xad, 0x8d, 0xf2, 0xe7, 0xbb, 0xa3, 0x27, 0x84} \\r
122 }\r
123\r
124///\r
f704fc85 125/// This identifies a signature containing a SHA-1 hash. The SignatureSize shall always\r
6048a5b0 126/// be 16 (size of SignatureOwner component) + 20 bytes.\r
bd86cb02
LG
127///\r
128#define EFI_CERT_SHA1_GUID \\r
129 { \\r
130 0x826ca512, 0xcf10, 0x4ac9, {0xb1, 0x87, 0xbe, 0x1, 0x49, 0x66, 0x31, 0xbd} \\r
131 }\r
132\r
133///\r
f704fc85 134/// TThis identifies a signature containing a RSA-2048 signature of a SHA-1 hash. The \r
135/// SignatureHeader size shall always be 0. The SignatureSize shall always be 16 (size of \r
6048a5b0 136/// SignatureOwner component) + 256 bytes.\r
bd86cb02
LG
137///\r
138#define EFI_CERT_RSA2048_SHA1_GUID \\r
139 { \\r
140 0x67f8444f, 0x8743, 0x48f1, {0xa3, 0x28, 0x1e, 0xaa, 0xb8, 0x73, 0x60, 0x80} \\r
141 }\r
142\r
143///\r
f704fc85 144/// This identifies a signature based on an X.509 certificate. If the signature is an X.509\r
145/// certificate then verification of the signature of an image should validate the public \r
146/// key certificate in the image using certificate path verification, up to this X.509 \r
147/// certificate as a trusted root. The SignatureHeader size shall always be 0. The\r
148/// SignatureSize may vary but shall always be 16 (size of the SignatureOwner component) + \r
149/// the size of the certificate itself. \r
150/// Note: This means that each certificate will normally be in a separate EFI_SIGNATURE_LIST.\r
bd86cb02 151///\r
f704fc85 152#define EFI_CERT_X509_GUID \\r
bd86cb02
LG
153 { \\r
154 0xa5c059a1, 0x94e4, 0x4aa7, {0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72} \\r
155 }\r
156\r
f704fc85 157///\r
158/// This identifies a signature containing a SHA-224 hash. The SignatureHeader size shall\r
159/// always be 0. The SignatureSize shall always be 16 (size of SignatureOwner component) +\r
160/// 28 bytes.\r
161///\r
162#define EFI_CERT_SHA224_GUID \\r
163 { \\r
164 0xb6e5233, 0xa65c, 0x44c9, {0x94, 0x7, 0xd9, 0xab, 0x83, 0xbf, 0xc8, 0xbd} \\r
165 }\r
166\r
167///\r
168/// This identifies a signature containing a SHA-384 hash. The SignatureHeader size shall\r
169/// always be 0. The SignatureSize shall always be 16 (size of SignatureOwner component) +\r
170/// 48 bytes.\r
171///\r
172#define EFI_CERT_SHA384_GUID \\r
173 { \\r
174 0xff3e5307, 0x9fd0, 0x48c9, {0x85, 0xf1, 0x8a, 0xd5, 0x6c, 0x70, 0x1e, 0x1} \\r
175 } \r
176\r
177///\r
178/// This identifies a signature containing a SHA-512 hash. The SignatureHeader size shall\r
179/// always be 0. The SignatureSize shall always be 16 (size of SignatureOwner component) +\r
180/// 64 bytes.\r
181///\r
182#define EFI_CERT_SHA512_GUID \\r
183 { \\r
184 0x93e0fae, 0xa6c4, 0x4f50, {0x9f, 0x1b, 0xd4, 0x1e, 0x2b, 0x89, 0xc1, 0x9a} \\r
185 }\r
ab0eecec 186\r
187///\r
188/// This identifies a signature containing a DER-encoded PKCS #7 version 1.5 [RFC2315]\r
189/// SignedData value.\r
190///\r
191#define EFI_CERT_TYPE_PKCS7_GUID \\r
192 { \\r
193 0x4aafd29d, 0x68df, 0x49ee, {0x8a, 0xa9, 0x34, 0x7d, 0x37, 0x56, 0x65, 0xa7} \\r
194 }\r
f704fc85 195 \r
bd86cb02
LG
196//***********************************************************************\r
197// Image Execution Information Table Definition\r
198//***********************************************************************\r
199typedef UINT32 EFI_IMAGE_EXECUTION_ACTION;\r
200\r
3f275826
LG
201#define EFI_IMAGE_EXECUTION_AUTHENTICATION 0x00000007 \r
202#define EFI_IMAGE_EXECUTION_AUTH_UNTESTED 0x00000000\r
203#define EFI_IMAGE_EXECUTION_AUTH_SIG_FAILED 0x00000001\r
204#define EFI_IMAGE_EXECUTION_AUTH_SIG_PASSED 0x00000002\r
205#define EFI_IMAGE_EXECUTION_AUTH_SIG_NOT_FOUND 0x00000003\r
206#define EFI_IMAGE_EXECUTION_AUTH_SIG_FOUND 0x00000004\r
207#define EFI_IMAGE_EXECUTION_POLICY_FAILED 0x00000005\r
208#define EFI_IMAGE_EXECUTION_INITIALIZED 0x00000008\r
bd86cb02
LG
209\r
210//\r
211// EFI_IMAGE_EXECUTION_INFO is added to EFI System Configuration Table \r
212// and assigned the GUID EFI_IMAGE_SECURITY_DATABASE_GUID.\r
213//\r
214typedef struct {\r
215 ///\r
216 /// Describes the action taken by the firmware regarding this image.\r
217 ///\r
60bd4ccd 218 EFI_IMAGE_EXECUTION_ACTION Action;\r
bd86cb02
LG
219 ///\r
220 /// Size of all of the entire structure.\r
221 ///\r
222 UINT32 InfoSize;\r
223 ///\r
224 /// If this image was a UEFI device driver (for option ROM, for example) this is the \r
225 /// null-terminated, user-friendly name for the device. If the image was for an application, \r
226 /// then this is the name of the application. If this cannot be determined, then a simple \r
227 /// NULL character should be put in this position.\r
228 /// CHAR16 Name[];\r
229 ///\r
230\r
231 ///\r
232 /// For device drivers, this is the device path of the device for which this device driver \r
233 /// was intended. In some cases, the driver itself may be stored as part of the system \r
234 /// firmware, but this field should record the device's path, not the firmware path. For \r
235 /// applications, this is the device path of the application. If this cannot be determined, \r
236 /// a simple end-of-path device node should be put in this position.\r
237 /// EFI_DEVICE_PATH_PROTOCOL DevicePath;\r
238 ///\r
239\r
bd86cb02 240 ///\r
60bd4ccd 241 /// Zero or more image signatures. If the image contained no signatures, \r
bd86cb02
LG
242 /// then this field is empty.\r
243 ///\r
a1e98f78 244 EFI_SIGNATURE_LIST Signature;\r
bd86cb02
LG
245} EFI_IMAGE_EXECUTION_INFO;\r
246\r
a1e98f78
LG
247\r
248typedef struct {\r
249 ///\r
250 /// Number of EFI_IMAGE_EXECUTION_INFO structures.\r
251 ///\r
252 UINTN NumberOfImages; \r
253 ///\r
254 /// Number of image instances of EFI_IMAGE_EXECUTION_INFO structures.\r
255 ///\r
256 // EFI_IMAGE_EXECUTION_INFO InformationInfo[] \r
257} EFI_IMAGE_EXECUTION_INFO_TABLE;\r
258\r
bd86cb02
LG
259extern EFI_GUID gEfiImageSecurityDatabaseGuid;\r
260extern EFI_GUID gEfiCertSha256Guid;\r
261extern EFI_GUID gEfiCertRsa2048Guid; \r
262extern EFI_GUID gEfiCertRsa2048Sha256Guid;\r
263extern EFI_GUID gEfiCertSha1Guid;\r
264extern EFI_GUID gEfiCertRsa2048Sha1Guid;\r
265extern EFI_GUID gEfiCertX509Guid;\r
05c82e51
SZ
266extern EFI_GUID gEfiCertSha224Guid;\r
267extern EFI_GUID gEfiCertSha384Guid;\r
268extern EFI_GUID gEfiCertSha512Guid;\r
ab0eecec 269extern EFI_GUID gEfiCertPkcs7Guid;\r
bd86cb02
LG
270\r
271#endif\r