From 7ec822373ee6f14165c59fe6c997ad31d4bbf3e8 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Tue, 6 Jun 2023 18:15:52 +0200 Subject: [PATCH] ts_31_102: Add shell command for GET IDENTITY GET IDENTITY is used in the "SUCI computation on USIM" feature. Change-Id: I619d397900dbd6565f8f46acdabcee511903830c --- docs/shell.rst | 6 ++++++ pySim/commands.py | 5 +++++ pySim/ts_31_102.py | 17 +++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/docs/shell.rst b/docs/shell.rst index cce790a2..e13d054a 100644 --- a/docs/shell.rst +++ b/docs/shell.rst @@ -566,6 +566,12 @@ envelope_sms :module: pySim.ts_31_102 :func: ADF_USIM.AddlShellCommands.envelope_sms_parser +get_identity +~~~~~~~~~~~~ +.. argparse:: + :module: pySim.ts_31_102 + :func: ADF_USIM.AddlShellCommands.get_id_parser + File-specific commands ---------------------- diff --git a/pySim/commands.py b/pySim/commands.py index dc0edada..3c6ae49f 100644 --- a/pySim/commands.py +++ b/pySim/commands.py @@ -641,3 +641,8 @@ class SimCardCommands: def get_data(self, tag: int, cla: int = 0x00): data, sw = self._tp.send_apdu('%02xca%04x00' % (cla, tag)) return (data, sw) + + # TS 31.102 Section 7.5.2 + def get_identity(self, context: int): + data, sw = self._tp.send_apdu_checksw('807800%02x00' % (context)) + return (data, sw) diff --git a/pySim/ts_31_102.py b/pySim/ts_31_102.py index 342ea873..81b671ea 100644 --- a/pySim/ts_31_102.py +++ b/pySim/ts_31_102.py @@ -1664,6 +1664,23 @@ class ADF_USIM(CardADF): (data, sw) = self._cmd.card._scc.envelope(b2h(sms_dl.to_tlv())) self._cmd.poutput('SW: %s, data: %s' % (sw, data)) + get_id_parser = argparse.ArgumentParser() + get_id_parser.add_argument("--nswo-context", action='store_true') + + @cmd2.with_argparser(get_id_parser) + def do_get_identity(self, opts): + """Send a GET IDENTITY command to the card. This is part of the + procedure for "SUCI calculation performed on USIM" supported + by USIM with support for both EF.UST service 124 and 125.""" + context = 0x01 # SUCI + if opts.nswo_context: + context = 0x02 # SUCI 5G NSWO + (data, sw) = self._cmd.card._scc.get_identity(context) + do = SUCI_TlvDataObject() + do.from_tlv(h2b(data)) + do_d = do.to_dict() + self._cmd.poutput('SUCI TLV Data Object: %s' % do_d['suci__tlv_data_object']) + # TS 31.102 Section 7.3 sw_usim = {