From b723338c7d5a7f5929ef742c4b002e65ed5dc5ed Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 18 May 2002 09:20:41 +0000 Subject: [PATCH] UI changes for key imports. We now have a separate Load command and 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 | 45 ++++++++++++++++++++++++++------------------- puttygen.c | 43 ++++++++++++++++++++++++++++++++++--------- 2 files changed, 60 insertions(+), 28 deletions(-) diff --git a/doc/pubkey.but b/doc/pubkey.but index ee277b09..e6523201 100644 --- a/doc/pubkey.but +++ b/doc/pubkey.but @@ -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 diff --git a/puttygen.c b/puttygen.c index be7a2b90..2d589759 100644 --- a/puttygen.c +++ b/puttygen.c @@ -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); -- 2.11.0