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

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

?? cipherserver.c

?? 一個加密庫代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#endif
				if (keybuf == NULL)
					return CIPHERSERVER_ERROR_OUTOFMEMORY;
			}
			else
			{
				keybuf = NULL;
			}

			for (lI = 0; lI < lKeySize; lI++)
				keybuf[lI] = (WORD8) (lI & 0x0ff);

			// allocate the two block buffer
			nTestBlockSize = (int)pCtx->infoblock.lBlockSize << 1;
#ifdef KERNEL_COMPILE
			twoblocks = ( WORD8* )ExAllocatePool( NonPagedPool, nTestBlockSize  );
#else
			twoblocks = (WORD8*) malloc(nTestBlockSize);
#endif
			
			if (twoblocks == NULL)
			{
#ifdef KERNEL_COMPILE
				ExFreePool( keybuf );
#else
				free(keybuf);
#endif
				return CIPHERSERVER_ERROR_OUTOFMEMORY;
			}

			// we use this creation for checking the right decryption later
			for (nI = 0; nI < nTestBlockSize; nI++)
				twoblocks[nI] = (WORD8) (nI & 0x0ff);

			// allocate the init. data memory
			if (pCtx->infoblock.lInitDataSize)
			{
#ifdef KERNEL_COMPILE
				pInitData = ExAllocatePool( NonPagedPool, pCtx->infoblock.lInitDataSize  );
#else
				pInitData = malloc(pCtx->infoblock.lInitDataSize);
#endif
			
				if (pInitData == NULL)
				{
#ifdef KERNEL_COMPILE
					ExFreePool( twoblocks );
#else
					free(twoblocks);
#endif
#ifdef KERNEL_COMPILE
					ExFreePool( keybuf );
#else
					free(keybuf);
#endif

					return CIPHERSERVER_ERROR_OUTOFMEMORY;
				}
			}
			else
			{
				pInitData = NULL;
			}

			// open an encryption session
			lResult = CipherServer_OpenSession(
				CIPHERSERVER_MODE_ENCRYPT | lModeFlags,
				keybuf,
				lKeySize,
				pCtx,
				pInitData,
				&chandle);

			if ((lResult != CIPHER_ERROR_NOERROR) && (lResult != CIPHER_ERROR_WEAKKEY))
			{
#ifdef KERNEL_COMPILE
				ExFreePool( pInitData );
#else
				free(pInitData);
#endif
#ifdef KERNEL_COMPILE
				ExFreePool( twoblocks );
#else
				free(twoblocks);
#endif
#ifdef KERNEL_COMPILE
				ExFreePool( keybuf );
#else
				free(keybuf);
#endif
				return CIPHERSERVER_ERROR_INVALIDCIPHER;
			}

			// encrypt the blocks
			CipherServer_EncryptBlocks(chandle,
				twoblocks,
				twoblocks,
				2);

			// close the session
			lResult = CipherServer_CloseSession(chandle);
			if (lResult != CIPHER_ERROR_NOERROR)
			{
#ifdef KERNEL_COMPILE
				ExFreePool( pInitData );
#else
				free(pInitData);
#endif
#ifdef KERNEL_COMPILE
				ExFreePool( twoblocks );
#else
				free(twoblocks);
#endif
#ifdef KERNEL_COMPILE
				ExFreePool( keybuf );
#else
				free(keybuf);
#endif

				return CIPHERSERVER_ERROR_INVALIDCIPHER;
			}

			// open a decryption session
			lResult = CipherServer_OpenSession(
				CIPHERSERVER_MODE_DECRYPT | lModeFlags,
				keybuf,
				lKeySize,
				pCtx,
				pInitData,
				&chandle);

			if ((lResult != CIPHER_ERROR_NOERROR) && (lResult != CIPHER_ERROR_WEAKKEY))
			{
#ifdef KERNEL_COMPILE
				ExFreePool( pInitData );
#else
				free(pInitData);
#endif
#ifdef KERNEL_COMPILE
				ExFreePool( twoblocks );
#else
				free(twoblocks);
#endif
#ifdef KERNEL_COMPILE
				ExFreePool( keybuf );
#else
				free(keybuf);
#endif

				return CIPHERSERVER_ERROR_INVALIDCIPHER;
			}

			// decrypt the blocks
			CipherServer_DecryptBlocks(chandle,
				twoblocks,
				twoblocks,
				2,
				CIPHER_NULL);

			// close the session
			lResult = CipherServer_CloseSession(chandle);
			if (lResult != CIPHER_ERROR_NOERROR)
			{
#ifdef KERNEL_COMPILE
				ExFreePool( pInitData );
#else
				free(pInitData);
#endif
#ifdef KERNEL_COMPILE
				ExFreePool( twoblocks );
#else
				free(twoblocks);
#endif
#ifdef KERNEL_COMPILE
				ExFreePool( keybuf );
#else
				free(keybuf);
#endif

				return CIPHERSERVER_ERROR_INVALIDCIPHER;
			}

			// correct decryption?
			for (nI = 0; nI < nTestBlockSize; nI++)
			{
				if (twoblocks[nI] != (nI & 0x0ff))
				{
#ifdef KERNEL_COMPILE
					ExFreePool( pInitData );
#else
					free(pInitData);
#endif
#ifdef KERNEL_COMPILE
					ExFreePool( twoblocks );
#else
					free(twoblocks);
#endif
#ifdef KERNEL_COMPILE
					ExFreePool( keybuf );
#else
					free(keybuf);
#endif

					return CIPHERSERVER_ERROR_INVALIDCIPHER;
				}
			}

			// free all memory
