diff --git a/pySim/exceptions.py b/pySim/exceptions.py index c0cf1e71..5d30f768 100644 --- a/pySim/exceptions.py +++ b/pySim/exceptions.py @@ -5,6 +5,7 @@ # # Copyright (C) 2009-2010 Sylvain Munaut +# Copyright (C) 2021 Harald Welte # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -36,3 +37,12 @@ class ProtocolError(Exception): class ReaderError(Exception): pass + +class SwMatchError(Exception): + """Raised when an operation specifies an expected SW but the actual SW from + the card doesn't match.""" + def __init__(self, sw_actual, sw_expected): + self.sw_actual = sw_actual + self.sw_expected = sw_expected + def __str__(self): + return "SW match failed! Expected %s and got %s." % (self.sw_expected, self.sw_actual) diff --git a/pySim/transport/__init__.py b/pySim/transport/__init__.py index 8e009ee5..00c7bd9f 100644 --- a/pySim/transport/__init__.py +++ b/pySim/transport/__init__.py @@ -3,6 +3,8 @@ """ pySim: PCSC reader transport link base """ +from pySim.exceptions import * + # # Copyright (C) 2009-2010 Sylvain Munaut # @@ -100,5 +102,5 @@ class LinkBase(object): sw_masked = sw_masked + rv[1][i].lower() if sw.lower() != sw_masked: - raise RuntimeError("SW match failed! Expected %s and got %s." % (sw.lower(), rv[1])) + raise SwMatchError(rv[1], sw.lower()) return rv