[1/2] Fix select control parameter

Message ID 1490270837-28823-2-git-send-email-pmaier@sysmocom.de
State New
Headers show

Commit Message

Philipp Maier March 23, 2017, 12:07 p.m.
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.
---
 pySim/cards.py    |  1 +
 pySim/commands.py | 11 +++++++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

Comments

Neels Hofmeyr March 26, 2017, 10:49 p.m. | #1
On Thu, Mar 23, 2017 at 01:07:16PM +0100, Philipp Maier wrote:
> -		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)

This shows me that the patch is not based on the current master.
I fixed the missing newline in another patch.

...maybe let's wait a bit, if we're moving this to gerrit soon you won't need
to send another mail.

~N

Patch

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)