## @file
#  Provides authenticated variable services.
#
#  Copyright (c) 2015 - 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                      = AuthVariableLib
  MODULE_UNI_FILE                = AuthVariableLib.uni
  FILE_GUID                      = B23CF5FB-6FCC-4422-B145-D855DBC05457
  MODULE_TYPE                    = DXE_RUNTIME_DRIVER
  VERSION_STRING                 = 1.0
  LIBRARY_CLASS                  = AuthVariableLib|DXE_RUNTIME_DRIVER DXE_SMM_DRIVER

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64
#

[Sources]
  AuthVariableLib.c
  AuthService.c
  AuthServiceInternal.h

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec
  SecurityPkg/SecurityPkg.dec
  CryptoPkg/CryptoPkg.dec

[LibraryClasses]
  BaseLib
  BaseMemoryLib
  DebugLib
  MemoryAllocationLib
  BaseCryptLib
  PlatformSecureLib

[Guids]
  ## CONSUMES            ## Variable:L"SetupMode"
  ## PRODUCES            ## Variable:L"SetupMode"
  ## SOMETIMES_CONSUMES  ## Variable:L"PK"
  ## SOMETIMES_CONSUMES  ## Variable:L"KEK"
  ## CONSUMES            ## Variable:L"SecureBoot"
  ## PRODUCES            ## Variable:L"SecureBoot"
  ## CONSUMES            ## Variable:L"SignatureSupport"
  ## PRODUCES            ## Variable:L"SignatureSupport"
  ## PRODUCES            ## Variable:L"VendorKeys"
  gEfiGlobalVariableGuid

  ## SOMETIMES_CONSUMES  ## Variable:L"DB"
  ## SOMETIMES_CONSUMES  ## Variable:L"DBX"
  ## SOMETIMES_CONSUMES  ## Variable:L"DBT"
  gEfiImageSecurityDatabaseGuid

  ## CONSUMES            ## Variable:L"SecureBootEnable"
  ## PRODUCES            ## Variable:L"SecureBootEnable"
  gEfiSecureBootEnableDisableGuid

  ## CONSUMES            ## Variable:L"CustomMode"
  ## PRODUCES            ## Variable:L"CustomMode"
  gEfiCustomModeEnableGuid

  ## CONSUMES            ## Variable:L"certdb"
  ## CONSUMES            ## Variable:L"certdbv"
  ## PRODUCES            ## Variable:L"certdb"
  ## PRODUCES            ## Variable:L"certdbv"
  gEfiCertDbGuid

  ## CONSUMES            ## Variable:L"VendorKeysNv"
  ## PRODUCES            ## Variable:L"VendorKeysNv"
  gEfiVendorKeysNvGuid

  ## CONSUMES            ## Variable:L"AuthVarKeyDatabase"
  ## PRODUCES            ## Variable:L"AuthVarKeyDatabase"
  gEfiAuthenticatedVariableGuid

  gEfiCertTypeRsa2048Sha256Guid  ## SOMETIMES_CONSUMES   ## GUID  # Unique ID for the type of the certificate.
  gEfiCertPkcs7Guid              ## SOMETIMES_CONSUMES   ## GUID  # Unique ID for the type of the certificate.
  gEfiCertX509Guid               ## SOMETIMES_CONSUMES   ## GUID  # Unique ID for the type of the signature.
