pySim-shell: Add open_channel + close_channel commands

Change-Id: I53d9d7f7720eb5f10956bff74ea7ba9fd3b3bd19
This commit is contained in:
Harald Welte 2021-04-10 18:39:32 +02:00
parent a463161ae2
commit 703f933b40
3 changed files with 38 additions and 0 deletions

View File

@ -129,6 +129,18 @@ activate_file
~~~~~~~~~~~~~
Activate the currently selected file. This used to be called REHABILITATE in TS 11.11.
open_channel
~~~~~~~~~~~~
.. argparse::
:module: pySim-shell
:func: Iso7816Commands.open_chan_parser
close_channel
~~~~~~~~~~~~~
.. argparse::
:module: pySim-shell
:func: Iso7816Commands.close_chan_parser
pySim commands
--------------

View File

@ -413,6 +413,23 @@ class Iso7816Commands(CommandSet):
fid = self._cmd.rs.selected_file.fid
(data, sw) = self._cmd.card._scc.activate_file(fid)
open_chan_parser = argparse.ArgumentParser()
open_chan_parser.add_argument('chan_nr', type=int, default=0, help='Channel Number')
@cmd2.with_argparser(open_chan_parser)
def do_open_channel(self, opts):
"""Open a logical channel."""
(data, sw) = self._cmd.card._scc.manage_channel(mode='open', lchan_nr=opts.chan_nr)
close_chan_parser = argparse.ArgumentParser()
close_chan_parser.add_argument('chan_nr', type=int, default=0, help='Channel Number')
@cmd2.with_argparser(close_chan_parser)
def do_close_channel(self, opts):
"""Close a logical channel."""
(data, sw) = self._cmd.card._scc.manage_channel(mode='close', lchan_nr=opts.chan_nr)
def parse_options():
parser = OptionParser(usage="usage: %prog [options]")

View File

@ -304,6 +304,15 @@ class SimCardCommands(object):
"""Execute ACTIVATE FILE command as per TS 102 221 Section 11.1.15."""
return self._tp.send_apdu_constr_checksw(self.cla_byte, '44', '00', '00', None, None, None)
def manage_channel(self, mode='open', lchan_nr=0):
"""Execute MANAGE CHANNEL command as per TS 102 221 Section 11.1.17."""
if mode == 'close':
p1 = 0x80
else:
p1 = 0x00
pdu = self.cla_byte + '70%02x%02x00' % (p1, lchan_nr)
return self._tp.send_apdu_checksw(pdu)
def reset_card(self):
"""Physically reset the card"""
return self._tp.reset_card()