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:
parent
82d2d94d26
commit
ed29fdc91c
23
import.c
23
import.c
@ -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.)
|
||||||
*/
|
*/
|
||||||
|
46
puttygen.c
46
puttygen.c
@ -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
3
ssh.h
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user