This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
laforge gerrit-no-reply at lists.osmocom.orglaforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/16691 ) Change subject: cards: Add support for sysmo-isim-sja2 ...................................................................... cards: Add support for sysmo-isim-sja2 The sysmo-isim-sja2 cards are not yet supported by pysim. Lets add support for writing KI and OPC in ADF.USIM and ADF.ISIM as well as the remaining common simcard parameters. Related: SYS#4466 Change-Id: I23e2b46eac0e0dbc2b271983d448999f6a459ecf --- M pySim/cards.py M pySim/commands.py A pysim-testdata/sysmoISIM-SJA2.data A pysim-testdata/sysmoISIM-SJA2.ok 4 files changed, 199 insertions(+), 1 deletion(-) Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved diff --git a/pySim/cards.py b/pySim/cards.py index 758ec0e..9174ad5 100644 --- a/pySim/cards.py +++ b/pySim/cards.py @@ -144,6 +144,30 @@ data, sw = self._scc.update_binary(EF['SPN'], rpad(content, 32)) return sw + # Read the (full) AID for either ISIM or USIM application + def read_aid(self, isim = False): + + # First (known) halves of the AID + aid_usim = "a0000000871002" + aid_isim = "a0000000871004" + + # Select which one to look for + if isim: + aid = aid_isim + else: + aid = aid_usim + + # Find out how many records the EF.DIR has, then go through + # all records and try to find the AID we are looking for + aid_record_count = self._scc.record_count(['2F00']) + for i in range(0, aid_record_count): + record = self._scc.read_record(['2F00'], i + 1) + if aid in record[0]: + aid_len = int(record[0][6:8], 16) + return record[0][8:8 + aid_len * 2] + + return None + class _MagicSimBase(Card): """ @@ -911,10 +935,120 @@ return +class SysmoISIMSJA2(Card): + """ + sysmocom sysmoISIM-SJA2 + """ + + name = 'sysmoISIM-SJA2' + + def __init__(self, ssc): + super(SysmoISIMSJA2, self).__init__(ssc) + self._scc.cla_byte = "00" + self._scc.sel_ctrl = "0004" #request an FCP + + @classmethod + def autodetect(kls, scc): + try: + # Try card model #1 + atr = "3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9" + if scc.get_atr() == toBytes(atr): + return kls(scc) + + # Try card model #2 + atr = "3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2" + if scc.get_atr() == toBytes(atr): + return kls(scc) + except: + return None + return None + + def program(self, p): + # authenticate as ADM using default key (written on the card..) + 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'])) + + # This type of card does not allow to reprogram the ICCID. + # Reprogramming the ICCID would mess up the card os software + # license management, so the ICCID must be kept at its factory + # setting! + if p.get('iccid'): + print("Warning: Programming of the ICCID is not implemented for this type of card.") + + # select DF_GSM + self._scc.select_file(['7f20']) + + # write EF.IMSI + if p.get('imsi'): + self._scc.update_binary('6f07', enc_imsi(p['imsi'])) + + # EF.PLMNsel + if p.get('mcc') and p.get('mnc'): + sw = self.update_plmnsel(p['mcc'], p['mnc']) + if sw != '9000': + print("Programming PLMNsel failed with code %s"%sw) + + # EF.PLMNwAcT + if p.get('mcc') and p.get('mnc'): + sw = self.update_plmn_act(p['mcc'], p['mnc']) + if sw != '9000': + print("Programming PLMNwAcT failed with code %s"%sw) + + # EF.OPLMNwAcT + if p.get('mcc') and p.get('mnc'): + sw = self.update_oplmn_act(p['mcc'], p['mnc']) + 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 + if p.get('smsp'): + r = self._scc.select_file(['3f00', '7f10']) + data, sw = self._scc.update_record('6f42', 1, lpad(p['smsp'], 104), force_len=True) + + # update EF-SIM_AUTH_KEY (and EF-USIM_AUTH_KEY_2G, which is + # hard linked to EF-USIM_AUTH_KEY) + self._scc.select_file(['3f00']) + self._scc.select_file(['a515']) + if p.get('ki'): + self._scc.update_binary('6f20', p['ki'], 1) + if p.get('opc'): + self._scc.update_binary('6f20', p['opc'], 17) + + # update EF-USIM_AUTH_KEY in ADF.ISIM + self._scc.select_file(['3f00']) + aid = self.read_aid(isim = True) + self._scc.select_adf(aid) + if p.get('ki'): + self._scc.update_binary('af20', p['ki'], 1) + if p.get('opc'): + self._scc.update_binary('af20', p['opc'], 17) + + # update EF-USIM_AUTH_KEY in ADF.USIM + self._scc.select_file(['3f00']) + aid = self.read_aid() + self._scc.select_adf(aid) + if p.get('ki'): + self._scc.update_binary('af20', p['ki'], 1) + if p.get('opc'): + self._scc.update_binary('af20', p['opc'], 17) + + return + + def erase(self): + return + + # In order for autodetection ... _cards_classes = [ FakeMagicSim, SuperSim, MagicSim, GrcardSim, SysmoSIMgr1, SysmoSIMgr2, SysmoUSIMgr1, SysmoUSIMSJS1, - FairwavesSIM, OpenCellsSim, WavemobileSim ] + FairwavesSIM, OpenCellsSim, WavemobileSim, SysmoISIMSJA2 ] def card_autodetect(scc): for kls in _cards_classes: diff --git a/pySim/commands.py b/pySim/commands.py index f2bdf7a..385cacf 100644 --- a/pySim/commands.py +++ b/pySim/commands.py @@ -107,6 +107,10 @@ rv.append(data) return rv + def select_adf(self, aid): + aidlen = ("0" + format(len(aid)/2, 'x'))[-2:] + return self._tp.send_apdu_checksw(self.cla_byte + "a4" + "0404" + aidlen + aid) + def read_binary(self, ef, length=None, offset=0): if not hasattr(type(ef), '__iter__'): ef = [ef] diff --git a/pysim-testdata/sysmoISIM-SJA2.data b/pysim-testdata/sysmoISIM-SJA2.data new file mode 100644 index 0000000..4b45a06 --- /dev/null +++ b/pysim-testdata/sysmoISIM-SJA2.data @@ -0,0 +1,7 @@ +MCC=001 +MNC=01 +ICCID=1122334455667788990 +KI=AABBCCDDEEFFAABBCCDDEEFFAABBCCDD +OPC=12345678901234567890123456789012 +IMSI=001010000000102 +ADM=72273953 diff --git a/pysim-testdata/sysmoISIM-SJA2.ok b/pysim-testdata/sysmoISIM-SJA2.ok new file mode 100644 index 0000000..fb191e0 --- /dev/null +++ b/pysim-testdata/sysmoISIM-SJA2.ok @@ -0,0 +1,53 @@ +Using PC/SC reader (dev=0) interface +Reading ... +ICCID: 8988211900000000004 +IMSI: 001010000000102 +SMSP: ffffffffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffff0581005155f5ffffffffffff000000 +PLMNsel: fff11fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +PLMNwAcT: + fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + +OPLMNwAcT: + fff11fffff # MCC: 1651 MNC: 151 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + ffffff0000 # unused + +HPLMNAcT: + ffffff0000 # unused + ffffff0000 # unused + ffffffffff # unused + ffffffffff # unused + ffffffffff # unused + ffffffffff # unused + ffffffffff # unused + ffffffffff # unused + ffffffffff # unused + ffffffffff # unused + ffffffffff # unused + ffffff0000 # unused + +ACC: 0001 +MSISDN: Not available +AD: 00000002 +Done ! + -- To view, visit https://gerrit.osmocom.org/c/pysim/+/16691 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: pysim Gerrit-Branch: master Gerrit-Change-Id: I23e2b46eac0e0dbc2b271983d448999f6a459ecf Gerrit-Change-Number: 16691 Gerrit-PatchSet: 1 Gerrit-Owner: dexter <pmaier at sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: dexter <pmaier at sysmocom.de> Gerrit-Reviewer: laforge <laforge at osmocom.org> Gerrit-MessageType: merged -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200109/ad9d9c23/attachment.htm>