transport: Pass status word interpreter to exception handler
Prior to this patch, any SwMatchError raised within the 'transport'
would not be interpreted.
EXCEPTION of type 'SwMatchError' occurred with message: 'SW match failed! Expected 9000 and got 6982.'
vs (now)
EXCEPTION of type 'SwMatchError' occurred with message: 'SW match failed! Expected 9000 and got 6982: Command not allowed - Security status not satisfied'
Change-Id: I08b7f2b6bd422f7f2f36094bc8a29b187ff882a6
diff --git a/pySim/transport/__init__.py b/pySim/transport/__init__.py
index 24d7521..fb8f31d 100644
--- a/pySim/transport/__init__.py
+++ b/pySim/transport/__init__.py
@@ -28,6 +28,12 @@
class LinkBase(object):
"""Base class for link/transport to card."""
+ sw_interpreter = None
+
+ def set_sw_interpreter(self, interp):
+ """Set an (optional) status word interpreter."""
+ self.sw_interpreter = interp
+
def wait_for_card(self, timeout:int=None, newcardonly:bool=False):
"""Wait for a card and connect to it
@@ -103,7 +109,7 @@
rv = self.send_apdu(pdu)
if not sw_match(rv[1], sw):
- raise SwMatchError(rv[1], sw.lower())
+ raise SwMatchError(rv[1], sw.lower(), self.sw_interpreter)
return rv
def init_reader(opts) -> Optional[LinkBase]: