可用插槽中的PKCS11 Python FindObjects

时间:2016-07-20 15:36:32

标签: python-3.x encryption cryptography pkcs#11

我在python中编写了一个脚本,它从Cryptoki库中获取信息。从那里我可以(仅)进行LowLevel API调用,例如:

  1. C_getInfo
  2. C_GetSlotList
  3. C_SlotInfo
  4. C_OpenSession
  5. C_GetTokenInfo
  6. C_Logout
  7. C_CloseSession
  8. C_Initialize
  9. 以下是一些有关其实施的例子

    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智能卡令牌..使用其私钥和证书来签署和验证数据..

1 个答案:

答案 0 :(得分:0)

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可能令人困惑,几乎没有文档。希望这会有所帮助。