diff options
author | Harald Welte <laforge@osmocom.org> | 2021-01-21 14:50:01 +0100 |
---|---|---|
committer | Harald Welte <laforge@osmocom.org> | 2021-03-02 14:26:32 +0100 |
commit | 67d551a443a4470d2f1746402451a4ffa3b03386 (patch) | |
tree | 62d160be16588d09d5e28d834d785ce26c05c756 | |
parent | e79cc8069aa73aefe26e8862b126920c9532c1a2 (diff) |
move SW matching to a generic utility function
This will allow using it outside the transport/__init__.py
Change-Id: Id26dfefa85d91e3b3a23e0049f3b833e29cb1cef
-rw-r--r-- | pySim/transport/__init__.py | 11 | ||||
-rw-r--r-- | pySim/utils.py | 14 |
2 files changed, 16 insertions, 9 deletions
diff --git a/pySim/transport/__init__.py b/pySim/transport/__init__.py index 00c7bd9..d720259 100644 --- a/pySim/transport/__init__.py +++ b/pySim/transport/__init__.py @@ -4,6 +4,7 @@ """ from pySim.exceptions import * +from pySim.utils import sw_match # # Copyright (C) 2009-2010 Sylvain Munaut <tnt@246tNt.com> @@ -93,14 +94,6 @@ class LinkBase(object): """ rv = self.send_apdu(pdu) - # Create a masked version of the returned status word - sw_masked = "" - for i in range(0, 4): - if sw.lower()[i] == '?': - sw_masked = sw_masked + '?' - else: - sw_masked = sw_masked + rv[1][i].lower() - - if sw.lower() != sw_masked: + if not sw_match(rv[1], sw): raise SwMatchError(rv[1], sw.lower()) return rv diff --git a/pySim/utils.py b/pySim/utils.py index a733d87..bfa147b 100644 --- a/pySim/utils.py +++ b/pySim/utils.py @@ -759,3 +759,17 @@ def get_addr_type(addr): return 0x00 return None + +def sw_match(sw, pattern): + """Match given SW against given pattern.""" + # Create a masked version of the returned status word + sw_lower = sw.lower() + sw_masked = "" + for i in range(0, 4): + if sw_lower[i] == '?': + sw_masked = sw_masked + '?' + elif sw_lower[i] == 'x': + sw_masked = sw_masked + 'x' + else: + sw_masked = sw_masked + sw_lower[i] + return sw_masked == pattern |