1. Add TCG MOR (Memory Overwrite request) definition from TCG Platform Reset Attack...
[efi/edk2/.git] / edk2 / MdePkg / Include / Guid / ImageAuthentication.h
1 /** @file\r
2   Platform Key, Key Exchange Key, and Image signature database are defined \r
3   for the signed image validation.\r
4 \r
5   Copyright (c) 2009, Intel Corporation\r
6   All rights reserved. This program and the accompanying materials                          \r
7   are licensed and made available under the terms and conditions of the BSD License         \r
8   which accompanies this distribution.  The full text of the license may be found at        \r
9   http://opensource.org/licenses/bsd-license.php                                            \r
10 \r
11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
13 \r
14   @par Revision Reference:\r
15   GUIDs defined in UEFI 2.2 spec.\r
16 **/\r
17 \r
18 #ifndef __IMAGE_AUTHTICATION_H__\r
19 #define __IMAGE_AUTHTICATION_H__\r
20 \r
21 #include <Guid/GlobalVariable.h>\r
22 \r
23 #define EFI_IMAGE_SECURITY_DATABASE_GUID \\r
24   { \\r
25     0xd719b2cb, 0x3d3a, 0x4596, { 0xa3, 0xbc, 0xda, 0xd0, 0xe, 0x67, 0x65, 0x6f } \\r
26   }\r
27 \r
28 ///\r
29 /// Varialbe name with guid EFI_IMAGE_SECURITY_DATABASE_GUID \r
30 /// for the authorized signature database.\r
31 ///\r
32 #define EFI_IMAGE_SECURITY_DATABASE       L"db"\r
33 ///\r
34 /// Varialbe name with guid EFI_IMAGE_SECURITY_DATABASE_GUID \r
35 /// for the forbidden signature database.\r
36 ///\r
37 #define EFI_IMAGE_SECURITY_DATABASE1      L"dbx"\r
38 \r
39 #define SETUP_MODE                        1\r
40 #define USER_MODE                         0\r
41 ///\r
42 /// Globally "SetupMode" variable to specify whether the system is currently operating \r
43 /// in setup mode (1) or not (0). All other values are reserved.\r
44 ///\r
45 #define EFI_SETUP_MODE_NAME               L"SetupMode"\r
46 ///\r
47 /// Globally "PK" variable for the Platform Key Signature Database.\r
48 ///\r
49 #define EFI_PLATFORM_KEY_NAME             L"PK"\r
50 ///\r
51 /// Globally "KEK" variable for the Key Exchange Key Signature Database.\r
52 ///\r
53 #define EFI_KEY_EXCHANGE_KEY_NAME         L"KEK"\r
54 ///\r
55 /// Globally "SignatureSupport" variable returns an array of GUIDs, \r
56 /// with each GUID representing a type of signature which the platform \r
57 /// firmware supports for images and other data.\r
58 ///\r
59 #define EFI_SIGNATURE_SUPPORT_NAME        L"SignatureSupport"\r
60 \r
61 //***********************************************************************\r
62 // Signature Database\r
63 //***********************************************************************\r
64 ///\r
65 /// The format of a signature database. \r
66 ///\r
67 #pragma pack(1)\r
68 \r
69 typedef struct {\r
70   ///\r
71   /// An identifier which identifies the agent which added the signature to the list.\r
72   ///\r
73   EFI_GUID              SignatureOwner;\r
74   ///\r
75   /// The format of the signature is defined by the SignatureType.\r
76   ///\r
77   UINT8                   SignatureData[1];\r
78 } EFI_SIGNATURE_DATA;\r
79 \r
80 typedef struct {\r
81   ///\r
82   /// Type of the signature. GUID signature types are defined in below.\r
83   ///\r
84   EFI_GUID              SignatureType;\r
85   ///\r
86   /// Total size of the signature list, including this header.\r
87   ///\r
88   UINT32                SignatureListSize;\r
89   ///\r
90   /// Size of the signature header which precedes the array of signatures.\r
91   ///\r
92   UINT32                SignatureHeaderSize;\r
93   ///\r
94   /// Size of each signature.\r
95   ///\r
96   UINT32              SignatureSize; \r
97   ///\r
98   /// Header before the array of signatures. The format of this header is specified \r
99   /// by the SignatureType.\r
100   /// UINT8           SignatureHeader[SignatureHeaderSize];\r
101   ///\r
102   /// An array of signatures. Each signature is SignatureSize bytes in length. \r
103   /// EFI_SIGNATURE_DATA Signatures[][SignatureSize];\r
104   ///\r
105 } EFI_SIGNATURE_LIST;\r
106 \r
107 #pragma pack()\r
108 \r
109 ///\r
110 /// This identifies a signature containing a SHA-256 hash. The SignatureHeader size should \r
111 /// always be 0.  The SignatureSize should always be 32 bytes.\r
112 ///\r
113 #define EFI_CERT_SHA256_GUID \\r
114   { \\r
115     0xc1c41626, 0x504c, 0x4092, {0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28} \\r
116   }\r
117 \r
118 ///\r
119 /// This identifies a signature containing an RSA-2048 key. The SignatureHeader size should \r
120 /// always be 0. The SignatureSize should always be 256 bytes.\r
121 ///\r
122 #define EFI_CERT_RSA2048_GUID \\r
123   { \\r
124     0x3c5766e8, 0x269c, 0x4e34, {0xaa, 0x14, 0xed, 0x77, 0x6e, 0x85, 0xb3, 0xb6} \\r
125   }\r
126 \r
127 ///\r
128 /// This identifies a signature containing a RSA-2048 signature of a SHA-256 hash. The \r
129 /// SignatureHeader size should always be 0. The SignatureSize should always be 256 bytes.\r
130 ///\r
131 #define EFI_CERT_RSA2048_SHA256_GUID \\r
132   { \\r
133     0xe2b36190, 0x879b, 0x4a3d, {0xad, 0x8d, 0xf2, 0xe7, 0xbb, 0xa3, 0x27, 0x84} \\r
134   }\r
135 \r
136 ///\r
137 /// This identifies a signature containing a SHA-1 hash.  The SignatureHeader size should always\r
138 /// be 0. The SignatureSize should always be 20 bytes\r
139 ///\r
140 #define EFI_CERT_SHA1_GUID \\r
141   { \\r
142     0x826ca512, 0xcf10, 0x4ac9, {0xb1, 0x87, 0xbe, 0x1, 0x49, 0x66, 0x31, 0xbd} \\r
143   }\r
144 \r
145 ///\r
146 /// This identifies a signature containing a RSA-2048 signature of a SHA-1 hash. The \r
147 /// SignatureHeader size should always be 0. The SignatureSize should always be 256 bytes.\r
148 ///\r
149 #define EFI_CERT_RSA2048_SHA1_GUID \\r
150   { \\r
151     0x67f8444f, 0x8743, 0x48f1, {0xa3, 0x28, 0x1e, 0xaa, 0xb8, 0x73, 0x60, 0x80} \\r
152   }\r
153 \r
154 ///\r
155 /// This identifies a signature based on an X.509 certificate. If the signature is an X.509 certificate then \r
156 /// verification of the signature of an image should validate the public key certificate in the image using \r
157 /// certificate path verification, up to this X.509 certificate as a trusted root.\r
158 ///\r
159 #define EFI_CERT_X509 \\r
160   { \\r
161     0xa5c059a1, 0x94e4, 0x4aa7, {0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72} \\r
162   }\r
163 \r
164 //***********************************************************************\r
165 // Image Execution Information Table Definition\r
166 //***********************************************************************\r
167 typedef UINT32 EFI_IMAGE_EXECUTION_ACTION;\r
168 \r
169 #define EFI_IMAGE_EXECUTION_AUTHENTICATION          0x00000007 \r
170 \r
171 //\r
172 // EFI_IMAGE_EXECUTION_INFO is added to EFI System Configuration Table \r
173 // and assigned the GUID EFI_IMAGE_SECURITY_DATABASE_GUID.\r
174 //\r
175 typedef struct {\r
176   ///\r
177   /// Describes the action taken by the firmware regarding this image.\r
178   ///\r
179   EFI_IMAGE_EXECUTION_ACTION      Action;\r
180   ///\r
181   /// Size of all of the entire structure.\r
182   ///\r
183   UINT32                        InfoSize;\r
184   ///\r
185   /// If this image was a UEFI device driver (for option ROM, for example) this is the \r
186   /// null-terminated, user-friendly name for the device. If the image was for an application, \r
187   /// then this is the name of the application. If this cannot be determined, then a simple \r
188   /// NULL character should be put in this position.\r
189   /// CHAR16                    Name[];\r
190   ///\r
191 \r
192   ///\r
193   /// For device drivers, this is the device path of the device for which this device driver \r
194   /// was intended. In some cases, the driver itself may be stored as part of the system \r
195   /// firmware, but this field should record the device's path, not the firmware path. For \r
196   /// applications, this is the device path of the application. If this cannot be determined, \r
197   /// a simple end-of-path device node should be put in this position.\r
198   /// EFI_DEVICE_PATH_PROTOCOL  DevicePath;\r
199   ///\r
200 \r
201   ///\r
202   /// The image digest of the image. The certificate type must be one of the hash types. \r
203   /// The hash type must match the type used in the Signature field.\r
204   ///\r
205   WIN_CERTIFICATE               ImageHash;\r
206   ///\r
207   /// Zero or more image signatures. If the image contained no signtures, \r
208   /// then this field is empty.\r
209   ///\r
210   WIN_CERTIFICATE               Signature;\r
211 } EFI_IMAGE_EXECUTION_INFO;\r
212 \r
213 extern EFI_GUID gEfiImageSecurityDatabaseGuid;\r
214 extern EFI_GUID gEfiCertSha256Guid;\r
215 extern EFI_GUID gEfiCertRsa2048Guid;      \r
216 extern EFI_GUID gEfiCertRsa2048Sha256Guid;\r
217 extern EFI_GUID gEfiCertSha1Guid;\r
218 extern EFI_GUID gEfiCertRsa2048Sha1Guid;\r
219 extern EFI_GUID gEfiCertX509Guid;\r
220 \r
221 #endif\r