diff options
author | Todd Neal <todd@tneal.org> | 2018-04-25 15:36:29 -0500 |
---|---|---|
committer | Todd Neal <todd@tneal.org> | 2018-04-26 11:11:45 -0500 |
commit | 9eeadfc46bd219227011df61635d64f902eb4e12 (patch) | |
tree | 193be0d0713c9c62f6a8d9a1eb0fd6988d76582c /pySim | |
parent | 6cbecaaf5cbbf0cf1fe9d3d657c91dfdabd6de5c (diff) |
add support for open cells SIM cards
Change-Id: I4df5681952eefd7a67f5e2b0a96a9e01c9d960d2
Diffstat (limited to 'pySim')
-rw-r--r-- | pySim/cards.py | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/pySim/cards.py b/pySim/cards.py index e324857..0c9c2b8 100644 --- a/pySim/cards.py +++ b/pySim/cards.py @@ -687,10 +687,60 @@ class FairwavesSIM(Card): return - # In order for autodetection ... +class OpenCellsSim(Card): + """ + OpenCellsSim + + """ + + name = 'OpenCells SIM' + + def __init__(self, ssc): + super(OpenCellsSim, self).__init__(ssc) + self._adm_chv_num = 0x0A + + + @classmethod + def autodetect(kls, scc): + try: + # Look for ATR + if scc.get_atr() == toBytes("3B 9F 95 80 1F C3 80 31 E0 73 FE 21 13 57 86 81 02 86 98 44 18 A8"): + return kls(scc) + except: + return None + return None + + + def program(self, p): + if not p['pin_adm']: + raise ValueError("Please provide a PIN-ADM as there is no default one") + self._scc.verify_chv(0x0A, h2b(p['pin_adm'])) + + # select MF + r = self._scc.select_file(['3f00']) + + # write EF.ICCID + data, sw = self._scc.update_binary('2fe2', enc_iccid(p['iccid'])) + + r = self._scc.select_file(['7ff0']) + + # set Ki in proprietary file + data, sw = self._scc.update_binary('FF02', p['ki']) + + # set OPC in proprietary file + data, sw = self._scc.update_binary('FF01', p['opc']) + + # select DF_GSM + r = self._scc.select_file(['7f20']) + + # write EF.IMSI + data, sw = self._scc.update_binary('6f07', enc_imsi(p['imsi'])) + + +# In order for autodetection ... _cards_classes = [ FakeMagicSim, SuperSim, MagicSim, GrcardSim, SysmoSIMgr1, SysmoSIMgr2, SysmoUSIMgr1, SysmoUSIMSJS1, - FairwavesSIM ] + FairwavesSIM, OpenCellsSim ] def card_autodetect(scc): for kls in _cards_classes: |