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

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

?? handlecontainer.cpp

?? PKCS#11的微軟CSP實現源碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/****************************************************************************
* library : pkcs_csp.dll
* Purpose : It is a cryptographic service provider which is an independent 
* software module that actually performs cryptography algorithms for 
* authentication, encoding, and encryption.
* This DLL can be interfaced on any PKCS#11 module.  
*
* Copyright (C) 2003 Ilex Syst鑝es Informatiques
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Contact :
* Ilex 
* 51 boulevard Voltaire
* 92600 Asni鑢es-sur-Seine
* pkizy@ilex.fr
*
* Author: Delouvrier Antoine
*
*******************************************************************************/

/*
%----------------------------------------------------------------------------
% PROJECT : CSP_PKCS
%
% MODULE : HandleContainer
%
% VERSION : 1.00
%
% FILE : HandleContainer.cpp
%
% this Class allows to manage a container. When an application obtains a context
% on a container it is this class which deals with thereafter all the entrance
% points of the DLL for this specific container. The entrance points are redirected to 
% PKCS#11 functions or to Microsoft Provider functions.
%----------------------------------------------------------------------------
% Version 1.00
% 
% CPX-31/03/2003-Creation
%----------------------------------------------------------------------------
% You can find wincrypt.h in the CSPDK which is downloadable at the adress :
% http://www.microsoft.com/downloads/details.aspx?FamilyId=0F436C75-2304-42BB-B81A-BA0C2C47BAC2&displaylang=en

*/ 


/*
% Libraries ANSI or system
%------------------------------
*/

#include <windows.h>
#include <stdio.h>
#include "assert.h"


/*
% HEADER Files include
%-----------------------
*/
#include "handlecontainer.h"
#include "csp_pkcs_const.h"
#include "resource.h"



#define CONTAINER_NAME TEXT("PKCS_CSP")

extern "C" extern HINSTANCE g_hModule;

typedef struct SessionKeyHeader
{
	BLOBHEADER blobHeader;
	ALG_ID algid;
} SessionKeyHeader, *pSessionKeyHeader;


//Initialization of static member variable
TableOfHandle HandleContainer::handles_Container;

/*
%--------------------------------------------------------------------------
% HandleContainer()
%
% R鬺e : HandleContainer() is the constructor of the class handlecontainer
%
%---------------------------------------------------------------------------
*/
HandleContainer::HandleContainer() 
{
}

/*
%--------------------------------------------------------------------------
% ~HandleContainer()
%
% destructor 
%---------------------------------------------------------------------------
*/

HandleContainer::~HandleContainer()
{
	TRACE(__LINE__,"~HandleContainer() ",NULL);
	handles_Container.RemoveEntry(this);

}

