From 99d55552d5b37905e2a551c18024fca869f3c321 Mon Sep 17 00:00:00 2001 From: Supreeth Herle Date: Tue, 24 Mar 2020 13:03:43 +0100 Subject: [PATCH] pySim-read.py: Enable parsing of EF.ePDGSelection in USIM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As per TS 31.102, this EF can found under ADF.USIM at File Id 6ff4. Also, if service n°106 and service n°107 are available, this file shall be present. Change-Id: I98916e6f5c9791aff63c18a3b16bdfb8ae9b2d36 --- pySim-read.py | 12 ++++++++++++ pySim/cards.py | 7 +++++++ pysim-testdata/sysmoISIM-SJA2.ok | 6 ++++++ 3 files changed, 25 insertions(+) diff --git a/pySim-read.py b/pySim-read.py index 6608556b..2be34bda 100755 --- a/pySim-read.py +++ b/pySim-read.py @@ -36,6 +36,7 @@ from pySim.commands import SimCardCommands from pySim.cards import card_detect, Card from pySim.utils import h2b, swap_nibbles, rpad, dec_imsi, dec_iccid, dec_msisdn from pySim.utils import format_xplmn_w_act, dec_spn, dec_st, init_reader, dec_epdgid +from pySim.utils import h2s, format_ePDGSelection def parse_options(): @@ -282,6 +283,17 @@ if __name__ == '__main__': except Exception as e: print("ePDGId: Can't read file -- " + str(e)) + #EF.ePDGSelection - ePDG Selection Information + try: + if card.file_exists(EF_USIM_ADF_map['ePDGSelection']): + (res, sw) = card.read_ePDGSelection() + if sw == '9000': + print("ePDGSelection:\n%s" % (res,)) + else: + print("ePDGSelection: Can't read, response code = %s" % (sw,)) + except Exception as e: + print("ePDGSelection: Can't read file -- " + str(e)) + # Check whether we have th AID of ISIM, if so select it by its AID # EF.IST - File Id in ADF ISIM : 6f07 if '9000' == card.select_adf_by_aid(adf="isim"): diff --git a/pySim/cards.py b/pySim/cards.py index 1d5f5c6c..6243d4a6 100644 --- a/pySim/cards.py +++ b/pySim/cards.py @@ -277,6 +277,13 @@ class UsimCard(Card): EF_USIM_ADF_map['ePDGId'], epdgid_tlv) return sw + def read_ePDGSelection(self): + (res, sw) = self._scc.read_binary(EF_USIM_ADF_map['ePDGSelection']) + if sw == '9000': + return (format_ePDGSelection(res), sw) + else: + return (None, sw) + def read_ust(self): (res, sw) = self._scc.read_binary(EF_USIM_ADF_map['UST']) if sw == '9000': diff --git a/pysim-testdata/sysmoISIM-SJA2.ok b/pysim-testdata/sysmoISIM-SJA2.ok index 947cff6a..b6836e78 100644 --- a/pysim-testdata/sysmoISIM-SJA2.ok +++ b/pysim-testdata/sysmoISIM-SJA2.ok @@ -165,6 +165,12 @@ USIM Service Table: beff9f9de73e0408400170730000002e00000000 ePDGId: Not available +ePDGSelection: + ffffffffffff # unused + ffffffffffff # unused + ffffffffffff # unused + ffffffffffff # unused + ISIM Service Table: 190200 Service 1 - P-CSCF address Service 4 - GBA-based Local Key Establishment Mechanism