📄 devicelist.cpp
字号:
}
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 + -