Pkcs#11 读取和写入PKCS11对象

Pkcs#11 读取和写入PKCS11对象,pkcs#11,Pkcs#11,我正在尝试将一些PCSC代码转换为C中的PKCS11调用。在PCSC中,要访问EF,我必须首先选择它,然后读取或写入它。我正在查看PKCS11文档,但没有看到相应的对象管理功能。最接近的似乎是C_GetAttributeValue和C_SetAttributeValue,但我不确定如何使用它们,即使在看了一些示例代码之后。例如,如何选择要访问的数据对象?另外,如何设置模板?一些示例C代码可能会有所帮助 谢谢 编辑:经过一些研究,似乎SelectFile粗略地映射到C_FindObjectsIni

我正在尝试将一些PCSC代码转换为C中的PKCS11调用。在PCSC中,要访问EF,我必须首先选择它,然后读取或写入它。我正在查看PKCS11文档,但没有看到相应的对象管理功能。最接近的似乎是C_GetAttributeValue和C_SetAttributeValue,但我不确定如何使用它们,即使在看了一些示例代码之后。例如,如何选择要访问的数据对象?另外,如何设置模板?一些示例C代码可能会有所帮助

谢谢

编辑:经过一些研究,似乎SelectFile粗略地映射到C_FindObjectsInit和C_FindObjects,后者返回一个CK_OBJECT_句柄,而ReadFile粗略地映射到C_GetAttributeValue。我试图使用这个模型,但是我对C_FindObjectsInit的第一个调用返回CKR_ARGUMENTS_BAD。以下是我的消息来源:

unsigned char *tokenLabel;
CK_ATTRIBUTE labelTemplate[] = {
    {CKA_LABEL, NULL_PTR, 0}
};
tokenLabel = (unsigned char *) malloc(labelLen);
// Sets the tokenLabel here
labelTemplate[0].pValue = tokenLabel;
labelTemplate[0].ulValueLen = labelLen;
ret = C_FindObjectsInit(hSession, labelTemplate, 1);
if(ret != CKR_OK)
{
    return -1;
}

我做错了什么?我只是想找到一个与特定标签匹配的对象。

你应该看看我的。谢谢。是的。我已经浏览了你的资料来源,还有PKCS11文档,但我还是不太明白。我应该如何访问PKCS11令牌中的对象?根据我到目前为止收集的信息,我需要做一个C_FindObjectsInit,C_FindObjects,然后C_GetAttributeValue来选择和读取一个对象。我正在尝试这样做,但正如我在更新的原始帖子中所描述的那样,遇到了一些问题。我没有看到您的代码中有任何明显的错误,但您正在使用的PKCS11实现库可能要求您在搜索模板中提供一些特定的属性,如CKA_类等。。我认为您应该查阅它的文档,看看是否有这样的要求,如果您的PKCS11库提供了这样的功能,您还应该尝试启用日志记录,这可能会为您提供有关所获得错误的更多详细信息。