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

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

?? handlecontainer.cpp

?? 信息安全開發使用的
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
% Parameters of entry  :
%			            IN  hKey		-  Handle on a key of session used for coding
%						IN hHash		- Handle on a hash object if one wants to carry out a hash data before coding
%						IN Final		- Boolean allowing to know if it is the last part to be ciphered
%						IN dwFlags		- not used
%						IN\OUT	pbData		- data to be ciphered
%						IN\OUT pdwDataLen	- length of  data to be ciphered
%						IN dwBufLen			- length of the data pbData in bytes
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL HandleContainer::Encrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE* pbData, DWORD*pdwDataLen, DWORD dwBufLen)
{
	TRACE(__LINE__,"HandleContainer::Encrypt ",NULL);
	return CryptEncrypt(hKey, hHash, Final, dwFlags, pbData, pdwDataLen, dwBufLen);
}


/*
%--------------------------------------------------------------------------
% Decrypt
%
% Decrypt is used to decipher data:  managed by Provider Microsoft
%
% Parameters of entry  :
%			            IN  hKey		-  Handle on a key of session used for the deciphering
%						IN hHash		- Handle on a hash object if one wants to carry out a hash data after the deciphering
%						IN Final		- Boolean allowing to know if it is the last part to be deciphered
%						IN dwFlags		- not used
%						IN\OUT pbData		-data to be  deciphered\data deciphered
%						IN\OUT pdwDataLen	-length of data to be  deciphered\data deciphered
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL HandleContainer::Decrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE*pbData, DWORD*pdwDataLen)
{
	TRACE(__LINE__,"HandleContainer::Decrypt ",NULL);
	return CryptDecrypt(hKey, hHash, Final, dwFlags, pbData, pdwDataLen);
	
}


/*
%--------------------------------------------------------------------------
% SignHash
%
% SignHash is used to carry out the signature of one starting from a handle on a hash object.
%
% Parameters of entry  :
%						IN hHash	- Handle on the hash object to be signed
%						IN dwKeySpec	-type of key to use to sign(AT_KEYEXCHANGE\AT_SIGNATURE)
%						IN szDescription	- not used
%						IN dwFlags	- not used
%						OUT pbSignature	- pointer on the signed data
%						OUT pdwSigLen	- address of a DWORD containing the length of the signed data
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL HandleContainer::SignHash(HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR sDescription, DWORD dwFlags, BYTE*pbSignature, DWORD* pdwSigLen)
{

	TRACE(__LINE__,"HandleContainer::SignHash BEGIN ",NULL);

	ALG_ID algidHash;
	unsigned long dwBufferLen;
	
	LPBYTE pbyHash = NULL;
	unsigned long dwHashLen;
	const BYTE * pbyOID = NULL;
	unsigned long dwOIDLen = 0;
	BOOL bRet = FALSE;

	dwBufferLen = sizeof(algidHash);
	if(!CryptGetHashParam(hHash, HP_ALGID, (LPBYTE)&algidHash, &dwBufferLen, 0))
	{
		TRACE(__LINE__,"HandleContainer::SignHash FALSE ",NULL);
		SetLastError(NTE_BAD_HASH);
		return FALSE;
	}

	dwBufferLen = sizeof(dwHashLen);
	if(!CryptGetHashParam(hHash, HP_HASHSIZE, (LPBYTE)&dwHashLen, &dwBufferLen, 0))
	{
		TRACE(__LINE__,"HandleContainer::SignHash FALSE ",NULL);
		SetLastError(NTE_BAD_HASH);
		return FALSE;
	}

	switch(algidHash)
	{
	case CALG_SSL3_SHAMD5:
		dwOIDLen = 0;
		break;
	case CALG_MD2:
		pbyOID = &derEncodedMD2[0];
		dwOIDLen = sizeof(derEncodedMD2);
		break;
	case CALG_MD5:
		pbyOID = &derEncodedMD5[0];
		dwOIDLen = sizeof(derEncodedMD5);
		break;
	case CALG_SHA1:
		pbyOID = &derEncodedSHA1[0];
		dwOIDLen = sizeof(derEncodedSHA1);
		break;
	default:
		SetLastError(NTE_BAD_ALGID);
		return FALSE;
	}

	pbyHash = new BYTE[dwHashLen + dwOIDLen];
	if(!pbyHash)
	{
		TRACE(__LINE__,"HandleContainer::SignHash FALSE ",NULL);
		SetLastError(NTE_FAIL);
		return FALSE;
	}

	if(pbyOID)
		memcpy(pbyHash, pbyOID, dwOIDLen);
	

	if(!CryptGetHashParam(hHash, HP_HASHVAL, pbyHash+dwOIDLen, &dwHashLen, 0))
	{
		TRACE(__LINE__,"HandleContainer::SignHash FALSE ",NULL);
		SetLastError(NTE_BAD_HASH);
		if(pbyHash)
			free(pbyHash);	
		return FALSE;
	}
	
	if(!Pkcs::DoSign(currentPContainer,dwHashLen + dwOIDLen, pbyHash, dwKeySpec,pbSignature,pdwSigLen))
	{
		TRACE(__LINE__,"HandleContainer::SignHash FALSE ",NULL);
		SetLastError(NTE_FAIL);
		if(pbyHash)
			free(pbyHash);	
		return FALSE;
	}
	TRACE(__LINE__,"HandleContainer::SignHash TRUE ",NULL);
	return TRUE;

}


/*
%--------------------------------------------------------------------------
% VerifySignature
%
% VerifySignature is used to check a signature: managed by Provider Microsoft
%
% Parameters of entry  :
%						IN hHash	- Handle on a hash object to be checked
%						IN pbSignature	- buffer containing the signature
%						IN dwSigLen	- length in bytes of the signature
%						IN hPubKey	- Handle on the public key with used to check the signature
%						IN sDescription	- not used
%						IN dwFlags	- not used
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL HandleContainer::VerifySignature(HCRYPTHASH hHash, CONST BYTE* pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey,LPCTSTR sDescription, DWORD dwFlags)
{
	TRACE(__LINE__,"HandleContainer::VerifySignature ",NULL);
	return CryptVerifySignature(hHash, pbSignature, dwSigLen, hPubKey,sDescription, dwFlags);
}





/*
%--------------------------------------------------------------------------
% DestroyKey
%
% The DestroyKey function releases the handle referred by the parameter hKey:  managed by Provider Microsoft
%
% Parameters of entry  :
%						IN phKey		- Handle on the key
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL HandleContainer::DestroyKey(HCRYPTKEY hKey)
{
	TRACE(__LINE__,"HandleContainer::DestroyKey ",NULL);
	return CryptDestroyKey(hKey);
}


/*
%--------------------------------------------------------------------------
% ImportKey
%
% ImportKey import keys of a "Keyblob" towards a container of key
%
% Parameters of entry  :
%			            IN  pbData		-  data of "Keyblob"
%						IN  dwDataLen	-  length of data
%						IN  hPubKey		-  Handle on a key public of exchange of the user recipient
%		                IN  dwFlags		-  Flags values
%
% Parameters of exit  :
%						OUT	phKey		- Address to which the function copies the handle key to be imported
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL HandleContainer::ImportKey(BYTE* pbData, DWORD dwDataLen, HCRYPTKEY hPubKey, DWORD dwFlags, HCRYPTKEY* phKey)
{

	
	DWORD i,j;
	HCRYPTPROV hProv_m = 0;
	HCRYPTKEY hPubPrivKey = 0;
    BOOL fResult;
	
	TRACE(__LINE__,"HandleContainer::ImportKey BEGIN ",NULL);
   
	if(!pbData)
	{
		TRACE(__LINE__,"HandleContainer::ImportKey FALSE ",NULL);
		SetLastError(NTE_FAIL);
		return FALSE;
	}

	/*If it's a PUBLICKEYBLOB import it into the base provider.*/
	pSessionKeyHeader pskh = (pSessionKeyHeader)pbData;
	if(PUBLICKEYBLOB == pskh->blobHeader.bType || !hPubKey)
		return CryptImportKey(microsoft_Provider, pbData, dwDataLen, hPubKey, dwFlags, phKey);

	/*If it's not a SIMPLEBLOB we don't know what to do with it.*/
	if(SIMPLEBLOB != pskh->blobHeader.bType)
	{
		TRACE(__LINE__,"HandleContainer::ImportKey FALSE ",NULL);
		SetLastError(NTE_BAD_TYPE);
		return FALSE;
	}
	/*We only know how to deal with RSA keys.*/
	if(CALG_RSA_KEYX != pskh->algid)
	{
		TRACE(__LINE__,"HandleContainer::ImportKey FALSE ",NULL);
		SetLastError(NTE_BAD_TYPE);
		return FALSE;
	}

	BOOL bRet = FALSE;

	//Wrapped blob size.
	DWORD wEncryptedDataLength = (DWORD)(dwDataLen - sizeof(SessionKeyHeader));
	BYTE* pKeySource = pbData + sizeof(SessionKeyHeader);
	BYTE* pbyDecryptedData = new BYTE[wEncryptedDataLength];
	DWORD wDecryptedDataLength = wEncryptedDataLength;

	if(!pbyDecryptedData)
	{
		TRACE(__LINE__,"HandleContainer::ImportKey FALSE ",NULL);
		SetLastError(NTE_FAIL);
		if(pbyDecryptedData)
			delete [] pbyDecryptedData;
		return FALSE;
	}
	
	/*reversal of the block pKeySource */

	for (i=wEncryptedDataLength-1, j=0; i > j; --i, ++j)
	{
		BYTE bTmp = pKeySource[i];
		pKeySource[i] = pKeySource[j];
		pKeySource[j] = bTmp;
	}
	

		
	if(!Pkcs::Decrypt(hPubKey, pKeySource, wEncryptedDataLength, pbyDecryptedData, &wDecryptedDataLength))
	{
		TRACE(__LINE__,"HandleContainer::ImportKey FALSE ",NULL);
		SetLastError(NTE_BAD_ALGID);
		if(pbyDecryptedData)
			delete [] pbyDecryptedData;
		return FALSE;
	}
	LPTSTR MicroProvider;

	// Try to create new container
	if(pskh->blobHeader.aiKeyAlg==CALG_RC2 && wDecryptedDataLength==5)
		MicroProvider="Microsoft Base Cryptographic Provider v1.0";
	else
		MicroProvider="Microsoft Enhanced Cryptographic Provider v1.0";
    
	fResult =CreatePrivateExponentOneKey(MicroProvider, PROV_RSA_FULL,
                                            "importKey", AT_KEYEXCHANGE, 
                                            &hProv_m, &hPubPrivKey);
	if(!fResult)
    {
       TRACE(__LINE__,"HandleContainer::ImportKey FALSE ",NULL);
	   SetLastError(NTE_FAIL);
	   if(pbyDecryptedData)
		delete [] pbyDecryptedData;
	   return FALSE;
       
    }

	 // Import this key and get an HCRYPTKEY handle
     if (!ImportPlainSessionBlob(hProv_m, hPubPrivKey,pskh->blobHeader.aiKeyAlg , pbyDecryptedData, wDecryptedDataLength, phKey))
     {
		TRACE(__LINE__,"HandleContainer::ImportKey FALSE ",NULL);
		SetLastError(NTE_FAIL);
		if(pbyDecryptedData)
			delete [] pbyDecryptedData;
	    return FALSE;
     }

 
	bRet = TRUE;
    if(pbyDecryptedData)
		delete [] pbyDecryptedData;
	TRACE(__LINE__,"HandleContainer::ImportKey TRUE ",NULL);
	return bRet;
}




