smvl_main.c
来自「Next BIOS Source code : Extensible Firmw」· C语言 代码 · 共 512 行 · 第 1/2 页
C
512 行
* CSSM_FAIL
*
* Error Codes:
*---------------------------------------------------------------------------*/
CSSM_RETURN
InitializeArchiveConfig(
CSSM_MODULE_HANDLE Handle,
SMVL_CONTEXT_PTR smvlContextPtr)
{
CSSM_VERSION csp_version = {INTEL_CSM_MAJOR_VER, INTEL_CSM_MINOR_VER};
uint32 size;
ISL_STATUS status;
if (smvlContextPtr == NULL) return CSSM_FAIL;
cssm_memset(smvlContextPtr, 0, sizeof(SMVL_CONTEXT_PTR));
smvlContextPtr->CSPHandle = CSSM_ModuleAttach (
&intel_preos_csm_guid,
&csp_version,
NULL,
0,
0,
0,
NULL,
NULL,
NULL,
NULL);
if (smvlContextPtr->CSPHandle == 0) return CSSM_FAIL;
/* Initializing Signature Methods */
#ifdef USE_CSSM_MEM_FUNCS
smvlContextPtr->PKCS7SignatureMethods = cssm_malloc(
sizeof(ISL_SIGNATURE_METHODS),
NULL);
#else
smvlContextPtr->PKCS7SignatureMethods = g_fx.malloc_func(
Handle,
sizeof(ISL_SIGNATURE_METHODS));
#endif
if (smvlContextPtr->PKCS7SignatureMethods == NULL) goto FAIL;
cssm_memcpy(
smvlContextPtr->PKCS7SignatureMethods,
&PKCS7SignatureMethods,
sizeof(ISL_SIGNATURE_METHODS));
#ifdef USE_CSSM_MEM_FUNCS
smvlContextPtr->PKCS7SignatureClass = cssm_malloc(sizeof(ISL_CLASS), NULL);
#else
smvlContextPtr->PKCS7SignatureClass = g_fx.malloc_func(
Handle,
sizeof(ISL_CLASS));
#endif
if (smvlContextPtr->PKCS7SignatureClass == NULL) goto FAIL;
smvlContextPtr->PKCS7SignatureMethods->ServiceMethods.Class =
smvlContextPtr->PKCS7SignatureClass;
size = (uint32)ArchiveConfigMethods.SizeofObject();
#ifdef USE_CSSM_MEM_FUNCS
smvlContextPtr->PKCS7Config = cssm_malloc(size, NULL);
#else
smvlContextPtr->PKCS7Config = g_fx.malloc_func(Handle, size);
#endif
if (smvlContextPtr->PKCS7Config == NULL) goto FAIL;
smvlContextPtr->PKCS7SignatureMethods->ServiceMethods.Class->ClassContext
= smvlContextPtr->PKCS7Config;
/* Initializing JARSHA1 Methods */
smvlContextPtr->JarSHA1Methods = CloneDigestMethod(
Handle,
&JarSHA1Methods,
smvlContextPtr->CSPHandle);
if (smvlContextPtr->JarSHA1Methods == NULL) goto FAIL;
/* Initializing PKCS7DSA Methods */
smvlContextPtr->PKCS7DSAMethods = CloneSignVerifyMethod(
Handle,
&PKCS7DSAMethods,
smvlContextPtr->CSPHandle);
if (smvlContextPtr->PKCS7DSAMethods == NULL) goto FAIL;
size = (uint32)ArchiveConfigMethods.SizeofObject();
#ifdef USE_CSSM_MEM_FUNCS
smvlContextPtr->SMConfig = cssm_malloc(size, NULL);
#else
smvlContextPtr->SMConfig = g_fx.malloc_func(Handle, size);
#endif
if (smvlContextPtr->SMConfig == NULL) goto FAIL;
status = ArchiveConfigMethods.Initialize(
smvlContextPtr->SMConfig,
&gISL_mem_funcs);
if (status != ISL_OK) goto FAIL;
#if 0
status = ArchiveConfigMethods.AddAlgorithm(
smvlContextPtr->SMConfig,
(ISL_SERVICE_CLASS_METHODS*)&getCSSMDataMethods);
if (status != ISL_OK) goto FAIL;
#endif
status = ArchiveConfigMethods.AddAlgorithm(
smvlContextPtr->SMConfig,
(ISL_SERVICE_CLASS_METHODS*)&getMemoryMethods);
if (status != ISL_OK) goto FAIL;
status = ArchiveConfigMethods.AddAlgorithm(
smvlContextPtr->SMConfig,
(ISL_SERVICE_CLASS_METHODS*)&X509CertMethods);
if (status != ISL_OK) goto FAIL;
status = ArchiveConfigMethods.AddAlgorithm(
smvlContextPtr->SMConfig,
(ISL_SERVICE_CLASS_METHODS*)smvlContextPtr->PKCS7SignatureMethods);
if (status != ISL_OK) goto FAIL;
status = ArchiveConfigMethods.AddAlgorithm(
smvlContextPtr->SMConfig,
(ISL_SERVICE_CLASS_METHODS*)smvlContextPtr->JarSHA1Methods);
if (status != ISL_OK) goto FAIL;
status = ArchiveConfigMethods.Initialize(
smvlContextPtr->PKCS7Config,
&gISL_mem_funcs);
if (status != ISL_OK) goto FAIL;
status = ArchiveConfigMethods.AddAlgorithm(
smvlContextPtr->PKCS7Config,
(ISL_SERVICE_CLASS_METHODS*)smvlContextPtr->PKCS7DSAMethods);
if (status != ISL_OK) goto FAIL;
return(ISL_OK);
FAIL:
{
VL_Uninitialize(Handle);
return CSSM_FAIL;
}
}
/*-----------------------------------------------------------------------------
* Name: VL_Initialize
*
* Description:
* This function initializes the VL by checking that the app has requested
* a supported version and by initializing the supporting libraries &
* structures, such as the query table, der encode/decode functions, and
* transport functions.
*
* Parameters:
* VerMajor (input) - The major version number to be compared for compatiblity
* VerMinor (input) - The minor version number to be compared for compatiblity
*
* Return value:
* An indicator of whether or not the VL was initialized
*
* Error Codes:
* CSSM_VL_INITIALIZE_FAIL
*---------------------------------------------------------------------------*/
CSSM_RETURN CSSMVLI VL_Initialize
(CSSM_MODULE_HANDLE Handle,
uint32 VerMajor,
uint32 VerMinor)
{
/* CheckVersion */
if (VerMajor != INTEL_SMV2_VLM_MAJOR_VER ||
VerMinor != INTEL_SMV2_VLM_MINOR_VER)
{
CSSM_SetError(&intel_preos_vlm_guid, CSSM_INCOMPATIBLE_VERSION);
return CSSM_FAIL;
}
if (gsContextPtr != NULL)
{
return CSSM_OK;
}
/* Need to Initialize the Global Configuration */
gISL_mem_funcs.malloc_func = isl_malloc;
gISL_mem_funcs.free_func = isl_free;
gISL_mem_funcs.realloc_func = isl_realloc;
gISL_mem_funcs.calloc_func = isl_calloc;
gISL_mem_funcs.AllocRef = (void*)Handle;
#ifdef USE_CSSM_MEM_FUNCS
gsContextPtr = cssm_malloc(sizeof(SMVL_CONTEXT), NULL);
#else
gsContextPtr = g_fx.malloc_func(Handle, sizeof(SMVL_CONTEXT));
#endif
if (gsContextPtr == NULL) goto FAIL;
cssm_memset(gsContextPtr, 0, sizeof(SMVL_CONTEXT));
if (InitializeArchiveConfig(Handle, gsContextPtr) != CSSM_OK) goto FAIL;
return CSSM_OK;
FAIL:
{
#ifdef USE_CSSM_MEM_FUNCS
cssm_free(gsContextPtr, NULL);
#else
g_fx.free_func(Handle, gsContextPtr);
#endif
gsContextPtr = NULL;
return CSSM_FAIL;
}
}
/*-----------------------------------------------------------------------------
* Name: VL_Uninitialize
*
* Description:
* Uninitializes the VL by uninitializing the supporting libraries
* & structures, such as the query table, der encode/decode functions, and
* transport functions.
*
* Parameters:
*
* Return value:
* An indicator of whether or not the VL was uninitialized
*
* Error Codes:
*---------------------------------------------------------------------------*/
CSSM_RETURN CSSMVLI VL_Uninitialize(CSSM_MODULE_HANDLE Handle)
#pragma warning (disable: 4100)
{
if (gsContextPtr == NULL) return CSSM_OK;
CSSM_ModuleDetach(gsContextPtr->CSPHandle);
ArchiveConfigMethods.Recycle(gsContextPtr->PKCS7Config);
ArchiveConfigMethods.Recycle(gsContextPtr->SMConfig);
#ifdef USE_CSSM_MEM_FUNCS
cssm_free(gsContextPtr->PKCS7SignatureMethods, NULL);
cssm_free(gsContextPtr->JarSHA1Methods, NULL);
cssm_free(gsContextPtr->PKCS7DSAMethods, NULL);
cssm_free(gsContextPtr->PKCS7SignatureClass, NULL);
cssm_free(gsContextPtr->PKCS7Config, NULL);
cssm_free(gsContextPtr->SMConfig, NULL);
cssm_free(gsContextPtr, NULL);
#else
g_fx.free_func(Handle, gsContextPtr->PKCS7SignatureMethods);
g_fx.free_func(Handle, gsContextPtr->JarSHA1Methods);
g_fx.free_func(Handle, gsContextPtr->PKCS7DSAMethods);
g_fx.free_func(Handle, gsContextPtr->PKCS7SignatureClass);
g_fx.free_func(Handle, gsContextPtr->PKCS7Config);
g_fx.free_func(Handle, gsContextPtr->SMConfig);
g_fx.free_func(Handle, gsContextPtr);
#endif
gsContextPtr = NULL;
CSSM_ClearError();
return CSSM_OK;
}
#pragma warning (default: 4100)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?