⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 devicelist.cpp

📁 对PKCS11接口的封装
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}

	m_dwErrCode = m_Pkcs11FuncList->C_Logout(hSession);
	if(CKR_OK != m_dwErrCode)
	{	
		DebugOutPosition(__FILE__, __LINE__);
		goto end;
	}

end:

	DebugOutRet(m_dwErrCode);
}

long CDeviceList::ChangePin(CK_USER_TYPE ulType, 
			   PUCHAR pbOldPIN, DWORD	ulOldPINLen, PUCHAR pbNewPIN, DWORD	ulNewPINLen)
{
	DebugOutFunc("ChangePin");

	BOOL bLoged;
	CK_USER_TYPE ulSessionType;

	m_dwErrCode = CKR_OK;

	if(!CheckPkcs11FuncList())
	{
		m_dwErrCode = USBKEY_INVALID_LIBRARY_PATH;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}
	m_dwErrCode = GetSessionInfo(m_hAppletSession, ulSessionType, bLoged);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		goto end;
	}
	
	if(bLoged == TRUE) 
	{
		LogOut(m_hAppletSession);	
	}

	m_dwErrCode = LogIn(m_hAppletSession, ulType, pbOldPIN, ulOldPINLen);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		goto end;
	}
	
	m_dwErrCode = m_Pkcs11FuncList->C_SetPIN(m_hAppletSession, pbOldPIN, ulOldPINLen, pbNewPIN, ulNewPINLen);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		goto end;
	}

end:

	DebugOutRet(m_dwErrCode);
}

long CDeviceList::ChangePinEx(PUCHAR pbSoPIN, DWORD ulSoPINLen, 
							  PUCHAR pbNewPIN, DWORD ulNewPINLen)
{
	DebugOutFunc("ChangePinEx");

	BOOL bLoged;
	CK_USER_TYPE ulType;

	m_dwErrCode = CKR_OK;

	if(!CheckPkcs11FuncList())
	{
		m_dwErrCode = USBKEY_INVALID_LIBRARY_PATH;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	m_dwErrCode = GetSessionInfo(m_hAppletSession, ulType, bLoged);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		goto end;
	}
	
	if(bLoged == TRUE) 
	{
		LogOut(m_hAppletSession);	
	}
	
	m_dwErrCode = LogIn(m_hAppletSession, CKU_SO, pbSoPIN, ulSoPINLen);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		goto end;
	}

	m_dwErrCode = m_Pkcs11FuncList->C_InitPIN(m_hAppletSession, pbNewPIN, ulNewPINLen);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		goto end;
	}

end:

	DebugOutRet(m_dwErrCode);
}


//user file

long CDeviceList::FindTokenFile(CK_SESSION_HANDLE hSession, 
					 CK_BYTE_PTR pbFileName, CK_ULONG ulFileNameLen, CK_OBJECT_HANDLE_PTR phFileObject)
{
	DebugOutFunc("FindTokenFile");

	m_dwErrCode = CKR_OK;

	CK_ULONG ulObjectCount = 0;
	CK_OBJECT_CLASS pClass = CKO_DATA;

	CK_ATTRIBUTE ObjTemplate[] = {
		{CKA_CLASS,		&pClass,	sizeof(CK_OBJECT_CLASS)},
		{CKA_TOKEN,		&m_bTrue,	sizeof(CK_BBOOL)},
		{CKA_LABEL,		pbFileName,	ulFileNameLen},
	};

	if(!CheckPkcs11FuncList())
	{
		m_dwErrCode = USBKEY_INVALID_LIBRARY_PATH;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	m_dwErrCode = m_Pkcs11FuncList->C_FindObjectsInit(hSession, ObjTemplate, ARRAYSIZEOF(ObjTemplate));
	if(CKR_OK != m_dwErrCode)
	{		
		DebugOutPosition(__FILE__, __LINE__);
		goto end;
	}

	m_dwErrCode = m_Pkcs11FuncList->C_FindObjects(hSession, phFileObject, 1, &ulObjectCount);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		goto end;
	}

	if(ulObjectCount == 0)
	{
		m_dwErrCode = USBKEY_NO_OBJECT;
	}

end:
	m_Pkcs11FuncList->C_FindObjectsFinal(hSession);
	DebugOutRet(m_dwErrCode);
}

