aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSupreeth Herle <herlesupreeth@gmail.com>2020-03-25 15:38:02 +0100
committerherlesupreeth <herlesupreeth@gmail.com>2021-01-05 11:46:41 +0100
commit3f67f9c1d310363678a484918f0e9c93814d202e (patch)
treed9151be13ef16cc66b5137308c402e294ed104ec
parent28484d03e31cec11aa47c41bf52edca9d76c47dc (diff)
pySim-read.py: Enable reading of EF.IMPI from ISIM
IMS private user identity (IMPI) As per TS1.103 version 14.2.0, this EF contains the private user identity of the user. EF.IMPI consist of NAI TLV Data object.The NAI shall be encoded to an octet string according to UTF-8 encoding rules as specified in IETF RFC 3629. Reading of EF.IMPI is achieved by first selecting the ISIM application using its AID. This is followed by selecting EF.IMPI with File ID - 6f02 in ADF.ISIM Change-Id: I8d8e76e3f6b9ca7a0be262fee99cd5a397edbefa
-rwxr-xr-xpySim-read.py11
-rw-r--r--pySim/cards.py10
-rw-r--r--pysim-testdata/sysmoISIM-SJA2.ok1
3 files changed, 22 insertions, 0 deletions
diff --git a/pySim-read.py b/pySim-read.py
index f63205a..a7d9063 100755
--- a/pySim-read.py
+++ b/pySim-read.py
@@ -315,6 +315,17 @@ if __name__ == '__main__':
except Exception as e:
print("Home Network Domain Name: Can't read file -- " + str(e))
+ # EF.IMPI - IMS private user identity
+ try:
+ if card.file_exists(EF_ISIM_ADF_map['IMPI']):
+ (res, sw) = card.read_impi()
+ if sw == '9000':
+ print("IMS private user identity: %s" % (len(res) and res or 'Not available',))
+ else:
+ print("IMS private user identity: Can't read, response code = %s" % (sw,))
+ except Exception as e:
+ print("IMS private 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 17da506..17b7bce 100644
--- a/pySim/cards.py
+++ b/pySim/cards.py
@@ -375,6 +375,16 @@ class IsimCard(Card):
data, sw = self._scc.update_binary(EF_ISIM_ADF_map['DOMAIN'], rpad(content, bin_size_bytes*2))
return sw
+ def read_impi(self):
+ (res, sw) = self._scc.read_binary(EF_ISIM_ADF_map['IMPI'])
+ 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)])
+ return (content, sw)
+ else:
+ return (None, sw)
+
class _MagicSimBase(Card):
"""
diff --git a/pysim-testdata/sysmoISIM-SJA2.ok b/pysim-testdata/sysmoISIM-SJA2.ok
index 4cdd9d5..335c886 100644
--- a/pysim-testdata/sysmoISIM-SJA2.ok
+++ b/pysim-testdata/sysmoISIM-SJA2.ok
@@ -183,6 +183,7 @@ P-CSCF:
Not available
Home Network Domain Name: Not available
+IMS private user identity: Not available
ISIM Service Table: 190200
Service 1 - P-CSCF address
Service 4 - GBA-based Local Key Establishment Mechanism