PKCS#11 C_getfunctionlist在一个dll(PKCS#11 C_getfunct

2019-08-17 23:38发布

我试图写一个DLL,这将最终连接到虚拟令牌。 我试图使可导出C_getfunctionlist功能将包含指针adressess由PCKS支载#11标准的功能,但我想不通为什么我不能访问使用该DLL的程序的功能。 我试图加载只是C_Initializefunction。

extern "C" __declspec(dllexport)
CK_RV C_GetFunctionList(CK_FUNCTION_LIST_PTR_PTR ppFunctionList) {
    CK_FUNCTION_LIST_PTR function_list;
    function_list=new CK_FUNCTION_LIST;
    function_list->C_Initialize=&C_Initialize;
    ppFunctionList=&function_list;
return CKR_OK;

 }

Answer 1:

如果你想在你的代码中使用一个PKCS#11实现的功能,您必须加载它实现了标准的DLL,然后使用由DLL提供的功能。 这里说到我的Linux系统上使用的代码。 我希望它能帮助。


static char const * PKCS11_SO_NAME = "/usr/lib/pkcs11/PKCS11_API.so";

static void * pkcs11_so;
//list of all pkcs#11 functions
static CK_FUNCTION_LIST_PTR pkcs11;

CK_RV load_pkcs11() {
  CK_RV rv = CKR_OK;
  CK_RV (*C_GetFunctionList) (CK_FUNCTION_LIST_PTR_PTR) = 0;

  pkcs11_so = dlopen(PKCS11_SO_NAME, RTLD_NOW);
  if (!pkcs11_so) {
    fprintf(stderr, "Error loading pkcs#11 so: %s\n", dlerror());
    return CKR_GENERAL_ERROR;
  }

  rv = load_symbol((void **)&C_GetFunctionList, "C_GetFunctionList");
  if (CKR_OK != rv) {
    return rv;
  }

  rv = C_GetFunctionList(&pkcs11);
  if (CKR_OK != rv) {
    fprintf(stderr, "C_GetFunctionList call failed: 0x%.8lX", rv);
    return rv;
  }

  return CKR_OK;
} 


文章来源: PKCS#11 C_getfunctionlist in a dll
标签: pkcs#11