pysim-prog: move ADM sanitation to utils.py
The lower part of gen_parameters() in pySim-prog.py contains some code that checks whether the ADM pin supplied in its hexadecimal or in its string form and generates a sanitised pin_adm from that. Lets separate this part as it may become useful elsewhere too. Change-Id: Ifead29724cc13a91de9e2e89314d7fb23c063d50
This commit is contained in:
committed by
Harald Welte
parent
7f9f64ac2a
commit
e8536c04bc
@@ -419,27 +419,7 @@ def gen_parameters(opts):
|
|||||||
else:
|
else:
|
||||||
opc = ''.join(['%02x' % random.randrange(0,256) for i in range(16)])
|
opc = ''.join(['%02x' % random.randrange(0,256) for i in range(16)])
|
||||||
|
|
||||||
|
pin_adm = sanitize_pin_adm(opts)
|
||||||
pin_adm = None
|
|
||||||
|
|
||||||
if opts.pin_adm is not None:
|
|
||||||
if len(opts.pin_adm) <= 8:
|
|
||||||
pin_adm = ''.join(['%02x'%(ord(x)) for x in opts.pin_adm])
|
|
||||||
pin_adm = rpad(pin_adm, 16)
|
|
||||||
|
|
||||||
else:
|
|
||||||
raise ValueError("PIN-ADM needs to be <=8 digits (ascii)")
|
|
||||||
|
|
||||||
if opts.pin_adm_hex is not None:
|
|
||||||
if len(opts.pin_adm_hex) == 16:
|
|
||||||
pin_adm = opts.pin_adm_hex
|
|
||||||
# Ensure that it's hex-encoded
|
|
||||||
try:
|
|
||||||
try_encode = h2b(pin_adm)
|
|
||||||
except ValueError:
|
|
||||||
raise ValueError("PIN-ADM needs to be hex encoded using this option")
|
|
||||||
else:
|
|
||||||
raise ValueError("PIN-ADM needs to be exactly 16 digits (hex encoded)")
|
|
||||||
|
|
||||||
# Return that
|
# Return that
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -439,6 +439,37 @@ def dec_epdgid(hexstr):
|
|||||||
|
|
||||||
return s
|
return s
|
||||||
|
|
||||||
|
def sanitize_pin_adm(opts):
|
||||||
|
"""
|
||||||
|
The ADM pin can be supplied either in its hexadecimal form or as
|
||||||
|
ascii string. This function checks the supplied opts parameter and
|
||||||
|
returns the pin_adm as hex encoded string, regardles in which form
|
||||||
|
it was originally supplied by the user
|
||||||
|
"""
|
||||||
|
|
||||||
|
pin_adm = None
|
||||||
|
|
||||||
|
if opts.pin_adm is not None:
|
||||||
|
if len(opts.pin_adm) <= 8:
|
||||||
|
pin_adm = ''.join(['%02x'%(ord(x)) for x in opts.pin_adm])
|
||||||
|
pin_adm = rpad(pin_adm, 16)
|
||||||
|
|
||||||
|
else:
|
||||||
|
raise ValueError("PIN-ADM needs to be <=8 digits (ascii)")
|
||||||
|
|
||||||
|
if opts.pin_adm_hex is not None:
|
||||||
|
if len(opts.pin_adm_hex) == 16:
|
||||||
|
pin_adm = opts.pin_adm_hex
|
||||||
|
# Ensure that it's hex-encoded
|
||||||
|
try:
|
||||||
|
try_encode = h2b(pin_adm)
|
||||||
|
except ValueError:
|
||||||
|
raise ValueError("PIN-ADM needs to be hex encoded using this option")
|
||||||
|
else:
|
||||||
|
raise ValueError("PIN-ADM needs to be exactly 16 digits (hex encoded)")
|
||||||
|
|
||||||
|
return pin_adm
|
||||||
|
|
||||||
def init_reader(opts):
|
def init_reader(opts):
|
||||||
"""
|
"""
|
||||||
Init card reader driver
|
Init card reader driver
|
||||||
|
|||||||
Reference in New Issue
Block a user