| 2656 |
typedef struct { |
typedef struct { |
| 2657 |
RSA *rsa; |
RSA *rsa; |
| 2658 |
DSA *dsa; |
DSA *dsa; |
| 2659 |
|
enum hostkey_type type; |
| 2660 |
} ssh_private_key_t; |
} ssh_private_key_t; |
| 2661 |
|
|
| 2662 |
static ssh_private_key_t private_key = {NULL, NULL}; |
static ssh_private_key_t private_key = {NULL, NULL, KEY_UNSPEC}; |
| 2663 |
|
|
| 2664 |
typedef struct { |
typedef struct { |
| 2665 |
RSA *rsa; |
RSA *rsa; |
| 2666 |
DSA *dsa; |
DSA *dsa; |
| 2667 |
|
enum hostkey_type type; |
| 2668 |
} ssh_public_key_t; |
} ssh_public_key_t; |
| 2669 |
|
|
| 2670 |
static ssh_public_key_t public_key = {NULL, NULL};; |
static ssh_public_key_t public_key = {NULL, NULL, KEY_UNSPEC}; |
| 2671 |
|
|
| 2672 |
static void free_ssh_key(void) |
static void free_ssh_key(void) |
| 2673 |
{ |
{ |
| 2681 |
private_key.rsa = NULL; |
private_key.rsa = NULL; |
| 2682 |
RSA_free(public_key.rsa); |
RSA_free(public_key.rsa); |
| 2683 |
public_key.rsa = NULL; |
public_key.rsa = NULL; |
| 2684 |
|
|
| 2685 |
|
private_key.type = KEY_UNSPEC; |
| 2686 |
|
public_key.type = KEY_UNSPEC; |
| 2687 |
} |
} |
| 2688 |
|
|
| 2689 |
static BOOL generate_ssh_key(enum hostkey_type type, int bits, void (*cbfunc)(int, int, void *), void *cbarg) |
static BOOL generate_ssh_key(enum hostkey_type type, int bits, void (*cbfunc)(int, int, void *), void *cbarg) |
| 2751 |
goto error; |
goto error; |
| 2752 |
} |
} |
| 2753 |
|
|
| 2754 |
|
private_key.type = type; |
| 2755 |
|
public_key.type = type; |
| 2756 |
|
|
| 2757 |
return TRUE; |
return TRUE; |
| 2758 |
|
|
| 2759 |
error: |
error: |
| 3386 |
ZeroMemory(&ofn, sizeof(ofn)); |
ZeroMemory(&ofn, sizeof(ofn)); |
| 3387 |
ofn.lStructSize = sizeof(ofn); |
ofn.lStructSize = sizeof(ofn); |
| 3388 |
ofn.hwndOwner = dlg; |
ofn.hwndOwner = dlg; |
| 3389 |
if (key_type == KEY_RSA1) { |
if (public_key.type == KEY_RSA1) { |
| 3390 |
UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_RSA1_FILTER", pvar, |
UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_RSA1_FILTER", pvar, |
| 3391 |
"SSH1 RSA key(identity.pub)\\0identity.pub\\0All Files(*.*)\\0*.*\\0\\0"); |
"SSH1 RSA key(identity.pub)\\0identity.pub\\0All Files(*.*)\\0*.*\\0\\0"); |
| 3392 |
memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); |
memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); |
| 3393 |
ofn.lpstrFilter = uimsg; |
ofn.lpstrFilter = uimsg; |
| 3394 |
strncpy_s(filename, sizeof(filename), "identity.pub", _TRUNCATE); |
strncpy_s(filename, sizeof(filename), "identity.pub", _TRUNCATE); |
| 3395 |
} else if (key_type == KEY_RSA) { |
} else if (public_key.type == KEY_RSA) { |
| 3396 |
UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_RSA_FILTER", pvar, |
UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_RSA_FILTER", pvar, |
| 3397 |
"SSH2 RSA key(id_rsa.pub)\\0id_rsa.pub\\0All Files(*.*)\\0*.*\\0\\0"); |
"SSH2 RSA key(id_rsa.pub)\\0id_rsa.pub\\0All Files(*.*)\\0*.*\\0\\0"); |
| 3398 |
memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); |
memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); |
| 3428 |
break; |
break; |
| 3429 |
} |
} |
| 3430 |
|
|
| 3431 |
if (key_type == KEY_RSA1) { // SSH1 RSA |
if (public_key.type == KEY_RSA1) { // SSH1 RSA |
| 3432 |
RSA *rsa = public_key.rsa; |
RSA *rsa = public_key.rsa; |
| 3433 |
int bits; |
int bits; |
| 3434 |
char *buf; |
char *buf; |
| 3458 |
if (b == NULL) |
if (b == NULL) |
| 3459 |
goto public_error; |
goto public_error; |
| 3460 |
|
|
| 3461 |
if (key_type == KEY_DSA) { // DSA |
if (public_key.type == KEY_DSA) { // DSA |
| 3462 |
keyname = "ssh-dss"; |
keyname = "ssh-dss"; |
| 3463 |
buffer_put_string(b, keyname, strlen(keyname)); |
buffer_put_string(b, keyname, strlen(keyname)); |
| 3464 |
buffer_put_bignum2(b, dsa->p); |
buffer_put_bignum2(b, dsa->p); |
| 3538 |
ZeroMemory(&ofn, sizeof(ofn)); |
ZeroMemory(&ofn, sizeof(ofn)); |
| 3539 |
ofn.lStructSize = sizeof(ofn); |
ofn.lStructSize = sizeof(ofn); |
| 3540 |
ofn.hwndOwner = dlg; |
ofn.hwndOwner = dlg; |
| 3541 |
if (key_type == KEY_RSA1) { |
if (private_key.type == KEY_RSA1) { |
| 3542 |
UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_RSA1_FILTER", pvar, |
UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_RSA1_FILTER", pvar, |
| 3543 |
"SSH1 RSA key(identity)\\0identity\\0All Files(*.*)\\0*.*\\0\\0"); |
"SSH1 RSA key(identity)\\0identity\\0All Files(*.*)\\0*.*\\0\\0"); |
| 3544 |
memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); |
memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); |
| 3545 |
ofn.lpstrFilter = uimsg; |
ofn.lpstrFilter = uimsg; |
| 3546 |
strncpy_s(filename, sizeof(filename), "identity", _TRUNCATE); |
strncpy_s(filename, sizeof(filename), "identity", _TRUNCATE); |
| 3547 |
} else if (key_type == KEY_RSA) { |
} else if (private_key.type == KEY_RSA) { |
| 3548 |
UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_RSA_FILTER", pvar, |
UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_RSA_FILTER", pvar, |
| 3549 |
"SSH2 RSA key(id_rsa)\\0id_rsa\\0All Files(*.*)\\0*.*\\0\\0"); |
"SSH2 RSA key(id_rsa)\\0id_rsa\\0All Files(*.*)\\0*.*\\0\\0"); |
| 3550 |
memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); |
memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); |
| 3568 |
} |
} |
| 3569 |
|
|
| 3570 |
// saving private key file |
// saving private key file |
| 3571 |
if (key_type == KEY_RSA1) { // SSH1 RSA |
if (private_key.type == KEY_RSA1) { // SSH1 RSA |
| 3572 |
int cipher_num; |
int cipher_num; |
| 3573 |
buffer_t *b, *enc; |
buffer_t *b, *enc; |
| 3574 |
unsigned int rnd; |
unsigned int rnd; |