## @file
#  Provides the capbility to configure secure boot in a setup browser
#  By this module, user may change the content of DB, DBX, PK and KEK.
#
# Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
##

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = SecureBootConfigDxe
  MODULE_UNI_FILE                = SecureBootConfigDxe.uni
  FILE_GUID                      = F0E6A44F-7195-41c3-AC64-54F202CD0A21
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = SecureBootConfigDriverEntryPoint
  UNLOAD_IMAGE                   = SecureBootConfigDriverUnload

#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
#

[Sources]
  SecureBootConfigDriver.c
  SecureBootConfigImpl.c
  SecureBootConfigFileExplorer.c
  SecureBootConfigDevicePath.c
  SecureBootConfigMisc.c
  SecureBootConfigImpl.h
  SecureBootConfig.vfr
  SecureBootConfigStrings.uni
  SecureBootConfigNvData.h

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec
  SecurityPkg/SecurityPkg.dec
  CryptoPkg/CryptoPkg.dec

[LibraryClasses]
  BaseLib
  BaseMemoryLib
  BaseCryptLib
  MemoryAllocationLib
  UefiLib
  UefiBootServicesTableLib
  UefiRuntimeServicesTableLib
  UefiDriverEntryPoint
  UefiHiiServicesLib
  DebugLib
  HiiLib
  PlatformSecureLib
  DevicePathLib
  FileExplorerLib
  PeCoffLib

[Guids]
  ## SOMETIMES_CONSUMES      ## Variable:L"CustomMode"
  ## SOMETIMES_PRODUCES      ## Variable:L"CustomMode"
  gEfiCustomModeEnableGuid

  ## SOMETIMES_CONSUMES      ## Variable:L"SecureBootEnable"
  ## SOMETIMES_PRODUCES      ## Variable:L"SecureBootEnable"
  gEfiSecureBootEnableDisableGuid

  ## SOMETIMES_CONSUMES      ## GUID            # Unique ID for the type of the signature.
  ## SOMETIMES_PRODUCES      ## GUID            # Unique ID for the type of the signature.
  gEfiCertRsa2048Guid

  ## SOMETIMES_CONSUMES      ## GUID            # Unique ID for the type of the signature.
  ## SOMETIMES_PRODUCES      ## GUID            # Unique ID for the type of the signature.
  gEfiCertX509Guid

  ## SOMETIMES_CONSUMES      ## GUID            # Unique ID for the type of the signature.
  ## SOMETIMES_PRODUCES      ## GUID            # Unique ID for the type of the signature.
  gEfiCertSha1Guid

  ## SOMETIMES_CONSUMES      ## GUID            # Unique ID for the type of the signature.
  ## SOMETIMES_PRODUCES      ## GUID            # Unique ID for the type of the signature.
  gEfiCertSha256Guid

  ## SOMETIMES_CONSUMES      ## Variable:L"db"
  ## SOMETIMES_PRODUCES      ## Variable:L"db"
  ## SOMETIMES_CONSUMES      ## Variable:L"dbx"
  ## SOMETIMES_PRODUCES      ## Variable:L"dbx"
  gEfiImageSecurityDatabaseGuid

  ## SOMETIMES_CONSUMES      ## Variable:L"SetupMode"
  ## SOMETIMES_PRODUCES      ## Variable:L"PK"
  ## SOMETIMES_CONSUMES      ## Variable:L"KEK"
  ## SOMETIMES_PRODUCES      ## Variable:L"KEK"
  ## SOMETIMES_CONSUMES      ## Variable:L"SecureBoot"
  gEfiGlobalVariableGuid

  gEfiIfrTianoGuid                              ## PRODUCES            ## GUID       # HII opcode
  ## PRODUCES                ## HII
  ## CONSUMES                ## HII
  gSecureBootConfigFormSetGuid
  gEfiCertPkcs7Guid                             ## SOMETIMES_PRODUCES  ## GUID  # Unique ID for the type of the certificate.
  gEfiCertTypeRsa2048Sha256Guid                 ## SOMETIMES_CONSUMES  ## GUID  # Unique ID for the type of the certificate.
  gEfiFileSystemVolumeLabelInfoIdGuid           ## SOMETIMES_CONSUMES  ## GUID  # Indicate the information type
  gEfiFileInfoGuid                              ## SOMETIMES_CONSUMES  ## GUID  # Indicate the information type

  gEfiCertX509Sha256Guid                        ## SOMETIMES_PRODUCES  ## GUID  # Unique ID for the type of the certificate.
  gEfiCertX509Sha384Guid                        ## SOMETIMES_PRODUCES  ## GUID  # Unique ID for the type of the certificate.
  gEfiCertX509Sha512Guid                        ## SOMETIMES_PRODUCES  ## GUID  # Unique ID for the type of the certificate.

[Protocols]
  gEfiHiiConfigAccessProtocolGuid               ## PRODUCES
  gEfiDevicePathProtocolGuid                    ## PRODUCES
  gEfiSimpleFileSystemProtocolGuid              ## SOMETIMES_CONSUMES
  gEfiBlockIoProtocolGuid                       ## SOMETIMES_CONSUMES

[Depex]
  gEfiHiiConfigRoutingProtocolGuid  AND
  gEfiHiiDatabaseProtocolGuid       AND
  gEfiVariableArchProtocolGuid      AND
  gEfiVariableWriteArchProtocolGuid

[UserExtensions.TianoCore."ExtraFiles"]
  SecureBootConfigDxeExtra.uni
