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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sps.c

?? LINUX AU12XX BOOTLADER
?? C
?? 第 1 頁 / 共 2 頁
字號:
 * @return SPS_SUCCESSFUL in case of success *         SPS_NULL_PTR_FAIL in case of null pointer *         SPS_PHEADER_FAIL if size and number of patch records  *                          is inconsistent */SpsSuccess_t SpsEvaluatePatchHeader(SpsPpPatchHeader_t * pHeader){    SpsSuccess_t ret;    ret = SPS_UNSUCCESSFUL;    do {	if (pHeader == NULL) {	    ret = SPS_NULL_PTR_FAIL;	    break;	}	if (pHeader->PrSize < 4) {	    ret = SPS_PHEADER_FAIL;	    break;	}	ret = SPS_SUCCESSFUL;    }    while (0);    return ret;}/** * @brief check consistency of the shadow patch buffer * validates the sizes, lengths and number of patch records * of the received data * * @param pBuf      address of the patch shadow buffer * @param Size      size of the patch shadow buffer * @param PrNb      number of expected patch records * @param PrSize    expected patch data size * * @return  SPS_SUCCESSFUL or error code in case of any inconsitency * */SpsSuccess_t SpsEvaluatePatchBuffer(Int8 * pBuf, Int32 Size, Int32 PrSize){    SpsSuccess_t ret;    SpsPpPatchRecord_t *pPr;    Int32 offset, prcnt;    ret = SPS_UNSUCCESSFUL;    do {	if ((pBuf == NULL) || (Size == 0)) {	    ret = SPS_NULL_PTR_FAIL;	    break;	}#if 0	offset = 0;	prcnt = 0;	/* iterate over data - patch record by patch record */	while (offset < Size) {	    if ((Size - offset) < PP_PR_MIN_SIZE) {		/* not enough for a valid patch record */		break;	    }	    pPr = (SpsPpPatchRecord_t *) & (pBuf[offset]);	    prcnt++;	    offset += pPr->Length + PP_PR_HEADER_LENGTH;	}	/* we received not exact the amount of data, that we received in all fragments */	if (offset != Size) {	    ret = SPS_PP_DATASIZE_FAIL;	    break;	}	/* we did not receive the expected amount data */	if (offset != PrSize) {	    ret = SPS_EPR_LENGTH_FAIL;	    break;	}	/* in the data we did not found the expected number of patch records */	if (prcnt != PrNb) {	    ret = SPS_PP_NBPR_FAIL;	    break;	}#endif	/* at this point the check is passed */	ret = SPS_SUCCESSFUL;    }    while (0);    return ret;}/** * @brief retrieve from the ssf context the  *        shadow buffer, where the patch data are stored *        before they cpoied  to the patch RAM. *  * @param pCtx  pointer to sps context structure  * * @return  SPS_SUCCESSFUL or error code if something goes wrong * */SpsSuccess_t SpsAssignPatchBufferToContext(SpsContext_t * pCtx){    SpsSuccess_t ret;    SsfSuccess_t retssf;    ret = SPS_UNSUCCESSFUL;    do {	if (pCtx == NULL) {	    ret = SPS_NULL_PTR_FAIL;	    break;	}	pCtx->pPatchBuffer = NULL;	pCtx->PatchBufferSize = 0;	retssf =	    SsfGetSpsBuffer(&pCtx->pPatchBuffer, &pCtx->PatchBufferSize);	if (retssf != SSF_SUCCESSFUL) {	    break;	}	if (pCtx->patchheader.PrSize > pCtx->PatchBufferSize) {	    pCtx->OverFlowObserved = 1;	    ret = SPS_SMALL_BUFFER_FAIL;	    break;	}	ret = SPS_SUCCESSFUL;    }    while (0);    return ret;}/**  * @brief validates the EPR record *        if this function returns success, the PR Data are  *        installed in the PatchBuffer  * * @param pEpr pointer to encapsulate patch record * * @return SPS_SUCCESSFUL */SpsSuccess_t SpsEvaluateEprData(SpsPpPatchRecord_t * pPr){    SpsSuccess_t ret;    do {	if (pPr == NULL) {	    ret = SPS_NULL_PTR_FAIL;	    break;	}	if (pPr->Length < PP_PR_MIN_LENGTH) {	    ret = SPS_EPR_LENGTH_FAIL;	    break;	}	if (pPr->Length > PP_PR_MAX_LENGTH) {	    ret = SPS_EPR_LENGTH_FAIL;	    break;	}	ret = SPS_SUCCESSFUL;    }    while (0);    return ret;}/** * @brief reset all variables in the SPS context,  *        which depend on a patch package; * * @param pCtx  pointer to SPS context structure  * * @return SPS_UNSUCCESSFUL if pCtx is NULL, otherwise  *         SPS_SUCCESSFUL */SpsSuccess_t SpsResetContext(SpsContext_t * pCtx){    SpsSuccess_t ret;    ret = SPS_UNSUCCESSFUL;    if (pCtx != NULL) {	if (TRUE == SpsIsPatchChainComplete(&pCtx->patchheader)) {	    DP0(("SPS Reset: patch chain end!"));	    if (pCtx->pDveWorkspace != NULL) {		DP0(("SPS Reset: free pDveWorkspace"));		SsfFree(pCtx->pDveWorkspace);		pCtx->pDveWorkspace = NULL;	    }	} else {	    DP0(("SPS Reset: patch chain continues!"));	}	pCtx->OverFlowObserved = FALSE;	pCtx->TrustedEncrKey = FALSE;	pCtx->WithSignature = FALSE;	ssf_memset(&pCtx->patchheader, 0, sizeof(SpsPpPatchHeader_t));	pCtx->PatchRecordCnt = 0;	ret = SPS_SUCCESSFUL;    }    return ret;}/** * @brief setup the decrypt and signature context * @param pCtx      sps context pointer * @param pInfo     Info Structure pointer *  * @return SPS_UNSUCCESSFUL in any case of error *         else SPS_SUCCESSFUL */SpsSuccess_t SpsSecurityInit(SpsContext_t * pCtx, SpsPpPatchInfo_t * pInfo){    SpsSuccess_t ret;    Int32 i;    Int8 val;    ret = SPS_UNSUCCESSFUL;    do {	/* setup security, if patch is a signed patch */	/* check the encryption key, if Iv is 0, then it's untrusted */	val = 0;	for (i = 0; i < PP_CRYPT_IV_LENGTH; i++) {	    val += pInfo->Iv[i];	}	if (val != 0) {	    pCtx->TrustedEncrKey = TRUE;	} else {	    pCtx->TrustedEncrKey = FALSE;	}	/* check if it looks like a signature */	val = 0;	for (i = 0; i < PP_SIGNATURE_DATA_SIZE; i++) {	    val |= pInfo->SigData[i];	}	/* if it is a signed patch, setup security */	/* todo mgrell: review this check; is it secure? */	if (val != PP_INVALID_SIGNATURE_PATTERN) {	    DP0(("SPS: patch is signed"));	    pCtx->WithSignature = TRUE;	    if (pCtx->pDveWorkspace == NULL) {		DP0(("SPS: allocate new workspace"));		pCtx->pDveWorkspace = SsfMalloc(sizeof(dve_workspace_t));		if ((SsfGetSecurityEnableMask() & SECURITY_ENABLE_DVEINIT)		    != 0) {		    DP0(("SPS: dve init"));		    dve_init(pInfo->SigData, pInfo->Iv,			     pCtx->pDveWorkspace);		}	    }	    i = 0;	    if ((SsfGetSecurityEnableMask() & SECURITY_ENABLE_DVEPROCESS)		!= 0) {		DP0(("SPS: dve process info"));		i = dve_process(pInfo->SigData, PP_SIGNATURE_DATA_SIZE,				pCtx->IntCheckMode);	    }	    if (0 != i) {		DP0(("SPS: invalid security header"));		ret = SPS_UNSUCCESSFUL;		break;	    }	} else {	    DP0(("SPS: patch is not signed"));	    pCtx->WithSignature = FALSE;	}	/* processing of hash chain */	if (pCtx->pHashChainWorkspace == NULL) {	    pCtx->pHashChainWorkspace = SsfMalloc(SPS_HC_WORKSPACE_SIZE);	    ssf_memset(pCtx->pHashChainWorkspace, 0,		       SPS_HC_WORKSPACE_SIZE);	}	ret = SPS_SUCCESSFUL;	if ((SsfGetSecurityEnableMask() & SECURITY_ENABLE_HCINIT) != 0) {	    DP0(("SPS: hc init"));	    ret =		SpsHashChainInit((SpsHashChainWorkspace_t *) pCtx->				 pHashChainWorkspace);	}	if (ret != SPS_SUCCESSFUL) {	    DP0(("SPS: error setup hash chain\n"));	    break;	}	ret = SPS_SUCCESSFUL;    }    while (0);    return ret;}/** * @brief update a data block with the security function *        * @param pCtx      pointer to SPS context * @param pData     pointer to data buffer *                  because the decryption of data occurs in place,  *                  the buffer is overwritten with the decrypted data * @param Size      number of bytes to process * * @return          number of processed bytes */Int32 SpsSecurityUpdate(SpsContext_t * pCtx, Int8 * pData, Int32 Size){    Int32 ret;    ret = Size;    if (pCtx->pDveWorkspace != NULL) {	/* it's a dve fragment */	if ((SsfGetSecurityEnableMask() & SECURITY_ENABLE_DVEPROCESS) != 0) {	    ret = dve_process(pData, Size, pCtx->IntCheckMode);	}    }    /* we discard here the return value, no matter, what happens, we      * will see later     */    if ((SsfGetSecurityEnableMask() & SECURITY_ENABLE_HCPROCESS) != 0) {	SpsHashChainProcess((SpsHashChainWorkspace_t *) pCtx->			    pHashChainWorkspace, pData, Size);    }    return ret;}/** * @brief evaluate the security level of the  *        current patch  * @param pCtx patch context structure *  * @return numeric value of trust level *         trusted encr key used : 1 point *         patch is signed       : 1 point *         signature check ok    : 3 points * */Int8 SpsComputeTrustLevel(SpsContext_t * pCtx){    Int8 ret;    int retsig;    ret = 0;    do {	if (pCtx == NULL) {	    break;	}	if (pCtx->WithSignature == TRUE) {	    ret++;	}	if (pCtx->TrustedEncrKey == TRUE) {	    ret++;	}	if (pCtx->pDveWorkspace != NULL) {	    retsig = 0;	    if ((SsfGetSecurityEnableMask() & SECURITY_ENABLE_DVESIGCHK) !=		0) {		/* this saves time, we do not try to check the		 * 0x55 dummy signature pattern (chained patch)		 */		if (pCtx->WithSignature == TRUE) {		    retsig = dve_sigcheck();		    DP0(("SPS: sig check result is %d", retsig));		}	    }	    if (retsig == 0) {		ret += 3;	    }	}	if ((SsfGetSecurityEnableMask() & SECURITY_ENABLE_HCCHK) != 0) {	    ret +=		SpsHashChainCheckHash((SpsHashChainWorkspace_t *) pCtx->				      pHashChainWorkspace);	}    }    while (0);    return ret;}/** * @brief test, if the patch chain is finished.  *         * @param pHeader   pointer to the patch header *  * @return TRUE, if the whole sha1 field consists  *         of PP_PATCH_CHAIN_END_PATTERN (0xaa) *         otherwise FALSE */Boolean SpsIsPatchChainComplete(SpsPpPatchHeader_t * pHeader){    Boolean ret;    Int32 i;    Int8 val;    ret = FALSE;    if (pHeader != NULL) {	val = 0;	for (i = 0; i < PP_SHA1_LENGTH; i++) {	    val |= pHeader->sha1[i];	}	if (val == PP_PATCH_CHAIN_END_PATTERN) {	    ret = TRUE;	}    }    return ret;}/**\}*//* ------------------------------------------------------------------------- *//**\}*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲愉拍自拍另类高清精品| 日韩成人一区二区三区在线观看| 一区二区三区四区蜜桃| 蜜臀久久久久久久| 91欧美激情一区二区三区成人| 日韩精品一区二区在线观看| 亚洲欧美激情视频在线观看一区二区三区| 国内精品久久久久影院一蜜桃| 色乱码一区二区三区88| 国产精品毛片高清在线完整版| 免费在线成人网| 欧美三级电影一区| 亚洲日本乱码在线观看| 成人av免费在线播放| 久久蜜桃av一区精品变态类天堂| 日韩成人午夜电影| 欧美网站一区二区| 亚洲人成在线观看一区二区| 国产精品一级片| 精品福利av导航| 免费人成在线不卡| 欧美日韩亚洲不卡| 亚洲精品国产一区二区精华液 | 91色|porny| 国产欧美va欧美不卡在线| 激情图片小说一区| 欧美tickling挠脚心丨vk| 美女在线一区二区| 精品国偷自产国产一区| 蜜桃精品在线观看| 日韩欧美国产成人一区二区| 免费成人在线网站| 日韩美女视频在线| 久久电影网电视剧免费观看| 日韩免费在线观看| 国产一区二区三区四区在线观看 | 麻豆国产欧美日韩综合精品二区| 欧美日韩精品欧美日韩精品| 亚洲成年人影院| 91精品国产入口在线| 美女国产一区二区| 2017欧美狠狠色| 成人激情图片网| 樱花影视一区二区| 欧美一区二区高清| 国产自产高清不卡| 亚洲欧洲在线观看av| 欧洲av在线精品| 日韩国产欧美在线视频| www国产亚洲精品久久麻豆| 国产一区视频导航| 亚洲视频一区在线| 7777精品伊人久久久大香线蕉完整版| 日韩和欧美一区二区三区| 欧美大片日本大片免费观看| 豆国产96在线|亚洲| 亚洲精品精品亚洲| 精品国产伦一区二区三区观看体验| 国产精品99久久久久久似苏梦涵 | 婷婷综合在线观看| 精品国产sm最大网站免费看| www.亚洲人| 日本一不卡视频| 日本一区二区三区国色天香| 欧美午夜在线一二页| 国产乱一区二区| 一级女性全黄久久生活片免费| 精品日韩一区二区三区免费视频| 成人激情免费网站| 日本一区中文字幕| 亚洲色图都市小说| 26uuu久久天堂性欧美| av电影在线观看完整版一区二区| 偷拍一区二区三区四区| 国产精品久久毛片| 日韩欧美精品三级| 色综合天天视频在线观看| 精品一区二区在线播放| 亚洲线精品一区二区三区八戒| 久久久国产午夜精品| 欧美高清视频不卡网| 波多野结衣视频一区| 狂野欧美性猛交blacked| 亚洲人吸女人奶水| 国产亚洲一区二区三区| 欧美疯狂性受xxxxx喷水图片| 国产91富婆露脸刺激对白| 日韩国产精品久久久久久亚洲| 1000精品久久久久久久久| 欧美sm极限捆绑bd| 欧美高清你懂得| 欧美亚洲丝袜传媒另类| 色综合中文综合网| 久久综合九色综合97婷婷| 欧美日韩一本到| 色菇凉天天综合网| av中文字幕不卡| 国产一区在线不卡| 激情六月婷婷综合| 久久国产精品第一页| 香蕉成人伊视频在线观看| 1000部国产精品成人观看| 欧美极品少妇xxxxⅹ高跟鞋 | 日韩高清不卡一区| 一区二区三区在线免费播放| 亚洲欧美在线另类| 国产精品视频免费| 欧美国产日韩亚洲一区| 欧美成人一区二区三区片免费| 欧美日韩视频专区在线播放| 在线一区二区三区四区五区| 91国产丝袜在线播放| 色美美综合视频| 在线影视一区二区三区| 欧美亚洲国产一区二区三区| 91福利国产成人精品照片| 91国偷自产一区二区开放时间| 91污片在线观看| 色8久久人人97超碰香蕉987| 91免费在线视频观看| 91蜜桃免费观看视频| 91麻豆国产福利在线观看| 色吊一区二区三区| 91精品国产综合久久福利软件| 欧美欧美欧美欧美首页| 日韩欧美中文一区| 欧美精品一区二区三区在线播放| 久久精品亚洲一区二区三区浴池 | 欧美tickling挠脚心丨vk| 久久综合九色综合久久久精品综合| 国产亚洲精品免费| 1000部国产精品成人观看| 亚洲高清在线精品| 美腿丝袜一区二区三区| 处破女av一区二区| 91色在线porny| 3d成人h动漫网站入口| 精品国产三级电影在线观看| 国产欧美一区二区三区鸳鸯浴| 一区二区三区欧美日| 亚洲v中文字幕| 国产一区二区女| 91香蕉视频mp4| 欧美一级二级三级蜜桃| 国产精品免费网站在线观看| 亚洲图片欧美综合| 国产伦精一区二区三区| 色香蕉久久蜜桃| 日韩欧美成人一区二区| 中文字幕视频一区| 免费在线观看一区| 99久久99久久综合| 日韩欧美激情在线| 一区二区三区免费网站| 激情综合一区二区三区| 在线观看国产91| 久久精品人人做人人爽人人| 一二三区精品福利视频| 精油按摩中文字幕久久| 一本色道久久综合狠狠躁的推荐| 日韩免费看的电影| 亚洲成人一二三| 99久久久免费精品国产一区二区| 在线播放中文一区| 亚洲伦在线观看| 国产精品伊人色| 欧美一区二区三区婷婷月色| 亚洲欧美自拍偷拍色图| 韩日av一区二区| 欧美日韩国产一区二区三区地区| 久久精品视频在线免费观看| 五月天激情小说综合| 91免费视频大全| 国产欧美日韩在线| 国产一区二区三区在线观看精品 | 欧美日韩亚洲综合在线| 中文字幕中文字幕一区| 国产综合成人久久大片91| 欧美丰满少妇xxxbbb| 国产精品亚洲一区二区三区妖精| 99在线精品一区二区三区| 欧美丰满一区二区免费视频| 国产精品久久99| 国产精品综合在线视频| 日韩精品专区在线| 亚洲成人免费看| 欧美日韩视频一区二区| 亚洲日本在线看| 99精品1区2区| 中文字幕欧美一| 91同城在线观看| 亚洲欧洲www| 成人av电影观看| 日本一区二区免费在线| 国产成人av电影在线| 久久久久久久免费视频了| 国产精品系列在线播放| 国产欧美一区二区精品仙草咪| 国产一二精品视频| 国产亚洲欧洲一区高清在线观看|