-\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
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
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
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)
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 */
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:
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);
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");
}
break;
case IDC_LOAD:
+ case IDC_IMPORT:
state =
(struct MainDlgState *) GetWindowLong(hwnd, GWL_USERDATA);
if (!state->generation_thread_exists) {
*/
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);
+ }
}
}
}
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);