1*f334afcfSToomas Soome /** @file
2*f334afcfSToomas Soome   Security2 Architectural Protocol as defined in PI Specification1.2.1 VOLUME 2 DXE
3*f334afcfSToomas Soome 
4*f334afcfSToomas Soome   Abstracts security-specific functions from the DXE Foundation of UEFI Image Verification,
5*f334afcfSToomas Soome   Trusted Computing Group (TCG) measured boot, and User Identity policy for image loading and
6*f334afcfSToomas Soome   consoles. This protocol must be produced by a boot service or runtime DXE driver.
7*f334afcfSToomas Soome 
8*f334afcfSToomas Soome   This protocol is optional and must be published prior to the EFI_SECURITY_ARCH_PROTOCOL.
9*f334afcfSToomas Soome   As a result, the same driver must publish both of these interfaces.
10*f334afcfSToomas Soome 
11*f334afcfSToomas Soome   When both Security and Security2 Architectural Protocols are published, LoadImage must use
12*f334afcfSToomas Soome   them in accordance with the following rules:
13*f334afcfSToomas Soome     The Security2 protocol must be used on every image being loaded.
14*f334afcfSToomas Soome     The Security protocol must be used after the Securiy2 protocol and only on images that
15*f334afcfSToomas Soome     have been read using Firmware Volume protocol.
16*f334afcfSToomas Soome 
17*f334afcfSToomas Soome   When only Security architectural protocol is published, LoadImage must use it on every image
18*f334afcfSToomas Soome   being loaded.
19*f334afcfSToomas Soome 
20*f334afcfSToomas Soome   Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.<BR>
21*f334afcfSToomas Soome   SPDX-License-Identifier: BSD-2-Clause-Patent
22*f334afcfSToomas Soome 
23*f334afcfSToomas Soome **/
24*f334afcfSToomas Soome 
25*f334afcfSToomas Soome #ifndef __ARCH_PROTOCOL_SECURITY2_H__
26*f334afcfSToomas Soome #define __ARCH_PROTOCOL_SECURITY2_H__
27*f334afcfSToomas Soome 
28*f334afcfSToomas Soome ///
29*f334afcfSToomas Soome /// Global ID for the Security2 Code Architectural Protocol
30*f334afcfSToomas Soome ///
31*f334afcfSToomas Soome #define EFI_SECURITY2_ARCH_PROTOCOL_GUID \
32*f334afcfSToomas Soome   { 0x94ab2f58, 0x1438, 0x4ef1, {0x91, 0x52, 0x18, 0x94, 0x1a, 0x3a, 0x0e, 0x68 } }
33*f334afcfSToomas Soome 
34*f334afcfSToomas Soome typedef struct _EFI_SECURITY2_ARCH_PROTOCOL EFI_SECURITY2_ARCH_PROTOCOL;
35*f334afcfSToomas Soome 
36*f334afcfSToomas Soome /**
37*f334afcfSToomas Soome   The DXE Foundation uses this service to measure and/or verify a UEFI image.
38*f334afcfSToomas Soome 
39*f334afcfSToomas Soome   This service abstracts the invocation of Trusted Computing Group (TCG) measured boot, UEFI
40*f334afcfSToomas Soome   Secure boot, and UEFI User Identity infrastructure. For the former two, the DXE Foundation
41*f334afcfSToomas Soome   invokes the FileAuthentication() with a DevicePath and corresponding image in
42*f334afcfSToomas Soome   FileBuffer memory. The TCG measurement code will record the FileBuffer contents into the
43*f334afcfSToomas Soome   appropriate PCR. The image verification logic will confirm the integrity and provenance of the
44*f334afcfSToomas Soome   image in FileBuffer of length FileSize . The origin of the image will be DevicePath in
45*f334afcfSToomas Soome   these cases.
46*f334afcfSToomas Soome   If the FileBuffer is NULL, the interface will determine if the DevicePath can be connected
47*f334afcfSToomas Soome   in order to support the User Identification policy.
48*f334afcfSToomas Soome 
49*f334afcfSToomas Soome   @param  This             The EFI_SECURITY2_ARCH_PROTOCOL instance.
50*f334afcfSToomas Soome   @param  File             A pointer to the device path of the file that is
51*f334afcfSToomas Soome                            being dispatched. This will optionally be used for logging.
52*f334afcfSToomas Soome   @param  FileBuffer       A pointer to the buffer with the UEFI file image.
53*f334afcfSToomas Soome   @param  FileSize         The size of the file.
54*f334afcfSToomas Soome   @param  BootPolicy       A boot policy that was used to call LoadImage() UEFI service. If
55*f334afcfSToomas Soome                            FileAuthentication() is invoked not from the LoadImage(),
56*f334afcfSToomas Soome                            BootPolicy must be set to FALSE.
57*f334afcfSToomas Soome 
58*f334afcfSToomas Soome   @retval EFI_SUCCESS             The file specified by DevicePath and non-NULL
59*f334afcfSToomas Soome                                   FileBuffer did authenticate, and the platform policy dictates
60*f334afcfSToomas Soome                                   that the DXE Foundation may use the file.
61*f334afcfSToomas Soome   @retval EFI_SUCCESS             The device path specified by NULL device path DevicePath
62*f334afcfSToomas Soome                                   and non-NULL FileBuffer did authenticate, and the platform
63*f334afcfSToomas Soome                                   policy dictates that the DXE Foundation may execute the image in
64*f334afcfSToomas Soome                                   FileBuffer.
65*f334afcfSToomas Soome   @retval EFI_SUCCESS             FileBuffer is NULL and current user has permission to start
66*f334afcfSToomas Soome                                   UEFI device drivers on the device path specified by DevicePath.
67*f334afcfSToomas Soome   @retval EFI_SECURITY_VIOLATION  The file specified by DevicePath and FileBuffer did not
68*f334afcfSToomas Soome                                   authenticate, and the platform policy dictates that the file should be
69*f334afcfSToomas Soome                                   placed in the untrusted state. The image has been added to the file
70*f334afcfSToomas Soome                                   execution table.
71*f334afcfSToomas Soome   @retval EFI_ACCESS_DENIED       The file specified by File and FileBuffer did not
72*f334afcfSToomas Soome                                   authenticate, and the platform policy dictates that the DXE
73*f334afcfSToomas Soome                                   Foundation may not use File.
74*f334afcfSToomas Soome   @retval EFI_SECURITY_VIOLATION  FileBuffer is NULL and the user has no
75*f334afcfSToomas Soome                                   permission to start UEFI device drivers on the device path specified
76*f334afcfSToomas Soome                                   by DevicePath.
77*f334afcfSToomas Soome   @retval EFI_SECURITY_VIOLATION  FileBuffer is not NULL and the user has no permission to load
78*f334afcfSToomas Soome                                   drivers from the device path specified by DevicePath. The
79*f334afcfSToomas Soome                                   image has been added into the list of the deferred images.
80*f334afcfSToomas Soome **/
81*f334afcfSToomas Soome typedef EFI_STATUS (EFIAPI *EFI_SECURITY2_FILE_AUTHENTICATION)(
82*f334afcfSToomas Soome   IN CONST EFI_SECURITY2_ARCH_PROTOCOL *This,
83*f334afcfSToomas Soome   IN CONST EFI_DEVICE_PATH_PROTOCOL    *File  OPTIONAL,
84*f334afcfSToomas Soome   IN VOID                              *FileBuffer,
85*f334afcfSToomas Soome   IN UINTN                             FileSize,
86*f334afcfSToomas Soome   IN BOOLEAN                           BootPolicy
87*f334afcfSToomas Soome   );
88*f334afcfSToomas Soome 
89*f334afcfSToomas Soome ///
90*f334afcfSToomas Soome /// The EFI_SECURITY2_ARCH_PROTOCOL is used to abstract platform-specific policy from the
91*f334afcfSToomas Soome /// DXE Foundation. This includes measuring the PE/COFF image prior to invoking, comparing the
92*f334afcfSToomas Soome /// image against a policy (whether a white-list/black-list of public image verification keys
93*f334afcfSToomas Soome /// or registered hashes).
94*f334afcfSToomas Soome ///
95*f334afcfSToomas Soome struct _EFI_SECURITY2_ARCH_PROTOCOL {
96*f334afcfSToomas Soome   EFI_SECURITY2_FILE_AUTHENTICATION    FileAuthentication;
97*f334afcfSToomas Soome };
98*f334afcfSToomas Soome 
99*f334afcfSToomas Soome extern EFI_GUID  gEfiSecurity2ArchProtocolGuid;
100*f334afcfSToomas Soome 
101*f334afcfSToomas Soome #endif
102