windows环境 PKCS11库Demo 用于劫持PKCS11库并打印参数

  • 背景
    • PKCS11函数表

背景

PKCS(Public—Key Cryptography Standards)是著名的RSA实验室为提供公钥加密技术的互操作性而发布的一系列可供参照的标准。

最近在对新版本签名控件(包含交易签名、证书下载更新等功能)添加支持PKCS11标准时, 遇到这种问题场景,银行客户手中有一款老版本的客户端软件可以调用某UK厂商的PKCS11库进行签名、下载证书等操作,但由于该UKey厂商已经倒闭,所以新版本签名控件在集成该UKey类型时没有UK厂商的支持,根据标准的PKCS11文档中调用该PKCS11库并没有得到期望的响应,所以想通过DLL劫持的方式,捕捉一下银行客户老版本客户端调用UK厂商的PKCS11库传入的什么参数。

PKCS11函数表

我想到最快的方式就是去Github去找一下有没有类似的PKCS11Demo,果然是有的,根据自己的需要,每个函数只需要进行打印需要的参数,然后调用UKey厂商真实PKCS11库即可,需要注意的是C_GetFunctionList 需要返回自己库的函数表。

链接: link.

我把自己的库上传资源,如果有遇到类似问题的可以下载参考;
环境:Windows10 + VS2010
有问题 可以添加我的QQ 942098061
HKB_DFTX_pkcs11.cpp.

