Clear all keystrings when KDF DO is written.
authorNIIBE Yutaka <gniibe@fsij.org>
Tue, 3 Apr 2018 11:24:28 +0000 (20:24 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Tue, 3 Apr 2018 11:24:28 +0000 (20:24 +0900)
ChangeLog
src/openpgp-do.c
src/openpgp.c

index 157270a..1dfd927 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2018-04-03  NIIBE Yutaka  <gniibe@fsij.org>
 
+       * src/openpgp-do.c (rw_kdf): Clear all auth state.
+
        * tool/upgrade_by_passwd.py (main): Fix for byte compare.
        * tool/gnuk_remove_keys_libusb.py (main): Likewise.
 
index a235df3..437a205 100644 (file)
@@ -860,6 +860,14 @@ rw_kdf (uint16_t tag, int with_tag, const uint8_t *data, int len, int is_write)
       if (*do_data_p)
        flash_do_release (*do_data_p);
 
+      /* Clear all keystrings and auth states */
+      gpg_do_write_simple (NR_DO_KEYSTRING_PW1, NULL, 0);
+      gpg_do_write_simple (NR_DO_KEYSTRING_RC, NULL, 0);
+      gpg_do_write_simple (NR_DO_KEYSTRING_PW3, NULL, 0);
+      ac_reset_admin ();
+      ac_reset_pso_cds ();
+      ac_reset_other ();
+
       if (len == 0)
        {
          *do_data_p = NULL;
index 89402b3..aac7f93 100644 (file)
@@ -171,7 +171,8 @@ cmd_verify (void)
            r = ac_check_status (AC_ADMIN_AUTHORIZED);
 
          if (r)
-           GPG_SUCCESS ();     /* If authentication done already, return success.  */
+           /* If authentication done already, return success.  */
+           GPG_SUCCESS ();
          else
            {            /* If not, return retry counter, encoded.  */
              r = gpg_pw_get_retry_counter (p2);