## @file
#  Cryptographic Library Instance based on Runtime Crypt Protocol.
#  This instance will be only used by the Authenticated Variable driver for IPF.
#
#  Note: MD4/MD5/SHA1 Digest functions, HMAC-MD5 functions, HMAC-SHA1 functions, 
#  AES/TDES/ARC4 functions, RSA external functions, PKCS#7 SignedData sign/verify
#  functions, Diffie-Hellman functions, X.509 certificate handler functions,
#  authenticode signature verification functions, PEM handler functions,
#  pseudorandom number generator functions, and Sha256Duplicate() are not supported
#  in this instance.
#
#  Copyright (c) 2010 - 2014, 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                      = BaseCryptLibRuntimeCryptProtocol
  MODULE_UNI_FILE                = BaseCryptLibRuntimeCryptProtocol.uni
  FILE_GUID                      = BBB31581-855A-44D7-A550-8A585D9B2DE9
  MODULE_TYPE                    = DXE_RUNTIME_DRIVER
  VERSION_STRING                 = 1.0
  LIBRARY_CLASS                  = BaseCryptLib|DXE_RUNTIME_DRIVER DXE_SAL_DRIVER
  CONSTRUCTOR                    = RuntimeDxeIpfCryptLibConstructor
  DESTRUCTOR                     = RuntimeDxeIpfCryptLibDestructor
#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IPF
#

[Sources]
  RuntimeDxeIpfCryptLib.c
  InternalCryptLib.h
  Hash/CryptMd4Null.c
  Hash/CryptMd5Null.c
  Hash/CryptSha1Null.c
  Hmac/CryptHmacMd5Null.c
  Hmac/CryptHmacSha1Null.c
  Cipher/CryptAesNull.c
  Cipher/CryptTdesNull.c
  Cipher/CryptArc4Null.c
  Pk/CryptRsaExtNull.c
  Pk/CryptPkcs7SignNull.c
  Pk/CryptPkcs7VerifyNull.c
  Pk/CryptDhNull.c
  Pk/CryptX509Null.c
  Pk/CryptAuthenticodeNull.c
  Pem/CryptPemNull.c
  Rand/CryptRandNull.c

[Packages]
  MdePkg/MdePkg.dec
  CryptoPkg/CryptoPkg.dec

[LibraryClasses]
  BaseLib
  DebugLib
  UefiBootServicesTableLib
  UefiRuntimeLib

[Guids]
  gEfiEventVirtualAddressChangeGuid      ## CONSUMES ## Event

[Protocols]
  gEfiRuntimeCryptProtocolGuid           ## CONSUMES

[Depex]
  gEfiRuntimeCryptProtocolGuid
