X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/23fc996adbb32bffe3e6f4fafff53cce8a4192eb..4801c01c8e197d334d6d8235d47ef2d7dd451579:/puttygen.c diff --git a/puttygen.c b/puttygen.c index e045c335..af2b1658 100644 --- a/puttygen.c +++ b/puttygen.c @@ -800,12 +800,39 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, } break; case IDC_SAVE: + case IDC_EXPORT_OPENSSH: + case IDC_EXPORT_SSHCOM: state = (struct MainDlgState *) GetWindowLong(hwnd, GWL_USERDATA); if (state->key_exists) { char filename[FILENAME_MAX]; char passphrase[PASSPHRASE_MAXLEN]; char passphrase2[PASSPHRASE_MAXLEN]; + int type, realtype; + + if (state->ssh2) + realtype = SSH_KEYTYPE_SSH2; + else + realtype = SSH_KEYTYPE_SSH1; + + if (LOWORD(wParam) == IDC_EXPORT_OPENSSH) + type = SSH_KEYTYPE_OPENSSH; + else if (LOWORD(wParam) == IDC_EXPORT_SSHCOM) + type = SSH_KEYTYPE_SSHCOM; + else + type = realtype; + + if (type != realtype && + import_target_type(type) != realtype) { + char msg[256]; + sprintf(msg, "Cannot export an SSH%d key in an SSH%d" + " format", (state->ssh2 ? 2 : 1), + (state->ssh2 ? 1 : 2)); + MessageBox(hwnd, msg, + "PuTTYgen Error", MB_OK | MB_ICONERROR); + break; + } + GetDlgItemText(hwnd, IDC_PASSPHRASE1EDIT, passphrase, sizeof(passphrase)); GetDlgItemText(hwnd, IDC_PASSPHRASE2EDIT, @@ -840,13 +867,22 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, if (ret != IDYES) break; } + if (state->ssh2) { - ret = ssh2_save_userkey(filename, &state->ssh2key, - *passphrase ? passphrase : - NULL); + if (type != realtype) + ret = export_ssh2(filename, type, &state->ssh2key, + *passphrase ? passphrase : NULL); + else + ret = ssh2_save_userkey(filename, &state->ssh2key, + *passphrase ? passphrase : + NULL); } else { - ret = saversakey(filename, &state->key, - *passphrase ? passphrase : NULL); + if (type != realtype) + ret = export_ssh1(filename, type, &state->key, + *passphrase ? passphrase : NULL); + else + ret = saversakey(filename, &state->key, + *passphrase ? passphrase : NULL); } if (ret <= 0) { MessageBox(hwnd, "Unable to save key file",