Catch exception, when no KDF data is found
authorSzczepan Zalega <szczepan@nitrokey.com>
Wed, 4 Jul 2018 12:14:07 +0000 (14:14 +0200)
committerNIIBE Yutaka <gniibe@fsij.org>
Fri, 13 Jul 2018 07:23:58 +0000 (16:23 +0900)
While updating from GNUK 1.2.6, upgrade_by_passwd.py script shows
exception about not found referenced data:
  File "./upgrade_by_passwd.py", line 55, in main
    kdf_data = gnuk.cmd_get_data(0x00, 0xf9).tostring()
  File "/home/sz/work/nitrokey-start-firmware/tool/gnuk_token.py", line 320, in cmd_get_data
    raise ValueError("%02x%02x" % (sw[0], sw[1]))
ValueError: 6a88

While it is checked, whether the KDF DO is empty, there is no
exception catch for not found object. This patch adds it.
Tested update paths 1.2.6 -> 1.2.10, 1.2.6 -> 1.2.6, 1.2.10 -> 1.2.10, 1.2.10 -> 1.2.6.

Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
tool/upgrade_by_passwd.py

index 3e038b5..bc185bb 100755 (executable)
@@ -51,7 +51,10 @@ def main(wait_e, keyno, passwd, data_regnual, data_upgrade):
     gnuk = get_gnuk_device()
     gnuk.cmd_select_openpgp()
     # Compute passwd data
-    kdf_data = gnuk.cmd_get_data(0x00, 0xf9).tostring()
+    try:
+        kdf_data = gnuk.cmd_get_data(0x00, 0xf9).tostring()
+    except:
+        kdf_data = b""
     if kdf_data == b"":
         passwd_data = passwd.encode('UTF-8')
     else: