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>