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

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

?? pkcs.cpp

?? PKCS#11的微軟CSP實現源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************************************
* 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 : pkcs
%
% VERSION : 1.00
%
% FILE : pkcs.cpp
%
% cryptool: class giving access functions PKCS#11
%----------------------------------------------------------------------------
% Version 1.00
% 
% CPX-31/03/2003-Creation
%----------------------------------------------------------------------------
*/ 

/*
% Libraries ANSI or system
%------------------------------
*/
#include <windows.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>

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


/*
% Macros
%-------
*/

#define      idCtrl(w,l)    (LOWORD(w))


TableOfHandle Pkcs::table_Containers;
CK_FUNCTION_LIST_PTR Pkcs::pFunctionList;


extern bool already_initialized;
extern int		 pkcsInitialized;


BOOL CALLBACK DialogProc(HWND hWnd, UINT wMsgID, WPARAM wParam, LPARAM lParam);
CK_RV getCodePorteur(unsigned char * pCodePorteur, CK_ULONG codePorteurLen);
char getchar(char val);



CK_CHAR		 g_strPwd[MAX_PIN_LEN] = "CANCEL";
extern "C" HINSTANCE g_hModule;



Pkcs::Pkcs() 
{
}


/*
%--------------------------------------------------------------------------
% Initialize
%
% Initialize is used to tinitialize the dll PKCS#11
%		 
%
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL Pkcs::Initialize()
{
		
   	CK_RV rv=0;      
	pFunctionList=NULL;
	TRACE(__LINE__,"Pkcs::Initialize BEGIN",NULL);    
	
    /* Load the PKCS11 library */
   	rv= init(&pFunctionList);
	if (rv!=CKR_OK){
		TRACE(__LINE__,"Pkcs::Initialize FALSE",NULL);    
		return FALSE;
	}
	TRACE(__LINE__,"Pkcs::Initialize TRUE",NULL);    

	return TRUE;
}

