// /** @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 - 2018, 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.
//
// **/


#string STR_MODULE_ABSTRACT             #language en-US "Cryptographic Library Instance based on Runtime Crypt Protocol"

#string STR_MODULE_DESCRIPTION          #language en-US "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."

