aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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