def listslots(handle):
    slots = pyp11.listslots(aa)
    i = 0
    lslots = []
    for v in slots:
        for f in v[2]:
            if (f == 'TOKEN_PRESENT'):
                #                print ('slotid=',v[0], '\n\tlabeltok=',v[1], '\n\tflags=',v[2], '\n\tinfotok=',v[3])
                i = 1
                lslots.append(v)
                break
    i += 1
    return (lslots)
Esempio n. 2
0
 def tokinfo(self):
     status = ''
     #Получаем список слотов
     try:
         slots = pyp11.listslots(self.handle)
     except:
         #Проблемы с библиотекой токена
         e = sys.exc_info()[1]
         e1 = e.args[0]
         dd = ''
         status = e1
         return (dd, status)
     status = ''
     #Ищем заданный слот с указанным  токеном
     #Перебираем слоты
     for v in slots:
         #Ищем заданный слот
         if (v[0] != self.slotid):
             status = "Ошибочный слот"
             continue
         self.returncode = ''
         #Список флагов текущего слота
         self.flags = v[2]
         #Проверяем наличие в стоке токена
         if (self.flags.count('TOKEN_PRESENT') != 0):
             #Проверяем серийный номер токена
             tokinf = v[3]
             sn = tokinf[3].strip()
             if (self.sn != sn):
                 status = 'Серийный номер токена=\"' + sn + '\" не совпадает с заданным \"' + self.sn + '\"'
                 dd = ''
                 return (dd, status)
             status = ''
             break
         else:
             dd = ''
             status = "В слоте нет токена"
             return (dd, status)
     tt = tokinf
     dd = dict(Label=tt[0].strip())
     dd.update(Manufacturer=tt[1].strip())
     dd.update(Model=tt[2].strip())
     dd.update(SerialNumber=tt[3].strip())
     self.infotok = dd
     return (dd, status)
#Выбираем библиотеку
#Программный токен
lib = '/usr/local/lib64/libls11sw2016.so'
#Для Windows
#lib='C:\Temp\ls11sw2016.dll'
#Облачный токен
#lib = '/usr/local/lib64/libls11cloud.so'
#Аппаратный токен
#lib = '/usr/local/lib64/librtpkcs11ecp_2.0.so'

#Загружаем библиотеку
libid = pyp11.loadmodule(lib)
#Дескриптор библиотеки
#print (libid)
#Загружаем список слотов
slots = pyp11.listslots(libid)
tokpr = 0
#Ищем первый подключенный токен
while (tokpr == 0):
    #Перебираем слоты
    for v in slots:
        #Список флагов текущего слота
        flags = v[2]
        #Проверяем наличие в стоке токена
        if (flags.count('TOKEN_PRESENT') != 0):
            tokpr = 1
            #Избавляемся от лишних пробелов у метки слота
            lab = v[1].strip()
            infotok = v[3]
            slotid = v[0]
            break