pySim-read.py: Added a common card detection function for both pySim-prog.py and pySim-read.py

This function is used to detect the card type and return Card class/Card subclasses object
if its a know card or else None. Also, an initial step towards refactoring of code.

Change-Id: I71f57c6403dc933bd9d54f90df3d3fe105b4f66f
This commit is contained in:
Supreeth Herle
2020-03-18 11:38:00 +01:00
parent e4e98316a8
commit 4c306ab200
9 changed files with 44 additions and 36 deletions

View File

@@ -39,7 +39,7 @@ except ImportError:
import simplejson as json import simplejson as json
from pySim.commands import SimCardCommands from pySim.commands import SimCardCommands
from pySim.cards import _cards_classes from pySim.cards import _cards_classes, card_detect
from pySim.utils import h2b, swap_nibbles, rpad, derive_milenage_opc, calculate_luhn, dec_iccid from pySim.utils import h2b, swap_nibbles, rpad, derive_milenage_opc, calculate_luhn, dec_iccid
from pySim.ts_51_011 import EF from pySim.ts_51_011 import EF
from pySim.card_handler import * from pySim.card_handler import *
@@ -609,36 +609,6 @@ def save_batch(opts):
fh.close() fh.close()
def card_detect(opts, scc):
# Detect type if needed
card = None
ctypes = dict([(kls.name, kls) for kls in _cards_classes])
if opts.type in ("auto", "auto_once"):
for kls in _cards_classes:
card = kls.autodetect(scc)
if card:
print("Autodetected card type: %s" % card.name)
card.reset()
break
if card is None:
print("Autodetection failed")
return
if opts.type == "auto_once":
opts.type = card.name
elif opts.type in ctypes:
card = ctypes[opts.type](scc)
else:
raise ValueError("Unknown card type: %s" % opts.type)
return card
def process_card(opts, first, card_handler): def process_card(opts, first, card_handler):
if opts.dry_run is False: if opts.dry_run is False:
@@ -647,7 +617,7 @@ def process_card(opts, first, card_handler):
if opts.dry_run is False: if opts.dry_run is False:
# Get card # Get card
card = card_detect(opts, scc) card = card_detect(opts.type, scc)
if card is None: if card is None:
print("No card detected!") print("No card detected!")
return -1 return -1

View File

@@ -31,6 +31,7 @@ import sys
from pySim.ts_51_011 import EF, DF from pySim.ts_51_011 import EF, DF
from pySim.commands import SimCardCommands from pySim.commands import SimCardCommands
from pySim.cards import card_detect, Card
from pySim.utils import h2b, swap_nibbles, rpad, dec_imsi, dec_iccid, dec_msisdn, format_xplmn_w_act, dec_spn from pySim.utils import h2b, swap_nibbles, rpad, dec_imsi, dec_iccid, dec_msisdn, format_xplmn_w_act, dec_spn
@@ -94,6 +95,9 @@ if __name__ == '__main__':
# Program the card # Program the card
print("Reading ...") print("Reading ...")
# Initialize Card object by auto detecting the card
card = card_detect("auto", scc) or Card(scc)
# EF.ICCID # EF.ICCID
(res, sw) = scc.read_binary(EF['ICCID']) (res, sw) = scc.read_binary(EF['ICCID'])
if sw == '9000': if sw == '9000':

View File

@@ -1104,3 +1104,31 @@ def card_autodetect(scc):
card.reset() card.reset()
return card return card
return None return None
def card_detect(ctype, scc):
# Detect type if needed
card = None
ctypes = dict([(kls.name, kls) for kls in _cards_classes])
if ctype in ("auto", "auto_once"):
for kls in _cards_classes:
card = kls.autodetect(scc)
if card:
print("Autodetected card type: %s" % card.name)
card.reset()
break
if card is None:
print("Autodetection failed")
return None
if ctype == "auto_once":
ctype = card.name
elif ctype in ctypes:
card = ctypes[ctype](scc)
else:
raise ValueError("Unknown card type: %s" % ctype)
return card