#ifdef KERNEL_COMPILE
			ExFreePool( pInitData );
#else
			free(pInitData);
#endif
#ifdef KERNEL_COMPILE
			ExFreePool( twoblocks );
#else
			free(twoblocks);
#endif
#ifdef KERNEL_COMPILE
			ExFreePool( keybuf );
#else
			free(keybuf);
#endif

		}
	}

	// quit with success
	return CIPHERSERVER_ERROR_NOERROR;
}

//////////////////////////////////////////////////////////////////////////////

WORD32 CRYPTPAK_API CipherServer_GetInfoBlock
(PCIPHERCTX pCtx,
 CIPHERINFOBLOCK* pInfoBlock)
{
	// call the retrieved function to get the information block
	pInfoBlock->lSizeOf = sizeof(CIPHERINFOBLOCK);
	switch ((*pCtx->pGetCipherInfo)(pInfoBlock))
	{
	case CIPHER_ERROR_NOERROR :
		return CIPHERSERVER_ERROR_NOERROR;
	case CIPHER_ERROR_INVALID :
		return CIPHERSERVER_ERROR_INVALIDCIPHER;
	default:
		// unknown return value
		return CIPHERSERVER_ERROR_ERROR;
	}
}

//////////////////////////////////////////////////////////////////////////////

