aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp Maier <pmaier@sysmocom.de>2017-03-21 12:05:30 +0100
committerPhilipp Maier <pmaier@sysmocom.de>2017-03-21 12:06:43 +0100
commita6b1c9aa726f5e2c0b5d8059afd7a975a1a1152d (patch)
tree8c8fb6d9f57578cbaf31d2095e9b9c80ae1152b5
parent9b7c45d05dd733153b523f81479300843d6556b4 (diff)
Fix select control parameter
sysmo-usim-sjs1 requires P2 to be set to 0x0C (request FCI) when using the USIM application commands. The FCI is not used by pysim anyway and might even cause problems with other cards. This commit adds a pair of get/set methods to the SimCardCommands class in order to set a default for the selection control parameters (P1, P2). (Similar to the set/get methods for the class byte) The SysmoUSIMSJS1 class now calls the setter method for the selection control parameters inside of its constructuor and sets the selection control parameter default to "000C". This way we can be sure that we only change the behaviour for sysmo-usim-sjs1 and do not break support for any other cards.
-rw-r--r--pySim/cards.py1
-rw-r--r--pySim/commands.py11
2 files changed, 10 insertions, 2 deletions
diff --git a/pySim/cards.py b/pySim/cards.py
index 23352a7..fafc55f 100644
--- a/pySim/cards.py
+++ b/pySim/cards.py
@@ -425,6 +425,7 @@ class SysmoUSIMSJS1(Card):
def __init__(self, ssc):
super(SysmoUSIMSJS1, self).__init__(ssc)
self._scc.cla_byte = "00"
+ self._scc.sel_ctrl = "000C"
@classmethod
def autodetect(kls, scc):
diff --git a/pySim/commands.py b/pySim/commands.py
index cb72a11..d8bd8f2 100644
--- a/pySim/commands.py
+++ b/pySim/commands.py
@@ -29,6 +29,7 @@ class SimCardCommands(object):
def __init__(self, transport):
self._tp = transport;
self._cla_byte = "a0"
+ self._sel_ctrl = "0000"
@property
def cla_byte(self):
@@ -37,11 +38,17 @@ class SimCardCommands(object):
def cla_byte(self, value):
self._cla_byte = value
+ @property
+ def sel_ctrl(self):
+ return self._sel_ctrl
+ @sel_ctrl.setter
+ def sel_ctrl(self, value):
+ self._sel_ctrl = value
def select_file(self, dir_list):
rv = []
for i in dir_list:
- data, sw = self._tp.send_apdu_checksw(self.cla_byte + "a4000002" + i)
+ data, sw = self._tp.send_apdu_checksw(self.cla_byte + "a4" + self._sel_ctrl + "02" + i)
rv.append(data)
return rv
@@ -101,4 +108,4 @@ class SimCardCommands(object):
def verify_chv(self, chv_no, code):
fc = rpad(b2h(code), 16)
- return self._tp.send_apdu_checksw(self.cla_byte + '2000' + ('%02X' % chv_no) + '08' + fc) \ No newline at end of file
+ return self._tp.send_apdu_checksw(self.cla_byte + '2000' + ('%02X' % chv_no) + '08' + fc)