Develop and Download Open Source Software

Browse Subversion Repository

Diff of /branches/ssh_chacha20poly1305/ttssh2/ttxssh/ttxssh.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 5764 by maya, Fri Jan 23 06:02:15 2015 UTC revision 5765 by maya, Fri Jan 23 08:47:39 2015 UTC
# Line 4182  static void init_password_control(HWND d Line 4182  static void init_password_control(HWND d
4182    
4183  // bcrypt KDF形式で秘密鍵を保存する  // bcrypt KDF形式で秘密鍵を保存する
4184  // based on OpenSSH 6.5:key_save_private(), key_private_to_blob2()  // based on OpenSSH 6.5:key_save_private(), key_private_to_blob2()
4185  static void save_bcrypt_private_key(char *passphrase, char *filename, char *comment, HWND dlg, PTInstVar pvar)  static void save_bcrypt_private_key(char *passphrase, char *filename, char *comment, HWND dlg, PTInstVar pvar, int rounds)
4186  {  {
4187          SSHCipher ciphernameval = SSH_CIPHER_NONE;          SSHCipher ciphernameval = SSH_CIPHER_NONE;
4188          char *ciphername = DEFAULT_CIPHERNAME;          char *ciphername = DEFAULT_CIPHERNAME;
         int rounds = DEFAULT_ROUNDS;  
4189          buffer_t *b = NULL;          buffer_t *b = NULL;
4190          buffer_t *kdf = NULL;          buffer_t *kdf = NULL;
4191          buffer_t *encoded = NULL;          buffer_t *encoded = NULL;
# Line 4371  static BOOL CALLBACK TTXKeyGenerator(HWN Line 4370  static BOOL CALLBACK TTXKeyGenerator(HWN
4370                  UTIL_get_lang_msg("BTN_CLOSE", pvar, uimsg);                  UTIL_get_lang_msg("BTN_CLOSE", pvar, uimsg);
4371                  SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);                  SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg);
4372                  GetDlgItemText(dlg, IDC_BCRYPT_KDF_CHECK, uimsg, sizeof(uimsg));                  GetDlgItemText(dlg, IDC_BCRYPT_KDF_CHECK, uimsg, sizeof(uimsg));
4373                  UTIL_get_lang_msg("DLG_BCRYPT_KDF", pvar, uimsg);                  UTIL_get_lang_msg("DLG_KEYGEN_BCRYPT_KDF", pvar, uimsg);
4374                  SetDlgItemText(dlg, IDC_BCRYPT_KDF_CHECK, pvar->ts->UIMsg);                  SetDlgItemText(dlg, IDC_BCRYPT_KDF_CHECK, pvar->ts->UIMsg);
4375                    GetDlgItemText(dlg, IDC_BCRYPT_KDF_ROUNDS_LABEL, uimsg, sizeof(uimsg));
4376                    UTIL_get_lang_msg("DLG_KEYGEN_BCRYPT_ROUNDS", pvar, uimsg);
4377                    SetDlgItemText(dlg, IDC_BCRYPT_KDF_ROUNDS_LABEL, pvar->ts->UIMsg);
4378    
4379                  font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);                  font = (HFONT)SendMessage(dlg, WM_GETFONT, 0, 0);
4380                  GetObject(font, sizeof(LOGFONT), &logfont);                  GetObject(font, sizeof(LOGFONT), &logfont);
# Line 4399  static BOOL CALLBACK TTXKeyGenerator(HWN Line 4401  static BOOL CALLBACK TTXKeyGenerator(HWN
4401                          SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0));                          SendDlgItemMessage(dlg, IDOK, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0));
4402                          SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0));                          SendDlgItemMessage(dlg, IDCANCEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0));
4403                          SendDlgItemMessage(dlg, IDC_BCRYPT_KDF_CHECK, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0));                          SendDlgItemMessage(dlg, IDC_BCRYPT_KDF_CHECK, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0));
4404                            SendDlgItemMessage(dlg, IDC_BCRYPT_KDF_ROUNDS_LABEL, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0));
4405                            SendDlgItemMessage(dlg, IDC_BCRYPT_KDF_ROUNDS, WM_SETFONT, (WPARAM)DlgKeygenFont, MAKELPARAM(TRUE,0));
4406                  }                  }
4407                  else {                  else {
4408                          DlgHostFont = NULL;                          DlgHostFont = NULL;
# Line 4429  static BOOL CALLBACK TTXKeyGenerator(HWN Line 4433  static BOOL CALLBACK TTXKeyGenerator(HWN
4433    
4434                  // default bcrypt KDF                  // default bcrypt KDF
4435                  EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), TRUE);                  EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), TRUE);
4436                    EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), FALSE);
4437                    SetDlgItemInt(dlg, IDC_BCRYPT_KDF_ROUNDS, DEFAULT_ROUNDS, FALSE);
4438                    SendDlgItemMessage(dlg, IDC_BCRYPT_KDF_ROUNDS, EM_LIMITTEXT, 4, 0);
4439    
4440                  }                  }
4441                  return TRUE;                  return TRUE;
# Line 4555  static BOOL CALLBACK TTXKeyGenerator(HWN Line 4562  static BOOL CALLBACK TTXKeyGenerator(HWN
4562                          }                          }
4563                          SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_SETCHECK, BST_UNCHECKED, 0);                          SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_SETCHECK, BST_UNCHECKED, 0);
4564                          EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), FALSE);                          EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), FALSE);
4565                            EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), FALSE);
4566                          key_type = KEY_RSA1;                          key_type = KEY_RSA1;
4567                          break;                          break;
4568    
# Line 4564  static BOOL CALLBACK TTXKeyGenerator(HWN Line 4572  static BOOL CALLBACK TTXKeyGenerator(HWN
4572                                  SetDlgItemInt(dlg, IDC_KEYBITS, saved_key_bits, FALSE);                                  SetDlgItemInt(dlg, IDC_KEYBITS, saved_key_bits, FALSE);
4573                          }                          }
4574                          EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), TRUE);                          EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), TRUE);
4575                            if (SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_GETCHECK, 0, 0) == BST_CHECKED) {
4576                                    EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), TRUE);
4577                            }
4578                            else {
4579                                    EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), FALSE);
4580                            }
4581                          key_type = KEY_RSA;                          key_type = KEY_RSA;
4582                          break;                          break;
4583    
# Line 4573  static BOOL CALLBACK TTXKeyGenerator(HWN Line 4587  static BOOL CALLBACK TTXKeyGenerator(HWN
4587                                  saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE);                                  saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE);
4588                          }                          }
4589                          EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), TRUE);                          EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), TRUE);
4590                            if (SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_GETCHECK, 0, 0) == BST_CHECKED) {
4591                                    EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), TRUE);
4592                            }
4593                            else {
4594                                    EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), FALSE);
4595                            }
4596                          key_type = KEY_DSA;                          key_type = KEY_DSA;
4597                          SetDlgItemInt(dlg, IDC_KEYBITS, 1024, FALSE);                          SetDlgItemInt(dlg, IDC_KEYBITS, 1024, FALSE);
4598                          break;                          break;
# Line 4583  static BOOL CALLBACK TTXKeyGenerator(HWN Line 4603  static BOOL CALLBACK TTXKeyGenerator(HWN
4603                                  saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE);                                  saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE);
4604                          }                          }
4605                          EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), TRUE);                          EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), TRUE);
4606                            if (SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_GETCHECK, 0, 0) == BST_CHECKED) {
4607                                    EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), TRUE);
4608                            }
4609                            else {
4610                                    EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), FALSE);
4611                            }
4612                          key_type = KEY_ECDSA256;                          key_type = KEY_ECDSA256;
4613                          SetDlgItemInt(dlg, IDC_KEYBITS, 256, FALSE);                          SetDlgItemInt(dlg, IDC_KEYBITS, 256, FALSE);
4614                          break;                          break;
# Line 4593  static BOOL CALLBACK TTXKeyGenerator(HWN Line 4619  static BOOL CALLBACK TTXKeyGenerator(HWN
4619                                  saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE);                                  saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE);
4620                          }                          }
4621                          EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), TRUE);                          EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), TRUE);
4622                            if (SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_GETCHECK, 0, 0) == BST_CHECKED) {
4623                                    EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), TRUE);
4624                            }
4625                            else {
4626                                    EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), FALSE);
4627                            }
4628                          key_type = KEY_ECDSA384;                          key_type = KEY_ECDSA384;
4629                          SetDlgItemInt(dlg, IDC_KEYBITS, 384, FALSE);                          SetDlgItemInt(dlg, IDC_KEYBITS, 384, FALSE);
4630                          break;                          break;
# Line 4603  static BOOL CALLBACK TTXKeyGenerator(HWN Line 4635  static BOOL CALLBACK TTXKeyGenerator(HWN
4635                                  saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE);                                  saved_key_bits = GetDlgItemInt(dlg, IDC_KEYBITS, NULL, FALSE);
4636                          }                          }
4637                          EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), TRUE);                          EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), TRUE);
4638                            if (SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_GETCHECK, 0, 0) == BST_CHECKED) {
4639                                    EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), TRUE);
4640                            }
4641                            else {
4642                                    EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), FALSE);
4643                            }
4644                          key_type = KEY_ECDSA521;                          key_type = KEY_ECDSA521;
4645                          SetDlgItemInt(dlg, IDC_KEYBITS, 521, FALSE);                          SetDlgItemInt(dlg, IDC_KEYBITS, 521, FALSE);
4646                          break;                          break;
# Line 4615  static BOOL CALLBACK TTXKeyGenerator(HWN Line 4653  static BOOL CALLBACK TTXKeyGenerator(HWN
4653                          }                          }
4654                          SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_SETCHECK, BST_CHECKED, 0);                          SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_SETCHECK, BST_CHECKED, 0);
4655                          EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), FALSE);                          EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), FALSE);
4656                            EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), TRUE);
4657                          key_type = KEY_ED25519;                          key_type = KEY_ED25519;
4658                          SetDlgItemInt(dlg, IDC_KEYBITS, 256, FALSE);                          SetDlgItemInt(dlg, IDC_KEYBITS, 256, FALSE);
4659                          break;                          break;
4660    
4661                    case IDC_BCRYPT_KDF_CHECK | (BN_CLICKED << 16):
4662                            if (SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_GETCHECK, 0, 0) == BST_CHECKED) {
4663                                    EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), TRUE);
4664                            }
4665                            else {
4666                                    EnableWindow(GetDlgItem(dlg, IDC_BCRYPT_KDF_ROUNDS), FALSE);
4667                            }
4668                            break;
4669    
4670                  // saving public key file                  // saving public key file
4671                  case IDC_SAVE_PUBLIC_KEY:                  case IDC_SAVE_PUBLIC_KEY:
4672                          {                          {
# Line 4795  public_error: Line 4843  public_error:
4843                  case IDC_SAVE_PRIVATE_KEY:                  case IDC_SAVE_PRIVATE_KEY:
4844                          {                          {
4845                          char buf[1024], buf_conf[1024];  // passphrase                          char buf[1024], buf_conf[1024];  // passphrase
4846                          int ret;                          int ret, rounds;
4847                          OPENFILENAME ofn;                          OPENFILENAME ofn;
4848                          char filename[MAX_PATH];                          char filename[MAX_PATH];
4849                          char comment[1024]; // comment string in private key                          char comment[1024]; // comment string in private key
# Line 4825  public_error: Line 4873  public_error:
4873                                          break;                                          break;
4874                          }                          }
4875    
4876                            // number of rounds
4877                            if (SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_GETCHECK, 0, 0) == BST_CHECKED) {
4878                                    rounds = GetDlgItemInt(dlg, IDC_BCRYPT_KDF_ROUNDS, NULL, FALSE);
4879                                    if (rounds < SSH_KEYGEN_MINIMUM_ROUNDS) {
4880                                            UTIL_get_lang_msg("MSG_BCRYPT_ROUNDS_MIN_ERROR", pvar,
4881                                                              "The number of rounds is too small.");
4882                                            MessageBox(dlg, pvar->ts->UIMsg,
4883                                                       "Tera Term", MB_OK | MB_ICONEXCLAMATION);
4884                                            break;
4885                                    }
4886                                    if (rounds > SSH_KEYGEN_MAXIMUM_ROUNDS) {
4887                                            UTIL_get_lang_msg("MSG_BCRYPT_ROUNDS_MAX_ERROR", pvar,
4888                                                              "The number of rounds is too large.");
4889                                            MessageBox(dlg, pvar->ts->UIMsg,
4890                                                       "Tera Term", MB_OK | MB_ICONEXCLAMATION);
4891                                            break;
4892                                    }
4893                            }
4894    
4895                          ssh_make_comment(comment, sizeof(comment));                          ssh_make_comment(comment, sizeof(comment));
4896    
4897                          // saving file dialog                          // saving file dialog
# Line 5001  error:; Line 5068  error:;
5068                                  buffer_free(enc);                                  buffer_free(enc);
5069    
5070                          } else if (private_key.type == KEY_ED25519) { // SSH2 ED25519                          } else if (private_key.type == KEY_ED25519) { // SSH2 ED25519
5071                                  save_bcrypt_private_key(buf, filename, comment, dlg, pvar);                                  save_bcrypt_private_key(buf, filename, comment, dlg, pvar, rounds);
5072    
5073                          } else { // SSH2 RSA, DSA, ECDSA                                                  } else { // SSH2 RSA, DSA, ECDSA                        
5074                                  int len;                                  int len;
# Line 5009  error:; Line 5076  error:;
5076                                  const EVP_CIPHER *cipher;                                  const EVP_CIPHER *cipher;
5077    
5078                                  if (SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_GETCHECK, 0, 0) == BST_CHECKED) {                                  if (SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_GETCHECK, 0, 0) == BST_CHECKED) {
5079                                          save_bcrypt_private_key(buf, filename, comment, dlg, pvar);                                          save_bcrypt_private_key(buf, filename, comment, dlg, pvar, rounds);
5080                                          break;                                          break;
5081                                  }                                  }
5082    

Legend:
Removed from v.5764  
changed lines
  Added in v.5765

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26