【问题标题】:PKCS#11 C_getfunctionlist in a dllPKCS#11 dll 中的 C_getfunctionlist
【发布时间】:2013-03-25 12:30:20
【问题描述】:

我正在尝试编写一个最终将连接到虚拟令牌的 dll。我试图制作一个可导出的 C_getfunctionlist 函数,该函数将包含指向 PCKS#11 标准支持的函数的指针地址,但我无法弄清楚为什么我无法在使用 dll 的程序中访问这些函数。我试图只加载 C_Initialize 函数。

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;

 }

【问题讨论】:

    标签: pkcs#11


    【解决方案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;
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      相关资源
      最近更新 更多