mirror of https://gerrit.osmocom.org/pysim
pySim-prog: Use CSV format with headers
This way we can have optional fields like adm1 in the file Also require iccid as identifier for the SIM card Change-Id: I0d317ea51d0cf582b82157eec6cdec074001a236
This commit is contained in:
parent
23888dab85
commit
1d00c19d14
|
@ -399,7 +399,7 @@ def gen_parameters(opts):
|
|||
'ki' : ki,
|
||||
'opc' : opc,
|
||||
'acc' : acc,
|
||||
'pin_adm' : pin_adm,
|
||||
'adm1' : pin_adm,
|
||||
}
|
||||
|
||||
|
||||
|
@ -414,6 +414,7 @@ def print_parameters(params):
|
|||
> Ki : %(ki)s
|
||||
> OPC : %(opc)s
|
||||
> ACC : %(acc)s
|
||||
> ADM1 : %(adm1)s
|
||||
""" % params
|
||||
|
||||
|
||||
|
@ -427,18 +428,23 @@ def write_params_csv(opts, params):
|
|||
cw.writerow([params[x] for x in row])
|
||||
f.close()
|
||||
|
||||
def _read_params_csv(opts, imsi):
|
||||
def _read_params_csv(opts, iccid=None, imsi=None):
|
||||
import csv
|
||||
row = ['name', 'iccid', 'mcc', 'mnc', 'imsi', 'smsp', 'ki', 'opc']
|
||||
f = open(opts.read_csv, 'r')
|
||||
cr = csv.DictReader(f, row)
|
||||
cr = csv.DictReader(f)
|
||||
i = 0
|
||||
if not 'iccid' in cr.fieldnames:
|
||||
raise Exception("CSV file in wrong format!")
|
||||
for row in cr:
|
||||
if opts.num is not None and opts.read_imsi is False:
|
||||
if opts.num == i:
|
||||
f.close()
|
||||
return row;
|
||||
i += 1
|
||||
if row['iccid'] == iccid:
|
||||
f.close()
|
||||
return row;
|
||||
|
||||
if row['imsi'] == imsi:
|
||||
f.close()
|
||||
return row;
|
||||
|
@ -446,8 +452,8 @@ def _read_params_csv(opts, imsi):
|
|||
f.close()
|
||||
return None
|
||||
|
||||
def read_params_csv(opts, imsi):
|
||||
row = _read_params_csv(opts, imsi)
|
||||
def read_params_csv(opts, imsi=None, iccid=None):
|
||||
row = _read_params_csv(opts, iccid=iccid, imsi=imsi)
|
||||
if row is not None:
|
||||
row['mcc'] = int(row['mcc'])
|
||||
row['mnc'] = int(row['mnc'])
|
||||
|
@ -628,7 +634,9 @@ if __name__ == '__main__':
|
|||
if opts.source == 'cmdline':
|
||||
cp = gen_parameters(opts)
|
||||
elif opts.source == 'csv':
|
||||
if opts.read_imsi:
|
||||
imsi = None
|
||||
iccid = None
|
||||
if opts.read_imsi:
|
||||
if opts.dry_run:
|
||||
# Connect transport
|
||||
print "Insert card now (or CTRL-C to cancel)"
|
||||
|
@ -637,7 +645,7 @@ if __name__ == '__main__':
|
|||
imsi = swap_nibbles(res)[3:]
|
||||
else:
|
||||
imsi = opts.imsi
|
||||
cp = read_params_csv(opts, imsi)
|
||||
cp = read_params_csv(opts, imsi=imsi, iccid=iccid)
|
||||
if cp is None:
|
||||
print "Error reading parameters\n"
|
||||
sys.exit(2)
|
||||
|
|
|
@ -375,8 +375,8 @@ class GrcardSim(Card):
|
|||
#self._scc.verify_chv(4, h2b("4444444444444444"))
|
||||
|
||||
# Authenticate using ADM PIN 5
|
||||
if p['pin_adm']:
|
||||
pin = h2b(p['pin_adm'])
|
||||
if p['adm1']:
|
||||
pin = h2b(p['adm1'])
|
||||
else:
|
||||
pin = h2b("4444444444444444")
|
||||
self._scc.verify_chv(5, pin)
|
||||
|
@ -495,8 +495,8 @@ class SysmoSIMgr2(Card):
|
|||
# P1: 3A for PIN, 3B for PUK
|
||||
# P2: CHV number, as in VERIFY CHV for PIN, and as in UNBLOCK CHV for PUK
|
||||
# P3: 08, CHV length (curiously the PUK is also 08 length, instead of 10)
|
||||
if p['pin_adm']:
|
||||
pin = p['pin_adm']
|
||||
if p['adm1']:
|
||||
pin = p['adm1']
|
||||
else:
|
||||
pin = h2b("4444444444444444")
|
||||
|
||||
|
@ -567,9 +567,9 @@ class SysmoUSIMSJS1(Card):
|
|||
def program(self, p):
|
||||
|
||||
# authenticate as ADM using default key (written on the card..)
|
||||
if not p['pin_adm']:
|
||||
if not p['adm1']:
|
||||
raise ValueError("Please provide a PIN-ADM as there is no default one")
|
||||
self._scc.verify_chv(0x0A, h2b(p['pin_adm']))
|
||||
self._scc.verify_chv(0x0A, p['adm1'])
|
||||
|
||||
# select MF
|
||||
r = self._scc.select_file(['3f00'])
|
||||
|
|
Loading…
Reference in New Issue