diff --git a/pySim-prog.py b/pySim-prog.py index e00c2d01..2ac4dadf 100755 --- a/pySim-prog.py +++ b/pySim-prog.py @@ -73,6 +73,9 @@ def parse_options(): parser.add_option("-a", "--pin-adm", dest="pin_adm", help="ADM PIN used for provisioning (overwrites default)", ) + parser.add_option("-A", "--pin-adm-hex", dest="pin_adm_hex", + help="ADM PIN used for provisioning, as hex string (16 characters long", + ) parser.add_option("-e", "--erase", dest="erase", action='store_true', help="Erase beforehand [default: %default]", default=False, @@ -376,17 +379,27 @@ def gen_parameters(opts): else: opc = ''.join(['%02x' % random.randrange(0,256) for i in range(16)]) + + 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) - elif len(opts.pin_adm) == 16: - pin_adm = opts.pin_adm - else: - raise ValueError("PIN-ADM needs to be <=8 digits (ascii) or exactly 16 digits (raw hex)") - else: - pin_adm = None + 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 { diff --git a/pysim-testdata/Wavemobile-SIM.data b/pysim-testdata/Wavemobile-SIM.data index 46690b47..0c3379a5 100644 --- a/pysim-testdata/Wavemobile-SIM.data +++ b/pysim-testdata/Wavemobile-SIM.data @@ -1,5 +1,5 @@ MCC=001 MNC=01 IMSI=001010000000102 -ADM=15E31383624FDC8A +ADM_HEX=15E31383624FDC8A diff --git a/tests/Wavemobile-SIM.data.example b/tests/Wavemobile-SIM.data.example index e9ba9653..bdf2d656 100644 --- a/tests/Wavemobile-SIM.data.example +++ b/tests/Wavemobile-SIM.data.example @@ -1,5 +1,5 @@ MCC=001 MNC=01 IMSI=001010000000102 -ADM=0123456789ABCDEF +ADM_HEX=0123456789ABCDEF diff --git a/tests/pysim-test.sh b/tests/pysim-test.sh index 5af7a938..f97722d6 100755 --- a/tests/pysim-test.sh +++ b/tests/pysim-test.sh @@ -156,9 +156,14 @@ function run_test { OPC=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF IMSI=001010000000001 ADM=00000000 + ADM_OPT="-a" - . "$CARD_NAME.data" - python $PYSIM_PROG -p $I -t $CARD_NAME -o $OPC -k $KI -x $MCC -y $MNC -i $IMSI -s $ICCID -a $ADM + source "$CARD_NAME.data" + if [ -n "$ADM_HEX" ]; then + ADM_OPT="-A" + ADM=$ADM_HEX + fi + python $PYSIM_PROG -p $I -t $CARD_NAME -o $OPC -k $KI -x $MCC -y $MNC -i $IMSI -s $ICCID $ADM_OPT $ADM check_card $I $CARD_NAME echo "" done