2016-07-20 2 views
1

Я написал скрипт в python, который получает информацию из библиотеки Cryptoki. Оттуда я могу сделать (только) низкоуровневые вызовы API, такие как:PKCS11 Python FindObjects в доступных слотах

  1. C_getInfo
  2. C_GetSlotList
  3. C_SlotInfo
  4. C_OpenSession
  5. C_GetTokenInfo
  6. C_Logout
  7. C_CloseSession
  8. 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)) 

ВОПРОС

Я не могу показаться, чтобы выяснить, что апи вызов необходимо найти объекты в списке слот .. У меня есть что-то вроде print("Finding objects: " + hex(a.C_FindObjects(slotList[x], CKA_CLASS, CKO_CERTIFICATE)))

Я не уверен, какие аргументы нужно пройти или если это структурирован правильно. Im используя эту документацию LowLevel API pkcs11

В конце концов я пытаюсь извлечь конкретную Omnikey смарт-маркер карты .. использовать свой закрытый ключ и сертификат для подписания и проверки данных ..

ответ

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, поскольку я знал, что в списке есть только несколько объектов и токенов. Вы можете создать переменную шаблона, которая ищет каждый объект для определенных атрибутов, например Private, Modifiable, Key Type, Encrypt и т. Д. Затем вы должны сделать вызов (a.C_FindObjectsInit(session,SearchTemplate)) для инициализации поиска в сеансе по спецификациям шаблона. Работа с API LowLevel может быть запутанной, документации практически нет. Надеюсь это поможет.