aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2021-01-21 14:50:01 +0100
committerHarald Welte <laforge@osmocom.org>2021-03-02 14:26:32 +0100
commit67d551a443a4470d2f1746402451a4ffa3b03386 (patch)
tree62d160be16588d09d5e28d834d785ce26c05c756
parente79cc8069aa73aefe26e8862b126920c9532c1a2 (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__.py11
-rw-r--r--pySim/utils.py14
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