<p>daniel has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/pysim/+/15393">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pySim-prog: Add option for hex ADM keys<br><br>pySim-prog would implicitly try to use the raw or hex-escaped format<br>depending on the length of the parameter, now there is the option "-A"<br>to explicitly specify the hex-escaped ADM1 key.<br><br>pysim-test.sh: Explicitly use the "-A" option to pass the hex adm1 key<br>for wavemobile cards<br><br>Change-Id: Id75a03482aa7f8cc3bdbb8d5967f1e8ab45c179a<br>---<br>M pySim-prog.py<br>M pysim-testdata/Wavemobile-SIM.data<br>M tests/Wavemobile-SIM.data.example<br>M tests/pysim-test.sh<br>4 files changed, 28 insertions(+), 10 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/93/15393/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pySim-prog.py b/pySim-prog.py</span><br><span>index e00c2d0..2ac4dad 100755</span><br><span>--- a/pySim-prog.py</span><br><span>+++ b/pySim-prog.py</span><br><span>@@ -73,6 +73,9 @@</span><br><span>    parser.add_option("-a", "--pin-adm", dest="pin_adm",</span><br><span>                   help="ADM PIN used for provisioning (overwrites default)",</span><br><span>                 )</span><br><span style="color: hsl(120, 100%, 40%);">+     parser.add_option("-A", "--pin-adm-hex", dest="pin_adm_hex",</span><br><span style="color: hsl(120, 100%, 40%);">+                    help="ADM PIN used for provisioning, as hex string (16 characters long",</span><br><span style="color: hsl(120, 100%, 40%);">+            )</span><br><span>    parser.add_option("-e", "--erase", dest="erase", action='store_true',</span><br><span>                  help="Erase beforehand [default: %default]",</span><br><span>                       default=False,</span><br><span>@@ -376,17 +379,27 @@</span><br><span>       else:</span><br><span>                opc = ''.join(['%02x' % random.randrange(0,256) for i in range(16)])</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    pin_adm = None</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     if opts.pin_adm is not None:</span><br><span>                 if len(opts.pin_adm) <= 8:</span><br><span>                        pin_adm = ''.join(['%02x'%(ord(x)) for x in opts.pin_adm])</span><br><span>                   pin_adm = rpad(pin_adm, 16)</span><br><span style="color: hsl(0, 100%, 40%);">-             elif len(opts.pin_adm) == 16:</span><br><span style="color: hsl(0, 100%, 40%);">-                   pin_adm = opts.pin_adm</span><br><span style="color: hsl(0, 100%, 40%);">-          else:</span><br><span style="color: hsl(0, 100%, 40%);">-                   raise ValueError("PIN-ADM needs to be <=8 digits (ascii) or exactly 16 digits (raw hex)")</span><br><span style="color: hsl(0, 100%, 40%);">-  else:</span><br><span style="color: hsl(0, 100%, 40%);">-           pin_adm = None</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+            else:</span><br><span style="color: hsl(120, 100%, 40%);">+                 raise ValueError("PIN-ADM needs to be <=8 digits (ascii)")</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if opts.pin_adm_hex is not None:</span><br><span style="color: hsl(120, 100%, 40%);">+           if len(opts.pin_adm_hex) == 16:</span><br><span style="color: hsl(120, 100%, 40%);">+                       pin_adm = opts.pin_adm_hex</span><br><span style="color: hsl(120, 100%, 40%);">+                    # Ensure that it's hex-encoded</span><br><span style="color: hsl(120, 100%, 40%);">+                    try:</span><br><span style="color: hsl(120, 100%, 40%);">+                          try_encode = h2b(pin_adm)</span><br><span style="color: hsl(120, 100%, 40%);">+                     except ValueError:</span><br><span style="color: hsl(120, 100%, 40%);">+                        raise ValueError("PIN-ADM needs to be hex encoded using this option")</span><br><span style="color: hsl(120, 100%, 40%);">+           else:</span><br><span style="color: hsl(120, 100%, 40%);">+                 raise ValueError("PIN-ADM needs to be exactly 16 digits (hex encoded)")</span><br><span> </span><br><span>        # Return that</span><br><span>        return {</span><br><span>diff --git a/pysim-testdata/Wavemobile-SIM.data b/pysim-testdata/Wavemobile-SIM.data</span><br><span>index 46690b4..0c3379a 100644</span><br><span>--- a/pysim-testdata/Wavemobile-SIM.data</span><br><span>+++ b/pysim-testdata/Wavemobile-SIM.data</span><br><span>@@ -1,5 +1,5 @@</span><br><span> MCC=001</span><br><span> MNC=01</span><br><span> IMSI=001010000000102</span><br><span style="color: hsl(0, 100%, 40%);">-ADM=15E31383624FDC8A</span><br><span style="color: hsl(120, 100%, 40%);">+ADM_HEX=15E31383624FDC8A</span><br><span> </span><br><span>diff --git a/tests/Wavemobile-SIM.data.example b/tests/Wavemobile-SIM.data.example</span><br><span>index e9ba965..bdf2d65 100644</span><br><span>--- a/tests/Wavemobile-SIM.data.example</span><br><span>+++ b/tests/Wavemobile-SIM.data.example</span><br><span>@@ -1,5 +1,5 @@</span><br><span> MCC=001</span><br><span> MNC=01</span><br><span> IMSI=001010000000102</span><br><span style="color: hsl(0, 100%, 40%);">-ADM=0123456789ABCDEF</span><br><span style="color: hsl(120, 100%, 40%);">+ADM_HEX=0123456789ABCDEF</span><br><span> </span><br><span>diff --git a/tests/pysim-test.sh b/tests/pysim-test.sh</span><br><span>index 5af7a93..f97722d 100755</span><br><span>--- a/tests/pysim-test.sh</span><br><span>+++ b/tests/pysim-test.sh</span><br><span>@@ -156,9 +156,14 @@</span><br><span>     OPC=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF</span><br><span>         IMSI=001010000000001</span><br><span>         ADM=00000000</span><br><span style="color: hsl(120, 100%, 40%);">+  ADM_OPT="-a"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      . "$CARD_NAME.data"</span><br><span style="color: hsl(0, 100%, 40%);">-   python $PYSIM_PROG -p $I -t $CARD_NAME -o $OPC -k $KI -x $MCC -y $MNC -i $IMSI -s $ICCID -a $ADM</span><br><span style="color: hsl(120, 100%, 40%);">+      source "$CARD_NAME.data"</span><br><span style="color: hsl(120, 100%, 40%);">+    if [ -n "$ADM_HEX" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+          ADM_OPT="-A"</span><br><span style="color: hsl(120, 100%, 40%);">+                ADM=$ADM_HEX</span><br><span style="color: hsl(120, 100%, 40%);">+  fi</span><br><span style="color: hsl(120, 100%, 40%);">+    python $PYSIM_PROG -p $I -t $CARD_NAME -o $OPC -k $KI -x $MCC -y $MNC -i $IMSI -s $ICCID $ADM_OPT $ADM</span><br><span>       check_card $I $CARD_NAME</span><br><span>     echo ""</span><br><span>     done</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/pysim/+/15393">change 15393</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/pysim/+/15393"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: pysim </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Id75a03482aa7f8cc3bdbb8d5967f1e8ab45c179a </div>
<div style="display:none"> Gerrit-Change-Number: 15393 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>