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)
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