## @file
#  Cryptographic Library Instance for SMM driver.
#
#  Caution: This module requires additional review when modified.
#  This library will have external input - signature.
#  This external input must be validated carefully to avoid security issues such as
#  buffer overflow or integer overflow.
#
#  Note: MD4 Digest functions, SHA-384 Digest functions, SHA-512 Digest functions,
#  HMAC-MD5 functions, HMAC-SHA1 functions, TDES/ARC4 functions, RSA external
#  functions, PKCS#7 SignedData sign functions, Diffie-Hellman functions, and 
#  authenticode signature verification functions are not supported in this instance.
#
#  Copyright (c) 2010 - 2017, 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                      = SmmCryptLib
  MODULE_UNI_FILE                = SmmCryptLib.uni
  FILE_GUID                      = 028080a3-8958-4a62-a1a8-0fa1da162007
  MODULE_TYPE                    = DXE_SMM_DRIVER
  VERSION_STRING                 = 1.0
  PI_SPECIFICATION_VERSION       = 0x0001000A
  LIBRARY_CLASS                  = BaseCryptLib|DXE_SMM_DRIVER SMM_CORE

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 ARM AARCH64
#

[Sources]
  Hash/CryptMd4Null.c
  Hash/CryptMd5.c
  Hash/CryptSha1.c
  Hash/CryptSha256.c
  Hash/CryptSha512Null.c
  Hmac/CryptHmacMd5Null.c
  Hmac/CryptHmacSha1Null.c
  Hmac/CryptHmacSha256.c
  Cipher/CryptAes.c
  Cipher/CryptTdesNull.c
  Cipher/CryptArc4Null.c
  Pk/CryptRsaBasic.c
  Pk/CryptRsaExtNull.c
  Pk/CryptPkcs5Pbkdf2.c
  Pk/CryptPkcs7SignNull.c
  Pk/CryptPkcs7Verify.c
  Pk/CryptDhNull.c
  Pk/CryptX509.c
  Pk/CryptAuthenticodeNull.c
  Pk/CryptTsNull.c
  Pem/CryptPem.c

  SysCall/CrtWrapper.c
  SysCall/ConstantTimeClock.c
  SysCall/BaseMemAllocation.c

[Sources.Ia32]
  Rand/CryptRandTsc.c

[Sources.X64]
  Rand/CryptRandTsc.c

[Sources.IPF]
  Rand/CryptRandItc.c

[Sources.ARM]
  Rand/CryptRand.c

[Sources.AARCH64]
  Rand/CryptRand.c

[Packages]
  MdePkg/MdePkg.dec
  CryptoPkg/CryptoPkg.dec

[LibraryClasses]
  BaseLib
  IoLib
  BaseMemoryLib
  MemoryAllocationLib
  OpensslLib
  IntrinsicLib
  PrintLib

#
# Remove these [BuildOptions] after this library is cleaned up
#
[BuildOptions]
  #
  # suppress the following warnings so we do not break the build with warnings-as-errors:
  # C4090: 'function' : different 'const' qualifiers
  #
  MSFT:*_*_*_CC_FLAGS = /wd4090

  GCC:*_GCC44_IA32_CC_FLAGS = "-D__cdecl=__attribute__((cdecl))" "-D__declspec(t)=__attribute__((t))"
  XCODE:*_*_*_CC_FLAGS = -mmmx -msse
