diff options
-rwxr-xr-x | pySim-read.py | 7 | ||||
-rw-r--r-- | pySim/cards.py | 19 |
2 files changed, 26 insertions, 0 deletions
diff --git a/pySim-read.py b/pySim-read.py index 4356453..bcdbca6 100755 --- a/pySim-read.py +++ b/pySim-read.py @@ -176,5 +176,12 @@ if __name__ == '__main__': except Exception as e: print "MSISDN: Can't read file -- " + str(e) + # EF.AD + (res, sw) = scc.read_binary(['3f00', '7f20', '6fad']) + if sw == '9000': + print("AD: %s" % (res,)) + else: + print("AD: Can't read, response code = %s" % (sw,)) + # Done for this card and maybe for everything ? print "Done !\n" diff --git a/pySim/cards.py b/pySim/cards.py index 1012cfd..fb84a8d 100644 --- a/pySim/cards.py +++ b/pySim/cards.py @@ -118,6 +118,20 @@ class Card(object): data, sw = self._scc.update_record(EF['SMSP'], 1, rpad(smsp, 84)) return sw + def update_ad(self, mnc): + #See also: 3GPP TS 31.102, chapter 4.2.18 + mnclen = len(str(mnc)) + if mnclen == 1: + mnclen = 2 + if mnclen > 3: + raise RuntimeError('unable to calculate proper mnclen') + + data = self._scc.read_binary(EF['AD'], length=None, offset=0) + size = len(data[0])/2 + content = data[0][0:6] + "%02X" % mnclen + data, sw = self._scc.update_binary(EF['AD'], content) + return sw + def read_spn(self): (spn, sw) = self._scc.read_binary(EF['SPN']) if sw == '9000': @@ -593,6 +607,11 @@ class SysmoUSIMSJS1(Card): if sw != '9000': print("Programming OPLMNwAcT failed with code %s"%sw) + # EF.AD + if p.get('mcc') and p.get('mnc'): + sw = self.update_ad(p['mnc']) + if sw != '9000': + print("Programming AD failed with code %s"%sw) # EF.SMSP r = self._scc.select_file(['3f00', '7f10']) |