long CDeviceList::GetFileSize(CK_BYTE_PTR pbFileName, CK_ULONG ulFileNameLen,CK_ULONG &ulFileSize)
{
	CK_OBJECT_HANDLE hFileObject = NULL_PTR;

	DebugOutFunc("GetFileSize");

	m_dwErrCode = CKR_OK;

	if(!CheckPkcs11FuncList() || m_hAppletSession == NULL_PTR)
	{
		m_dwErrCode = USBKEY_INVALID_LIBRARY_PATH;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	m_dwErrCode = FindTokenFile(m_hAppletSession, pbFileName, ulFileNameLen, &hFileObject);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	CK_ATTRIBUTE AttrTemplate = {CKA_APPLICATION, &ulFileSize,sizeof(ulFileSize)};
	m_dwErrCode = m_Pkcs11FuncList->C_GetAttributeValue(m_hAppletSession, hFileObject, &AttrTemplate, 1);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}
	
	DebugOutRet(m_dwErrCode);
}

long CDeviceList::DeleteTokenFile(CK_BYTE_PTR pbFileName, CK_ULONG ulFileNameLen)
{
	DebugOutFunc("DeleteTokenFile");

	m_dwErrCode = CKR_OK;
	CK_OBJECT_HANDLE hFileObject = NULL_PTR;

	if(!CheckPkcs11FuncList() || m_hAppletSession == NULL_PTR)
	{
		m_dwErrCode = USBKEY_INVALID_LIBRARY_PATH;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	m_dwErrCode = FindTokenFile(m_hAppletSession, pbFileName, ulFileNameLen, &hFileObject);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	if(hFileObject == NULL_PTR)
	{
		m_dwErrCode = USBKEY_ERR_NOFILE;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	m_dwErrCode = m_Pkcs11FuncList->C_DestroyObject(m_hAppletSession, hFileObject);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	DebugOutRet(m_dwErrCode);
}

long CDeviceList::CreateTokenFile(BOOL bPublic,
					 CK_BYTE_PTR pbFileName, CK_ULONG ulFileNameLen, CK_ULONG ulMaxFileLen)
{
	DebugOutFunc("CreateTokenFile");

	m_dwErrCode = CKR_OK;

	CK_BBOOL bState = !bPublic;

	CK_OBJECT_CLASS pClass = CKO_DATA;
	CK_OBJECT_HANDLE hFileObject = NULL_PTR;

	CK_ATTRIBUTE ObjTemplate[] = {
		{CKA_CLASS,		&pClass,		sizeof(CK_OBJECT_CLASS)},
		{CKA_TOKEN,		&m_bTrue,		sizeof(CK_BBOOL)},
		{CKA_PRIVATE,	&bState,		sizeof(CK_BBOOL)},
		{CKA_LABEL,		pbFileName,		ulFileNameLen},
		{CKA_APPLICATION,	&ulMaxFileLen,	sizeof(CK_ULONG)},		
	};

	if(!CheckPkcs11FuncList() || m_hAppletSession == NULL_PTR)
	{
		m_dwErrCode = USBKEY_INVALID_LIBRARY_PATH;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	m_dwErrCode = FindTokenFile(m_hAppletSession, pbFileName, ulFileNameLen, &hFileObject);
	if(CKR_OK != m_dwErrCode && USBKEY_NO_OBJECT != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	if(hFileObject != NULL_PTR)
	{
		m_dwErrCode = m_Pkcs11FuncList->C_DestroyObject(m_hAppletSession, hFileObject);
		if(CKR_OK != m_dwErrCode)
		{
			DebugOutPosition(__FILE__, __LINE__);
			DebugOutRet(m_dwErrCode);
		}
	}

	m_dwErrCode = m_Pkcs11FuncList->C_CreateObject(m_hAppletSession, ObjTemplate, ARRAYSIZEOF(ObjTemplate), &hFileObject);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	DebugOutRet(m_dwErrCode);
}

long CDeviceList::ReadFileData(CK_BYTE_PTR pbFileName, CK_ULONG ulFileNameLen,
							   CK_BYTE_PTR pbData, CK_ULONG &ulDataLen)
{
	DebugOutFunc("ReadFileData");

	m_dwErrCode = CKR_OK;
	CK_OBJECT_HANDLE hFileObject = NULL_PTR;

	if(!CheckPkcs11FuncList() || m_hAppletSession == NULL_PTR)
	{
		m_dwErrCode = USBKEY_INVALID_LIBRARY_PATH;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	m_dwErrCode = FindTokenFile(m_hAppletSession, pbFileName, ulFileNameLen, &hFileObject);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	if(hFileObject == NULL_PTR)
	{
		m_dwErrCode = USBKEY_ERR_NOFILE;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	CK_ATTRIBUTE AttrTemplate = {CKA_VALUE, NULL_PTR,0};
	m_dwErrCode = m_Pkcs11FuncList->C_GetAttributeValue(m_hAppletSession, hFileObject, &AttrTemplate, 1);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	if(pbData == NULL_PTR)
	{
		ulDataLen = AttrTemplate.ulValueLen;
		DebugOutRet(CKR_OK);
	}

	if(ulDataLen < AttrTemplate.ulValueLen)
	{
		m_dwErrCode = USBKEY_INVALID_PARAMETER;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	AttrTemplate.pValue = new CK_BYTE[AttrTemplate.ulValueLen];
	ZeroMemory(AttrTemplate.pValue,AttrTemplate.ulValueLen);

	m_dwErrCode = m_Pkcs11FuncList->C_GetAttributeValue(m_hAppletSession, hFileObject, &AttrTemplate, 1);
	if(CKR_OK != m_dwErrCode)
	{
		delete[] AttrTemplate.pValue;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	ulDataLen = AttrTemplate.ulValueLen;
	CopyMemory(pbData, (CK_BYTE_PTR)AttrTemplate.pValue, AttrTemplate.ulValueLen);
	delete[] AttrTemplate.pValue;

	DebugOutRet(m_dwErrCode);
}

long CDeviceList::WriteFileData(CK_BYTE_PTR pbFileName,
				   CK_ULONG ulFileNameLen,	CK_BYTE_PTR pbData, CK_ULONG ulDataLen)
{
	DebugOutFunc("WriteFileData");

	m_dwErrCode = CKR_OK;
	CK_ULONG ulMaxLen;
	CK_OBJECT_HANDLE hFileObject = NULL_PTR;

	if(!CheckPkcs11FuncList() || m_hAppletSession == NULL_PTR)
	{
		m_dwErrCode = USBKEY_INVALID_LIBRARY_PATH;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	m_dwErrCode = FindTokenFile(m_hAppletSession, pbFileName, ulFileNameLen, &hFileObject);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	if(hFileObject == NULL_PTR)
	{
		m_dwErrCode = USBKEY_ERR_NOFILE;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	CK_ATTRIBUTE AttrTemplate = {CKA_APPLICATION, &ulMaxLen, sizeof(CK_ULONG)};
	m_dwErrCode = m_Pkcs11FuncList->C_GetAttributeValue(m_hAppletSession, hFileObject, &AttrTemplate, 1);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	if(ulMaxLen < ulDataLen)
	{
		m_dwErrCode = USBKEY_ERR_TOOMOREDATA;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	CK_ATTRIBUTE pWriteTemplate = {CKA_VALUE, pbData, ulDataLen};
	m_dwErrCode = m_Pkcs11FuncList->C_SetAttributeValue(m_hAppletSession, hFileObject, &pWriteTemplate, 1);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	DebugOutRet(m_dwErrCode);
}

void CDeviceList::Reset()
{
	if ( m_hSession )
	{
		CloseTokenSession(m_hSession);
		m_hSession = NULL;
	}
}

long CDeviceList::InitKey(CK_SLOT_ID ulSlotID,PUCHAR ulpSOPin, ULONG ulSOPINLen, 
							PUCHAR ulpUserPin, ULONG ulUserPINLen,
							PUCHAR ulpLabel)
{
	if(!CheckPkcs11FuncList())
	{
		m_dwErrCode = USBKEY_INVALID_LIBRARY_HANDLE;
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}

	m_dwErrCode = m_Pkcs11FuncList->C_InitToken(ulSlotID,(CK_UTF8CHAR_PTR)ulpSOPin,ulSOPINLen,
									(CK_UTF8CHAR_PTR)ulpLabel);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}
	m_dwErrCode = OpenAppletSession(ulSlotID);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}
	m_dwErrCode = LogIn(m_hAppletSession,CKU_SO,ulpSOPin,ulSOPINLen);
	if(CKR_OK != m_dwErrCode)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}
	m_dwErrCode = m_Pkcs11FuncList->C_InitPIN(m_hAppletSession,(CK_UTF8CHAR_PTR)ulpUserPin,ulUserPINLen);
	LogOut(m_hAppletSession);
	CloseAppletSession();
	Reset();
	if (m_dwErrCode != CKR_OK)
	{
		DebugOutPosition(__FILE__, __LINE__);
		DebugOutRet(m_dwErrCode);
	}
	return m_dwErrCode;
}

void CDeviceList::Reset(CK_SLOT_ID ckSlotID)
{

	m_dwErrCode = m_Pkcs11FuncList->C_CloseAllSessions(ckSlotID);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -