return NULL;
}
+/*
+ * Export an SSH1 key.
+ */
+int export_ssh1(char *filename, int type, struct RSAKey *key, char *passphrase)
+{
+ return 0;
+}
+
+/*
+ * Export an SSH2 key.
+ */
+int export_ssh2(char *filename, int type,
+ struct ssh2_userkey *key, char *passphrase)
+{
+#if 0
+ if (type == SSH_KEYTYPE_OPENSSH)
+ return openssh_write(filename, key, passphrase);
+ if (type == SSH_KEYTYPE_SSHCOM)
+ return sshcom_write(filename, key, passphrase);
+#endif
+ return 0;
+}
+
/* ----------------------------------------------------------------------
* Helper routines. (The base64 ones are defined in sshpubk.c.)
*/
}
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,
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",
int import_encrypted(char *filename, int type, char **comment);
int import_ssh1(char *filename, int type, struct RSAKey *key,char *passphrase);
struct ssh2_userkey *import_ssh2(char *filename, int type, char *passphrase);
+int export_ssh1(char *filename, int type, struct RSAKey *key,char *passphrase);
+int export_ssh2(char *filename, int type,
+ struct ssh2_userkey *key, char *passphrase);
void des3_decrypt_pubkey(unsigned char *key, unsigned char *blk, int len);
void des3_encrypt_pubkey(unsigned char *key, unsigned char *blk, int len);