View File

@@ -1,5 +1,6 @@
Using PC/SC reader (dev=0) interface Using PC/SC reader (dev=0) interface
Reading ... Reading ...
Autodetected card type: Fairwaves-SIM
ICCID: 8988219000000117833 ICCID: 8988219000000117833
IMSI: 001010000000111 IMSI: 001010000000111
GID1: ffffffffffffffff GID1: ffffffffffffffff

View File

@@ -1,9 +1,10 @@
Using PC/SC reader (dev=4) interface Using PC/SC reader (dev=3) interface
Reading ... Reading ...
Autodetected card type: Wavemobile-SIM
ICCID: 89445310150011013678 ICCID: 89445310150011013678
IMSI: 001010000000102 IMSI: 001010000000102
GID1: Can't read file -- SW match failed! Expected 9000 and got 9404. GID1: Can't read file -- SW match failed! Expected 9000 and got 6a82.
GID2: Can't read file -- SW match failed! Expected 9000 and got 9404. GID2: Can't read file -- SW match failed! Expected 9000 and got 6a82.
SMSP: e1ffffffffffffffffffffffff0581005155f5ffffffffffff000000ffffffffffffffffffffffffffff SMSP: e1ffffffffffffffffffffffff0581005155f5ffffffffffff000000ffffffffffffffffffffffffffff
SPN: wavemobile SPN: wavemobile
Display HPLMN: False Display HPLMN: False
@@ -45,7 +46,7 @@ OPLMNwAcT:
ffffff0000 # unused ffffff0000 # unused
ffffff0000 # unused ffffff0000 # unused
HPLMNAcT: Can't read file -- SW match failed! Expected 9000 and got 9404. HPLMNAcT: Can't read file -- SW match failed! Expected 9000 and got 6a82.
ACC: abce ACC: abce
MSISDN: Not available MSISDN: Not available
AD: 00ffff02 AD: 00ffff02

View File

@@ -1,5 +1,6 @@
Using PC/SC reader (dev=2) interface Using PC/SC reader (dev=2) interface
Reading ... Reading ...
Autodetected card type: fakemagicsim
ICCID: 1122334455667788990 ICCID: 1122334455667788990
IMSI: 001010000000102 IMSI: 001010000000102
GID1: Can't read file -- SW match failed! Expected 9000 and got 9404. GID1: Can't read file -- SW match failed! Expected 9000 and got 9404.

View File

@@ -1,5 +1,6 @@
Using PC/SC reader (dev=0) interface Using PC/SC reader (dev=0) interface
Reading ... Reading ...
Autodetected card type: sysmoISIM-SJA2
ICCID: 8988211900000000004 ICCID: 8988211900000000004
IMSI: 001010000000102 IMSI: 001010000000102
GID1: ffffffffffffffffffff GID1: ffffffffffffffffffff

View File

@@ -1,5 +1,6 @@
Using PC/SC reader (dev=1) interface Using PC/SC reader (dev=1) interface
Reading ... Reading ...
Autodetected card type: sysmoUSIM-SJS1
ICCID: 1122334455667788990 ICCID: 1122334455667788990
IMSI: 001010000000102 IMSI: 001010000000102
GID1: ffffffffffffffffffff GID1: ffffffffffffffffffff

View File

@@ -1,5 +1,6 @@
Using PC/SC reader (dev=3) interface Using PC/SC reader (dev=3) interface
Reading ... Reading ...
Autodetected card type: sysmosim-gr1
ICCID: 1122334455667788990 ICCID: 1122334455667788990
IMSI: 001010000000102 IMSI: 001010000000102
GID1: Can't read file -- SW match failed! Expected 9000 and got 9404. GID1: Can't read file -- SW match failed! Expected 9000 and got 9404.