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 + -
显示快捷键?