⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sha1digest.c

📁 Next BIOS Source code : Extensible Firmware Interface
💻 C
字号:
/*

Copyright (c)  1999 - 2002 Intel Corporation. All rights reserved
This software and associated documentation (if any) is furnished
under a license and may only be used or copied in accordance
with the terms of the license. Except as permitted by such
license, no part of this software or documentation may be
reproduced, stored in a retrieval system, or transmitted in any
form or by any means without the express written consent of
Intel Corporation.

*/

//************************************************************************************************//
// sha1Digest
//
// Description: create a sha1 digest of one of more CSSM_DATA items.
//      The output in provided
// 
//
/*Placeholder_for_source_control_strings*/
//************************************************************************************************//



#include <BIS_PRIV.H>




//--------------------------------------------------------------------------------//
//  sha1Digest - compute a SHA1 digest of one or more input buffers.
//
//  PARMS:  
//    BIS_APPINFO_PTR  appInfo      - appInfo structure
//    CSSM_DATA        dataBufs[]   - array of 1 or more data bufs to digest.
//    UINT32           nbrDataBufs  - nbr elements in array.
//    BIS_DATA_PTR     *digestOut   - [OUT] pointer to digest area, which
//                                    must be MEM_free'd eventually.
//
//
//  returns: BIS_OK on success.
//----------------------------------------------------------------------------------//



EFI_STATUS 
sha1Digest( 
     BIS_APPINFO_PTR  appInfo
    ,CSSM_DATA        dataBufs[]
    ,UINT32           nbrDataBufs
    ,BIS_DATA_PTR     *digestOut
    )
{
    #define SHA1_DIGEST_SIZE_IN_BYTES 20

    BIS_DATA_PTR     sha1DigestBisData= BIS_NULL;
    CSSM_DATA        sha1Digest;

    APP_CSSMINFO_PTR cssmInfo=  appInfo->pCssmInfo;
    CSSM_CC_HANDLE   hCC=       CSSM_INVALID_HANDLE;
    EFI_STATUS       rc=        EFI_SUCCESS;
    
    
    //Set output value as if failed.
    *digestOut= BIS_NULL;

    //Create structure to hold the Digest
    sha1DigestBisData= 
    MEM_allocBisData( appInfo, SHA1_DIGEST_SIZE_IN_BYTES );
    if ( sha1DigestBisData == BIS_NULL)
    {
        rc= EFI_OUT_OF_RESOURCES;
    }


    //Continue if alloc OK.
    if (rc==EFI_SUCCESS)
    {
        //Put Structure into CSSM format.
        sha1Digest.Length= sha1DigestBisData->length;
        sha1Digest.Data=   sha1DigestBisData->data;

    
        //Prep to do digest.
        hCC= CSSM_CSP_CreateDigestContext(cssmInfo->hCSP, CSSM_ALGID_SHA1);
        if (hCC==CSSM_INVALID_HANDLE)
        {
            rc=  EFI_DEVICE_ERROR;
        }


        //Continue if Created OK.
        if ( rc == EFI_SUCCESS)
        {
            //Create a SHA_1 digest of input data items.
            rc= CSSM_DigestData(hCC, dataBufs, nbrDataBufs, &sha1Digest); 
            if (rc != CSSM_OK)
            {
                saveCssmErr( appInfo->pCssmInfo );
                rc= EFI_DEVICE_ERROR;
            }

        }

    }
    
    
    //Free the digest if errors have occured    
    if ( rc != EFI_SUCCESS && sha1DigestBisData != BIS_NULL)
    {
        MEM_free(appInfo, sha1DigestBisData );
    }
    else    //Pass digest back to caller.
    {
        *digestOut= sha1DigestBisData;
    }


    //Free cssm handle if valid
    if ( hCC != CSSM_INVALID_HANDLE )
    {
        CSSM_DeleteContext(hCC);
    }

    return  rc;

}


//eof

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -