pyecsca.sca.target.ISO7816 module

Provides classes for working with ISO7816-4 APDUs and an abstract base class for an ISO7816-4 based target.

exception CardConnectionException[source]

Bases: Exception

Card could not be connected.

add_note()[source]

Exception.add_note(note) – add a note to the exception

args[source]
with_traceback()[source]

Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.

class CardProtocol(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]

Bases: IntEnum

Card protocol to use/negotiate.

T0 = 0[source]
T1 = 1[source]
class CommandAPDU(cls, ins, p1, p2, data=None, ne=None)[source]

Bases: object

Command APDU that can be sent to an ISO7816-4 target.

cls: int[source]
ins: int[source]
p1: int[source]
p2: int[source]
data: Optional[bytes] = None[source]
ne: Optional[int] = None[source]
class ResponseAPDU(data, sw)[source]

Bases: object

Response APDU that can be received from an ISO7816-4 target.

data: bytes[source]
sw: int[source]
class ISO7816Target[source]

Bases: Target, ABC

ISO7816-4 target.

abstract connect(protocol=None)[source]

Connect to the card.

Parameters:

protocol (Optional[CardProtocol]) – CardProtocol to use.

abstract property atr: bytes[source]

Return the ATR (Answer To Reset) of the target.

abstract select(aid)[source]

Select an applet with aid.

Parameters:

aid (bytes) – The AID of the applet to select.

Return type:

bool

Returns:

Whether the selection was successful.

abstract send_apdu(apdu)[source]

Send an APDU to the selected applet.

Parameters:

apdu (CommandAPDU) – The APDU to send.

Return type:

ResponseAPDU

Returns:

The response.

abstract disconnect()[source]

Disconnect from the target device.

class ISO7816[source]

Bases: object

Bunch of ISO7816-4 constants (status words).

SW_FILE_FULL = 27268[source]
SW_UNKNOWN = 28416[source]
SW_CLA_NOT_SUPPORTED = 28160[source]
SW_INS_NOT_SUPPORTED = 27904[source]
SW_CORRECT_LENGTH_00 = 27648[source]
SW_WRONG_P1P2 = 27392[source]
SW_INCORRECT_P1P2 = 27270[source]
SW_RECORD_NOT_FOUND = 27267[source]
SW_FILE_NOT_FOUND = 27266[source]
SW_FUNC_NOT_SUPPORTED = 27265[source]
SW_WRONG_DATA = 27264[source]
SW_APPLET_SELECT_FAILED = 27033[source]
SW_COMMAND_NOT_ALLOWED = 27014[source]
SW_CONDITIONS_NOT_SATISFIED = 27013[source]
SW_DATA_INVALID = 27012[source]
SW_FILE_INVALID = 27011[source]
SW_SECURITY_STATUS_NOT_SATISFIED = 27010[source]
SW_WRONG_LENGTH = 26368[source]
SW_BYTES_REMAINING_00 = 24832[source]
SW_NO_ERROR = 36864[source]