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

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

?? handlecontainer.cpp

?? 信息安全開發(fā)使用的
?? 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
%

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精选在线视频| 99热99精品| 日韩一区二区三区在线| 午夜精品视频一区| 日韩欧美123| 极品少妇xxxx精品少妇| 国产亚洲欧美在线| 在线免费亚洲电影| 日韩电影在线免费看| 91麻豆精品久久久久蜜臀| 久久国产视频网| 久久久久国产一区二区三区四区| 国产一二精品视频| 亚洲另类在线制服丝袜| 91.麻豆视频| 国产成人精品网址| 亚洲精选视频在线| 精品久久久久一区| av动漫一区二区| 亚洲国产成人高清精品| 日韩西西人体444www| 精品无码三级在线观看视频| 国产精品视频在线看| 91日韩精品一区| 男人的j进女人的j一区| 久久精品视频在线免费观看| 成人精品亚洲人成在线| 亚洲成av人**亚洲成av**| 欧美一区二区三区男人的天堂| 极品少妇xxxx偷拍精品少妇| 一区二区三区国产精品| 久久亚洲精品小早川怜子| 在线一区二区三区四区五区| 国模冰冰炮一区二区| 亚洲综合男人的天堂| 久久久91精品国产一区二区三区| 色偷偷成人一区二区三区91| 狠狠狠色丁香婷婷综合激情 | 成人一区二区视频| 亚洲一区视频在线| 国产亚洲欧美在线| 欧美一级电影网站| 在线观看亚洲一区| 高清视频一区二区| 麻豆国产精品777777在线| 亚洲码国产岛国毛片在线| 欧美精品一区二区三区蜜桃 | 亚洲欧洲日本在线| 精品日韩欧美一区二区| 欧美在线观看视频在线| av一本久道久久综合久久鬼色| 久久se精品一区精品二区| 午夜影院在线观看欧美| 一区视频在线播放| 国产亲近乱来精品视频| 日韩一二三区视频| 欧美色图激情小说| 欧美色男人天堂| 成人免费观看视频| 美女视频一区二区| 日韩精品久久久久久| 亚洲综合激情小说| 亚洲三级电影全部在线观看高清| 精品成人一区二区| 日韩欧美成人一区| 日韩三级.com| 欧美电影免费观看高清完整版在线 | 大桥未久av一区二区三区中文| 另类小说色综合网站| 五月天激情综合| 亚洲国产乱码最新视频| 亚洲欧美欧美一区二区三区| 国产精品国产成人国产三级| 久久精品一区二区三区不卡| www国产成人| 久久久精品日韩欧美| 精品国产电影一区二区| 日韩免费在线观看| 精品久久一区二区| 精品国产麻豆免费人成网站| 精品免费视频.| 日韩欧美激情在线| 精品国产不卡一区二区三区| 26uuu色噜噜精品一区二区| 精品嫩草影院久久| 中文字幕av一区二区三区免费看| 国产精品天天看| 亚洲欧美日韩精品久久久久| 亚洲国产三级在线| 日韩av电影天堂| 久久精品国产久精国产| 国产成人在线视频网站| www.亚洲色图.com| 日本久久一区二区三区| 欧美乱妇15p| 久久久一区二区| 亚洲欧美在线观看| 天天综合天天做天天综合| 久久精品av麻豆的观看方式| 国产成人精品一区二区三区四区| 99re这里只有精品6| 欧美成人精品福利| 欧美国产精品劲爆| 亚洲高清三级视频| 国产麻豆日韩欧美久久| 色综合色综合色综合色综合色综合 | 亚洲午夜视频在线观看| 日韩国产精品久久久| 久久精品国产精品亚洲精品| 高清久久久久久| 国产在线一区二区| 91成人在线观看喷潮| 欧美精品一区二区三区蜜桃视频| 欧美经典三级视频一区二区三区| 亚洲精品国产a| 精品一二三四区| 成人美女在线视频| 欧美一区二区三区的| 久久精品一区二区三区不卡牛牛| 一区二区视频在线| 日韩中文字幕av电影| 国产成人亚洲综合a∨婷婷图片 | 天天色综合天天| 精品在线亚洲视频| 在线视频国内一区二区| 欧美四级电影在线观看| 国产精品视频观看| 日韩高清不卡一区二区| 国产成人亚洲综合色影视| 欧美理论片在线| 中文欧美字幕免费| 狠狠色丁香婷婷综合| 99麻豆久久久国产精品免费优播| 日韩欧美国产wwwww| 一区二区三区四区在线| 久久成人久久爱| 欧美情侣在线播放| 欧美国产国产综合| 91精品国产综合久久国产大片 | 亚洲一二三四久久| 性欧美大战久久久久久久久| 懂色av一区二区三区免费看| 日韩精品一区二区三区中文不卡| 亚洲视频在线观看一区| 国产一区三区三区| 欧美视频日韩视频在线观看| 亚洲欧美aⅴ...| 国产精品久久久久aaaa| 国产成人在线观看免费网站| 精品久久久三级丝袜| 亚洲777理论| 欧美丝袜丝交足nylons| 中文av一区二区| 丝袜国产日韩另类美女| 99这里只有精品| 日本一区二区免费在线观看视频 | 午夜精品久久久| 91日韩精品一区| 亚洲欧美色图小说| 国产一区二区精品久久91| 日韩限制级电影在线观看| 日本欧美在线看| 欧美精品99久久久**| 日韩中文字幕91| 在线观看国产日韩| 亚洲欧美国产三级| 欧美视频在线播放| 亚洲欧美日韩国产另类专区| 91在线免费看| 国产欧美一区二区精品婷婷| 国产最新精品免费| 国产网站一区二区三区| 国产一区视频在线看| 国产午夜久久久久| 成人动漫av在线| 国产蜜臀av在线一区二区三区| 丁香婷婷综合网| 国产欧美日本一区视频| 91在线观看污| 亚洲伊人伊色伊影伊综合网| 欧美中文字幕亚洲一区二区va在线 | 久久国产精品露脸对白| 欧美va天堂va视频va在线| 欧美aaaaaa午夜精品| 久久一夜天堂av一区二区三区| 日本最新不卡在线| 久久亚洲一区二区三区四区| 成人国产精品免费观看动漫| 国产精品理论片在线观看| 99re热这里只有精品免费视频| 久久欧美一区二区| 色呦呦一区二区三区| 日韩专区在线视频| 日韩欧美国产综合在线一区二区三区| 精品一区二区在线视频| 精品国产免费人成电影在线观看四季 | 国内精品伊人久久久久av一坑| 国产精品国产三级国产aⅴ原创| 成人永久看片免费视频天堂| 亚洲欧美一区二区视频|