WORD32 CRYPTPAK_API CipherServer_OpenSession
(WORD32 lMode,
 const WORD8* pKey,
 WORD32 lKeyLen,
 PCIPHERCTX pCtx,
 void* pInitData,
 PCIPHERSESSION* pSessionHandlePtr)
{
	PCIPHERSESSION pNewCryptSession;
	WORD32 lRetCode;

	// allocate memory for a new session handle and the work
	// context (the algorithm's runtime memory area) together
#ifdef KERNEL_COMPILE
	pNewCryptSession = (PCIPHERSESSION)ExAllocatePool( NonPagedPool, sizeof(CIPHERSESSION) + pCtx->infoblock.lContextSize  );
#else
	pNewCryptSession = (PCIPHERSESSION) malloc(sizeof(CIPHERSESSION) + pCtx->infoblock.lContextSize);
#endif

	//
	if (pNewCryptSession == NULL)
		return CIPHERSERVER_ERROR_OUTOFMEMORY;

	// calculate the pointer for the work context
	pNewCryptSession->pWorkContext = (WORD8*)pNewCryptSession + sizeof(CIPHERSESSION);

	memset(pNewCryptSession->pWorkContext,
		0,
		pCtx->infoblock.lContextSize);

	// call the cipher's CreateWorkContext() function
	switch ((*pCtx->pCreateWorkContext)(
		pNewCryptSession->pWorkContext,
		pKey,
		lKeyLen,
		lMode,
		pInitData,
		pCtx->pRandomGenerator,
		pCtx->pRndGenData))
	{
	case CIPHER_ERROR_NOERROR: lRetCode = CIPHERSERVER_ERROR_NOERROR; break;
	case CIPHER_ERROR_WEAKKEY: lRetCode = CIPHERSERVER_ERROR_WEAKKEY; break;
	default:
		// unknown return value (including case CIPHER_ERROR_KEYSETUPERROR)
		lRetCode = CIPHERSERVER_ERROR_ERROR;
	}
	if (lRetCode != CIPHERSERVER_ERROR_NOERROR)
	{
#ifdef KERNEL_COMPILE
		ExFreePool( pNewCryptSession );
#else
		free(pNewCryptSession);
#endif

		return lRetCode;
	}

	// copy the cipher handle to the session handle
	pNewCryptSession->pCipherContext = pCtx;

	// copy the crypt mode to the session handle (flags included)
	pNewCryptSession->lCryptMode = lMode;

	// return the cryptsession handle
	*pSessionHandlePtr = pNewCryptSession;

	// success
	return CIPHERSERVER_ERROR_NOERROR;
}

//////////////////////////////////////////////////////////////////////////////

void CRYPTPAK_API CipherServer_ResetSession
(PCIPHERSESSION pSessionHandle,
 void* pInitData)
{
	// call the ciphers ResetWorkContext() function
	(*pSessionHandle->pCipherContext->pResetWorkContext)(
		pSessionHandle->pWorkContext,
		pSessionHandle->lCryptMode,
		pInitData,
		pSessionHandle->pCipherContext->pRandomGenerator,
		pSessionHandle->pCipherContext->pRndGenData);
}

//////////////////////////////////////////////////////////////////////////////

WORD32 CRYPTPAK_API CipherServer_CloseSession
(PCIPHERSESSION pSessionHandle)
{
	WORD32 lRetCode;

	// call the cipher's DestroyContext() function
	if ((*pSessionHandle->pCipherContext->pDestroyWorkContext)(
		pSessionHandle->pWorkContext) == CIPHER_ERROR_NOERROR)
		lRetCode = CIPHERSERVER_ERROR_NOERROR;
	else
		lRetCode = CIPHERSERVER_ERROR_ERROR;

	// even if a (fatal) error has occured we clear (all in one)
	// and free all the session memory to quit properly
	memset(
		pSessionHandle,
		0,
		sizeof(CIPHERSESSION) + pSessionHandle->pCipherContext->infoblock.lContextSize);
#ifdef KERNEL_COMPILE
	ExFreePool( pSessionHandle );
#else
	free(pSessionHandle);
#endif

	// deliver the error code retrieved above
	return lRetCode;
}

//////////////////////////////////////////////////////////////////////////////

void CRYPTPAK_API CipherServer_EncryptBlocks
(PCIPHERSESSION pSessionHandle,
 const void* pSource,
 void* pTarget,
 WORD32 lNumOfBlocks)
{
	WORD32 lNumOfBytes;

	// calculate the number of bytes to encrypt
	lNumOfBytes = lNumOfBlocks * pSessionHandle->pCipherContext->infoblock.lBlockSize;

	// call the cipher's EncryptBuffer() function
	(*pSessionHandle->pCipherContext->pEncryptBuffer)(
		pSessionHandle->pWorkContext,
		pSource,
		pTarget,
		lNumOfBytes);
}

