UI changes for key imports. We now have a separate Load command and
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 18 May 2002 09:20:41 +0000 (09:20 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 18 May 2002 09:20:41 +0000 (09:20 +0000)
Import command; the former warns you if you load a foreign key,
whereas the latter doesn't. So the user should always be aware, one
way or the other, that a format conversion is taking place.

git-svn-id: svn://svn.tartarus.org/sgt/putty@1687 cda61777-01e9-0310-a592-d414129be87e

doc/pubkey.but
puttygen.c

index ee277b0..e652320 100644 (file)
@@ -1,4 +1,4 @@
-\versionid $Id: pubkey.but,v 1.16 2002/05/16 22:36:36 jacob Exp $
+\versionid $Id: pubkey.but,v 1.17 2002/05/18 09:20:41 simon Exp $
 
 \C{pubkey} Using public keys for SSH authentication
 
@@ -330,17 +330,14 @@ find your key file. Once you select the file, PuTTYgen will ask you
 for a passphrase (if necessary) and will then display the key
 details in the same way as if it had just generated the key.
 
-PuTTYgen can also load SSH2 private keys in OpenSSH's format and
-\cw{ssh.com}'s format. Once you have loaded one of these key types,
-you can then save it back out as a PuTTY-format key so that you can
-use it with PuTTY. The passphrase will be unchanged by this process.
-You may want to change the key comment before you save the key,
-since OpenSSH's SSH2 key format contains no space for a comment and
-\cw{ssh.com}'s default comment format is long and verbose.
+If you use the Load command to load a foreign key format, it will
+work, but you will see a message box warning you that the key you
+have loaded is not a PuTTY native key. See \k{puttygen-conversions}
+for information about importing foreign key formats.
 
-\S{puttygen-export} Exporting your private key in an alternative format
+\S{puttygen-conversions} Dealing with private keys in other formats
 
-\cfg{winhelp-topic}{puttygen.export}
+\cfg{winhelp-topic}{puttygen.conversions}
 
 Most SSH1 clients use a standard format for storing private keys on
 disk. PuTTY uses this format as well; so if you have generated an
@@ -352,15 +349,25 @@ However, SSH2 private keys have no standard format. OpenSSH and
 So a key generated with one client cannot immediately be used with
 another.
 
-PuTTYgen has the ability to export private keys in OpenSSH format,
-or in \cw{ssh.com} format. To do so, select an option from the
-\q{Export} menu at the top of the PuTTYgen window. Exporting a key
-works exactly like saving it (see \k{puttygen-savepriv}) - you need
-to have typed your passphrase in beforehand, and you will be warned
-if you are about to save a key without a passphrase.
-
-Note that the export options are only available if you have
-generated an SSH2 key.
+Using the \q{Import} command from the \q{Conversions} menu, PuTTYgen
+can load SSH2 private keys in OpenSSH's format and \cw{ssh.com}'s
+format. Once you have loaded one of these key types, you can then
+save it back out as a PuTTY-format key so that you can use it with
+PuTTY. The passphrase will be unchanged by this process (unless you
+deliberately change it). You may want to change the key comment
+before you save the key, since OpenSSH's SSH2 key format contains no
+space for a comment and \cw{ssh.com}'s default comment format is
+long and verbose.
+
+PuTTYgen can also export private keys in OpenSSH format and in
+\cw{ssh.com} format. To do so, select one of the \q{Export} options
+from the \q{Conversions} menu. Exporting a key works exactly like
+saving it (see \k{puttygen-savepriv}) - you need to have typed your
+passphrase in beforehand, and you will be warned if you are about to
+save a key without a passphrase.
+
+Note that since only SSH2 keys come in different formats, the export
+options are not available if you have generated an SSH1 key.
 
 \H{pubkey-gettingready} Getting ready for public key authentication
 
index be7a2b9..2d58975 100644 (file)
@@ -332,7 +332,7 @@ struct MainDlgState {
     unsigned *entropy;
     struct RSAKey key;
     struct dss_key dsskey;
-    HMENU filemenu, keymenu, exportmenu;
+    HMENU filemenu, keymenu, cvtmenu;
 };
 
 static void hidemany(HWND hwnd, const int *ids, int hideit)
@@ -539,9 +539,10 @@ void ui_set_state(HWND hwnd, struct MainDlgState *state, int status)
        EnableMenuItem(state->keymenu, IDC_KEYSSH1, MF_ENABLED|MF_BYCOMMAND);
        EnableMenuItem(state->keymenu, IDC_KEYSSH2RSA, MF_ENABLED|MF_BYCOMMAND);
        EnableMenuItem(state->keymenu, IDC_KEYSSH2DSA, MF_ENABLED|MF_BYCOMMAND);
-       EnableMenuItem(state->exportmenu, IDC_EXPORT_OPENSSH,
+       EnableMenuItem(state->cvtmenu, IDC_IMPORT, MF_ENABLED|MF_BYCOMMAND);
+       EnableMenuItem(state->cvtmenu, IDC_EXPORT_OPENSSH,
                       MF_GRAYED|MF_BYCOMMAND);
-       EnableMenuItem(state->exportmenu, IDC_EXPORT_SSHCOM,
+       EnableMenuItem(state->cvtmenu, IDC_EXPORT_SSHCOM,
                       MF_GRAYED|MF_BYCOMMAND);
        break;
       case 1:                         /* generating key */
@@ -563,9 +564,10 @@ void ui_set_state(HWND hwnd, struct MainDlgState *state, int status)
        EnableMenuItem(state->keymenu, IDC_KEYSSH1, MF_GRAYED|MF_BYCOMMAND);
        EnableMenuItem(state->keymenu, IDC_KEYSSH2RSA, MF_GRAYED|MF_BYCOMMAND);
        EnableMenuItem(state->keymenu, IDC_KEYSSH2DSA, MF_GRAYED|MF_BYCOMMAND);
-       EnableMenuItem(state->exportmenu, IDC_EXPORT_OPENSSH,
+       EnableMenuItem(state->cvtmenu, IDC_IMPORT, MF_GRAYED|MF_BYCOMMAND);
+       EnableMenuItem(state->cvtmenu, IDC_EXPORT_OPENSSH,
                       MF_GRAYED|MF_BYCOMMAND);
-       EnableMenuItem(state->exportmenu, IDC_EXPORT_SSHCOM,
+       EnableMenuItem(state->cvtmenu, IDC_EXPORT_SSHCOM,
                       MF_GRAYED|MF_BYCOMMAND);
        break;
       case 2:
@@ -587,13 +589,14 @@ void ui_set_state(HWND hwnd, struct MainDlgState *state, int status)
        EnableMenuItem(state->keymenu, IDC_KEYSSH1, MF_ENABLED|MF_BYCOMMAND);
        EnableMenuItem(state->keymenu, IDC_KEYSSH2RSA,MF_ENABLED|MF_BYCOMMAND);
        EnableMenuItem(state->keymenu, IDC_KEYSSH2DSA,MF_ENABLED|MF_BYCOMMAND);
+       EnableMenuItem(state->cvtmenu, IDC_IMPORT, MF_ENABLED|MF_BYCOMMAND);
        /*
         * Enable export menu items if and only if the key type
         * supports this kind of export.
         */
        type = state->ssh2 ? SSH_KEYTYPE_SSH2 : SSH_KEYTYPE_SSH1;
 #define do_export_menuitem(x,y) \
-    EnableMenuItem(state->exportmenu, x, MF_BYCOMMAND | \
+    EnableMenuItem(state->cvtmenu, x, MF_BYCOMMAND | \
                       (import_target_type(y)==type?MF_ENABLED:MF_GRAYED))
        do_export_menuitem(IDC_EXPORT_OPENSSH, SSH_KEYTYPE_OPENSSH);
        do_export_menuitem(IDC_EXPORT_SSHCOM, SSH_KEYTYPE_SSHCOM);
@@ -657,13 +660,15 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg,
            state->keymenu = menu1;
 
            menu1 = CreateMenu();
+           AppendMenu(menu1, MF_ENABLED, IDC_IMPORT, "&Import key");
+           AppendMenu(menu1, MF_SEPARATOR, 0, 0);
            AppendMenu(menu1, MF_ENABLED, IDC_EXPORT_OPENSSH,
                       "Export &OpenSSH key");
            AppendMenu(menu1, MF_ENABLED, IDC_EXPORT_SSHCOM,
                       "Export &ssh.com key");
            AppendMenu(menu, MF_POPUP | MF_ENABLED, (UINT) menu1,
-                      "&Export");
-           state->exportmenu = menu1;
+                      "&Conversions");
+           state->cvtmenu = menu1;
 
            menu1 = CreateMenu();
            AppendMenu(menu1, MF_ENABLED, IDC_ABOUT, "&About");
@@ -1024,6 +1029,7 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg,
            }
            break;
          case IDC_LOAD:
+         case IDC_IMPORT:
            state =
                (struct MainDlgState *) GetWindowLong(hwnd, GWL_USERDATA);
            if (!state->generation_thread_exists) {
@@ -1174,6 +1180,24 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg,
                         */
                        ui_set_state(hwnd, state, 2);
                        state->key_exists = TRUE;
+
+                       /*
+                        * If the user has imported a foreign key
+                        * using the Load command, let them know.
+                        * If they've used the Import command, be
+                        * silent.
+                        */
+                       if (realtype != type && LOWORD(wParam) == IDC_LOAD) {
+                           char msg[512];
+                           sprintf(msg, "Successfully imported foreign key\n"
+                                   "(%s).\n"
+                                   "To use this key with PuTTY, you need to\n"
+                                   "use the \"Save private key\" command to\n"
+                                   "save it in PuTTY's own format.",
+                                   key_type_to_str(realtype));
+                           MessageBox(NULL, msg, "PuTTYgen Notice",
+                                      MB_OK | MB_ICONINFORMATION);
+                       }
                    }
                }
            }
@@ -1307,9 +1331,10 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg,
               case IDC_BITSSTATIC:
               case IDC_BITS:
                 cmd = "JI(`',`puttygen.bits')"; break;
+              case IDC_IMPORT:
               case IDC_EXPORT_OPENSSH:
               case IDC_EXPORT_SSHCOM:
-                cmd = "JI(`',`puttygen.export')"; break;
+                cmd = "JI(`',`puttygen.conversions')"; break;
             }
             if (cmd) {
                 WinHelp(hwnd, help_path, HELP_COMMAND, (DWORD)cmd);