From aefd0649a2069abd1354dde35c4af6fc0d451807 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Fri, 25 Feb 2022 15:26:37 +0100 Subject: [PATCH] pySim-shell: Add 'decode_hex' command for transparent + linear EF These commands can be used to decode a user-provided hex-string, instead of decoding the data read from the file. This is useful for quickly manually decoding some values read from other locations, such as e.g. copy+pasted from a eSIM profile in ASN.1 value notation. Change-Id: I81f73bce2c26e3e5dfc7538d223bb2d2483c7fa0 --- docs/shell.rst | 14 ++++++++++++++ pySim/filesystem.py | 22 ++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/docs/shell.rst b/docs/shell.rst index f24dc93b..2c8da848 100644 --- a/docs/shell.rst +++ b/docs/shell.rst @@ -384,6 +384,13 @@ back to the record on the SIM card. This allows for easy interactive modification of records. +decode_hex +~~~~~~~~~~ +.. argparse:: + :module: pySim.filesystem + :func: LinFixedEF.ShellCommands.dec_hex_parser + + Transparent EF commands ----------------------- @@ -460,6 +467,13 @@ to the SIM card. This allows for easy interactive modification of file contents. +decode_hex +~~~~~~~~~~ +.. argparse:: + :module: pySim.filesystem + :func: TransparentEF.ShellCommands.dec_hex_parser + + BER-TLV EF commands ------------------- diff --git a/pySim/filesystem.py b/pySim/filesystem.py index f8b86c57..5bbd57b0 100644 --- a/pySim/filesystem.py +++ b/pySim/filesystem.py @@ -526,6 +526,17 @@ class TransparentEF(CardEF): def __init__(self): super().__init__() + dec_hex_parser = argparse.ArgumentParser() + dec_hex_parser.add_argument('--oneline', action='store_true', + help='No JSON pretty-printing, dump as a single line') + dec_hex_parser.add_argument('HEXSTR', help='Hex-string of encoded data to decode') + + @cmd2.with_argparser(dec_hex_parser) + def do_decode_hex(self, opts): + """Decode command-line provided hex-string as if it was read from the file.""" + data = self._cmd.rs.selected_file.decode_hex(opts.HEXSTR) + self._cmd.poutput_json(data, opts.oneline) + read_bin_parser = argparse.ArgumentParser() read_bin_parser.add_argument( '--offset', type=int, default=0, help='Byte offset for start of read') @@ -738,6 +749,17 @@ class LinFixedEF(CardEF): def __init__(self, **kwargs): super().__init__(**kwargs) + dec_hex_parser = argparse.ArgumentParser() + dec_hex_parser.add_argument('--oneline', action='store_true', + help='No JSON pretty-printing, dump as a single line') + dec_hex_parser.add_argument('HEXSTR', help='Hex-string of encoded data to decode') + + @cmd2.with_argparser(dec_hex_parser) + def do_decode_hex(self, opts): + """Decode command-line provided hex-string as if it was read from the file.""" + data = self._cmd.rs.selected_file.decode_record_hex(opts.HEXSTR) + self._cmd.poutput_json(data, opts.oneline) + read_rec_parser = argparse.ArgumentParser() read_rec_parser.add_argument( 'record_nr', type=int, help='Number of record to be read')