1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-25 01:02:24 +00:00

Add some basic framework code preparatory to adding key export.

[originally from svn r1675]
This commit is contained in:
Simon Tatham 2002-05-13 16:56:11 +00:00
parent 82d2d94d26
commit ed29fdc91c
3 changed files with 67 additions and 5 deletions

View File

@ -89,6 +89,29 @@ struct ssh2_userkey *import_ssh2(char *filename, int type, char *passphrase)
return NULL; 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.) * Helper routines. (The base64 ones are defined in sshpubk.c.)
*/ */

View File

@ -800,12 +800,39 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg,
} }
break; break;
case IDC_SAVE: case IDC_SAVE:
case IDC_EXPORT_OPENSSH:
case IDC_EXPORT_SSHCOM:
state = state =
(struct MainDlgState *) GetWindowLong(hwnd, GWL_USERDATA); (struct MainDlgState *) GetWindowLong(hwnd, GWL_USERDATA);
if (state->key_exists) { if (state->key_exists) {
char filename[FILENAME_MAX]; char filename[FILENAME_MAX];
char passphrase[PASSPHRASE_MAXLEN]; char passphrase[PASSPHRASE_MAXLEN];
char passphrase2[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, GetDlgItemText(hwnd, IDC_PASSPHRASE1EDIT,
passphrase, sizeof(passphrase)); passphrase, sizeof(passphrase));
GetDlgItemText(hwnd, IDC_PASSPHRASE2EDIT, GetDlgItemText(hwnd, IDC_PASSPHRASE2EDIT,
@ -840,13 +867,22 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg,
if (ret != IDYES) if (ret != IDYES)
break; break;
} }
if (state->ssh2) { if (state->ssh2) {
ret = ssh2_save_userkey(filename, &state->ssh2key, if (type != realtype)
*passphrase ? passphrase : ret = export_ssh2(filename, type, &state->ssh2key,
NULL); *passphrase ? passphrase : NULL);
else
ret = ssh2_save_userkey(filename, &state->ssh2key,
*passphrase ? passphrase :
NULL);
} else { } else {
ret = saversakey(filename, &state->key, if (type != realtype)
*passphrase ? passphrase : NULL); ret = export_ssh1(filename, type, &state->key,
*passphrase ? passphrase : NULL);
else
ret = saversakey(filename, &state->key,
*passphrase ? passphrase : NULL);
} }
if (ret <= 0) { if (ret <= 0) {
MessageBox(hwnd, "Unable to save key file", MessageBox(hwnd, "Unable to save key file",

3
ssh.h
View File

@ -311,6 +311,9 @@ int import_target_type(int type);
int import_encrypted(char *filename, int type, char **comment); int import_encrypted(char *filename, int type, char **comment);
int import_ssh1(char *filename, int type, struct RSAKey *key,char *passphrase); int import_ssh1(char *filename, int type, struct RSAKey *key,char *passphrase);
struct ssh2_userkey *import_ssh2(char *filename, int type, 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_decrypt_pubkey(unsigned char *key, unsigned char *blk, int len);
void des3_encrypt_pubkey(unsigned char *key, unsigned char *blk, int len); void des3_encrypt_pubkey(unsigned char *key, unsigned char *blk, int len);