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/.
Falkenber9 gerrit-no-reply at lists.osmocom.orgFalkenber9 has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/24161 ) Change subject: WIP ...................................................................... WIP Break down autodetect into different detection methods based on: - ATR - ICCID - typical files This comes handy especially if ATR is not available, i.e. using ModemATCommandLink instead of PCSC Change-Id: I862c42f2c3805886f18214d8b4c39da55a735473 --- M pySim/cards.py 1 file changed, 103 insertions(+), 36 deletions(-) git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/61/24161/1 diff --git a/pySim/cards.py b/pySim/cards.py index 30857b3..f2809a4 100644 --- a/pySim/cards.py +++ b/pySim/cards.py @@ -39,6 +39,27 @@ self._adm_chv_num = 4 self._aids = [] + @classmethod + def match_atr(kls, atr) -> bool: + return False + + @classmethod + def match_iccids(kls, iccid) -> bool: + return iccid.startswith("98") + + @classmethod + def match_typical_files(kls, scc) -> bool: + return False + + @classmethod + def autodetect(kls, scc): + generic_card = Card(scc) + (iccid, sw) = generic_card.read_iccid() + if iccid is not None: + if kls.match_iccids(iccid): + return kls(scc) + return None + def reset(self): self._scc.reset_card() @@ -285,6 +306,16 @@ def __init__(self, ssc): super(UsimCard, self).__init__(ssc) + @classmethod + def autodetect(kls, scc): + try: + # Look for ATR + if kls.match_atr(scc.get_atr()): + return kls(scc) + except: + pass + return None + def read_ehplmn(self): (res, sw) = self._scc.read_binary(EF_USIM_ADF_map['EHPLMN']) if sw == '9000': @@ -355,6 +386,10 @@ def __init__(self, ssc): super(IsimCard, self).__init__(ssc) + @classmethod + def autodetect(kls, scc): + return None + def read_pcscf(self): rec_cnt = self._scc.record_count(EF_ISIM_ADF_map['PCSCF']) pcscf_recs = "" @@ -770,9 +805,9 @@ name = 'sysmoUSIM-GR1' @classmethod - def autodetect(kls, scc): + def match_atr(kls, atr) -> bool: # TODO: Access the ATR - return None + return False def program(self, p): # TODO: check if verify_chv could be used or what it needs @@ -877,13 +912,27 @@ self._scc.sel_ctrl = "0004" #request an FCP @classmethod + def match_atr(kls, atr) -> bool: + return atr == toBytes("3B 9F 96 80 1F C7 80 31 A0 73 BE 21 13 67 43 20 07 18 00 00 01 A5") + + @classmethod + def match_iccids(kls, iccid) -> bool: + return iccid.startswith("89882110000003") # to be verified by sysmocom + + @classmethod def autodetect(kls, scc): try: # Look for ATR - if scc.get_atr() == toBytes("3B 9F 96 80 1F C7 80 31 A0 73 BE 21 13 67 43 20 07 18 00 00 01 A5"): + if kls.match_atr(scc.get_atr()): return kls(scc) except: - return None + pass + # Look for known ICCIDs + generic_card = Card(scc) + (iccid, sw) = generic_card.read_iccid() + if iccid is not None: + if kls.match_iccids(iccid): + return kls(scc) return None def verify_adm(self, key): @@ -1003,17 +1052,9 @@ self._adm_chv_num = 0x11 self._adm2_chv_num = 0x12 - @classmethod - def autodetect(kls, scc): - try: - # Look for ATR - if scc.get_atr() == toBytes("3B 9F 96 80 1F C7 80 31 A0 73 BE 21 13 67 44 22 06 10 00 00 01 A9"): - return kls(scc) - except: - return None - return None - + def match_atr(kls, atr) -> bool: + return atr == toBytes("3B 9F 96 80 1F C7 80 31 A0 73 BE 21 13 67 44 22 06 10 00 00 01 A9") def verify_adm2(self, key): ''' @@ -1177,14 +1218,8 @@ self._scc.sel_ctrl = "0004" #request an FCP @classmethod - def autodetect(kls, scc): - try: - # Look for ATR - if scc.get_atr() == toBytes("3B 9F 95 80 1F C7 80 31 E0 73 F6 21 13 67 4D 45 16 00 43 01 00 8F"): - return kls(scc) - except: - return None - return None + def match_atr(kls, atr) -> bool: + return atr == toBytes("3B 9F 95 80 1F C7 80 31 E0 73 F6 21 13 67 4D 45 16 00 43 01 00 8F") def program(self, p): if not p['pin_adm']: @@ -1268,26 +1303,58 @@ self._scc.sel_ctrl = "0004" #request an FCP @classmethod + def match_atr(kls, atr) -> bool: + atrs = [ + # Try card model #1 + "3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 30 34 05 4B A9", + # Try card model #2 + "3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 75 31 33 02 51 B2", + # Try card model #3 + "3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 52 75 31 04 51 D5" + ] + return atr in [toBytes(a) for a in atrs] + + @classmethod + def match_iccids(kls, iccid) -> bool: + return iccid.startswith("89882110000004") # to be verified by sysmocom + + @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) - - # Try card model #3 - atr = "3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 52 75 31 04 51 D5" - if scc.get_atr() == toBytes(atr): + # Look for ATR + if kls.match_atr(scc.get_atr()): return kls(scc) except: - return None + pass + # Look for known ICCIDs + generic_card = Card(scc) + (iccid, sw) = generic_card.read_iccid() + if iccid is not None: + if kls.match_iccids(iccid): + return kls(scc) return None + # @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) + + # # Try card model #3 + # atr = "3B 9F 96 80 1F 87 80 31 E0 73 FE 21 1B 67 4A 4C 52 75 31 04 51 D5" + # if scc.get_atr() == toBytes(atr): + # return kls(scc) + # except: + # return None + # return None + def verify_adm(self, key): # authenticate as ADM using default key (written on the card..) if not key: -- To view, visit https://gerrit.osmocom.org/c/pysim/+/24161 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: pysim Gerrit-Branch: master Gerrit-Change-Id: I862c42f2c3805886f18214d8b4c39da55a735473 Gerrit-Change-Number: 24161 Gerrit-PatchSet: 1 Gerrit-Owner: Falkenber9 <robert.falkenberg at tu-dortmund.de> Gerrit-MessageType: newchange -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210506/668ea9ad/attachment.htm>