1 | /** @file
|
---|
2 | Security Architectural Protocol as defined in PI Specification VOLUME 2 DXE
|
---|
3 |
|
---|
4 | Used to provide Security services. Specifically, dependening upon the
|
---|
5 | authentication state of a discovered driver in a Firmware Volume, the
|
---|
6 | portable DXE Core Dispatcher will call into the Security Architectural
|
---|
7 | Protocol (SAP) with the authentication state of the driver.
|
---|
8 |
|
---|
9 | This call-out allows for OEM-specific policy decisions to be made, such
|
---|
10 | as event logging for attested boots, locking flash in response to discovering
|
---|
11 | an unsigned driver or failed signature check, or other exception response.
|
---|
12 |
|
---|
13 | The SAP can also change system behavior by having the DXE core put a driver
|
---|
14 | in the Schedule-On-Request (SOR) state. This will allow for later disposition
|
---|
15 | of the driver by platform agent, such as Platform BDS.
|
---|
16 |
|
---|
17 | Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
|
---|
18 | This program and the accompanying materials
|
---|
19 | are licensed and made available under the terms and conditions of the BSD License
|
---|
20 | which accompanies this distribution. The full text of the license may be found at
|
---|
21 | http://opensource.org/licenses/bsd-license.php
|
---|
22 |
|
---|
23 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
---|
24 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
---|
25 |
|
---|
26 | **/
|
---|
27 |
|
---|
28 | #ifndef __ARCH_PROTOCOL_SECURITY_H__
|
---|
29 | #define __ARCH_PROTOCOL_SECURITY_H__
|
---|
30 |
|
---|
31 | ///
|
---|
32 | /// Global ID for the Security Code Architectural Protocol
|
---|
33 | ///
|
---|
34 | #define EFI_SECURITY_ARCH_PROTOCOL_GUID \
|
---|
35 | { 0xA46423E3, 0x4617, 0x49f1, {0xB9, 0xFF, 0xD1, 0xBF, 0xA9, 0x11, 0x58, 0x39 } }
|
---|
36 |
|
---|
37 | typedef struct _EFI_SECURITY_ARCH_PROTOCOL EFI_SECURITY_ARCH_PROTOCOL;
|
---|
38 |
|
---|
39 | /**
|
---|
40 | The EFI_SECURITY_ARCH_PROTOCOL (SAP) is used to abstract platform-specific
|
---|
41 | policy from the DXE core response to an attempt to use a file that returns a
|
---|
42 | given status for the authentication check from the section extraction protocol.
|
---|
43 |
|
---|
44 | The possible responses in a given SAP implementation may include locking
|
---|
45 | flash upon failure to authenticate, attestation logging for all signed drivers,
|
---|
46 | and other exception operations. The File parameter allows for possible logging
|
---|
47 | within the SAP of the driver.
|
---|
48 |
|
---|
49 | If File is NULL, then EFI_INVALID_PARAMETER is returned.
|
---|
50 |
|
---|
51 | If the file specified by File with an authentication status specified by
|
---|
52 | AuthenticationStatus is safe for the DXE Core to use, then EFI_SUCCESS is returned.
|
---|
53 |
|
---|
54 | If the file specified by File with an authentication status specified by
|
---|
55 | AuthenticationStatus is not safe for the DXE Core to use under any circumstances,
|
---|
56 | then EFI_ACCESS_DENIED is returned.
|
---|
57 |
|
---|
58 | If the file specified by File with an authentication status specified by
|
---|
59 | AuthenticationStatus is not safe for the DXE Core to use right now, but it
|
---|
60 | might be possible to use it at a future time, then EFI_SECURITY_VIOLATION is
|
---|
61 | returned.
|
---|
62 |
|
---|
63 | @param This The EFI_SECURITY_ARCH_PROTOCOL instance.
|
---|
64 | @param AuthenticationStatus
|
---|
65 | This is the authentication type returned from the Section
|
---|
66 | Extraction protocol. See the Section Extraction Protocol
|
---|
67 | Specification for details on this type.
|
---|
68 | @param File This is a pointer to the device path of the file that is
|
---|
69 | being dispatched. This will optionally be used for logging.
|
---|
70 |
|
---|
71 | @retval EFI_SUCCESS The file specified by File did authenticate, and the
|
---|
72 | platform policy dictates that the DXE Core may use File.
|
---|
73 | @retval EFI_INVALID_PARAMETER Driver is NULL.
|
---|
74 | @retval EFI_SECURITY_VIOLATION The file specified by File did not authenticate, and
|
---|
75 | the platform policy dictates that File should be placed
|
---|
76 | in the untrusted state. A file may be promoted from
|
---|
77 | the untrusted to the trusted state at a future time
|
---|
78 | with a call to the Trust() DXE Service.
|
---|
79 | @retval EFI_ACCESS_DENIED The file specified by File did not authenticate, and
|
---|
80 | the platform policy dictates that File should not be
|
---|
81 | used for any purpose.
|
---|
82 |
|
---|
83 | **/
|
---|
84 | typedef
|
---|
85 | EFI_STATUS
|
---|
86 | (EFIAPI *EFI_SECURITY_FILE_AUTHENTICATION_STATE)(
|
---|
87 | IN CONST EFI_SECURITY_ARCH_PROTOCOL *This,
|
---|
88 | IN UINT32 AuthenticationStatus,
|
---|
89 | IN CONST EFI_DEVICE_PATH_PROTOCOL *File
|
---|
90 | );
|
---|
91 |
|
---|
92 | ///
|
---|
93 | /// The EFI_SECURITY_ARCH_PROTOCOL is used to abstract platform-specific policy
|
---|
94 | /// from the DXE core. This includes locking flash upon failure to authenticate,
|
---|
95 | /// attestation logging, and other exception operations.
|
---|
96 | ///
|
---|
97 | struct _EFI_SECURITY_ARCH_PROTOCOL {
|
---|
98 | EFI_SECURITY_FILE_AUTHENTICATION_STATE FileAuthenticationState;
|
---|
99 | };
|
---|
100 |
|
---|
101 | extern EFI_GUID gEfiSecurityArchProtocolGuid;
|
---|
102 |
|
---|
103 | #endif
|
---|