diff --git a/pySim-read.py b/pySim-read.py index a7d90631..40475989 100755 --- a/pySim-read.py +++ b/pySim-read.py @@ -326,6 +326,14 @@ if __name__ == '__main__': except Exception as e: print("IMS private user identity: Can't read file -- " + str(e)) + # EF.IMPU - IMS public user identity + try: + if card.file_exists(EF_ISIM_ADF_map['IMPU']): + res = card.read_impu() + print("IMS public user identity:\n%s" % (len(res) and res or '\tNot available\n',)) + except Exception as e: + print("IMS public user identity: 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 17b7bce0..56597b04 100644 --- a/pySim/cards.py +++ b/pySim/cards.py @@ -385,6 +385,20 @@ class IsimCard(Card): else: return (None, sw) + def read_impu(self): + rec_cnt = self._scc.record_count(EF_ISIM_ADF_map['IMPU']) + impu_recs = "" + for i in range(0, rec_cnt): + (res, sw) = self._scc.read_record(EF_ISIM_ADF_map['IMPU'], i + 1) + if sw == '9000': + # Skip the inital tag value ('80') byte and get length of contents + length = int(res[2:4], 16) + content = h2s(res[4:4+(length*2)]) + impu_recs += "\t%s\n" % (len(content) and content or 'Not available') + else: + impu_recs += "IMS public user identity: Can't read, response code = %s\n" % (sw) + return impu_recs + class _MagicSimBase(Card): """ diff --git a/pysim-testdata/sysmoISIM-SJA2.ok b/pysim-testdata/sysmoISIM-SJA2.ok index 335c886c..26e20b00 100644 --- a/pysim-testdata/sysmoISIM-SJA2.ok +++ b/pysim-testdata/sysmoISIM-SJA2.ok @@ -184,6 +184,16 @@ P-CSCF: Home Network Domain Name: Not available IMS private user identity: Not available +IMS public user identity: + Not available + Not available + Not available + Not available + Not available + Not available + Not available + Not available + ISIM Service Table: 190200 Service 1 - P-CSCF address Service 4 - GBA-based Local Key Establishment Mechanism