def list_readers(): try: return System.readers() except ListReadersException: # If the PCSC system has restarted the context might be stale, try # forcing a new context (This happens on Windows if the last reader is # removed): PCSCContext.instance = None return System.readers()
def _list_readers(): try: return System.readers() except ListReadersException: # If the PCSC system has restarted the context might be stale, try # forcing a new context (This happens on Windows if the last reader is # removed): PCSCContext.instance = None return System.readers()
def do_list_readers(p, args): readers = scsys.readers() if len(readers) == 0: print('No readers found.') else: for i, r in enumerate(readers): print(f'#{i}: {str(r)}')
def _do_connect_and_select(p, args): readers = scsys.readers() if len(readers) == 0: p.error('No readers found.') reader = None if args.reader is None: reader = readers[0] elif isinstance(args.reader, int): if args.reader >= len(reader): p.error(f'Invalid reader index {args.reader}') return None reader = readers[args.reader] else: for r in readers: if str(r).beginswith(args.reader): reader = r break if reader is None: p.error( f'Reader name {repr(args.reader)} does not match any connected readers.' ) assert reader is not None conn = reader.createConnection() if args.debug: observer = ConsoleCardConnectionObserver() conn.addObserver(observer) conn.connect() _select(conn, args.aid) return conn
def _enter_reading_cards(self): self._setup_card_monitor_and_observer() tasks.blipper_reading_cards.delay() while len(scsystem.readers()) != 0: sleep(1) self._tear_down_card_monitor_and_observer() self._enter_state(STATE_WAITING_FOR_READER)
def open_scard(name='Yubikey'): name = name.lower() for reader in System.readers(): if name in reader.name.lower(): conn = reader.createConnection() try: conn.connect() return ScardDevice(conn) except SmartcardException: pass
def open_device(): for reader in System.readers(): if reader.name.lower().startswith('yubico yubikey'): try: conn = reader.createConnection() conn.connect() except CardConnectionException as e: if 'Sharing violation' in str(e) and kill_scdaemon(): return open_device() raise return CCIDDriver(conn, reader.name)
def showReaders(): readers = st.listReaders() print 'All smart card readers : ' i = 0 print '%6s | %-s' % ('Index ','ReaderName') print '-'*(len('Index | ')+len('ReaderName')) while i < len(readers): print '[%4d] | %-s' % (i, readers[i]) i += 1 print '-'*(len('Index | ')+len('ReaderName')) return readers
def __init__(self, reader_name, callback, parent=None): super(CardWatcher, self).__init__(parent) self._status = CardStatus.NoCard self.reader_name = reader_name self._callback = callback or (lambda _: _) self._reader = None self._reader_observer = _CcidReaderObserver(self) self._card_observer = _CcidCardObserver(self) try: self._update(System.readers(), []) except EstablishContextException: pass # No PC/SC context!
def _enter_initial(self): initial_readers = scsystem.readers() log.info('connected readers: %r' % initial_readers) tasks.blipper_ready.delay() try: if len(initial_readers) == 0: initial_state = STATE_WAITING_FOR_READER elif len(initial_readers) == 1: initial_state = STATE_READING_CARDS else: err_msg = '%d readers connected' % len(initial_readers) raise CardReaderError(err_msg) self._enter_state(initial_state) except KeyboardInterrupt: log.info('user exit') self._enter_state(STATE_EXIT)
$NetBSD: patch-ykman_driver__ccid.py,v 1.1 2020/08/17 07:02:25 riastradh Exp $ Avoid crashing if pcscd is missing. --- ykman/driver_ccid.py.orig 2020-01-29 07:32:03.000000000 +0000 +++ ykman/driver_ccid.py @@ -36,6 +36,7 @@ from enum import IntEnum, unique from binascii import b2a_hex from smartcard import System from smartcard.Exceptions import CardConnectionException +from smartcard.pcsc.PCSCExceptions import EstablishContextException from smartcard.pcsc.PCSCExceptions import ListReadersException from smartcard.pcsc.PCSCContext import PCSCContext from .driver import AbstractDriver, ModeSwitchError, NotSupportedError @@ -320,6 +321,8 @@ def list_readers(): # removed): PCSCContext.instance = None return System.readers() + except EstablishContextException: + return [] def open_devices(name_filter=YK_READER_NAME):
def _enter_waiting_for_reader(self): tasks.blipper_waiting.delay() while len(scsystem.readers()) == 0: sleep(1) self._enter_state(STATE_READING_CARDS)