move SW matching to a generic utility function
This will allow using it outside the transport/__init__.py
Change-Id: Id26dfefa85d91e3b3a23e0049f3b833e29cb1cef
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 @@
"""
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 @@
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