| 191 |
|
|
| 192 |
ssh_heartbeat_lock_finalize(); |
ssh_heartbeat_lock_finalize(); |
| 193 |
|
|
| 194 |
EVP_CIPHER_CTX_free(pvar->evpcip[MODE_IN]); |
cipher_free_SSH2(pvar->evpcip[MODE_IN]); |
| 195 |
EVP_CIPHER_CTX_free(pvar->evpcip[MODE_OUT]); |
cipher_free_SSH2(pvar->evpcip[MODE_OUT]); |
| 196 |
} |
} |
| 197 |
|
|
| 198 |
static void PASCAL TTXInit(PTTSet ts, PComVar cv) |
static void PASCAL TTXInit(PTTSet ts, PComVar cv) |
| 645 |
|
|
| 646 |
// Remember password (2006.8.5 yutaka) |
// Remember password (2006.8.5 yutaka) |
| 647 |
WritePrivateProfileString("TTSSH", "RememberPassword", |
WritePrivateProfileString("TTSSH", "RememberPassword", |
| 648 |
settings->remember_password ? "1" : "0", |
settings->remember_password ? "1" : "0", |
| 649 |
fileName); |
fileName); |
| 650 |
|
|
| 651 |
// 初回の認証ダイアログでサポートされているメソッドをチェックし、 |
// 初回の認証ダイアログでサポートされているメソッドをチェックし、 |
| 652 |
// 無効なメソッドをグレイアウトする (2007.9.24 maya) |
// 無効なメソッドをグレイアウトする (2007.9.24 maya) |
| 1146 |
FWDUI_open(pvar); |
FWDUI_open(pvar); |
| 1147 |
|
|
| 1148 |
// 設定を myproposal に反映するのは、接続直前のここだけ。 (2006.6.26 maya) |
// 設定を myproposal に反映するのは、接続直前のここだけ。 (2006.6.26 maya) |
|
SSH2_update_cipher_myproposal(pvar); |
|
| 1149 |
SSH2_update_kex_myproposal(pvar); |
SSH2_update_kex_myproposal(pvar); |
| 1150 |
SSH2_update_host_key_myproposal(pvar); |
SSH2_update_host_key_myproposal(pvar); |
| 1151 |
|
SSH2_update_cipher_myproposal(pvar); |
| 1152 |
SSH2_update_hmac_myproposal(pvar); |
SSH2_update_hmac_myproposal(pvar); |
| 1153 |
SSH2_update_compression_myproposal(pvar); |
SSH2_update_compression_myproposal(pvar); |
| 1154 |
} |
} |
| 1652 |
static void UTIL_SetDialogFont() |
static void UTIL_SetDialogFont() |
| 1653 |
{ |
{ |
| 1654 |
SetDialogFont(pvar->ts->DialogFontName, pvar->ts->DialogFontPoint, pvar->ts->DialogFontCharSet, |
SetDialogFont(pvar->ts->DialogFontName, pvar->ts->DialogFontPoint, pvar->ts->DialogFontCharSet, |
| 1655 |
pvar->ts->UILanguageFile, "TTSSH", "DLG_TAHOMA_FONT"); |
pvar->ts->UILanguageFile, "TTSSH", "DLG_TAHOMA_FONT"); |
| 1656 |
} |
} |
| 1657 |
|
|
| 1658 |
static BOOL PASCAL TTXGetHostName(HWND parent, PGetHNRec rec) |
static BOOL PASCAL TTXGetHostName(HWND parent, PGetHNRec rec) |
| 1659 |
{ |
{ |
| 1660 |
SetDialogFont(pvar->ts->DialogFontName, pvar->ts->DialogFontPoint, pvar->ts->DialogFontCharSet, |
SetDialogFont(pvar->ts->DialogFontName, pvar->ts->DialogFontPoint, pvar->ts->DialogFontCharSet, |
| 1661 |
pvar->ts->UILanguageFile, "TTSSH", "DLG_SYSTEM_FONT"); |
pvar->ts->UILanguageFile, "TTSSH", "DLG_SYSTEM_FONT"); |
| 1662 |
return (BOOL) DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_HOSTDLG), |
return (BOOL) DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_HOSTDLG), |
| 1663 |
parent, TTXHostDlg, (LPARAM)rec); |
parent, TTXHostDlg, (LPARAM)rec); |
| 1664 |
} |
} |
| 2706 |
int index = pvar->settings.KexOrder[i] - '0'; |
int index = pvar->settings.KexOrder[i] - '0'; |
| 2707 |
char *name = NULL; |
char *name = NULL; |
| 2708 |
|
|
| 2709 |
if (index == 0) { |
if (index == 0) { |
| 2710 |
UTIL_get_lang_msg("DLG_SSHSETUP_KEX_BORDER", pvar, |
UTIL_get_lang_msg("DLG_SSHSETUP_KEX_BORDER", pvar, |
| 2711 |
"<KEXs below this line are disabled>"); |
"<KEXs below this line are disabled>"); |
| 2712 |
name = pvar->ts->UIMsg; |
name = pvar->ts->UIMsg; |
| 2713 |
} else { |
} else { |
| 2714 |
name = get_kex_algorithm_name(index); |
name = get_kex_algorithm_name(index); |
| 2727 |
int index = pvar->settings.HostKeyOrder[i] - '0'; |
int index = pvar->settings.HostKeyOrder[i] - '0'; |
| 2728 |
char *name = NULL; |
char *name = NULL; |
| 2729 |
|
|
| 2730 |
if (index == 0) { |
if (index == 0) { |
| 2731 |
UTIL_get_lang_msg("DLG_SSHSETUP_HOST_KEY_BORDER", pvar, |
UTIL_get_lang_msg("DLG_SSHSETUP_HOST_KEY_BORDER", pvar, |
| 2732 |
"<Host Keys below this line are disabled>"); |
"<Host Keys below this line are disabled>"); |
| 2733 |
name = pvar->ts->UIMsg; |
name = pvar->ts->UIMsg; |
| 2734 |
} else { |
} else { |
| 2735 |
name = get_ssh_keytype_name(index); |
name = get_ssh_keytype_name(index); |
| 2748 |
int index = pvar->settings.MacOrder[i] - '0'; |
int index = pvar->settings.MacOrder[i] - '0'; |
| 2749 |
char *name = NULL; |
char *name = NULL; |
| 2750 |
|
|
| 2751 |
if (index == 0) { |
if (index == 0) { |
| 2752 |
UTIL_get_lang_msg("DLG_SSHSETUP_MAC_BORDER", pvar, |
UTIL_get_lang_msg("DLG_SSHSETUP_MAC_BORDER", pvar, |
| 2753 |
"<MACs below this line are disabled>"); |
"<MACs below this line are disabled>"); |
| 2754 |
name = pvar->ts->UIMsg; |
name = pvar->ts->UIMsg; |
| 2755 |
} else { |
} else { |
| 2756 |
name = get_ssh2_mac_name_by_id(index); |
name = get_ssh2_mac_name_by_id(index); |
| 2769 |
int index = pvar->settings.CompOrder[i] - '0'; |
int index = pvar->settings.CompOrder[i] - '0'; |
| 2770 |
char *name = NULL; |
char *name = NULL; |
| 2771 |
|
|
| 2772 |
if (index == 0) { |
if (index == 0) { |
| 2773 |
UTIL_get_lang_msg("DLG_SSHSETUP_COMP_BORDER", pvar, |
UTIL_get_lang_msg("DLG_SSHSETUP_COMP_BORDER", pvar, |
| 2774 |
"<Compression methods below this line are disabled>"); |
"<Compression methods below this line are disabled>"); |
| 2775 |
name = pvar->ts->UIMsg; |
name = pvar->ts->UIMsg; |
| 2776 |
} else { |
} else { |
| 2777 |
name = get_ssh2_comp_name(index); |
name = get_ssh2_comp_name(index); |
| 3216 |
} |
} |
| 3217 |
|
|
| 3218 |
static INT_PTR CALLBACK TTXSetupDlg(HWND dlg, UINT msg, WPARAM wParam, |
static INT_PTR CALLBACK TTXSetupDlg(HWND dlg, UINT msg, WPARAM wParam, |
| 3219 |
LPARAM lParam) |
LPARAM lParam) |
| 3220 |
{ |
{ |
| 3221 |
switch (msg) { |
switch (msg) { |
| 3222 |
case WM_INITDIALOG: |
case WM_INITDIALOG: |
| 3585 |
else |
else |
| 3586 |
k1 += 16; |
k1 += 16; |
| 3587 |
} |
} |
|
EVP_CIPHER_CTX_init(c->k1); |
|
|
EVP_CIPHER_CTX_init(c->k2); |
|
|
EVP_CIPHER_CTX_init(c->k3); |
|
| 3588 |
if (EVP_CipherInit(c->k1, EVP_des_cbc(), k1, NULL, enc) == 0 || |
if (EVP_CipherInit(c->k1, EVP_des_cbc(), k1, NULL, enc) == 0 || |
| 3589 |
EVP_CipherInit(c->k2, EVP_des_cbc(), k2, NULL, !enc) == 0 || |
EVP_CipherInit(c->k2, EVP_des_cbc(), k2, NULL, !enc) == 0 || |
| 3590 |
EVP_CipherInit(c->k3, EVP_des_cbc(), k3, NULL, enc) == 0) { |
EVP_CipherInit(c->k3, EVP_des_cbc(), k3, NULL, enc) == 0) { |
| 3619 |
struct ssh1_3des_ctx *c; |
struct ssh1_3des_ctx *c; |
| 3620 |
|
|
| 3621 |
if ((c = EVP_CIPHER_CTX_get_app_data(ctx)) != NULL) { |
if ((c = EVP_CIPHER_CTX_get_app_data(ctx)) != NULL) { |
| 3622 |
EVP_CIPHER_CTX_cleanup(c->k1); |
EVP_CIPHER_CTX_free(c->k1); |
| 3623 |
EVP_CIPHER_CTX_cleanup(c->k2); |
EVP_CIPHER_CTX_free(c->k2); |
| 3624 |
EVP_CIPHER_CTX_cleanup(c->k3); |
EVP_CIPHER_CTX_free(c->k3); |
| 3625 |
SecureZeroMemory(c, sizeof(*c)); |
SecureZeroMemory(c, sizeof(*c)); |
| 3626 |
free(c); |
free(c); |
| 3627 |
EVP_CIPHER_CTX_set_app_data(ctx, NULL); |
EVP_CIPHER_CTX_set_app_data(ctx, NULL); |
| 4080 |
// 暗号化の準備 |
// 暗号化の準備 |
| 4081 |
// TODO: OpenSSH 6.5では -Z オプションで、暗号化アルゴリズムを指定可能だが、 |
// TODO: OpenSSH 6.5では -Z オプションで、暗号化アルゴリズムを指定可能だが、 |
| 4082 |
// ここでは"AES256-CBC"に固定とする。 |
// ここでは"AES256-CBC"に固定とする。 |
| 4083 |
cipher_init_SSH2(cipher_ctx, key, keylen, key + keylen, ivlen, CIPHER_ENCRYPT, |
cipher_init_SSH2(cipher_ctx, key, keylen, key + keylen, ivlen, CIPHER_ENCRYPT, |
| 4084 |
get_cipher_EVP_CIPHER(cipher), 0, 0, pvar); |
get_cipher_EVP_CIPHER(cipher), 0, 0, pvar); |
| 4085 |
SecureZeroMemory(key, keylen + ivlen); |
SecureZeroMemory(key, keylen + ivlen); |
| 4086 |
free(key); |
free(key); |
| 4087 |
|
|
| 4129 |
//free(decrypted); |
//free(decrypted); |
| 4130 |
//goto error; |
//goto error; |
| 4131 |
} |
} |
| 4132 |
cipher_cleanup_SSH2(cipher_ctx); |
cipher_free_SSH2(cipher_ctx); |
| 4133 |
|
|
| 4134 |
len = 2 * buffer_len(encoded); |
len = 2 * buffer_len(encoded); |
| 4135 |
cp = malloc(len); |
cp = malloc(len); |
| 4179 |
buffer_free(kdf); |
buffer_free(kdf); |
| 4180 |
buffer_free(encoded); |
buffer_free(encoded); |
| 4181 |
buffer_free(blob); |
buffer_free(blob); |
|
|
|
|
if (cipher_ctx) { |
|
|
EVP_CIPHER_CTX_free(cipher_ctx); |
|
|
} |
|
| 4182 |
} |
} |
| 4183 |
|
|
| 4184 |
static INT_PTR CALLBACK TTXKeyGenerator(HWND dlg, UINT msg, WPARAM wParam, |
static INT_PTR CALLBACK TTXKeyGenerator(HWND dlg, UINT msg, WPARAM wParam, |
| 4185 |
LPARAM lParam) |
LPARAM lParam) |
| 4186 |
{ |
{ |
| 4187 |
static ssh_keytype key_type; |
static ssh_keytype key_type; |
| 4188 |
static int saved_key_bits; |
static int saved_key_bits; |
| 4884 |
if (EVP_Cipher(cipher_ctx, wrapped, buffer_ptr(b), len) == 0) { |
if (EVP_Cipher(cipher_ctx, wrapped, buffer_ptr(b), len) == 0) { |
| 4885 |
goto error; |
goto error; |
| 4886 |
} |
} |
|
if (EVP_CIPHER_CTX_cleanup(cipher_ctx) == 0) { |
|
|
goto error; |
|
|
} |
|
| 4887 |
|
|
| 4888 |
buffer_append(enc, wrapped, len); |
buffer_append(enc, wrapped, len); |
| 4889 |
|
|
| 4904 |
error:; |
error:; |
| 4905 |
buffer_free(b); |
buffer_free(b); |
| 4906 |
buffer_free(enc); |
buffer_free(enc); |
| 4907 |
if (cipher_ctx) { |
cipher_free_SSH2(cipher_ctx); |
|
EVP_CIPHER_CTX_free(cipher_ctx); |
|
|
} |
|
| 4908 |
|
|
| 4909 |
} else if (private_key.type == KEY_ED25519) { // SSH2 ED25519 |
} else if (private_key.type == KEY_ED25519) { // SSH2 ED25519 |
| 4910 |
save_bcrypt_private_key(buf, filename, comment, dlg, pvar, rounds); |
save_bcrypt_private_key(buf, filename, comment, dlg, pvar, rounds); |
| 4911 |
|
|
| 4912 |
} else { // SSH2 RSA, DSA, ECDSA |
} else { // SSH2 RSA, DSA, ECDSA |
| 4913 |
int len; |
int len; |
| 4914 |
FILE *fp; |
FILE *fp; |
| 4915 |
const EVP_CIPHER *cipher; |
const EVP_CIPHER *cipher; |
| 5070 |
pvar->showing_err = TRUE; |
pvar->showing_err = TRUE; |
| 5071 |
pvar->err_msg = NULL; |
pvar->err_msg = NULL; |
| 5072 |
MessageBox(NULL, msg, "TTSSH", |
MessageBox(NULL, msg, "TTSSH", |
| 5073 |
MB_TASKMODAL | MB_ICONEXCLAMATION); |
MB_TASKMODAL | MB_ICONEXCLAMATION); |
| 5074 |
free(msg); |
free(msg); |
| 5075 |
pvar->showing_err = FALSE; |
pvar->showing_err = FALSE; |
| 5076 |
|
|