aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSupreeth Herle <herlesupreeth@gmail.com>2020-03-26 09:00:06 +0100
committerherlesupreeth <herlesupreeth@gmail.com>2021-01-05 11:46:41 +0100
commit0c02d8a57b849b5c14991fdac1dd7232720f32ef (patch)
tree8af6761da1e38f1e29289ff29e1c30c03ae547e3
parent3f67f9c1d310363678a484918f0e9c93814d202e (diff)
pySim-read.py: Enable reading of EF.IMPU from ISIM
IMS public user identity (IMPU) As per TS1.103, this EF contains one or more records, with each record able to hold a public SIP Identity (SIP URI) of the user. EF.IMPI consist of URI TLV data object values see IETF RFC 3261. The URI shall be encoded to an octet string according to UTF-8 encoding rules as specified in IETF RFC 3629 Reading of EF.IMPU is achieved by first selecting the ISIM application using its AID. This is followed by selecting EF.IMPU with File ID - 6f04 in ADF.ISIM Change-Id: Icf78a564aeaf4254658d3b018ff57dfc4b987e6f
-rwxr-xr-xpySim-read.py8
-rw-r--r--pySim/cards.py14
-rw-r--r--pysim-testdata/sysmoISIM-SJA2.ok10
3 files changed, 32 insertions, 0 deletions
diff --git a/pySim-read.py b/pySim-read.py
index a7d9063..4047598 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 17b7bce..56597b0 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 335c886..26e20b0 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