亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sps.c

?? LINUX AU12XX BOOTLADER
?? C
?? 第 1 頁 / 共 2 頁
字號:
/** * \file * Secure Patch System Code * * \version $Revision$ $State$ *  * \date $Date$ * * \author <a href="mailto:Axel.Wachtler@amd.com">Axel Wachtler</a> *  * \par Last changed by: * $Author$ * *****************************************************************************//* * Copyright 2002 ADVANCED MICRO DEVICES, INC. All Rights Reserved. *  * This software and any related documentation (the "Materials") are the * confidential proprietary information of AMD. Unless otherwise provided * in an agreement specifically licensing the Materials, the Materials are * provided in confidence and may not to be used, distributed, modified, or * reproduced in whole or in part by any means. *  * LIMITATION OF LIABILITY: THE MATERIALS ARE PROVIDED "AS IS" WITHOUT ANY * EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING BUT NOT LIMITED TO * WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, TITLE, FITNESS FOR ANY * PARTICULAR PURPOSE, OR WARRANTIES ARISING FORM CONDUCT, COURSE OF * DEALING, OR USAGE OF TRADE.  IN NO EVENT SHALL AMD OR ITS LICENSORS BE * LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, * DAMAGES FOR LOSS OF PROFITS, BUSINESS INTERRUPTION, OR LOSS OF * INFORMATION) ARISING OUT OF THE USE OF OR INABILITY TO USE THE * MATERIALS, EVEN IF AMD HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH * DAMAGES.  BECAUSE SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR * LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE * ABOVE LIMITATION MAY NOT APPLY TO YOU. *  * AMD does not assume any responsibility for any errors which may appear * in the Materials nor any responsibility to support or update the * Materials.  AMD retains the right to modify the Materials at any time, * without notice, and is not obligated to provide such modified Materials * to you. *  * NO SUPPORT OBLIGATION: AMD is not obligated to furnish, support, or make * any further information, software, technical information, know-how, or * show-how available to you. *  *//******************************************************************************  Includes*****************************************************************************/#include "sec.h"#include "ssfif.h"#include "sps.h"#include "dve_api.h"#include "sps_hc.h"/******************************************************************************  Data*****************************************************************************//******************************************************************************  Static Function Declarations*****************************************************************************//** \defgroup SpsFunctions SPS Functions*//**\{*//** * \brief * Initialize the SPS context. * * The context data are hold in a global structure. * This function have to be called before the first  *  * * \param i is an int * \return SIS_SUCCESS or SIS_FAILURE */SpsSuccess_t SpsInitCtx(SpsContext_t * pCtx){    SpsSuccess_t ret;    ret = SPS_UNSUCCESSFUL;    do {	if (pCtx == NULL) {	    ret = SPS_NULL_PTR_FAIL;	    break;	}	if (pCtx->Magic == SPS_MAGIC) {	    ret = SPS_INIT_FAIL;	    break;	}	ssf_memset(pCtx, 0, sizeof(SpsContext_t));	pCtx->Magic = SPS_MAGIC;	pCtx->OverFlowObserved = FALSE;	/* be sure, cause we do not know, if false is 0 */	ret = SPS_SUCCESSFUL;    }    while (0);    /* show memory diagnostics if apropriate bit is 0 */    if ((SsfGetSecurityEnableMask() & SECURITY_ENABLE_PRNMEMSTAT) == 0) {	SsfUtilMemoryPrintPoolInfo();    }    return ret;}/** * @brief process the info field of a patch package and store *        information in the sps context structure * * @param pCtx  pointer to sps context structure * @param pInfo pointer to patch package info structure * * @return  */SpsSuccess_t SpsProcessInfo(SpsContext_t * pCtx, SpsPpPatchInfo_t * pInfo,			    Int32 Size){    SpsSuccess_t ret;    ret = SPS_UNSUCCESSFUL;    DP0(("==> SpsProcessInfo: SecMask=0x%08x SecDisabled=%d",	 SsfGetSecurityEnableMask(), SsfIsSecurityDisabled()));    do {	if ((pCtx == NULL) || (pInfo == NULL) || (Size < PP_INFO_LENGTH)) {	    ret = SPS_NULL_PTR_FAIL;	    break;	}	/* reset all variables, which depend on a patch package */	SpsResetContext(pCtx);	ret = SpsEvaluatePatchInfo(pInfo);	if (ret != SPS_SUCCESSFUL) {	    break;	}	ret = SpsSecurityInit(pCtx, pInfo);    }    while (0);    /* show memory diagnostics */    if ((SsfGetSecurityEnableMask() & SECURITY_ENABLE_PRNMEMSTAT) == 0) {	SsfUtilMemoryPrintPoolInfo();    }    return ret;}/** * @brief process the header field of a patch package and store *        information in the sps context structure *        (with each call of this function, the offset  *         for the patch buffer is reseted to 0) * * @param pCtx  pointer to sps context structure * @param pData pointer to patch package header structure * * @retval  pNbPatchRecords number of patch records, that stored *                          in the patch package * @retval  pPatchSize netto size of the patch package, e.g. if *                     if 2 records with lenths and 4 and 22,  *                     the return value is: *                             2 * sizeof(Addr)      8  *                          +  2 * sizeof(Length)    8  *                          +  4 * sizeof(int8)      4 (rec 1) *                          + 32 * sizeof(int8)     22 (rec 2) *                          pPatchSize            = 42   *  * @return  */SpsSuccess_t SpsProcessHeader(SpsContext_t * pCtx,			      Int8 * pData, Int32 Size, Int32 * pPatchSize){    SpsSuccess_t ret;    Int32 PrFragNb;    Int32 rsize;#if HSS_SAVE_ALIGMENT    SpsPpPatchHeader_t Hdr;#endif    SpsPpPatchHeader_t *pHdr;    DP0(("==> SpsProcessHeader"));    pHdr = NULL;    ret = SPS_UNSUCCESSFUL;    do {	if ((pCtx == NULL) || (pData == NULL) ||	    (Size != PP_HEADER_LENGTH) || (pPatchSize == NULL)) {	    ret = SPS_NULL_PTR_FAIL;	    break;	}#if HSS_SAVE_ALIGMENT	hss_memcpy(&Hdr, pData, PP_HEADER_LENGTH);	pHdr = &Hdr;#else	pHdr = (SpsPpPatchHeader_t *) pData;#endif	rsize = SpsSecurityUpdate(pCtx, (Int8 *) pHdr, Size);	if (rsize != Size) {	    DP0(("ERROR: invalid patch header"));	    break;	}	ret = SpsEvaluatePatchHeader(pHdr);	if (ret != SPS_SUCCESSFUL) {	    break;	}	ssf_memcpy(&(pCtx->patchheader), pHdr, PP_HEADER_LENGTH);	pCtx->PatchBufferOffset = 0;	PrFragNb = pCtx->patchheader.PrSize / PP_FRAGMENTATION_SIZE;	if ((pCtx->patchheader.PrSize % PP_FRAGMENTATION_SIZE) != 0) {	    PrFragNb++;	}	/* former alignment code for Bug 2105 	 *pPatchSize = pCtx->patchheader.PrSize + sizeof(Int32);	 */	*pPatchSize = pCtx->patchheader.PrSize;	ret = SpsAssignPatchBufferToContext(pCtx);    }    while (0);    /* show memory diagnostics if apropriate bit is 0 */    if ((SsfGetSecurityEnableMask() & SECURITY_ENABLE_PRNMEMSTAT) == 0) {	SsfUtilMemoryPrintPoolInfo();    }    return ret;}/** * @brief * process the patch fragment and copy the patch data to the assigned buffer. *  * * @param pCtx SPS context structure * @param pEpr pointer to a encapsulated patch record * * @return  *         SPS_SUCCESSFUL if operation was ok *         SPS_NULL_PTR_FAIL  if one of the input pointers is NULL *         SPS_NO_BUFFER_FAIL if there was no buffer assigned with SpsAssignMemory() *         SPS_SMALL_BUFFER_FAIL if the buffer is smaller then the expected *                               patch size *  */SpsSuccess_t SpsProcessPrFragment(SpsContext_t * pCtx, Int8 * pData,				  Int32 Size){    SpsSuccess_t ret;    DP0(("==> SpsProcessPrFragment"));    ret = SPS_UNSUCCESSFUL;    do {	if ((pCtx == NULL) || (pData == NULL) || (Size == 0)) {	    ret = SPS_NULL_PTR_FAIL;	    break;	}	/* update security values */	SpsSecurityUpdate(pCtx, (Int8 *) pData, Size);	/* copy values to buffer, if possible */	if (pCtx->pPatchBuffer == NULL) {	    ret = SPS_NO_BUFFER_FAIL;	    break;	}	if ((pCtx->PatchBufferOffset + Size) > pCtx->PatchBufferSize) {	    pCtx->OverFlowObserved = TRUE;	    ret = SPS_SMALL_BUFFER_FAIL;	    break;	}	ssf_memcpy(&pCtx->pPatchBuffer[pCtx->PatchBufferOffset], pData,		   Size);	pCtx->PatchBufferOffset += Size;	/* fix for Bug 2093 */	pCtx->PatchRecordCnt++;	ret = SPS_SUCCESSFUL;    }    while (0);    /* show memory diagnostics if apropriate bit is 0 */    if ((SsfGetSecurityEnableMask() & SECURITY_ENABLE_PRNMEMSTAT) == 0) {	SsfUtilMemoryPrintPoolInfo();    }    return ret;}/** * @brief finish the processing of a patch package *  * @param  pCtx              sps context pointer  * @retval pNbPatchRecords   number of patch records, which are received * @retval pTrustLevel       trust level of the patch (5 is highest) * @retval pVersionInfo      8 byte array of the patch version (2 * Int32) * @retval ppPatchData       address of the shadow buffer with the patch data  * * @return SPS_SUCCESSFUL or errorcode in case of  *         any suspectness of the received patch * */SpsSuccess_t SpsFinalizePp(SpsContext_t * pCtx, Int8 * pTrustLevel,			   char *pVersionInfo, Int8 ** ppPatchData){    SpsSuccess_t ret;    ret = SPS_UNSUCCESSFUL;    DP0(("==> SpsFinalizePp"));    do {	/* at first check for all fatal errors, which invalidate 	   the patch completely */	if ((pCtx == NULL) ||	    (pTrustLevel == NULL) ||	    (pVersionInfo == NULL) || (ppPatchData == NULL)) {	    DP0(("  SPS_NULL_PTR_FAIL\n"));	    ret = SPS_NULL_PTR_FAIL;	    break;	}	if (pCtx->pPatchBuffer == NULL) {	    DP0(("ERROR: SPS_NO_BUFFER_FAIL\n"));	    ret = SPS_NO_BUFFER_FAIL;	    break;	}	if (pCtx->OverFlowObserved != FALSE) {	    DP0(("ERROR: SPS_SMALL_BUFFER_FAIL\n"));	    ret = SPS_SMALL_BUFFER_FAIL;	    break;	}	ret =	    SpsEvaluatePatchBuffer(pCtx->pPatchBuffer,				   pCtx->PatchBufferOffset,				   pCtx->patchheader.PrSize);	if (ret != SPS_SUCCESSFUL) {	    DP0(("ERROR: unconsistent package ret=%d\n", ret));	    break;	}	/* init the return parameters */	*pTrustLevel = SpsComputeTrustLevel(pCtx);	ssf_memcpy(pVersionInfo, &(pCtx->patchheader.VersionInfo[0]),		   PP_VERSION_LENGTH);	*ppPatchData = pCtx->pPatchBuffer;	/* reinitialize the hash chain for the next package */	if ((SsfGetSecurityEnableMask() & SECURITY_ENABLE_HCRESET) != 0) {	    if (*pTrustLevel >= 5) {		/* we can trust this hash value, it is from a good package */		SpsHashChainReset((SpsHashChainWorkspace_t *) pCtx->				  pHashChainWorkspace,				  &pCtx->patchheader.sha1[0]);	    } else {		/* forget the hash value in this package, it is probably poison */		SpsHashChainReset((SpsHashChainWorkspace_t *) pCtx->				  pHashChainWorkspace, NULL);	    }	}	pCtx->PatchPkgCounter++;	DP0(("pakage %d processed [size=%d, truslevel=%d]",	     pCtx->PatchPkgCounter, pCtx->patchheader.PrSize,	     *pTrustLevel));	ret = SPS_SUCCESSFUL;    }    while (0);    SpsResetContext(pCtx);    /* show memory diagnostics if apropriate bit is 0 */    if ((SsfGetSecurityEnableMask() & SECURITY_ENABLE_PRNMEMSTAT) == 0) {	SsfUtilMemoryPrintPoolInfo();    }    return ret;}/* ------------------------------------------------------------------------- *//** \defgroup SpsInternalFunctions SPS Internal Functions*//**\{*//** * @brief evaluate patch info structure * * @param pInfo pointer to structure *  * @return SPS_SUCCESSFUL in case of success *         SPS_NULL_PTR_FAIL in case of null pointer *         SPS_PINFO_FAIL if magic number is wrong */SpsSuccess_t SpsEvaluatePatchInfo(SpsPpPatchInfo_t * pInfo){    SpsSuccess_t ret;    ret = SPS_UNSUCCESSFUL;    do {	if (pInfo == NULL) {	    ret = SPS_NULL_PTR_FAIL;	    break;	}	if (pInfo->MagicNb != PP_MAGIC_NUMBER) {	    ret = SPS_PINFO_FAIL;	    break;	}	ret = SPS_SUCCESSFUL;    }    while (0);    return ret;}/** * @brief evaluate patch header structure * * @param pHeader pointer to structure * 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久蜜桃一区二区| 精品国产电影一区二区| 91精品麻豆日日躁夜夜躁| 精品福利一二区| 亚洲精品国产视频| 国产精品18久久久久| 欧美性猛交xxxx乱大交退制版| 337p粉嫩大胆色噜噜噜噜亚洲| 午夜精品国产更新| 国产成人自拍网| 在线免费亚洲电影| 久久一夜天堂av一区二区三区| 亚洲小说欧美激情另类| 成人在线综合网| 日韩欧美在线1卡| 亚洲一卡二卡三卡四卡无卡久久| 国产呦精品一区二区三区网站| 欧美又粗又大又爽| 国产精品乱码久久久久久| 日韩精品一级中文字幕精品视频免费观看 | 99久久精品免费| 日韩免费性生活视频播放| 一区二区三区欧美激情| av男人天堂一区| 国产婷婷一区二区| 国内久久婷婷综合| 日韩一区二区三区视频在线观看| 免费在线观看一区| 欧美亚洲一区三区| 亚洲欧美激情插| 成人免费黄色在线| 国产女主播一区| 国产成人亚洲精品青草天美| 日韩女优毛片在线| 蜜臂av日日欢夜夜爽一区| 欧美人体做爰大胆视频| 亚洲国产视频直播| 欧美日韩不卡视频| 亚洲aaa精品| 91精品国产免费久久综合| 亚洲777理论| 69堂亚洲精品首页| 久久精品久久综合| 久久久久综合网| aaa欧美日韩| 亚洲激情成人在线| 色婷婷综合久久久| 亚洲精品你懂的| 欧美日韩成人综合在线一区二区| 亚洲一级片在线观看| 欧美日韩国产高清一区| 午夜一区二区三区在线观看| 欧美精品黑人性xxxx| 欧美aⅴ一区二区三区视频| 欧美一区二区在线免费播放| 另类专区欧美蜜桃臀第一页| 久久久久久久精| 色偷偷成人一区二区三区91| 亚洲成国产人片在线观看| 日韩一二三区不卡| 美女视频免费一区| 久久蜜桃av一区二区天堂| 国产传媒一区在线| 亚洲四区在线观看| 欧美精品在线一区二区三区| 韩国女主播一区| 成人欧美一区二区三区白人| 91网上在线视频| 麻豆精品一区二区av白丝在线| 欧美韩国日本综合| 色老汉av一区二区三区| 视频精品一区二区| 中文字幕电影一区| 国产精品久久国产精麻豆99网站| 97久久超碰精品国产| 日韩国产欧美在线视频| 日本一区二区三区久久久久久久久不| 日本韩国精品在线| 国内精品在线播放| 亚洲国产毛片aaaaa无费看| 26uuu国产日韩综合| 色哟哟国产精品| 国模大尺度一区二区三区| 亚洲激情成人在线| 国产女人aaa级久久久级 | 制服丝袜中文字幕亚洲| 成人午夜免费视频| 麻豆精品视频在线| 亚洲黄色免费电影| 亚洲国产精品国自产拍av| 91精品国产一区二区三区蜜臀| 成人爱爱电影网址| 狠狠v欧美v日韩v亚洲ⅴ| 一区二区三区免费看视频| 久久精品网站免费观看| 欧美日韩大陆一区二区| 91在线观看美女| 国产精品系列在线播放| 亚洲国产精品久久久男人的天堂| 国产肉丝袜一区二区| 欧美一区二区女人| 欧美猛男gaygay网站| 一本一道波多野结衣一区二区| 国产91精品精华液一区二区三区| 日本欧美在线观看| 亚洲国产cao| 亚洲精品乱码久久久久久黑人| 久久精品亚洲一区二区三区浴池| 欧美一区二区三区免费视频| 91国产免费看| 91亚洲国产成人精品一区二三 | 成人三级伦理片| 日韩av电影一区| 视频一区二区国产| 免费成人小视频| 免费日韩伦理电影| 免费成人av资源网| 久久99热这里只有精品| 一本一道久久a久久精品| 国产成人99久久亚洲综合精品| 国内精品久久久久影院一蜜桃| 麻豆精品视频在线| 韩国中文字幕2020精品| 国产精品综合二区| 狠狠色丁香久久婷婷综合丁香| 七七婷婷婷婷精品国产| 亚洲一区自拍偷拍| 亚洲第一激情av| 美国av一区二区| 天天综合日日夜夜精品| 午夜精品久久久久久久久久久 | 色婷婷综合激情| 欧美日韩亚洲不卡| 91麻豆精品国产91久久久久久久久 | 免费观看日韩电影| 久久99精品一区二区三区| 久99久精品视频免费观看| 国产综合久久久久影院| 国产乱码精品1区2区3区| 成人福利视频在线看| 一本久道中文字幕精品亚洲嫩| 日本精品一区二区三区高清 | 91麻豆精品91久久久久久清纯| 欧美精品久久久久久久久老牛影院| 91麻豆精品国产| 国产日本欧美一区二区| 亚洲最新在线观看| 精品国产乱码久久久久久久 | 亚洲自拍偷拍网站| 日韩激情视频网站| 国产精品一区二区久久不卡| 99久久久国产精品免费蜜臀| 欧美日精品一区视频| 精品美女在线观看| 亚洲免费观看高清完整版在线| 日韩不卡免费视频| 成人免费视频免费观看| 精品视频免费看| 欧美激情一区二区| 人人精品人人爱| 色综合一区二区| 久久综合999| 亚洲综合在线五月| 国产精品一级片| 欧美丰满嫩嫩电影| 国产精品久久久久一区二区三区| 亚洲成人av电影| 99re成人在线| 精品国产乱码久久久久久1区2区| 一区二区三国产精华液| 国产精品一区二区久久不卡| 欧美久久久久久久久久| 国产精品久久久久婷婷| 乱中年女人伦av一区二区| 欧美日韩在线观看一区二区 | 91亚洲大成网污www| 欧美成人福利视频| 亚洲福利视频一区二区| 不卡一区二区在线| 精品国产第一区二区三区观看体验| 亚洲人成网站色在线观看| 国内精品伊人久久久久影院对白| 欧美日韩1区2区| 亚洲欧美激情一区二区| 国产精品一区二区91| 精品久久国产老人久久综合| 亚洲bt欧美bt精品777| 色狠狠一区二区| 国产精品国产a级| 国产精品一区二区三区99| 日韩欧美一二区| 日韩av不卡在线观看| 在线观看日韩精品| 亚洲免费观看高清完整版在线观看| 成人精品视频网站| 日本一区二区三区四区| 成人一区二区视频| 国产精品成人午夜| 成人激情黄色小说| 亚洲视频资源在线|