REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1493 Pkcs7GetAttachedContent() implementation in current CryptPkcs7Verify.c is actually shared by RuntimeCryptLib.inf, SmmCryptLib.inf and BaseCryptLib.inf, which are not correct since there's no use scenario for runtime and AllocatePool() used in this method can only be called in boot time. This patch fix this issue by splitting file CryptPkcs7Verify.c into 3 parts. CryptPkcs7VerifyCommon.c (shared among Base, SMM, Runtime) CryptPkcs7VerifyBase.c (shared between Base, SMM) CryptPkcs7VerifyRuntime.c (for Runtime only) CryptPkcs7VerifyBase.c will have original implementation of Pkcs7GetAttachedContent() as CryptPkcs7Verify.c. CryptPkcs7VerifyRuntime.c provide a NULL version of Pkcs7GetAttachedContent(). No functionality and interface change is involved in this patch. Cc: Ting Ye <ting.ye@intel.com> Cc: Qin Long <qin.long@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jian J Wang <jian.j.wang@intel.com> Reviewed-by: Ting Ye <ting.ye@intel.com>
69 lines
2.3 KiB
C
69 lines
2.3 KiB
C
/** @file
|
|
Internal include file for BaseCryptLib.
|
|
|
|
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.
|
|
|
|
**/
|
|
|
|
#ifndef __INTERNAL_CRYPT_LIB_H__
|
|
#define __INTERNAL_CRYPT_LIB_H__
|
|
|
|
#undef _WIN32
|
|
#undef _WIN64
|
|
|
|
#include <Library/BaseLib.h>
|
|
#include <Library/BaseMemoryLib.h>
|
|
#include <Library/MemoryAllocationLib.h>
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/BaseCryptLib.h>
|
|
|
|
#include "CrtLibSupport.h"
|
|
|
|
#include <openssl/opensslv.h>
|
|
|
|
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
#define OBJ_get0_data(o) ((o)->data)
|
|
#define OBJ_length(o) ((o)->length)
|
|
#endif
|
|
|
|
/**
|
|
Check input P7Data is a wrapped ContentInfo structure or not. If not construct
|
|
a new structure to wrap P7Data.
|
|
|
|
Caution: This function may receive untrusted input.
|
|
UEFI Authenticated Variable is external input, so this function will do basic
|
|
check for PKCS#7 data structure.
|
|
|
|
@param[in] P7Data Pointer to the PKCS#7 message to verify.
|
|
@param[in] P7Length Length of the PKCS#7 message in bytes.
|
|
@param[out] WrapFlag If TRUE P7Data is a ContentInfo structure, otherwise
|
|
return FALSE.
|
|
@param[out] WrapData If return status of this function is TRUE:
|
|
1) when WrapFlag is TRUE, pointer to P7Data.
|
|
2) when WrapFlag is FALSE, pointer to a new ContentInfo
|
|
structure. It's caller's responsibility to free this
|
|
buffer.
|
|
@param[out] WrapDataSize Length of ContentInfo structure in bytes.
|
|
|
|
@retval TRUE The operation is finished successfully.
|
|
@retval FALSE The operation is failed due to lack of resources.
|
|
|
|
**/
|
|
BOOLEAN
|
|
WrapPkcs7Data (
|
|
IN CONST UINT8 *P7Data,
|
|
IN UINTN P7Length,
|
|
OUT BOOLEAN *WrapFlag,
|
|
OUT UINT8 **WrapData,
|
|
OUT UINTN *WrapDataSize
|
|
);
|
|
|
|
#endif
|