// /** @file
// NULL platform secure library instance that alway returns TRUE for a user physical present
//
// NULL PlatformSecureLib instance does NOT really detect whether a physical present
// user exists but returns TRUE directly. This instance can be used to verify security
// related features during platform enabling and development. It should be replaced
// by a platform-specific method(e.g. Button pressed) in a real platform for product.
//
// Copyright (c) 2011 - 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.
//
// **/


#string STR_MODULE_ABSTRACT             #language en-US "NULL platform secure library instance that always returns TRUE for a user physical present"

#string STR_MODULE_DESCRIPTION          #language en-US "NULL PlatformSecureLib instance does NOT really detect whether a physical present user exists but returns TRUE directly. This instance can be used to verify security related features during platform enabling and development. It should be replaced by a platform-specific method(e.g. Button pressed) in a real platform for product."

