pySim-shell: recognize ADP pins longer than 8 digits as hexadecimal

When a hexadecimal formatted ADM pin is retrieved via the
card_key_provider, it still requires the --pin-is-hex parameter so
that sanitize_pin_adm knows the correct format.

This unfortunately ruins the card_key_provider feature for all cards
that use hexadecimal pins, because the --pin-is-hex would also be
required in scripts, which makes a script either useable for cards
with hexadecimal ADM or for for cards with ASCII ADM.

To minimize the problem, let's recognize all ADM pins longer than 8
digits as hexadecimal in case --pin-is-hex is not set.

Related: OS#4348
Change-Id: Iad9398365d448946c499ce89e3cfb2c3af5d525e
This commit is contained in:
Philipp Maier
2024-09-20 10:46:12 +02:00
parent 01a96cd8e4
commit 26ee39bebf

View File

@@ -819,7 +819,7 @@ class PySimCommands(CommandSet):
adm_type = opts.adm_type or 'ADM1' adm_type = opts.adm_type or 'ADM1'
# try to find an ADM-PIN if none is specified # try to find an ADM-PIN if none is specified
result = card_key_provider_get_field(adm_type, key='ICCID', value=iccid) result = card_key_provider_get_field(adm_type, key='ICCID', value=iccid)
if opts.pin_is_hex: if opts.pin_is_hex or (result and len(result) > 8):
pin_adm = sanitize_pin_adm(None, result) pin_adm = sanitize_pin_adm(None, result)
else: else:
pin_adm = sanitize_pin_adm(result) pin_adm = sanitize_pin_adm(result)