Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
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)}')
Exemplo n.º 4
0
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
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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
Exemplo n.º 10
0
    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!
Exemplo n.º 11
0
    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)
Exemplo n.º 12
0
$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):
Exemplo n.º 13
0
 def _enter_waiting_for_reader(self):
     tasks.blipper_waiting.delay()
     while len(scsystem.readers()) == 0:
         sleep(1)
     self._enter_state(STATE_READING_CARDS)