PKCS11 Python 在可用插槽中查找对象
PKCS11 Python FindObjects in available slots
我在 python 中编写了一个从 Cryptoki 库获取信息的脚本。从那里我可以进行(仅)LowLevel API 调用,例如:
C_getInfo
C_GetSlotList
C_SlotInfo
C_OpenSession
C_GetTokenInfo
C_Logout
C_CloseSession
C_Initialize
这里有一些关于它们的实现的例子
a.C_Initialize()
print("C_GetInfo:", hex(a.C_GetInfo(info)))
print("Library manufacturerID:", info.GetManufacturerID())
del info
print("C_GetSlotList(NULL): " + hex(a.C_GetSlotList(0, slotList)))
print("\tAvailable Slots: " + str(len(slotList)))
for x in range(len(slotList)):
print("\tC_SlotInfo(): " + hex(a.C_GetSlotInfo(slotList[x], slotInfo)))
print("\t\tSlot N." + str(x) + ": ID=" + str(slotList[x]) + ", name='" + slotInfo.GetSlotDescription() + "'")
print("\tC_OpenSession(): " + hex(a.C_OpenSession(slotList[x], CKF_SERIAL_SESSION | CKF_RW_SESSION, session)))
print("\t\tSession:" + str(session))
#print("\tMechList:" + hex(a.C_GetMechanismList(0, slotList[x])))
print("\tC_GetTokenInfo(): " + hex(a.C_GetTokenInfo(slotList[x], tokenInfo)))
print("\t\tTokenInfo: Label=" + tokenInfo.GetLabel() + ", ManufacturerID=" + tokenInfo.GetManufacturerID())
print("\t\tTokenInfo: flags=" + hex(tokenInfo.flags) + ", Model=" + tokenInfo.GetModel())
print("\tC_Login(): " + hex(a.C_Login(session, CKU_USER, pin)))
print("\t\tSessionInfo: state=" + hex(sessionInfo.state) + ", flags=" + hex(sessionInfo.flags))
问题
我似乎无法弄清楚需要调用什么 api 才能在插槽列表中查找对象。我有类似 print("Finding objects: " + hex(a.C_FindObjects(slotList[x], CKA_CLASS, CKO_CERTIFICATE)))
的内容
我不确定要传递什么参数或者它的结构是否正确。
我正在使用此文档 LowLevel API pkcs11
最后我试图提取特定的 omnikey 智能卡令牌..使用它的私钥和证书来签署和验证数据..
SearchResult = PyKCS11.LowLevel.ckobjlist(10)
SearchTemplate = PyKCS11.LowLevel.ckattrlist(0)
print "C_FindObjectsInit: " + hex(a.C_FindObjectsInit(session,SearchTemplate))
print "C_FindObjects: " + hex(a.C_FindObjects(session, SearchResult))
print "C_FindObjectsFinal: " + hex(a.C_FindObjectsFinal(session))
首先你必须创建一个结果变量并用它来搜索对象列表。我传递了 10 个,因为我知道列表中只有少数对象和标记。您可以构造一个模板变量来搜索每个对象的特定属性,例如它是否为私有、可修改、密钥类型、加密等。然后您必须进行 (a.C_FindObjectsInit(session,SearchTemplate))
调用以根据模板规范在会话中初始化搜索.使用 LowLevel API 可能会令人困惑,几乎没有文档。希望这有帮助。
我在 python 中编写了一个从 Cryptoki 库获取信息的脚本。从那里我可以进行(仅)LowLevel API 调用,例如:
C_getInfo
C_GetSlotList
C_SlotInfo
C_OpenSession
C_GetTokenInfo
C_Logout
C_CloseSession
C_Initialize
这里有一些关于它们的实现的例子
a.C_Initialize()
print("C_GetInfo:", hex(a.C_GetInfo(info)))
print("Library manufacturerID:", info.GetManufacturerID())
del info
print("C_GetSlotList(NULL): " + hex(a.C_GetSlotList(0, slotList)))
print("\tAvailable Slots: " + str(len(slotList)))
for x in range(len(slotList)):
print("\tC_SlotInfo(): " + hex(a.C_GetSlotInfo(slotList[x], slotInfo)))
print("\t\tSlot N." + str(x) + ": ID=" + str(slotList[x]) + ", name='" + slotInfo.GetSlotDescription() + "'")
print("\tC_OpenSession(): " + hex(a.C_OpenSession(slotList[x], CKF_SERIAL_SESSION | CKF_RW_SESSION, session)))
print("\t\tSession:" + str(session))
#print("\tMechList:" + hex(a.C_GetMechanismList(0, slotList[x])))
print("\tC_GetTokenInfo(): " + hex(a.C_GetTokenInfo(slotList[x], tokenInfo)))
print("\t\tTokenInfo: Label=" + tokenInfo.GetLabel() + ", ManufacturerID=" + tokenInfo.GetManufacturerID())
print("\t\tTokenInfo: flags=" + hex(tokenInfo.flags) + ", Model=" + tokenInfo.GetModel())
print("\tC_Login(): " + hex(a.C_Login(session, CKU_USER, pin)))
print("\t\tSessionInfo: state=" + hex(sessionInfo.state) + ", flags=" + hex(sessionInfo.flags))
问题
我似乎无法弄清楚需要调用什么 api 才能在插槽列表中查找对象。我有类似 print("Finding objects: " + hex(a.C_FindObjects(slotList[x], CKA_CLASS, CKO_CERTIFICATE)))
我不确定要传递什么参数或者它的结构是否正确。 我正在使用此文档 LowLevel API pkcs11
最后我试图提取特定的 omnikey 智能卡令牌..使用它的私钥和证书来签署和验证数据..
SearchResult = PyKCS11.LowLevel.ckobjlist(10)
SearchTemplate = PyKCS11.LowLevel.ckattrlist(0)
print "C_FindObjectsInit: " + hex(a.C_FindObjectsInit(session,SearchTemplate))
print "C_FindObjects: " + hex(a.C_FindObjects(session, SearchResult))
print "C_FindObjectsFinal: " + hex(a.C_FindObjectsFinal(session))
首先你必须创建一个结果变量并用它来搜索对象列表。我传递了 10 个,因为我知道列表中只有少数对象和标记。您可以构造一个模板变量来搜索每个对象的特定属性,例如它是否为私有、可修改、密钥类型、加密等。然后您必须进行 (a.C_FindObjectsInit(session,SearchTemplate))
调用以根据模板规范在会话中初始化搜索.使用 LowLevel API 可能会令人困惑,几乎没有文档。希望这有帮助。