/*
%--------------------------------------------------------------------------
% Initialize
%
% R鬺e : Initialize est utilis閑 pour initialiser l'objet handlecontainer
%
% Parameters of entry  :
%						IN pszContainer	Name of the container
%						IN dwFlags		Value of a flag of the type(CRYPT_VERIFYCONTEXT\CRYPT_NEWKEYSET),according to this value one can or not to make certain operations on the container
%						IN pVTable		Pointer on a VTableProvStruc structure containing a list of functions callback provided by the operating software for the use of the CSP.
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/

BOOL HandleContainer::CreateHandleContainer(const CHAR IN * const pszContainer,const DWORD IN dwFlags, PVTableProvStruc IN pVTable)
{
	TRACE(__LINE__,"HandleContainer::CreateHandleContainer BEGIN : %d %d %d",pszContainer,dwFlags,pVTable);

	
	if(!AcquireMicrosoftContext()){
		TRACE(__LINE__,"HandleContainer::CreateHandleContainer ERROR : %d %d %d",pszContainer,dwFlags,pVTable);
		return FALSE;
	}


	if((dwFlags & CRYPT_MACHINE_KEYSET) == CRYPT_MACHINE_KEYSET)
	{
		TRACE(__LINE__,"HandleContainer::CreateHandleContainer ERROR : %d %d %d",pszContainer,dwFlags,pVTable);
		SetLastError(NTE_BAD_FLAGS);
		return FALSE;
	}
	if((dwFlags & CRYPT_VERIFYCONTEXT) == CRYPT_VERIFYCONTEXT){
		if(!handles_Container.AddEntry(this))
		{
			TRACE(__LINE__,"HandleContainer::CreateHandleContainer ERROR : %d %d %d",pszContainer,dwFlags,pVTable);
			SetLastError(NTE_NO_MEMORY);
			return FALSE;
		}
		TRACE(__LINE__,"HandleContainer::CreateHandleContainer TRUE : %d %d %d",pszContainer,dwFlags,pVTable);
		return TRUE;
	}
	if((dwFlags & CRYPT_NEWKEYSET) == CRYPT_NEWKEYSET)
	{
		TRACE(__LINE__,"HandleContainer::CreateHandleContainer ERROR : %d %d %d",pszContainer,dwFlags,pVTable);
		SetLastError(NTE_EXISTS);
		return FALSE;
	
	}
	else if((dwFlags&CRYPT_DELETEKEYSET) == CRYPT_DELETEKEYSET)
	{
		TRACE(__LINE__,"HandleContainer::CreateHandleContainer ERROR : %d %d %d",pszContainer,dwFlags,pVTable);
		SetLastError(NTE_BAD_KEYSET);
		return FALSE;
		
	}
	else 
	{
		currentPContainer = Pkcs::GetContainer(pszContainer);
		if(!currentPContainer)
		{
			/* If the table of the containers do not exist or if it must change to release that of front*/
			Pkcs::FreeContainer();
			/* recreate a table*/
			Pkcs::CreateContainerTable();
			currentPContainer = Pkcs::GetContainer(pszContainer);
			int ret;
			while(!currentPContainer){
				ret=MessageBox(NULL,"Please insert the card corresponding to the selected certificate.","Insert your card",MB_OKCANCEL|MB_ICONQUESTION|MB_SYSTEMMODAL);
				if(ret==IDCANCEL){
					TRACE(__LINE__,"HandleContainer::CreateHandleContainer ERROR : %d %d %d",pszContainer,dwFlags,pVTable);
					SetLastError(NTE_BAD_KEYSET);
					return FALSE;
				}
				/* If the table of the containers do not exist or if it must change to release that of front*/
				Pkcs::FreeContainer();
				/* recreate a table*/
				Pkcs::CreateContainerTable();
				currentPContainer = Pkcs::GetContainer(pszContainer);
			}
			
			
		}
	}

	if(!handles_Container.AddEntry(this))
	{
		TRACE(__LINE__,"HandleContainer::CreateHandleContainer ERROR : %d %d %d",pszContainer,dwFlags,pVTable);
		SetLastError(NTE_NO_MEMORY);
		return FALSE;
	}


	TRACE(__LINE__,"HandleContainer::CreateHandleContainer TRUE : %d %d %d",pszContainer,dwFlags,pVTable);
	return TRUE;
}



/*
%--------------------------------------------------------------------------
% AcquireMicrosoftContext
%
% AcquireMicrosoftContext is used to acquire a context to a microsoft provider 
%		 
%
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL HandleContainer::AcquireMicrosoftContext()
{
	CHAR szProviderName[MAX_PATH] = {0};

	/* Try first with enhanced provider , if it fails , try with base provider */
	strcpy(szProviderName,MS_ENHANCED_PROV);

	if(CryptAcquireContext(&microsoft_Provider, CONTAINER_NAME, szProviderName, PROV_RSA_FULL, CRYPT_NEWKEYSET))
	{
		return TRUE;
	}
	/* if the container already exists, try to open it */
	if(NTE_EXISTS == GetLastError())
	{
		if(CryptAcquireContext(&microsoft_Provider, CONTAINER_NAME, szProviderName, PROV_RSA_FULL,0))
		{
			return TRUE;
		}
	}
	/* the Enhanded provider is not found , try the base provider    */
	strcpy(szProviderName, MS_DEF_PROV);
	if(CryptAcquireContext(&microsoft_Provider, CONTAINER_NAME, szProviderName, PROV_RSA_FULL, CRYPT_NEWKEYSET))
	{
		return TRUE;
	}
	/* if the container already exists, try to open it */
	if(NTE_EXISTS == GetLastError())
	{
		if(CryptAcquireContext(&microsoft_Provider, CONTAINER_NAME, szProviderName, PROV_RSA_FULL, 0))
		{
			return TRUE;
		}
	}

	microsoft_Provider = NULL;
	return FALSE;
}