// HKB_DFTX_pkcs11.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#include "cryptoki.h"
//#include "pkcs11.h"
#include <string.h>
#include "Utility.h"
/* SPDX-License-Identifier: BSD-2-Clause *///#include "cryptoki.h"//自定义信息
HMODULE m_hInstLib;
CK_FUNCTION_LIST_PTR p11;
typedef CK_RV(*C_GETFUNCTIONLIST)(CK_FUNCTION_LIST_PTR_PTR ppFunctionList);#define DATA_TYPE_STRING     0
#define DATA_TYPE_LONG       1
#define DATA_TYPE_BOOL       2
///void PRINT_CK_ATTRIBUTE (CK_ATTRIBUTE_PTR templ)
{CK_ATTRIBUTE_TYPE type =templ->type;std::wstring wstrtype = L"";std::wstring wstrValue = L"";std::wstring wstrtemp = L"";int nDataType = DATA_TYPE_STRING;switch(type){case CKA_CLASS:wstrtype = L"CKA_CLASS";nDataType = DATA_TYPE_LONG;break;case CKA_TOKEN:wstrtype = L"CKA_TOKEN";nDataType = DATA_TYPE_BOOL;break;case CKA_CERTIFICATE_TYPE:wstrtype = L"CKA_CERTIFICATE_TYPE";nDataType = DATA_TYPE_LONG;break;case CKA_SUBJECT:wstrtype = L"CKA_SUBJECT";nDataType = DATA_TYPE_STRING;break;case CKA_ID:wstrtype = L"CKA_ID";nDataType = DATA_TYPE_STRING;break;case CKA_VALUE:wstrtype = L"CKA_VALUE";nDataType = DATA_TYPE_STRING;break;case CKA_PRIVATE:wstrtype = L"CKA_PRIVATE";nDataType = DATA_TYPE_BOOL;break;case CKA_KEY_TYPE:wstrtype = L"CKA_KEY_TYPE";nDataType = DATA_TYPE_LONG;break;case CKA_ENCRYPT:wstrtype = L"CKA_ENCRYPT";nDataType = DATA_TYPE_BOOL;break;case CKA_VERIFY:wstrtype = L"CKA_VERIFY";nDataType = DATA_TYPE_BOOL;break;case CKA_WRAP:wstrtype = L"CKA_WRAP";nDataType = DATA_TYPE_BOOL;break;case CKA_MODULUS_BITS:wstrtype = L"CKA_MODULUS_BITS";nDataType = DATA_TYPE_LONG;break;case CKA_PUBLIC_EXPONENT:wstrtype = L"CKA_PUBLIC_EXPONENT";nDataType = DATA_TYPE_STRING;break;case CKA_SENSITIVE:wstrtype = L"CKA_SENSITIVE";nDataType = DATA_TYPE_BOOL;break;case CKA_DECRYPT:wstrtype = L"CKA_DECRYPT";nDataType = DATA_TYPE_BOOL;break;case CKA_SIGN:wstrtype = L"CKA_TOKEN";nDataType = DATA_TYPE_BOOL;break;case CKA_UNWRAP:wstrtype = L"CKA_UNWRAP";nDataType = DATA_TYPE_BOOL;break;case CKA_DERIVE:wstrtype = L"CKA_DERIVE";nDataType = DATA_TYPE_BOOL;break;case CKA_VERIFY_RECOVER:wstrtype = L"CKA_VERIFY_RECOVER";nDataType = DATA_TYPE_BOOL;break;case CKA_LABEL:wstrtype = L"CKA_LABEL";nDataType = DATA_TYPE_STRING;break;case CKA_ISSUER:wstrtype = L"CKA_ISSUER";nDataType = DATA_TYPE_STRING;break;case CKA_SERIAL_NUMBER:wstrtype = L"CKA_SERIAL_NUMBER";nDataType = DATA_TYPE_STRING;break;default :wstrtemp = CUtility::b64encode_to_wstring((unsigned char*)templ->pValue, templ->ulValueLen);PRINT_INFO(L"Default type = 0x%.8X,Value = %s",type, wstrtemp.c_str());return;}std::wstring wstrDataType = L"";switch(nDataType){case DATA_TYPE_STRING:wstrDataType = L"string";wstrtemp = CUtility::b64encode_to_wstring((unsigned char*)templ->pValue, templ->ulValueLen);PRINT_INFO(L"type = %s, DataType = %s, Value = %s",wstrtype.c_str(),wstrDataType.c_str(), wstrtemp.c_str());break;case DATA_TYPE_LONG:wstrDataType = L"unsigned long int";PRINT_INFO(L"type = %s, DataType = %s, Value = 0x%.8X",wstrtype.c_str(),wstrDataType.c_str(),*((CK_ULONG *)templ->pValue));break;case DATA_TYPE_BOOL:wstrDataType = L"bool";if (*((CK_BBOOL *)templ->pValue) == TRUE)wstrValue = L"TRUE";elsewstrValue = L"FALSE";PRINT_INFO(L"type = %s, DataType = %s, Value = %s",wstrtype.c_str(),wstrDataType.c_str(),wstrValue.c_str());break;default :PRINT_INFO(L"nDataType not found");}
}__declspec(dllexport) CK_RV C_Initialize (void *init_args) {PRINT_INFO(L"-----***------");CK_RV rv;TCHAR buf[MAX_PATH] = {'\0'};WCHAR* p11path = L"";::GetModuleFileName( NULL, buf, MAX_PATH);p11path = buf;WCHAR* p11name = L"\\HKB_DFTX_pkcs11.dll";wcscpy(p11path+wcslen(p11path),p11name);m_hInstLib = LoadLibrary(TEXT("D:\\p11lib\\HKB_DFTX_pkcs11.dll"));//m_hInstLib = LoadLibrary(TEXT("D:\\p11lib\\HKB_Enterprise_Jansh_2.1.dll"));if (!m_hInstLib) return -1;C_GETFUNCTIONLIST pfC_GetFunctionList = (C_GETFUNCTIONLIST) GetProcAddress(m_hInstLib, "C_GetFunctionList"); if (!pfC_GetFunctionList) {FreeLibrary(m_hInstLib);m_hInstLib = NULL;return -2;}rv = pfC_GetFunctionList(&p11);if (rv != CKR_OK){FreeLibrary(m_hInstLib);m_hInstLib = NULL;return -3;}rv = pfC_GetFunctionList(&p11);if (rv != CKR_OK){FreeLibrary(m_hInstLib);m_hInstLib = NULL;return -3;}rv = p11->C_Initialize(init_args);if(rv != CKR_OK && rv != CKR_CRYPTOKI_ALREADY_INITIALIZED){p11 = NULL;return rv;}return rv;
}__declspec(dllexport) CK_RV C_Finalize (void *pReserved) {PRINT_INFO(L"-----***------");CK_RV rv =  p11->C_Finalize(pReserved);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_GetInfo (CK_INFO *info) {PRINT_INFO(L"-----***------");CK_RV rv =  p11->C_GetInfo(info);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_GetFunctionList (CK_FUNCTION_LIST **ppFunctionList) {PRINT_INFO(L"-----***------");//CUtility::InitLog();CK_FUNCTION_LIST_PTR function_list;//CK_FUNCTION_LIST* function_list;function_list = new CK_FUNCTION_LIST;function_list->version.major = 2;function_list->version.minor = 4;function_list->C_CancelFunction = C_CancelFunction;function_list->C_CloseAllSessions = C_CloseAllSessions;function_list->C_CloseSession = C_CloseSession;function_list->C_CopyObject = C_CopyObject;function_list->C_CreateObject = C_CreateObject;function_list->C_Decrypt = C_Decrypt;function_list->C_DecryptDigestUpdate = C_DecryptDigestUpdate;function_list->C_DecryptFinal = C_DecryptFinal;function_list->C_DecryptInit = C_DecryptInit;function_list->C_DecryptUpdate = C_DecryptUpdate;function_list->C_DecryptVerifyUpdate = C_DecryptVerifyUpdate;function_list->C_DeriveKey = C_DeriveKey;function_list->C_DestroyObject = C_DestroyObject;function_list->C_Digest = C_Digest;function_list->C_DigestEncryptUpdate = C_DigestEncryptUpdate;function_list->C_DigestFinal = C_DigestFinal;function_list->C_DigestInit = C_DigestInit;function_list->C_DigestKey = C_DigestKey;function_list->C_DigestUpdate = C_DigestUpdate;function_list->C_Encrypt = C_Encrypt;function_list->C_EncryptFinal = C_EncryptFinal;function_list->C_EncryptInit = C_EncryptInit;function_list->C_EncryptUpdate = C_EncryptUpdate;function_list->C_Finalize = C_Finalize;function_list->C_FindObjects = C_FindObjects;function_list->C_FindObjectsFinal = C_FindObjectsFinal;function_list->C_FindObjectsInit = C_FindObjectsInit;function_list->C_GenerateKey = C_GenerateKey;function_list->C_GenerateKeyPair = C_GenerateKeyPair;function_list->C_GenerateRandom = C_GenerateRandom;function_list->C_GetAttributeValue = C_GetAttributeValue;function_list->C_GetFunctionList = C_GetFunctionList;function_list->C_GetFunctionStatus = C_GetFunctionStatus;function_list->C_GetInfo = C_GetInfo;function_list->C_GetMechanismInfo = C_GetMechanismInfo;function_list->C_GetMechanismList = C_GetMechanismList;function_list->C_GetObjectSize = C_GetObjectSize;function_list->C_GetOperationState = C_GetOperationState;function_list->C_GetSessionInfo = C_GetSessionInfo;function_list->C_GetSlotInfo = C_GetSlotInfo;function_list->C_GetSlotList = C_GetSlotList;function_list->C_GetTokenInfo = C_GetTokenInfo;function_list->C_Initialize = C_Initialize;function_list->C_InitPIN = C_InitPIN;function_list->C_InitToken = C_InitToken;function_list->C_Login = C_Login;function_list->C_Logout = C_Logout;function_list->C_OpenSession = C_OpenSession;function_list->C_SeedRandom = C_SeedRandom;function_list->C_SetAttributeValue = C_SetAttributeValue;function_list->C_SetOperationState = C_SetOperationState;function_list->C_SetPIN = C_SetPIN;function_list->C_Sign = C_Sign;function_list->C_SignEncryptUpdate = C_SignEncryptUpdate;function_list->C_SignFinal = C_SignFinal;function_list->C_SignInit = C_SignInit;function_list->C_SignRecover = C_SignRecover;function_list->C_SignRecoverInit = C_SignRecoverInit;function_list->C_SignUpdate = C_SignUpdate;function_list->C_UnwrapKey = C_UnwrapKey;function_list->C_Verify = C_Verify;function_list->C_VerifyFinal = C_VerifyFinal;function_list->C_VerifyInit = C_VerifyInit;function_list->C_VerifyRecover = C_VerifyRecover;function_list->C_VerifyRecoverInit = C_VerifyRecoverInit;function_list->C_VerifyUpdate = C_VerifyUpdate;function_list->C_WaitForSlotEvent = C_WaitForSlotEvent;function_list->C_WrapKey = C_WrapKey;*ppFunctionList=function_list;return CKR_OK;
}__declspec(dllexport) CK_RV C_GetSlotList (CK_BYTE token_present, CK_SLOT_ID *slot_list, CK_ULONG_PTR count) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_GetSlotList(token_present,  slot_list, count);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_GetSlotInfo (CK_SLOT_ID slotID, CK_SLOT_INFO *info) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_GetSlotInfo(slotID,  info);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_GetTokenInfo (CK_SLOT_ID slotID, CK_TOKEN_INFO *info) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_GetTokenInfo(slotID,  info);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_WaitForSlotEvent (CK_FLAGS flags, CK_SLOT_ID *slot, void *pReserved) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_WaitForSlotEvent ( flags,  slot, pReserved);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_GetMechanismList (CK_SLOT_ID slotID, CK_MECHANISM_TYPE *mechanism_list, CK_ULONG_PTR count) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_GetMechanismList( slotID, mechanism_list,  count);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_GetMechanismInfo (CK_SLOT_ID slotID, CK_MECHANISM_TYPE type, CK_MECHANISM_INFO *info) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_GetMechanismInfo( slotID, type,  info);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_InitToken (CK_SLOT_ID slotID, CK_BYTE_PTR pin, CK_ULONG pin_len, CK_BYTE_PTR label) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_InitToken( slotID, pin, pin_len, label);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_InitPIN (CK_SESSION_HANDLE session, CK_UTF8CHAR_PTR pin, CK_ULONG pin_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_InitPIN( session, pin, pin_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_SetPIN (CK_SESSION_HANDLE session, CK_UTF8CHAR_PTR old_pin, CK_ULONG old_len, CK_UTF8CHAR_PTR new_pin, CK_ULONG new_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_SetPIN( session, old_pin, old_len, new_pin, new_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_OpenSession (CK_SLOT_ID slotID, CK_FLAGS flags, void *application, CK_NOTIFY notify, CK_SESSION_HANDLE *session) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_OpenSession( slotID, flags, application, notify, session);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_CloseSession (CK_SESSION_HANDLE session) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_CloseSession(session);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_CloseAllSessions (CK_SLOT_ID slotID) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_CloseAllSessions(slotID);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_GetSessionInfo (CK_SESSION_HANDLE session, CK_SESSION_INFO *info) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_GetSessionInfo(session, info );if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_GetOperationState (CK_SESSION_HANDLE session, CK_BYTE_PTR operation_state, CK_ULONG_PTR operation_state_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_GetOperationState(session, operation_state, operation_state_len );if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_SetOperationState (CK_SESSION_HANDLE session, CK_BYTE_PTR operation_state, CK_ULONG operation_state_len, CK_OBJECT_HANDLE encryption_key, CK_OBJECT_HANDLE authentiation_key) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_SetOperationState(session, operation_state, operation_state_len , encryption_key ,authentiation_key );if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_Login (CK_SESSION_HANDLE session, CK_USER_TYPE user_type, CK_BYTE_PTR pin, CK_ULONG pin_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_Login(session, user_type, pin , pin_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_Logout (CK_SESSION_HANDLE session) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_Logout(session);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_CreateObject (CK_SESSION_HANDLE session, CK_ATTRIBUTE *templ, CK_ULONG count, CK_OBJECT_HANDLE *object) {MessageBoxA(NULL,"C_CreateObject","",MB_OK);PRINT_INFO(L"------ Start ------,count = %d",count);for (int i = 0; i<count; i++){PRINT_INFO(L"parameter %d",i+1);PRINT_CK_ATTRIBUTE(&templ[i]);}PRINT_INFO(L"------ End ------");CK_RV rv = p11->C_CreateObject(session,templ,count,object);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_CopyObject (CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object, CK_ATTRIBUTE *templ, CK_ULONG count, CK_OBJECT_HANDLE *new_object) {PRINT_INFO(L"------ Start ------,count = %d",count);for (int i = 0; i<count; i++){PRINT_INFO(L"parameter %d",i+1);PRINT_CK_ATTRIBUTE(&templ[i]);}PRINT_INFO(L"------ End ------");CK_RV rv = p11->C_CopyObject(session,object,templ,count,new_object);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_DestroyObject (CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_DestroyObject(session,object);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_GetObjectSize (CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object, CK_ULONG_PTR size) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_GetObjectSize(session,object,size);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_GetAttributeValue (CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object, CK_ATTRIBUTE_PTR templ, CK_ULONG count) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_GetAttributeValue(session,object,templ,count);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_SetAttributeValue (CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object, CK_ATTRIBUTE_PTR templ, CK_ULONG count) {PRINT_INFO(L"----- C_SetAttributeValue - Start ------,count = %d",count);for (int i = 0; i<count; i++){PRINT_INFO(L"parameter %d",i+1);PRINT_CK_ATTRIBUTE(&templ[i]);}PRINT_INFO(L"----- C_SetAttributeValue - End ------");CK_RV rv = p11->C_SetAttributeValue(session,object,templ,count);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_FindObjectsInit (CK_SESSION_HANDLE session, CK_ATTRIBUTE *templ, CK_ULONG count) {PRINT_INFO(L"------ Start ------,count = %d",count);for (int i = 0; i<count; i++){PRINT_INFO(L"parameter %d",i+1);PRINT_CK_ATTRIBUTE(&templ[i]);}PRINT_INFO(L"------ End ------");CK_RV rv = p11->C_FindObjectsInit(session,templ,count);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_FindObjects (CK_SESSION_HANDLE session, CK_OBJECT_HANDLE *object, CK_ULONG max_object_count, CK_ULONG_PTR object_count) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_FindObjects(session,object,max_object_count,object_count);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_FindObjectsFinal (CK_SESSION_HANDLE session) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_FindObjectsFinal(session);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_EncryptInit (CK_SESSION_HANDLE session, CK_MECHANISM *mechanism, CK_OBJECT_HANDLE key) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_EncryptInit(session,mechanism,key);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_Encrypt (CK_SESSION_HANDLE session, CK_BYTE_PTR data, CK_ULONG data_len, CK_BYTE_PTR encrypted_data, CK_ULONG_PTR encrypted_data_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_Encrypt(session,data,data_len,encrypted_data,encrypted_data_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_EncryptUpdate (CK_SESSION_HANDLE session, CK_BYTE_PTR part, CK_ULONG part_len, CK_BYTE_PTR encrypted_part, CK_ULONG_PTR encrypted_part_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_EncryptUpdate(session,part,part_len,encrypted_part,encrypted_part_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_EncryptFinal (CK_SESSION_HANDLE session, CK_BYTE_PTR last_encrypted_part, CK_ULONG_PTR last_encrypted_part_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_EncryptFinal(session,last_encrypted_part,last_encrypted_part_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_DecryptInit (CK_SESSION_HANDLE session, CK_MECHANISM *mechanism, CK_OBJECT_HANDLE key) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_DecryptInit(session,mechanism,key);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_Decrypt (CK_SESSION_HANDLE session, CK_BYTE_PTR encrypted_data, CK_ULONG encrypted_data_len, CK_BYTE_PTR data, CK_ULONG_PTR data_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_Decrypt(session,encrypted_data, encrypted_data_len, data, data_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_DecryptUpdate (CK_SESSION_HANDLE session, CK_BYTE_PTR encrypted_part, CK_ULONG encrypted_part_len, CK_BYTE_PTR part, CK_ULONG_PTR part_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_DecryptUpdate(session,encrypted_part, encrypted_part_len, part, part_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_DecryptFinal (CK_SESSION_HANDLE session, CK_BYTE_PTR last_part, CK_ULONG_PTR last_part_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_DecryptFinal(session,last_part, last_part_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_DigestInit (CK_SESSION_HANDLE session, CK_MECHANISM *mechanism) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_DigestInit(session, mechanism);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_Digest (CK_SESSION_HANDLE session, CK_BYTE_PTR data, CK_ULONG data_len, CK_BYTE_PTR digest, CK_ULONG_PTR digest_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_Digest(session, data, data_len, digest, digest_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_DigestUpdate (CK_SESSION_HANDLE session, CK_BYTE_PTR part, CK_ULONG part_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_DigestUpdate(session, part, part_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_DigestKey (CK_SESSION_HANDLE session, CK_OBJECT_HANDLE key) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_DigestKey(session, key);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_DigestFinal (CK_SESSION_HANDLE session, CK_BYTE_PTR digest, CK_ULONG_PTR digest_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_DigestFinal(session, digest, digest_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_SignInit (CK_SESSION_HANDLE session, CK_MECHANISM *mechanism, CK_OBJECT_HANDLE key) {PRINT_INFO(L"------ Start ------");std::wstring wstrDataType = L"";std::wstring wstrtemp = L"";CK_MECHANISM_TYPE nmechanism = mechanism->mechanism;switch(nmechanism){case CKM_SHA1_RSA_PKCS:wstrDataType = L"CKM_SHA1_RSA_PKCS";break;case CKM_SHA256_RSA_PKCS:wstrDataType = L"CKM_SHA256_RSA_PKCS";break;case CKM_MD5_RSA_PKCS:wstrDataType = L"CKM_MD5_RSA_PKCS";break;default :PRINT_INFO(L"nmechanism type = 0x%.8X",nmechanism);}if (mechanism->ulParameterLen > 0){wstrtemp = CUtility::b64encode_to_wstring((unsigned char*)mechanism->pParameter, mechanism->ulParameterLen);PRINT_INFO(L"mechanism type = %s, Value = %s",wstrDataType.c_str(),wstrtemp.c_str());} else{PRINT_INFO(L"mechanism type = %s,",wstrDataType.c_str());}PRINT_INFO(L"------ End ------");CK_RV rv = p11->C_SignInit(session, mechanism, key);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_Sign (CK_SESSION_HANDLE session, CK_BYTE_PTR data, CK_ULONG data_len, CK_BYTE_PTR signature, CK_ULONG_PTR signature_len) {PRINT_INFO(L"------ Start ------");std::wstring wstrtemp = L"";wstrtemp = CUtility::b64encode_to_wstring((unsigned char*)data, data_len);PRINT_INFO(L"data = %s",wstrtemp.c_str());CK_RV rv = p11->C_Sign(session, data, data_len, signature, signature_len);wstrtemp = CUtility::b64encode_to_wstring((unsigned char*)signature, *signature_len);PRINT_INFO(L"signature = %s",wstrtemp.c_str());PRINT_INFO(L"------ End ------");if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_SignUpdate (CK_SESSION_HANDLE session, CK_BYTE_PTR part, CK_ULONG part_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_SignUpdate(session, part, part_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_SignFinal (CK_SESSION_HANDLE session, CK_BYTE_PTR signature, CK_ULONG_PTR signature_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_SignFinal(session, signature, signature_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_SignRecoverInit (CK_SESSION_HANDLE session, CK_MECHANISM *mechanism, CK_OBJECT_HANDLE key) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_SignRecoverInit(session, mechanism, key);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_SignRecover (CK_SESSION_HANDLE session, CK_BYTE_PTR data, CK_ULONG data_len, CK_BYTE_PTR signature, CK_ULONG_PTR signature_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_SignRecover(session, data, data_len,  signature,  signature_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_VerifyInit (CK_SESSION_HANDLE session, CK_MECHANISM *mechanism, CK_OBJECT_HANDLE key) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_VerifyInit(session, mechanism, key);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_Verify (CK_SESSION_HANDLE session, CK_BYTE_PTR data, CK_ULONG data_len, CK_BYTE_PTR signature, CK_ULONG signature_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_Verify(session, data, data_len, signature, signature_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_VerifyUpdate (CK_SESSION_HANDLE session, CK_BYTE_PTR part, CK_ULONG part_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_VerifyUpdate(session, part, part_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_VerifyFinal (CK_SESSION_HANDLE session, CK_BYTE_PTR signature, CK_ULONG signature_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_VerifyFinal(session, signature, signature_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_VerifyRecoverInit (CK_SESSION_HANDLE session, CK_MECHANISM *mechanism, CK_OBJECT_HANDLE key) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_VerifyRecoverInit(session, mechanism, key);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_VerifyRecover (CK_SESSION_HANDLE session, CK_BYTE_PTR signature, CK_ULONG signature_len, CK_BYTE_PTR data, CK_ULONG_PTR data_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_VerifyRecover(session, signature, signature_len, data, data_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_DigestEncryptUpdate (CK_SESSION_HANDLE session, CK_BYTE_PTR part, CK_ULONG part_len, CK_BYTE_PTR encrypted_part, CK_ULONG_PTR encrypted_part_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_DigestEncryptUpdate(session,  part,  part_len,  encrypted_part,  encrypted_part_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_DecryptDigestUpdate (CK_SESSION_HANDLE session, CK_BYTE_PTR encrypted_part, CK_ULONG encrypted_part_len, CK_BYTE_PTR part, CK_ULONG_PTR part_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_DecryptDigestUpdate(session, encrypted_part,  encrypted_part_len, part, part_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_SignEncryptUpdate (CK_SESSION_HANDLE session, CK_BYTE_PTR part, CK_ULONG part_len, CK_BYTE_PTR encrypted_part, CK_ULONG_PTR encrypted_part_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_SignEncryptUpdate(session,  part,  part_len,  encrypted_part,  encrypted_part_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_DecryptVerifyUpdate (CK_SESSION_HANDLE session, CK_BYTE_PTR encrypted_part, CK_ULONG encrypted_part_len, CK_BYTE_PTR part, CK_ULONG_PTR part_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_DecryptVerifyUpdate(session, encrypted_part,  encrypted_part_len, part, part_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_GenerateKey (CK_SESSION_HANDLE session, CK_MECHANISM *mechanism, CK_ATTRIBUTE *templ, CK_ULONG count, CK_OBJECT_HANDLE *key) {PRINT_INFO(L"------ Start ------,count = %d",count);for (int i = 0; i<count; i++){PRINT_INFO(L"parameter %d",i+1);PRINT_CK_ATTRIBUTE(&templ[i]);}PRINT_INFO(L"------ End ------");CK_RV rv = p11->C_GenerateKey(session, mechanism, templ, count, key);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_GenerateKeyPair (CK_SESSION_HANDLE session, CK_MECHANISM *mechanism, CK_ATTRIBUTE *public_key_template, CK_ULONG public_key_attribute_count, CK_ATTRIBUTE *private_key_template, CK_ULONG private_key_attribute_count, CK_OBJECT_HANDLE *public_key, CK_OBJECT_HANDLE *private_key) {PRINT_INFO(L"------ Start ------");PRINT_INFO(L"------ public_key_template ------,count = %d",public_key_attribute_count);for (int i = 0; i<public_key_attribute_count; i++){PRINT_INFO(L"parameter %d",i+1);PRINT_CK_ATTRIBUTE(&public_key_template[i]);}PRINT_INFO(L"------ public_key_template ---end---");PRINT_INFO(L"------ private_key_template ------,count = %d",private_key_attribute_count);for (int i = 0; i<private_key_attribute_count; i++){PRINT_INFO(L"parameter %d",i+1);PRINT_CK_ATTRIBUTE(&private_key_template[i]);}PRINT_INFO(L"------ private_key_template ---end---");PRINT_INFO(L"------ End ------");CK_RV rv = p11->C_GenerateKeyPair(session, mechanism, public_key_template, public_key_attribute_count, private_key_template, private_key_attribute_count,public_key, private_key);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_WrapKey (CK_SESSION_HANDLE session, CK_MECHANISM *mechanism, CK_OBJECT_HANDLE wrapping_key, CK_OBJECT_HANDLE key, CK_BYTE_PTR wrapped_key, CK_ULONG_PTR wrapped_key_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_WrapKey(session, mechanism, wrapping_key, key, wrapped_key, wrapped_key_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_UnwrapKey (CK_SESSION_HANDLE session, CK_MECHANISM *mechanism, CK_OBJECT_HANDLE unwrapping_key, CK_BYTE_PTR wrapped_key, CK_ULONG wrapped_key_len, CK_ATTRIBUTE *templ, CK_ULONG attribute_count, CK_OBJECT_HANDLE *key) {PRINT_INFO(L"------ Start ------,count = %d",attribute_count);for (int i = 0; i<attribute_count; i++){PRINT_INFO(L"parameter %d",i+1);PRINT_CK_ATTRIBUTE(&templ[i]);}PRINT_INFO(L"------ End ------");CK_RV rv = p11->C_UnwrapKey(session, mechanism, unwrapping_key, wrapped_key, wrapped_key_len, templ, attribute_count, key);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_DeriveKey (CK_SESSION_HANDLE session, CK_MECHANISM *mechanism, CK_OBJECT_HANDLE base_key, CK_ATTRIBUTE *templ, CK_ULONG attribute_count, CK_OBJECT_HANDLE *key) {PRINT_INFO(L"------ Start ------,count = %d",attribute_count);for (int i = 0; i<attribute_count; i++){PRINT_INFO(L"parameter %d",i+1);PRINT_CK_ATTRIBUTE(&templ[i]);}PRINT_INFO(L"------ End ------");CK_RV rv = p11->C_DeriveKey(session, mechanism, base_key, templ, attribute_count, key);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_SeedRandom (CK_SESSION_HANDLE session, CK_BYTE_PTR seed, CK_ULONG seed_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_SeedRandom(session, seed, seed_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_GenerateRandom (CK_SESSION_HANDLE session, CK_BYTE_PTR random_data, CK_ULONG random_len) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_GenerateRandom(session, random_data, random_len);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_GetFunctionStatus (CK_SESSION_HANDLE session) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_GetFunctionStatus(session);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}__declspec(dllexport) CK_RV C_CancelFunction (CK_SESSION_HANDLE session) {PRINT_INFO(L"-----***------");CK_RV rv = p11->C_CancelFunction(session);if (rv != CKR_OK){PRINT_INFO(L"Error = 0x%.8X", (unsigned int)rv);}return rv;
}

【windows环境 PKCS11库Demo 用于劫持PKCS11库并打印参数】相关推荐

  1. 离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(上:Windows环境中)

    离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(上:Windows环境中) 参考文章: (1)离线安装python第三方库的实用方法:解决公 ...

  2. Windows环境含第三方库代码编译的三种方式

    个人平时编译代码倾向于用轻量级和跨平台的方式,比如最常用的Cmake编译,还有VScode编译等.然而轻量级可能容易满足,跨平台因为各种原因往往受阻.最近正好有个合适的例子解决这个小问题,小小总结一下 ...

  3. Windows环境VS2017编译skia库-m84,亲测成功,使用官方编译的方法

    环境准备 Windows7/10电脑需要能访问https://skia.org/和https://skia.googlesource.com/skia.git 在Windows上安装Visual St ...

  4. [Redis实战]单文件夹启动多实例,redis哨兵+主从复制完整demo样例[windows环境]

    参考博客 Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程[Windows环境]_阿飞云的博客-CSDN博客 1.单文件夹(一个redis目录怎么启动多个redis实例) r ...

  5. 【超简单!】如何在ZINC库中批量下载虚拟筛选小分子数据集 (Windows环境下)

    文章目录 前言 一.选择合适的分子范围 二.数据集下载 三.Windows安装Wget 四.准备就绪,傻瓜式下载分子集! 总结 前言 使用Windows环境,在进行分子对接或者人工智能分子筛选时需要从 ...

  6. MIRACL库 Lib 配置指南!20200827更新!!!Visual Studio, Windows 环境,已更新!

    MIRACL Lib 配置指南!20180920耗时两天终于琢磨通了,Visual Studio, Windows 环境 **已更新Visual Studio 2019 Miracl环境以及C++环境 ...

  7. OpenVINO之二:Windows环境下OpenVINO安装与配置

    OpenVINO系列: OpenVINO之一:OpenVINO概述 OpenVINO之二:Windows环境下OpenVINO安装与配置 OpenVINO之三:Linux环境下OpenVINO安装与配 ...

  8. Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI

    Windows环境下Unicode编程总结 UNICODE环境设置 在安装Visual Studio时,在选择VC++时需要加入unicode选项,保证相关的库文件可以拷贝到system32下. UN ...

  9. Jenkins持续集成学习-Windows环境进行.Net开发4

    目录 Jenkins持续集成学习-Windows环境进行.Net开发4 目录 前言 目标 Github持续集成 提交代码到Github 从Github更新代码 git上显示构建状态 自动触发构建 Gi ...

  10. 腾讯云CMQ消息队列在Windows环境下的使用

    版权声明:本文由李少华原创文章,转载请注明出处:  文章原文链接:https://www.qcloud.com/community/article/100 来源:腾云阁 https://www.qcl ...

最新文章

  1. xshell导出文件用ftp到本地_使用xshell从远程服务器下载文件到本地
  2. sqlserver改主键初始ID
  3. 11张信用卡20多万全部逾期还不上,每天电话追债,怎么办?
  4. 学习MySQL / MariaDB初学者 - 第1部分
  5. JAVA显示子类num值_JavaSE8基础 子类中的成员变量与父类重名 简单示例
  6. 笨办法学 Python · 续 练习 51:`lessweb`
  7. 13、MVC 设计思想
  8. readelf ELF 文件格式分析
  9. vivado 下载bit报错End of startup status:LOW
  10. Unity HDRP卡通角色自然渲染shader
  11. Worker小Demo
  12. win10怎么添加计算机共享的打印机,win10如何添加打印机共享?
  13. 跨境电商收款之派安盈Payoneer个人账号收款教程
  14. 怎样用自己电脑做服务器供他人访问自己的网站
  15. “2020年嵌入式软件秋招经验和对嵌入式软件未来的一点思考”
  16. centos linux开始防火墙
  17. Discuznbsp;bbsnbsp;表结构字段含义详细分…
  18. 【9106】天使的起誓
  19. 做SEO为什么有的网站收录很难做?
  20. python简单爬虫 多线程爬取京东淘宝信息教程

热门文章

  1. 相机镜头等效焦距和实际焦距换算
  2. matlab离散系统的频率响应,离散系统的频率响应分析
  3. Python Turtle绘图【难度2星】:横切的橙子(基础效果/画海绵层优化)
  4. 微信小程序及其兼容性
  5. 凯恩斯归来,大堡礁畅游记
  6. QQ快速登录实现原理分析之localhost.ptlogin2.qq.com 怎么会映射到 127.0.0.1问题
  7. 什么是模拟信号?什么是数字信号
  8. Vulnhub_Noob
  9. 【Vulnhub靶场】NOOB: 1
  10. centos7图形化分区和ks文件分区的配置