jonesmarvin8 41f34f4ff4 fixes
2026-04-26 20:27:22 -04:00

47 lines
1.2 KiB
Python

from types import TracebackType
from smartcard.System import readers
from smartcard.pcsc.PCSCReader import PCSCReader
from .apdu import APDUResponse
from .exceptions import TransportError
class Transport:
def __init__(self) -> None:
self.connection: PCSCReader = None
def __enter__(self) -> 'Transport':
self.connect()
return self
def __exit__(
self,
type_: type[BaseException] | None,
value: BaseException | None,
traceback: TracebackType | None
) -> None:
self.disconnect()
def connect(self, index: int = 0) -> None:
r = readers()
if not r:
raise TransportError('No smart card readers found')
self.connection = r[index].createConnection()
self.connection.connect()
def disconnect(self) -> None:
if self.connection:
self.connection.disconnect()
self.connection = None
def send_apdu(self, apdu: bytes) -> APDUResponse:
if not self.connection:
self.connect()
apdu_list = list(apdu)
response, sw1, sw2 = self.connection.transmit(apdu_list)
sw = (sw1 << 8) | sw2
return APDUResponse(response, sw)