/*
%--------------------------------------------------------------------------
% VerifyHandleContainer
%
% VerifyHandleContainer allows to check the existence of a context
%
% Parameters of entry  :
%						IN handleContainer	handle to verify
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
bool HandleContainer::VerifyHandleContainer(HandleContainer* handleContainer)
{
	TRACE(__LINE__,"HandleContainer::VerifyHandleContainer : %d ",handleContainer);
	return handles_Container.VerifyEntry(handleContainer);
	
}

/*
%--------------------------------------------------------------------------
% CreateHash
%
% CreateHash is used to return a handle on the creation of a hash object: 
% managed by Provider Microsoft
%
% Parameters of entry  :
%						IN Algid	- Algorithm used for the hashing
%						IN hKey		- If the type of hash algorithm is a keyed hash, such as the HMAC or MAC algorithm, the key for the hash is passed in this parameter. For nonkeyed algorithms, this parameter must be set to zero 
%						IN dwFlags	- not used
%						OUT phHash	- address to which one copies the handle hashed object
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL HandleContainer::CreateHash(ALG_ID Algid, HCRYPTKEY hCryptKey, DWORD dwFlags, HCRYPTHASH* phHash)
{
	TRACE(__LINE__,"HandleContainer::CreateHash ",NULL);
	return CryptCreateHash(microsoft_Provider,Algid, hCryptKey, dwFlags, phHash);
}


/*
%--------------------------------------------------------------------------
% DestroyHash
%
% DestroyHash is used to destroy a hash object:  managed by Provider Microsoft
%
% Parameters of entry  :
%						IN hHash	- Handle on a hash object to be destroyed
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/

BOOL HandleContainer::DestroyHash(HCRYPTHASH hHash)
{
	TRACE(__LINE__,"HandleContainer::DestroyHash ",NULL);
	return CryptDestroyHash(hHash);
}


/*
%--------------------------------------------------------------------------
% GetHashParam
%
% GetHashParam seeks data about the operations of a hash object.  The actual
% value of the hashing can be obtained by using this function: 
% managed by Provider Microsoft
%
% Parameters of entry  :
%						IN hHash		- Handle on a hashed object
%						IN ulParametre  - value of the 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 ulParametre
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL HandleContainer::GetHashParam(HCRYPTHASH hHash, DWORD dwParam, BYTE* pbData, DWORD*pdwDataLen, DWORD dwFlags)
{
	TRACE(__LINE__,"HandleContainer::GetHashParam ",NULL);
	return CryptGetHashParam(hHash, dwParam, pbData, pdwDataLen, dwFlags);
}


/*
%--------------------------------------------------------------------------
% HashData
%
% HashData is used to carry out a hashing starting from a handle on a hash object:
% managed by Provider Microsoft
%
% Parameters of entry  :
%						IN hHash	- Handle on a hashed object
%						IN pbData	- address containing the data to be hashed
%						IN cbDataLen - length in bytes of the data to be hashed
%						IN dwFlags	- not used
%  
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL HandleContainer::HashData(HCRYPTHASH hHash, CONST BYTE* pbData, DWORD dwDatalen, DWORD dwFlags)
{
	TRACE(__LINE__,"HandleContainer::HashData ",NULL);
	return CryptHashData(hHash, pbData, dwDatalen, dwFlags);
}





/*
%--------------------------------------------------------------------------
% SetHashParam
%
% SetHashParam adapts the operations to the customer requirements of the hashed data: 
% managed by Provider Microsoft
%
% Parameters of entry  :
%						IN hHash		- Handle on a hash object
%						IN ulParametre  - value of the parameter
%						IN pucData		- Pointer on data corresponding to the last ulParametre   
%						IN ulFlags		- Values of the flag 
%
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL HandleContainer::SetHashParam(HCRYPTHASH hHash, DWORD dwParam, BYTE*pbData, DWORD dwFlags)
{
	TRACE(__LINE__,"HandleContainer::SetHashParam ",NULL);
	return CryptSetHashParam(hHash,dwParam,pbData,dwFlags);
}


BOOL HandleContainer::GetProvParam(DWORD dwParam, BYTE* pbData, DWORD* pdwDataLen, DWORD dwFlags)
{

	switch(dwParam)
	{
	case PP_ENUMALGS:
		TRACE(__LINE__,"HandleContainer::CryptGetProvParam  PP_ENUMALGS",NULL);
		return CryptGetProvParam(microsoft_Provider, PP_ENUMALGS, pbData, pdwDataLen, dwFlags);
	case PP_ENUMALGS_EX:
		TRACE(__LINE__,"HandleContainer::CryptGetProvParam  PP_ENUMALGS_EX",NULL);
		return CryptGetProvParam(microsoft_Provider, PP_ENUMALGS_EX, pbData, pdwDataLen, dwFlags);
	case PP_PROVTYPE :
		TRACE(__LINE__,"HandleContainer::CryptGetProvParam  PP_PROVTYPE",NULL);
		return FALSE;
	default:
		SetLastError(NTE_BAD_TYPE);
		return FALSE;
	}
	return FALSE;
}


/*
%--------------------------------------------------------------------------
% Encrypt
%
% Encrypt is used to cipher  data:  managed by Provider Microsoft
%

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷久久综合| 国精产品一区一区三区mba视频| 大陆成人av片| 国产日韩欧美综合一区| 国产福利精品一区| 国产精品久久精品日日| 91浏览器打开| 午夜久久久久久久久久一区二区| 欧美日韩一区二区三区在线看| 亚洲国产美女搞黄色| 欧美久久久久久久久久| 精品一区二区三区在线观看| 久久久精品影视| av亚洲精华国产精华精| 一区二区高清免费观看影视大全| 制服丝袜激情欧洲亚洲| 国产综合久久久久久久久久久久| 国产目拍亚洲精品99久久精品| heyzo一本久久综合| 一区二区三区加勒比av| 欧美一区2区视频在线观看| 国产精品一区二区你懂的| 综合欧美一区二区三区| 欧美精品自拍偷拍动漫精品| 国产精品一区二区久久不卡| 一区二区视频免费在线观看| 欧美一区二区视频观看视频| 成人黄色在线网站| 午夜久久久影院| 国产亚洲一区字幕| 欧美午夜不卡在线观看免费| 国产美女一区二区| 亚洲五月六月丁香激情| 久久精品一区八戒影视| 欧美亚洲高清一区| 国产精品夜夜爽| 五月综合激情日本mⅴ| 国产精品天天看| 这里只有精品99re| av影院午夜一区| 久久99国产精品久久| 亚洲一线二线三线视频| 久久久91精品国产一区二区三区| 欧美一a一片一级一片| 懂色一区二区三区免费观看| 午夜精品一区二区三区免费视频 | 精品福利av导航| 91美女片黄在线观看| 国产自产高清不卡| 婷婷综合久久一区二区三区| 最新不卡av在线| 久久久久亚洲综合| 日韩一区二区麻豆国产| 在线国产电影不卡| www.爱久久.com| 国产乱人伦偷精品视频不卡| 天天色天天操综合| 亚洲最大成人网4388xx| 国产精品久久久久久久久免费桃花| 欧美成人精品1314www| 欧美日韩一区二区三区在线| 日本道在线观看一区二区| 成人激情图片网| 盗摄精品av一区二区三区| 精品在线视频一区| 免费在线观看成人| 午夜电影网亚洲视频| 亚洲一卡二卡三卡四卡无卡久久| 亚洲欧美一区二区三区极速播放| 国产欧美视频一区二区三区| 精品国产一二三| 精品国产成人系列| 欧美va亚洲va国产综合| 日韩精品一区二区三区在线| 欧美一二三四区在线| 欧美二区在线观看| 91精品国产入口| 日韩一区二区免费电影| 日韩欧美在线综合网| 日韩一区二区免费在线电影 | 欧美色爱综合网| 欧美色综合久久| 欧美人妇做爰xxxⅹ性高电影| 欧美日韩一卡二卡三卡 | 91精品国产色综合久久不卡电影 | 91亚洲精品一区二区乱码| 成人动漫视频在线| 色综合中文字幕国产| 成人av网址在线观看| 91一区二区在线观看| 在线视频中文字幕一区二区| 欧美日韩一区高清| 日韩你懂的在线观看| 亚洲精品在线电影| 国产婷婷色一区二区三区 | 日韩视频免费观看高清完整版在线观看| 欧美猛男男办公室激情| 欧美不卡一二三| 欧美激情一区在线观看| 亚洲乱码中文字幕综合| 日韩国产精品大片| 极品尤物av久久免费看| 国产精品亚洲成人| 色呦呦国产精品| 日韩午夜中文字幕| 国产清纯在线一区二区www| 亚洲丝袜美腿综合| 日韩中文字幕一区二区三区| 国产综合色产在线精品| 99精品偷自拍| 欧美一级黄色录像| 亚洲欧洲国产日韩| 美女在线一区二区| av电影一区二区| 日韩女同互慰一区二区| 自拍偷在线精品自拍偷无码专区| 午夜电影一区二区三区| 粉嫩av亚洲一区二区图片| 欧美日韩你懂的| 国产欧美一区二区精品忘忧草| 亚洲精品第一国产综合野| 激情久久久久久久久久久久久久久久| 99久久精品久久久久久清纯| 日韩视频国产视频| 亚洲欧美日韩电影| 国产在线看一区| 欧美日韩激情一区| 久久久国产午夜精品 | 亚洲欧美日韩人成在线播放| 免费视频一区二区| 99re6这里只有精品视频在线观看| 欧美一卡2卡三卡4卡5免费| 日韩毛片精品高清免费| 黄页视频在线91| 69堂国产成人免费视频| 最新中文字幕一区二区三区| 狠狠色综合播放一区二区| 欧美日韩精品三区| 椎名由奈av一区二区三区| 国产在线精品不卡| 91精品国产综合久久蜜臀| 亚洲精品一二三四区| 成人妖精视频yjsp地址| 精品日韩在线一区| 日韩中文字幕av电影| 日本国产一区二区| 中文字幕在线不卡一区二区三区 | 中文字幕精品一区二区精品绿巨人 | 91年精品国产| 日本一区二区三区dvd视频在线| 日本特黄久久久高潮| 欧美亚洲愉拍一区二区| 亚洲欧美另类久久久精品2019| 国产又粗又猛又爽又黄91精品| 欧美一级精品大片| 日本伊人午夜精品| 欧美群妇大交群中文字幕| 一区二区三区精品| 在线视频观看一区| 亚洲欧美日韩一区| 色综合久久天天综合网| 亚洲欧美一区二区在线观看| 成人一区在线看| 欧美韩国日本一区| 成人免费视频caoporn| 国产欧美日韩三区| 国产成人在线看| 国产精品免费视频网站| 国产99精品国产| 中文字幕亚洲视频| 色88888久久久久久影院野外| 国产精品久久久久国产精品日日 | 色综合久久久网| 亚洲一区二区三区四区不卡| 在线免费观看日本一区| 亚洲一区二区欧美激情| 欧美日本在线播放| 麻豆成人久久精品二区三区红| 精品国产伦一区二区三区观看方式 | 丝袜诱惑制服诱惑色一区在线观看 | 国产精品一卡二卡在线观看| 国产免费成人在线视频| www.亚洲色图.com| 亚洲一区成人在线| 欧美一级片在线| 国产一区视频在线看| 国产精品女上位| 欧美综合在线视频| 麻豆精品在线观看| 国产人成一区二区三区影院| 成人激情校园春色| 亚洲自拍偷拍av| 欧美xxxx在线观看| av午夜一区麻豆| 日日夜夜一区二区| 久久久久高清精品| 91福利视频网站| 经典三级在线一区| 亚洲靠逼com| 欧美白人最猛性xxxxx69交|