/** @file
  Unit tests for the implementation of DxeImageVerificationLib.

  Copyright (c) 2026, Yandex. All rights reserved.
  SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#pragma once

#include <Guid/ImageAuthentication.h>
#include <Library/BaseMemoryLib.h>

#include "binfiles/CertGuidCOFF.h"
#include "binfiles/PkcsCOFF.h"
#include "binfiles/TestCertCOFF.h"
#include "binfiles/UnsignedCOFF.h"

/**
  Provide verification service for signed images, which include both signature
validation and platform policy control. For signature types, both UEFI
WIN_CERTIFICATE_UEFI_GUID and MSFT Authenticode type signatures are supported.

  In this implementation, only verify external executables when in USER MODE.
  Executables from FV is bypass, so pass in AuthenticationStatus is ignored.

  The image verification policy is:
    If the image is signed,
      At least one valid signature or at least one hash value of the image must
match a record in the security database "db", and no valid signature nor any
hash value of the image may be reflected in the security database "dbx".
    Otherwise, the image is not signed,
      The hash value of the image must match a record in the security database
"db", and not be reflected in the security data base "dbx".

  Caution: This function may receive untrusted input.
  PE/COFF image is external input, so this function will validate its data
structure within this image buffer before use.

  @param[in]    AuthenticationStatus
                           This is the authentication status returned from the
security measurement services for the input file.
  @param[in]    File       This is a pointer to the device path of the file that
is being dispatched. This will optionally be used for logging.
  @param[in]    FileBuffer File buffer matches the input file device path.
  @param[in]    FileSize   Size of File buffer matches the input file device
path.
  @param[in]    BootPolicy A boot policy that was used to call LoadImage() UEFI
service.

  @retval EFI_SUCCESS            The file specified by DevicePath and non-NULL
                                 FileBuffer did authenticate, and the platform
policy dictates that the DXE Foundation may use the file.
  @retval EFI_SUCCESS            The device path specified by NULL device path
DevicePath and non-NULL FileBuffer did authenticate, and the platform policy
dictates that the DXE Foundation may execute the image in FileBuffer.
  @retval EFI_SECURITY_VIOLATION The file specified by File did not
authenticate, and the platform policy dictates that File should be placed in the
untrusted state. The image has been added to the file execution table.
  @retval EFI_ACCESS_DENIED      The file specified by File and FileBuffer did
not authenticate, and the platform policy dictates that the DXE Foundation may
not use File. The image has been added to the file execution table.

**/
EFI_STATUS
EFIAPI
DxeImageVerificationHandler (
  IN UINT32                          AuthenticationStatus,
  IN CONST EFI_DEVICE_PATH_PROTOCOL  *File OPTIONAL,
  IN VOID                            *FileBuffer,
  IN UINTN                           FileSize,
  IN BOOLEAN                         BootPolicy
  );

//
// The DxeImageVerificationLib.h file has dependencies on Pi/PiFirmwareVolume.h
// and Pi/PiFirmwareFile.h. These macros are copied from the header file to
// prevent PiPei.h from being included in HOST_APPLICATION.
//

//
// Authorization policy bit definition
//
#define ALWAYS_EXECUTE  0x00000000
#define NEVER_EXECUTE   0x00000001

#define HASHALG_SHA1    0x00000000
#define HASHALG_SHA256  0x00000002
#define HASHALG_SHA384  0x00000003
#define HASHALG_SHA512  0x00000004