//////////////////////////////////////////////////////////////////////////////

void CRYPTPAK_API CipherServer_DecryptBlocks
(PCIPHERSESSION pSessionHandle,
 const void* pSource,
 void* pTarget,
 WORD32 lNumOfBlocks,
 const void* pPreviousBlock)
{
	WORD32 lNumOfBytes;

	// calculate the number of bytes to encrypt
	lNumOfBytes = lNumOfBlocks * pSessionHandle->pCipherContext->infoblock.lBlockSize;

	// call the cipher's DecryptBuffer() function
	(*pSessionHandle->pCipherContext->pDecryptBuffer)(
		pSessionHandle->pWorkContext,
		pSource,
		pTarget,
		lNumOfBytes,
		pPreviousBlock);
}

//////////////////////////////////////////////////////////////////////////////

void CRYPTPAK_API CipherServer_GetRandomData
(PCIPHERCTX pCtx,
 void* pTarget,
 WORD32 lNumOfBytes)
{
	// just map the call
	(*pCtx->pRandomGenerator)((WORD8*)pTarget,
		lNumOfBytes,
		pCtx->pRndGenData);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97久久精品人人做人人爽50路| www.爱久久.com| 亚洲va天堂va国产va久| 亚洲精选视频在线| 国产精品伦理在线| 日韩一区在线免费观看| 国产精品久久国产精麻豆99网站| 国产亚洲精品7777| 中文字幕第一区| 欧美国产精品劲爆| 欧美国产成人在线| 国产精品三级在线观看| 国产精品乱码妇女bbbb| 中文字幕精品综合| 国产精品国产自产拍高清av| 国产精品蜜臀av| 一区二区中文视频| 一区二区久久久| 日韩精品成人一区二区三区| 裸体歌舞表演一区二区| 玖玖九九国产精品| 国产福利一区二区| 91玉足脚交白嫩脚丫在线播放| 在线亚洲欧美专区二区| 欧美日本乱大交xxxxx| 7777精品伊人久久久大香线蕉 | 久久久久久免费毛片精品| 一区二区三区高清| 亚洲男人天堂av| 中文字幕亚洲一区二区av在线| 中文字幕第一区综合| 国产精品久久久久aaaa| 国产精品国产三级国产aⅴ原创| 久久精子c满五个校花| 久久免费的精品国产v∧| 久久夜色精品一区| 国产午夜精品一区二区三区视频 | 成人福利视频在线| 成人妖精视频yjsp地址| 99久久综合色| 成人免费视频国产在线观看| 粉嫩av一区二区三区| 成人涩涩免费视频| 不卡av在线网| 91丝袜美女网| 91精品国产综合久久香蕉的特点 | 亚洲精品一区二区三区福利| www欧美成人18+| 国产精品丝袜久久久久久app| 综合亚洲深深色噜噜狠狠网站| 亚洲宅男天堂在线观看无病毒| 亚洲狠狠爱一区二区三区| 免费美女久久99| 国产福利一区在线观看| 国产麻豆一精品一av一免费| 国产乱妇无码大片在线观看| 成人在线综合网| 91浏览器在线视频| 欧美撒尿777hd撒尿| 日韩天堂在线观看| 中文字幕在线不卡一区| 亚洲一区视频在线| 精彩视频一区二区| 日本精品视频一区二区| 日韩午夜三级在线| 日韩美女视频19| 秋霞影院一区二区| 成人免费的视频| 欧美日韩成人综合天天影院| 精品国产免费一区二区三区四区| 国产精品美女一区二区三区| 天天做天天摸天天爽国产一区| 国产福利视频一区二区三区| 欧美少妇xxx| 国产日韩欧美亚洲| 手机精品视频在线观看| 成人性色生活片| 欧美精品在欧美一区二区少妇| 国产三级三级三级精品8ⅰ区| 亚洲国产日韩在线一区模特| 国产精品69毛片高清亚洲| 在线观看日韩高清av| 久久蜜臀精品av| 日精品一区二区| 99视频在线精品| 91精品国产91久久久久久最新毛片| 久久一日本道色综合| 一区二区三区美女| 国产91高潮流白浆在线麻豆 | av网站一区二区三区| 日韩久久久精品| 亚洲成年人网站在线观看| 丁香六月综合激情| 欧美一级免费大片| 亚洲国产日韩在线一区模特 | 久久综合国产精品| 午夜久久久影院| 91美女片黄在线| 国产亚洲女人久久久久毛片| 久久成人免费电影| 在线不卡中文字幕播放| 亚洲国产日韩综合久久精品| 99re热视频精品| 亚洲国产精品成人综合色在线婷婷| 裸体一区二区三区| 欧美久久久一区| 亚洲一二三四区| 97超碰欧美中文字幕| 国产午夜精品理论片a级大结局 | 亚洲一线二线三线视频| av中文字幕一区| 国产精品天天看| 国产99久久久精品| 国产日韩高清在线| 国产精品影视在线| 久久久.com| 国产成人精品在线看| 久久蜜臀精品av| 国产精品自产自拍| 欧美大片免费久久精品三p| 日韩精品一级二级| 91精品久久久久久久91蜜桃 | 中文字幕在线一区| 国产1区2区3区精品美女| 久久久久久久久蜜桃| 国产一二精品视频| 国产三级一区二区| 高清不卡一区二区| 国产精品久久久久久一区二区三区| 成人动漫在线一区| 中文字幕中文字幕一区二区| 91欧美一区二区| 亚洲视频中文字幕| 色爱区综合激月婷婷| 亚洲国产日韩在线一区模特 | 精品国产欧美一区二区| 蜜桃av一区二区在线观看| 337p亚洲精品色噜噜噜| 激情欧美日韩一区二区| 欧美国产日韩一二三区| eeuss鲁片一区二区三区| 亚洲三级电影网站| 欧美日韩高清在线播放| 日本免费新一区视频| 久久综合九色综合97_久久久 | 精品视频一区二区不卡| 午夜影院久久久| 久久综合九色综合97_久久久| 国产精品一二一区| 亚洲日韩欧美一区二区在线| 欧美性视频一区二区三区| 青青草97国产精品免费观看| 欧美电影精品一区二区| 国产91精品免费| 亚洲国产va精品久久久不卡综合| 制服丝袜日韩国产| 国产在线精品不卡| 中文字幕日韩精品一区 | 欧美一区永久视频免费观看| 黄网站免费久久| 亚洲免费视频成人| 欧美色精品天天在线观看视频| 亚洲国产日韩综合久久精品| 欧美一区二视频| 成人av在线网站| 亚洲第一主播视频| 久久久精品免费免费| 97精品视频在线观看自产线路二| 五月天激情小说综合| 久久久久久久久蜜桃| 欧美性生活一区| 国产精品77777| 午夜精品久久久久久不卡8050| 久久众筹精品私拍模特| 一本大道久久a久久综合| 九九九久久久精品| 亚洲精品成人在线| 久久伊99综合婷婷久久伊| 在线观看亚洲a| 国产精品一区2区| 午夜精品久久一牛影视| 中文子幕无线码一区tr| 欧美久久久久久久久中文字幕| 丁香婷婷综合网| 日韩av午夜在线观看| 中文字幕在线不卡一区二区三区| 日韩欧美卡一卡二| 色噜噜夜夜夜综合网| 久久国产日韩欧美精品| 亚洲第一久久影院| 日韩美女啊v在线免费观看| 久久只精品国产| 欧美一区二区成人| 欧美丝袜丝交足nylons| 高清不卡在线观看av| 久久99精品久久久久久动态图| 亚洲一区二区三区四区在线观看| 国产欧美精品日韩区二区麻豆天美| 91精品国产色综合久久久蜜香臀| 99精品在线免费|