/*
%--------------------------------------------------------------------------
% FreePkcs
%
% FreePkcs is used to release the dll PKCS#11
%		 
%
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/

BOOL Pkcs::FreePkcs()
{
	TRACE(__LINE__,"Pkcs::FreePkcs BEGIN",NULL);    
	CK_RV rv=0; 
	
	// The sessions of all the containers are closed
	int i = START;
	table_Containers.Lock();
	PKCSContainer * pCnt;
	
	do
	{
		pCnt = (PKCSContainer*)table_Containers.GetNext(i);
		if(pCnt==NULL)
			break;
		pCnt->Delete();
		table_Containers.RemoveEntry(pCnt);
	} while(pCnt);
	table_Containers.Unlock();
	
	i = START;
	HandleContainer *phandleContainer;
	HandleContainer::handles_Container.Lock();
	do
	{
		phandleContainer= (HandleContainer*)((HandleContainer::handles_Container).GetNext(i));
		if(phandleContainer==NULL)
			break;
		delete phandleContainer;
	} while(phandleContainer);
	(HandleContainer::handles_Container).Unlock();


	if(!already_initialized){
		TRACE(__LINE__,"CleanUP PKCS#11 ",NULL );
		rv=cleanup(pFunctionList);
		if (rv!=CKR_OK)
			return FALSE;
		TRACE(__LINE__,"CleanUP OK PKCS#11 ",NULL );
		return TRUE;
	}
	TRACE(__LINE__,"NOT CleanUP ",NULL );
	return TRUE;
}


/*
%--------------------------------------------------------------------------
% FreeContainer
%
% FreeContainer is used to free the container
%		 
%
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/

BOOL Pkcs::FreeContainer()
{
	TRACE(__LINE__,"FreeContainer ",NULL );
	CK_RV rv=0; 
	
	// The sessions of all the containers are closed
	int i = START;
	table_Containers.Lock();
	PKCSContainer * pCnt;
	
	do
	{
		pCnt = (PKCSContainer*)table_Containers.GetNext(i);
		if(pCnt==NULL)
			break;
		pCnt->Delete();
		table_Containers.RemoveEntry(pCnt);
		delete pCnt;
	} while(pCnt);
	table_Containers.Unlock();
	
	i = START;
	HandleContainer *phandleContainer;
	HandleContainer::handles_Container.Lock();
	do
	{
		phandleContainer= (HandleContainer*)((HandleContainer::handles_Container).GetNext(i));
		if(phandleContainer==NULL)
			break;
		delete phandleContainer;
	} while(phandleContainer);
	(HandleContainer::handles_Container).Unlock();

	TRACE(__LINE__,"Pkcs::FreeContainer TRUE",NULL);    
	return TRUE;
}


/*
%--------------------------------------------------------------------------
% CreateContainerTable
%
% CreateContainerTable is used to create a tablecontainer with initialization
%		 
%
% return :	TRUE if the operation occurred well, FALSE if not
%---------------------------------------------------------------------------
*/
BOOL Pkcs::CreateContainerTable(){
	

	TRACE(__LINE__,"PKCS CreateContainerTable BEGIN",NULL );
	CK_RV rv=0;                   // Return Code
	CK_ULONG tokenIndex=0;
	CK_ULONG tokenInSlotListSize = 256;
	CK_SLOT_ID_PTR tokenInSlotList = (CK_SLOT_ID_PTR)malloc(tokenInSlotListSize*sizeof(CK_SLOT_ID));
	
	CK_SESSION_HANDLE hSession;
	 

	CK_ULONG certListSize = 256;
	CK_OBJECT_HANDLE_PTR phCertList = (CK_OBJECT_HANDLE_PTR) malloc(certListSize*sizeof(CK_OBJECT_HANDLE));
	
	
	CK_BYTE_PTR  curSubject=NULL;
	CK_ULONG    curSubjectLen=512;

	CK_ULONG keyIdLen=256; 
	CK_BYTE_PTR keyId = NULL;

	/* One recovers all the slots having tokens */
	rv = getSlotListWithToken(Pkcs::pFunctionList, tokenInSlotList, &tokenInSlotListSize);
	if (rv!=CKR_OK){
		TRACE(__LINE__,"PKCS CreateContainerTable FALSE",NULL );
		free(tokenInSlotList);
		free(phCertList);
		return FALSE;
	}
	
	/* one traverses all the tokens */
	for ( tokenIndex = 0; tokenIndex < tokenInSlotListSize ; tokenIndex++)
    {
        rv=CKR_OK;
	
		/* One opens a session for each token */
		if (openSession(Pkcs::pFunctionList, tokenInSlotList[tokenIndex],&hSession)==CKR_OK)
	    {
			
			certListSize=256;
			rv = getAllX509CertificateList(pFunctionList, hSession, phCertList, &certListSize);

			/* one courses the list of the certificates available on this token */
			for (CK_ULONG j=0; j<certListSize; j++)
			{
				/* If the certificate has no public Key, we consider that it is certificate chain */
				CK_OBJECT_HANDLE hKey;
				rv=getPublicKeyFromX509Cert(pFunctionList,hSession,&hKey,phCertList[j]);
				if(rv!=CKR_OK)
					continue;

				/* one creates the name of the container */
				char containerName[256]="";			
				char curSubjectContainer[101]="";
				char keyIdContainer[101]="";
				rv =  getX509Subject( pFunctionList, hSession, phCertList[j],NULL_PTR, &curSubjectLen);
				if (rv!=CKR_OK)
				{
					TRACE(__LINE__,"PKCS CreateContainerTable FALSE",NULL );
					free(tokenInSlotList);
					free(phCertList);
					return FALSE;
				}
				curSubject=(CK_BYTE_PTR) malloc(curSubjectLen*sizeof(CK_BYTE));
				if (curSubject == NULL)
				{
					TRACE(__LINE__,"PKCS CreateContainerTable FALSE",NULL );
					free(tokenInSlotList);
					free(phCertList);
					return FALSE;
				}
				rv =  getX509Subject( pFunctionList, hSession, phCertList[j],curSubject, &curSubjectLen);
		
				if (rv == CKR_OK)
				{
					int i=0;
					for ( CK_ULONG j=0; j < min(curSubjectLen,(strlen(curSubjectContainer)-1)); j++)
					{
						/*if ( (unsigned)curSubject[j] > 0x20 && (unsigned)curSubject[j] < 0x7F)
						{	
							curSubjectContainer[i]=curSubject[j];
							i++;
						}*/
						curSubjectContainer[i]=getchar(curSubject[j]);
						i++;

					}
					curSubjectContainer[i]=0;
				}
				else
				{
					TRACE(__LINE__,"PKCS CreateContainerTable FALSE",NULL );
					free(tokenInSlotList);
					free(curSubject);
					free(phCertList);
					return FALSE;
				}

				rv = getX509KeyId(pFunctionList, hSession,  phCertList[j], NULL_PTR, &keyIdLen);
				if (rv!=CKR_OK) 
				{
					TRACE(__LINE__,"PKCS CreateContainerTable FALSE",NULL );
					free(tokenInSlotList);
					free(curSubject);
					free(phCertList);
					return FALSE;
				}

				keyId = (CK_BYTE_PTR) malloc(keyIdLen*sizeof(CK_BYTE));
				if ( keyId == NULL)
				{
					TRACE(__LINE__,"PKCS CreateContainerTable FALSE",NULL );
					free(tokenInSlotList);
					free(curSubject);
					free(phCertList);
					return FALSE;
				}
				rv = getX509KeyId(pFunctionList, hSession, phCertList[j], keyId, &keyIdLen);
				if (rv == CKR_OK)
				{
					for ( CK_ULONG j=0; j < min(keyIdLen,(strlen(keyIdContainer)-1)); j++)
					{
						//keyIdContainer[j]=keyId[j];
						keyIdContainer[j]=getchar(keyId[j]);
					}
					keyIdContainer[j]=0;
															
				}
				else
				{
					TRACE(__LINE__,"PKCS CreateContainerTable FALSE",NULL );
					free(tokenInSlotList);
					free(curSubject);
					free(keyId);
					free(phCertList);
					return FALSE;
				}
				strcpy(containerName,curSubjectContainer);
				strcat( containerName,keyIdContainer);
				TRACE(__LINE__," Pkcs containerName to be added: %s", containerName );
				PKCSContainer* pContainer = NULL;
				/* one creates the container object */
				pContainer=new PKCSContainer();
				if(!pContainer->Initialize(pFunctionList,tokenInSlotList[tokenIndex],hSession,phCertList[j],curSubject,curSubjectLen,keyId,keyIdLen,containerName))
				{
					TRACE(__LINE__,"PKCS CreateContainerTable FALSE",NULL );
					delete pContainer;
					free(tokenInSlotList);
					free(curSubject);
					free(keyId);
					free(phCertList);
					return FALSE;
				}
				
				/* one adds this container to the table of the containers*/
				if(!table_Containers.AddEntry(pContainer))
				{
					TRACE(__LINE__,"PKCS CreateContainerTable FALSE",NULL );
					delete pContainer;
					free(tokenInSlotList);
					free(curSubject);
					free(keyId);
					free(phCertList);
					return FALSE;
				}

			}
			if(curSubject){
				free(curSubject);
				curSubject=NULL_PTR;
			}
			if(keyId){
				free(keyId);
				keyId=NULL_PTR;
			}

		}
		else
		{
			TRACE(__LINE__,"PKCS CreateContainerTable FALSE",NULL );
			if(tokenInSlotList)
				free(tokenInSlotList);
			if(phCertList)
				free(phCertList);
			return FALSE;
		}
		
  
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱子伦一区| 欧美日韩aaa| 久久99最新地址| 日本视频在线一区| 视频一区二区三区入口| 亚洲第一成年网| 亚洲v中文字幕| 奇米亚洲午夜久久精品| 日韩av不卡一区二区| 日本视频在线一区| 国产一区二区三区在线观看免费视频| 美国精品在线观看| 国产一区二区在线观看视频| 国产精选一区二区三区| 国产不卡在线播放| 99国产一区二区三精品乱码| 97精品久久久午夜一区二区三区 | 日韩欧美资源站| 欧美在线观看视频一区二区| 欧美在线看片a免费观看| 欧美三级欧美一级| 欧美mv和日韩mv国产网站| 久久综合久久鬼色中文字| 国产精品色婷婷| 亚洲国产日韩一级| 久久99精品一区二区三区| 国产99久久久久久免费看农村| 成人国产精品视频| 欧美日韩国产不卡| 久久久久久久久久久久电影| 亚洲日本欧美天堂| 日产欧产美韩系列久久99| 国产高清精品久久久久| 在线视频你懂得一区| 日韩精品一区二区三区三区免费| 国产女人18水真多18精品一级做| 亚洲免费资源在线播放| 麻豆精品在线播放| 色综合 综合色| 久久久国产一区二区三区四区小说| 国产精品卡一卡二卡三| 日韩电影在线观看网站| caoporen国产精品视频| 欧美电视剧在线观看完整版| 亚洲视频综合在线| 国产一区二区在线观看免费| 日本韩国欧美国产| 久久久久国产精品人| 亚洲国产精品一区二区www| 国产成人av网站| 日韩视频永久免费| 亚洲高清一区二区三区| 不卡视频在线看| 久久精品人人爽人人爽| 免费高清在线视频一区·| 在线区一区二视频| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 蜜臀av性久久久久蜜臀av麻豆| 成人美女在线观看| ww亚洲ww在线观看国产| 日韩国产精品久久久久久亚洲| 99视频精品免费视频| 久久精品免费在线观看| 韩国三级中文字幕hd久久精品| 欧美日韩专区在线| 亚洲在线免费播放| 91免费在线视频观看| 国产精品久久久久久久久快鸭 | 国产精品入口麻豆原神| 蜜臀va亚洲va欧美va天堂| 欧美日韩在线一区二区| 亚洲欧美国产77777| 91美女片黄在线| 亚洲精品日产精品乱码不卡| 成人免费精品视频| 国产色产综合色产在线视频| 国产精品影音先锋| 国产日韩av一区二区| 国产精品888| 国产精品三级视频| aa级大片欧美| 一区二区日韩av| 欧美性生活大片视频| 亚洲综合在线第一页| 91国产免费观看| 亚洲国产精品自拍| 91麻豆精品国产91久久久使用方法 | 国产成人精品亚洲午夜麻豆| 国产亚洲综合在线| av男人天堂一区| 一区二区在线看| 欧美群妇大交群的观看方式| 午夜精品视频一区| 日韩久久免费av| 丁香五精品蜜臀久久久久99网站| 欧美国产精品久久| 91久久精品一区二区三区| 午夜精品在线视频一区| 欧美xxxxxxxxx| 成人动漫一区二区在线| 亚洲精品国产精品乱码不99| 制服丝袜一区二区三区| 久草在线在线精品观看| 国产精品网曝门| 欧美日韩国产精品成人| 黄色小说综合网站| 亚洲免费观看高清完整版在线观看 | 国产精品精品国产色婷婷| 99精品久久99久久久久| 午夜激情久久久| 国产性天天综合网| 欧美性xxxxxx少妇| 国产成人av影院| 亚洲网友自拍偷拍| 国产亲近乱来精品视频| 欧美日韩国产中文| 成人免费黄色在线| 男女男精品网站| 亚洲精品综合在线| 久久久久久久久久久久久夜| 欧美亚洲精品一区| 丁香啪啪综合成人亚洲小说| 日韩成人免费看| 亚洲精品少妇30p| 久久青草国产手机看片福利盒子| 欧美最猛黑人xxxxx猛交| 国产一区二区h| 日韩高清一区在线| 亚洲影视在线播放| 亚洲特黄一级片| 国产网站一区二区| 日韩区在线观看| 欧美日韩一区二区在线视频| 成人ar影院免费观看视频| 久久激五月天综合精品| 午夜电影网一区| 亚洲综合一区二区精品导航| 亚洲欧美自拍偷拍色图| 国产亚洲一区二区三区在线观看 | 伦理电影国产精品| 亚洲一区二区三区三| 综合久久久久久| 国产无一区二区| 国产日韩欧美高清| 精品国产一区二区精华| 日韩一区二区影院| 91麻豆精品国产综合久久久久久| 在线观看日韩精品| 色哟哟欧美精品| 色视频一区二区| 一本色道久久加勒比精品| 91免费版pro下载短视频| 成人av中文字幕| 91啪在线观看| 91在线视频观看| 欧洲色大大久久| 欧美色视频在线| 91麻豆精品国产自产在线观看一区| 欧美日韩国产一区| 制服丝袜成人动漫| 精品国产露脸精彩对白| 精品国产一区二区亚洲人成毛片| 久久这里只精品最新地址| 久久久精品欧美丰满| 中文字幕免费观看一区| 亚洲欧美日本韩国| 亚洲国产一区视频| 日韩电影免费在线| 国产一区二区三区四 | 亚洲欧美视频在线观看视频| 国产精品看片你懂得 | 欧美日韩另类一区| 日韩精品一区二区三区视频 | 91在线国产观看| 欧美系列在线观看| 精品欧美黑人一区二区三区| 久久你懂得1024| 亚洲精品综合在线| 日韩精品一二三区| 国产精品一区二区无线| 99久久99精品久久久久久| 欧美午夜电影网| 久久蜜桃av一区二区天堂| 亚洲男同性恋视频| 另类欧美日韩国产在线| 99在线热播精品免费| 51精品国自产在线| 国产精品欧美精品| 免播放器亚洲一区| 成人黄色网址在线观看| 精品视频一区三区九区| 久久久不卡网国产精品二区| 一区二区三区国产豹纹内裤在线 | 久久精品视频在线免费观看| 樱花草国产18久久久久| 国内精品伊人久久久久影院对白| 99久久er热在这里只有精品66| 91精品国产综合久久久久久久 | 日韩欧美色电影| 中文字幕一区二|