macos - PKCS#11 为什么我调用 C_GetSlotList 返回没有为 MacOS 应用程序提供令牌的插槽,并为命令行工具返回一个插槽?
问题描述
我面临一些关于 PKCS#11 库的麻烦。我创建了 2 个项目:
- 项目 1:macOS 应用程序(GUI - 使用 Objective-C)
- 项目 2:命令行工具(控制台 - 使用 C++)
unsigned long GetTokenInfos(CK_TOKEN_INFO_PTR pTokenInfo)
{
CK_RV rv = CKR_OK;
CK_ULONG ulCount = 0;
CK_SLOT_ID_PTR pSlotList = NULL_PTR;
rv = m_pToken->C_GetSlotList(TRUE, NULL_PTR, &ulCount);
if(rv != CKR_OK){
return rv;
}
if(ulCount <= 0){
return CKR_TOKEN_NOT_PRESENT;
}
pSlotList = (CK_SLOT_ID_PTR)new CK_SLOT_ID [ulCount];
rv = m_pToken->C_GetSlotList(TRUE, pSlotList, &ulCount);
if((rv != CKR_OK) || (ulCount <= 0))
{
delete [] pSlotList;
pSlotList = NULL_PTR;
return CKR_TOKEN_NOT_PRESENT;
}
/*Get slot information for the first token*/
for (unsigned int i = 0; i < ulCount; ++i)
{
rv = m_pToken->C_GetTokenInfo(pSlotList[i], pTokenInfo);
if(rv != CKR_OK)
{
delete [] pSlotList;
pSlotList = NULL_PTR;
return rv;
}
//ShowTokenInfo(pTokenInfo);
}
delete [] pSlotList;
pSlotList = NULL_PTR;
return CKR_OK;
}
它们都遵循相同的逻辑和编码流程;在计算机上构建和运行。但我遇到了一件奇怪的事情:**Project macOS 应用程序总是返回带有 HSM 令牌的零槽,另一方面,项目命令行工具总是返回一个带有令牌的槽。**
我不知道这个问题。我猜 macOS 应用程序项目需要一些权限或类似的东西,以便与 HSM 令牌/智能卡等硬件进行交互......
有人对这种情况有经验吗?请给我一些建议!谢谢你们!