/*
%--------------------------------------------------------------------------
% GetKeyParam
%
% GetKeyParam seeks the data which govern the operations of a key:  manage by Provider Microsoft
%
% Parameters of entry  :
%						IN hKey		    - Handle on the key
%						IN ulParametre  - value of parameter
%						IN pulDataLen   - length of the parameter pucData 
%						IN ulFlags		- values of the flag 
%
% Parameters of exit  :
%						OUT	pucData		- Address to which the function copies the data corresponding to the ulFlags
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL HandleContainer::GetKeyParam(HCRYPTKEY hKey, DWORD dwParam, BYTE* pbData, DWORD* pdwDataLen, DWORD dwFlags)
{
	TRACE(__LINE__,"HandleContainer::GetKeyParam",NULL);
	return CryptGetKeyParam(hKey, dwParam, pbData, pdwDataLen, dwFlags);
}


/*
%--------------------------------------------------------------------------
% SetKeyParam
%
% SetKeyParam adapt the operations to the customer requirements of a key:  
% manage by Provider Microsoft
%
% Parameters of entry  :
%						IN hKey		    - Handle on a key
%						IN ulParametre  - value of the parameter
%						IN pucData		- Pointer containing the data which correspond to the value 
%                                         of parameter dwParam
%						IN ulFlags		- Values of the flag (not used)
%
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL HandleContainer::SetKeyParam(HCRYPTKEY hKey, DWORD dwParam,CONST BYTE*pbData, DWORD dwFlags)
{
	TRACE(__LINE__,"HandleContainer::SetKeyParam",NULL);
	return CryptSetKeyParam(hKey, dwParam, pbData, dwFlags);
}


/*
%--------------------------------------------------------------------------
% GetUserKey
%
% GetUserKey is used to return a handle on the pair of key of the user
%
% Parameters of entry  :
%						IN dwKeySpec	- desired type of key (AT_KEYEXCHANGE\AT_SIGNATURE)
%						OUT phUserKey	- address to which is copied the handle desired key
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL HandleContainer::GetUserKey(DWORD dwKeySpec, HCRYPTKEY* phUserKey)
{
	TRACE(__LINE__,"HandleContainer::GetUserKey BEGIN",NULL);
   if(!(currentPContainer->GetUserKey(dwKeySpec,phUserKey)))
   {
	   TRACE(__LINE__,"HandleContainer::GetUserKey FALSE",NULL);
	   SetLastError(NTE_NO_KEY);
   	   return FALSE;
   }
   TRACE(__LINE__,"HandleContainer::GetUserKey TRUE",NULL);
   return TRUE;
}

/*
%--------------------------------------------------------------------------
% CreatePrivateExponentOneKey
%
% CreatePrivateExponentOneKey is used to create a key private which carries
% out during coding the identity
%
% Parameters of entry  :
%						IN szProvider Name of provider
%						IN dwProvType
%						IN szContainer Name of container
%						IN dwKeySpec type of key
%						IN hProv handle to the provider
%						IN hPrivateKey handle to the private key
%						
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/

BOOL HandleContainer::CreatePrivateExponentOneKey(LPTSTR szProvider,DWORD dwProvType,LPTSTR szContainer,DWORD dwKeySpec,HCRYPTPROV *hProv,HCRYPTKEY *hPrivateKey)
{
   BOOL fReturn = FALSE;
   BOOL fResult;
   int n;
   LPBYTE keyblob = NULL;
   DWORD dwkeyblob;
   DWORD dwBitLen;
   BYTE *ptr;
   TRACE(__LINE__,"HandleContainer::CreatePrivateExponentOneKey BEGIN",NULL);

   __try

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人97人人超碰人人99| 日本黄色一区二区| 欧美日韩一二三| 中文字幕乱码亚洲精品一区| 美美哒免费高清在线观看视频一区二区| 奇米亚洲午夜久久精品| 欧美在线观看一区| 一区二区三区在线观看欧美| 国模少妇一区二区三区| 欧美日韩免费在线视频| 亚洲综合av网| 欧美日韩在线观看一区二区| 亚洲高清视频在线| 日韩欧美在线网站| 日韩主播视频在线| 67194成人在线观看| 日韩高清不卡一区二区三区| 精品国产一区久久| 成人激情免费电影网址| 亚洲激情图片一区| 亚洲一区二区av在线| 久久久国产精品不卡| 欧美日韩一区二区三区四区| 国产精品正在播放| 亚洲一区二区三区在线播放| 久久精品视频免费| 欧美日韩精品一区二区天天拍小说 | 在线一区二区视频| 免费在线观看日韩欧美| 亚洲视频免费在线观看| 国产日韩欧美精品综合| 欧美日韩成人综合天天影院| 韩国视频一区二区| 亚洲欧美成aⅴ人在线观看| 日韩免费看的电影| 91首页免费视频| 国产一区二区三区免费播放| 一区二区三区.www| 日本一区二区三区在线观看| 欧美麻豆精品久久久久久| 粉嫩高潮美女一区二区三区| 日一区二区三区| 亚洲国产欧美日韩另类综合| 一区二区三区在线播| 884aa四虎影成人精品一区| www.日韩精品| 国产成人自拍网| 精品一区免费av| 日韩高清一级片| 天天综合色天天| 三级在线观看一区二区| 亚洲国产精品欧美一二99| 日韩一区日韩二区| 国产精品女同一区二区三区| 中文字幕乱码久久午夜不卡| 国产日韩欧美激情| 久久久久久久久伊人| 亚洲色图视频网站| 日韩美女精品在线| 一区二区三区视频在线观看| 国产精品久久久久永久免费观看| 欧美中文字幕一区| 欧美日韩一二三| 欧美一级午夜免费电影| 欧美电影免费观看高清完整版在线观看| 欧美日韩另类一区| 久久亚洲一区二区三区四区| 精品裸体舞一区二区三区| 国产目拍亚洲精品99久久精品| 国产欧美日韩综合精品一区二区| 制服丝袜国产精品| 中国av一区二区三区| 午夜精品久久久久久久久| 日本sm残虐另类| 成人免费的视频| 欧美老女人第四色| 久久久久久久久久久久久女国产乱 | 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产精品国产三级国产有无不卡| 一区二区在线观看免费| 久久er精品视频| 91尤物视频在线观看| 日韩一区二区在线观看| 自拍偷拍欧美精品| 捆绑变态av一区二区三区| 国产麻豆9l精品三级站| 欧美一级精品大片| 亚洲va欧美va国产va天堂影院| 国产大陆a不卡| 欧美一区二区三区四区视频| 亚洲激情图片一区| www.激情成人| 欧美激情一区二区三区四区| 免费成人结看片| 欧美日韩亚洲综合| 免费亚洲电影在线| 91在线视频在线| 亚洲国产成人一区二区三区| 狠狠色综合播放一区二区| 日韩一区二区在线免费观看| 亚洲一区二区综合| 欧美日韩国产系列| 国产精品久久久爽爽爽麻豆色哟哟| 成人网男人的天堂| 中文天堂在线一区| 99久久精品国产毛片| 国产亚洲精品aa| 从欧美一区二区三区| 国产三级一区二区三区| 国产做a爰片久久毛片| 久久精品欧美一区二区三区麻豆| 国产精品888| 国产精品色哟哟网站| 337p亚洲精品色噜噜噜| 亚洲午夜在线电影| 91精品国产综合久久久久久漫画| 国产精品不卡视频| 亚洲色图制服诱惑| 欧美精品九九99久久| 韩国精品在线观看| 中文字幕亚洲一区二区av在线| 色偷偷成人一区二区三区91| 日韩黄色在线观看| 久久美女高清视频| 欧美日韩综合一区| 激情综合色综合久久综合| 国产精品三级电影| 亚洲免费毛片网站| 欧美mv日韩mv亚洲| 欧美色图一区二区三区| 久久精品国产一区二区三| 亚洲乱码精品一二三四区日韩在线| 欧美一区二区三区系列电影| 成人性色生活片| 久色婷婷小香蕉久久| 亚洲自拍偷拍网站| 国产精品毛片大码女人| 日韩精品一区二区三区中文精品| 91小视频免费观看| 国产成人在线视频播放| 亚洲图片欧美一区| 日韩精品一区第一页| 亚洲欧美成人一区二区三区| 久久久精品天堂| 日韩一区二区三区在线视频| 欧美午夜寂寞影院| 成a人片亚洲日本久久| 国内外精品视频| 一片黄亚洲嫩模| 日日欢夜夜爽一区| 亚洲h在线观看| 一区二区三区在线免费视频| 亚洲免费毛片网站| 香蕉成人伊视频在线观看| 亚洲精品国久久99热| 国产精品二区一区二区aⅴ污介绍| 一区二区三区色| 亚洲一区二区三区四区在线观看| 亚洲三级在线看| 亚洲成人福利片| 日韩精品乱码免费| 久草这里只有精品视频| 粉嫩av亚洲一区二区图片| 99国产精品视频免费观看| 欧美性大战久久| 日韩一级二级三级| 中文字幕不卡的av| 亚洲一区中文在线| 麻豆精品视频在线观看视频| 日本午夜精品视频在线观看| 成人午夜激情在线| 欧美日韩二区三区| 国产日韩欧美a| 日本成人在线视频网站| 国产高清亚洲一区| 91精品蜜臀在线一区尤物| 91精品国产品国语在线不卡| 国产欧美日韩另类视频免费观看| 亚洲免费色视频| 国产一区二区按摩在线观看| 欧亚一区二区三区| 久久一夜天堂av一区二区三区| 亚洲欧美一区二区三区国产精品| 一区二区三区高清在线| 蜜臀va亚洲va欧美va天堂 | 亚洲一区二区av电影| 国内不卡的二区三区中文字幕| 69精品人人人人| 亚洲欧美日韩人成在线播放| 老司机精品视频一区二区三区| 色狠狠综合天天综合综合| 国产日韩高清在线| 激情国产一区二区| 日韩欧美电影在线| 久久狠狠亚洲综合| 日韩欧美国产麻豆| 蜜桃视频在线一区| 日韩精品一区二区三区在线播放| 亚洲精品自拍动漫在线| gogo大胆日本视频一区|