svnno****@sourc*****
svnno****@sourc*****
2011年 3月 8日 (火) 10:00:58 JST
Revision: 4374 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4374 Author: doda Date: 2011-03-08 10:00:58 +0900 (Tue, 08 Mar 2011) Log Message: ----------- 鍵生成ダイアログの挙動を変更 ・ECDSA 鍵を選んだ時はビット数の入力ボックスを無効化するようにした ・ECDSA 鍵を選んだ後に RSA/DSA 鍵を選んだ時はビット数の値を元に戻すようにした Modified Paths: -------------- trunk/ttssh2/ttxssh/ssh.h trunk/ttssh2/ttxssh/ttxssh.c -------------- next part -------------- Modified: trunk/ttssh2/ttxssh/ssh.h =================================================================== --- trunk/ttssh2/ttxssh/ssh.h 2011-03-08 00:22:12 UTC (rev 4373) +++ trunk/ttssh2/ttxssh/ssh.h 2011-03-08 01:00:58 UTC (rev 4374) @@ -208,6 +208,7 @@ KEY_UNSPEC, KEY_MAX = KEY_UNSPEC, }; +#define isECDSAkey(type) ((type) >= KEY_ECDSA256 && (type) <= KEY_ECDSA521) typedef struct ssh2_host_key { enum ssh_keytype type; Modified: trunk/ttssh2/ttxssh/ttxssh.c =================================================================== --- trunk/ttssh2/ttxssh/ttxssh.c 2011-03-08 00:22:12 UTC (rev 4373) +++ trunk/ttssh2/ttxssh/ttxssh.c 2011-03-08 01:00:58 UTC (rev 4374) @@ -3606,6 +3606,7 @@ LPARAM lParam) { static enum ssh_keytype key_type; + static int saved_key_bits; char uimsg[MAX_UIMSG]; LOGFONT logfont; HFONT font; @@ -3670,6 +3671,7 @@ // default key type SendMessage(GetDlgItem(dlg, IDC_RSA_TYPE), BM_SETCHECK, BST_CHECKED, 0); key_type = KEY_RSA; + saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE); // default key bits SetDlgItemInt(dlg, IDC_KEYBITS, SSH_KEYGEN_DEFAULT_BITS, FALSE); @@ -3766,7 +3768,9 @@ EnableWindow(GetDlgItem(dlg, IDC_ECDSA256_TYPE), TRUE); EnableWindow(GetDlgItem(dlg, IDC_ECDSA384_TYPE), TRUE); EnableWindow(GetDlgItem(dlg, IDC_ECDSA521_TYPE), TRUE); - EnableWindow(GetDlgItem(dlg, IDC_KEYBITS), TRUE); + if (!isECDSAkey(key_type)) { + EnableWindow(GetDlgItem(dlg, IDC_KEYBITS), TRUE); + } EnableWindow(GetDlgItem(dlg, IDOK), TRUE); EnableWindow(GetDlgItem(dlg, IDCANCEL), TRUE); @@ -3787,28 +3791,52 @@ // if radio button pressed... case IDC_RSA1_TYPE | (BN_CLICKED << 16): + if (isECDSAkey(key_type)) { + EnableWindow(GetDlgItem(dlg, IDC_KEYBITS), TRUE); + SetDlgItemInt(dlg, IDC_KEYBITS, saved_key_bits, FALSE); + } key_type = KEY_RSA1; break; case IDC_RSA_TYPE | (BN_CLICKED << 16): + if (isECDSAkey(key_type)) { + EnableWindow(GetDlgItem(dlg, IDC_KEYBITS), TRUE); + SetDlgItemInt(dlg, IDC_KEYBITS, saved_key_bits, FALSE); + } key_type = KEY_RSA; break; case IDC_DSA_TYPE | (BN_CLICKED << 16): + if (isECDSAkey(key_type)) { + EnableWindow(GetDlgItem(dlg, IDC_KEYBITS), TRUE); + SetDlgItemInt(dlg, IDC_KEYBITS, saved_key_bits, FALSE); + } key_type = KEY_DSA; break; case IDC_ECDSA256_TYPE | (BN_CLICKED << 16): + if (!isECDSAkey(key_type)) { + EnableWindow(GetDlgItem(dlg, IDC_KEYBITS), FALSE); + saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE); + } key_type = KEY_ECDSA256; SetDlgItemInt(dlg, IDC_KEYBITS, 256, FALSE); break; case IDC_ECDSA384_TYPE | (BN_CLICKED << 16): + if (!isECDSAkey(key_type)) { + EnableWindow(GetDlgItem(dlg, IDC_KEYBITS), FALSE); + saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE); + } key_type = KEY_ECDSA384; SetDlgItemInt(dlg, IDC_KEYBITS, 384, FALSE); break; case IDC_ECDSA521_TYPE | (BN_CLICKED << 16): + if (!isECDSAkey(key_type)) { + EnableWindow(GetDlgItem(dlg, IDC_KEYBITS), FALSE); + saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE); + } key_type = KEY_ECDSA521; SetDlgItemInt(dlg, IDC_KEYBITS, 521, FALSE); break;