matanp has uploaded this change for review. (
https://gerrit.osmocom.org/c/pysim/+/32712
)
Change subject: Add FPLMN read and program
......................................................................
Add FPLMN read and program
Change-Id: I9ce8c1af691c28ea9ed69e7b5f03f0c02d1f029b
---
M pySim-prog.py
M pySim-read.py
M pySim/cards.py
3 files changed, 39 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/12/32712/1
diff --git a/pySim-prog.py b/pySim-prog.py
index 448f2a0..7c644b7 100755
--- a/pySim-prog.py
+++ b/pySim-prog.py
@@ -150,6 +150,9 @@
default=None,
choices=['{:02X}'.format(int(m)) for m in EF_AD.OP_MODE],
)
+ parser.add_option("-f", "--fplmn", dest="fplmn",
action="append",
+ help="Set Forbidden PLMN. Add multiple time for multiple
FPLMNS",
+ )
parser.add_option("--epdgid", dest="epdgid",
help="Set Home Evolved Packet Data Gateway (ePDG) Identifier.
(Only FQDN format supported)",
)
@@ -498,6 +501,7 @@
'impi': opts.impi,
'impu': opts.impu,
'opmode': opts.opmode,
+ 'fplmn': opts.fplmn,
}
diff --git a/pySim-read.py b/pySim-read.py
index b7fe1f2..ddc193a 100755
--- a/pySim-read.py
+++ b/pySim-read.py
@@ -253,6 +253,14 @@
else:
print("EHPLMN: Can't read, response code = %s" % (sw,))
+ # EF.FPLMN
+ if usim_card.file_exists(EF_USIM_ADF_map['FPLMN']):
+ res, sw = usim_card.read_fplmn()
+ if sw == '9000':
+ print(f'FPLMN:\n{res}')
+ else:
+ print(f'FPLMN: Can\'t read, response code = {sw}')
+
# EF.UST
try:
if usim_card.file_exists(EF_USIM_ADF_map['UST']):
diff --git a/pySim/cards.py b/pySim/cards.py
index 2d51846..ad4ba9f 100644
--- a/pySim/cards.py
+++ b/pySim/cards.py
@@ -381,6 +381,22 @@
data, sw = self._scc.update_binary(EF_USIM_ADF_map['EHPLMN'], ehplmn)
return sw
+ def read_fplmn(self):
+ res, sw = self._scc.read_binary(EF_USIM_ADF_map['FPLMN'])
+ if sw == '9000':
+ return format_xplmn(res), sw
+ else:
+ return None, sw
+
+ def update_fplmn(self, fplmn):
+ self._scc.select_file('3f00')
+ self.select_adf_by_aid('USIM')
+ size = self._scc.binary_size(EF_USIM_ADF_map['FPLMN'])
+ encoded = ''.join([enc_plmn(plmn[:3], plmn[3:]) for plmn in fplmn])
+ encoded = rpad(encoded, size)
+ data, sw = self._scc.update_binary(EF_USIM_ADF_map['FPLMN'], encoded)
+ return sw
+
def read_epdgid(self):
(res, sw) = self._scc.read_binary(EF_USIM_ADF_map['ePDGId'])
if sw == '9000':
@@ -1676,6 +1692,7 @@
'smsp': self.update_smsp,
'ki': self.update_ki,
'opc': self.update_opc,
+ 'fplmn': self.update_fplmn,
}
@classmethod
@@ -1689,6 +1706,7 @@
return None
def program(self, p):
+ self.set_apdu_parameter('00', '0004')
# Authenticate
self._scc.verify_chv(0xc, h2b('3834373936313533'))
for handler in self._program_handlers:
--
To view, visit
https://gerrit.osmocom.org/c/pysim/+/32712
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I9ce8c1af691c28ea9ed69e7b5f03f0c02d1f029b
Gerrit-Change-Number: 32712
Gerrit-PatchSet: 1
Gerrit-Owner: matanp <matan1008(a)gmail.com>
Gerrit-MessageType: newchange