From cd18ed0a82403bc8d4d36649d56bc5e5ee5676d4 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 15 Jan 2024 09:21:03 +0100 Subject: [PATCH] ts_102_221: Better explain 'selected file invalidated' Some specs call it 'invalidated', others call it 'deactivated'. If the user is unfamiliar with this, the error message about "invalidated" might not be obvious enough; let's also mention 'deactivated' in the message and explicitly mention that it needs to be activated before use. Change-Id: I91488b0e7dc25a8970022b09e575485a4165eefa --- docs/shell.rst | 14 +++++++++++++- pySim-shell.py | 11 +++++++++-- pySim/ts_102_221.py | 2 +- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/docs/shell.rst b/docs/shell.rst index 4742b8e1..7022b5a2 100644 --- a/docs/shell.rst +++ b/docs/shell.rst @@ -400,7 +400,19 @@ verify_chv deactivate_file ~~~~~~~~~~~~~~~ -Deactivate the currently selected file. This used to be called INVALIDATE in TS 11.11. +Deactivate the currently selected file. A deactivated file can no longer be accessed +for any further operation (such as selecting and subsequently reading or writing). + +Any access to a file that is deactivated will trigger the error +*SW 6283 'Selected file invalidated/disabled'* + +In order to re-access a deactivated file, you need to activate it again, see the +`activate_file` command below. Note that for *deactivation* the to-be-deactivated +EF must be selected, but for *activation*, the DF above the to-be-activated +EF must be selected! + +This command sends a DEACTIVATE FILE APDU to +the card (used to be called INVALIDATE in TS 11.11 for classic SIM). activate_file diff --git a/pySim-shell.py b/pySim-shell.py index 6ff484b6..c6454038 100755 --- a/pySim-shell.py +++ b/pySim-shell.py @@ -882,8 +882,15 @@ class Iso7816Commands(CommandSet): activate_file_parser.add_argument('NAME', type=str, help='File name or FID of file to activate') @cmd2.with_argparser(activate_file_parser) def do_activate_file(self, opts): - """Activate the specified EF. This used to be called REHABILITATE in TS 11.11 for classic - SIM. You need to specify the name or FID of the file to activate.""" + """Activate the specified EF by sending an ACTIVATE FILE apdu command (used to be called REHABILITATE +in TS 11.11 for classic SIM). + +This command is used to (re-)activate a file that is currently in deactivated (sometimes also called +"invalidated") state. You need to call this from the DF above the to-be-activated EF and specify the name or +FID of the file to activate. + +Note that for *deactivation* the to-be-deactivated EF must be selected, but for *activation*, the DF +above the to-be-activated EF must be selected!""" (data, sw) = self._cmd.lchan.activate_file(opts.NAME) def complete_activate_file(self, text, line, begidx, endidx) -> List[str]: diff --git a/pySim/ts_102_221.py b/pySim/ts_102_221.py index 308fc4a3..65dd87d9 100644 --- a/pySim/ts_102_221.py +++ b/pySim/ts_102_221.py @@ -808,7 +808,7 @@ class CardProfileUICC(CardProfile): '6200': 'No information given, state of non-volatile memory unchanged', '6281': 'Part of returned data may be corrupted', '6282': 'End of file/record reached before reading Le bytes or unsuccessful search', - '6283': 'Selected file invalidated', + '6283': 'Selected file invalidated/disabled; needs to be activated before use', '6284': 'Selected file in termination state', '62f1': 'More data available', '62f2': 'More data available and proactive command pending',