Develop and Download Open Source Software

Browse Subversion Repository

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

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

revision 4381 by doda, Thu Mar 10 10:04:51 2011 UTC revision 4407 by maya, Wed Mar 30 12:24:00 2011 UTC
# Line 2407  static BOOL handle_rsa_challenge(PTInstV Line 2407  static BOOL handle_rsa_challenge(PTInstV
2407          return FALSE;          return FALSE;
2408  }  }
2409    
 #define OBFUSCATING_ROUND_TO 32  
   
 static int obfuscating_round_up(PTInstVar pvar, int size)  
 {  
         return (size + OBFUSCATING_ROUND_TO - 1) & ~(OBFUSCATING_ROUND_TO - 1);  
 }  
   
2410  static void try_send_credentials(PTInstVar pvar)  static void try_send_credentials(PTInstVar pvar)
2411  {  {
2412          if ((pvar->ssh_state.status_flags & STATUS_DONT_SEND_CREDENTIALS) == 0) {          if ((pvar->ssh_state.status_flags & STATUS_DONT_SEND_CREDENTIALS) == 0) {
# Line 2436  static void try_send_credentials(PTInstV Line 2429  static void try_send_credentials(PTInstV
2429                          return;                          return;
2430                  case SSH_AUTH_PASSWORD:{                  case SSH_AUTH_PASSWORD:{
2431                                  int len = strlen(cred->password);                                  int len = strlen(cred->password);
                                 // Round up password length to discourage traffic analysis  
                                 int obfuscated_len = obfuscating_round_up(pvar, len);  
2432                                  unsigned char FAR *outmsg =                                  unsigned char FAR *outmsg =
2433                                          begin_send_packet(pvar, SSH_CMSG_AUTH_PASSWORD,                                          begin_send_packet(pvar, SSH_CMSG_AUTH_PASSWORD,
2434                                                            4 + obfuscated_len);                                                            4 + len);
2435    
2436                                  notify_verbose_message(pvar,                                  notify_verbose_message(pvar,
2437                                                         "Trying PASSWORD authentication...",                                                         "Trying PASSWORD authentication...",
2438                                                         LOG_LEVEL_VERBOSE);                                                         LOG_LEVEL_VERBOSE);
2439    
2440                                  set_uint32(outmsg, obfuscated_len);                                  set_uint32(outmsg, len);
2441                                  memcpy(outmsg + 4, cred->password, len);                                  memcpy(outmsg + 4, cred->password, len);
                                 memset(outmsg + 4 + len, 0, obfuscated_len - len);  
2442                                                                    
2443                                  // セッション複製時にパスワードを使い回したいので、ここでのリソース解放はやめる。                                  // セッション複製時にパスワードを使い回したいので、ここでのリソース解放はやめる。
2444                                  // socket close時にもこの関数は呼ばれているので、たぶん問題ない。(2005.4.8 yutaka)                                  // socket close時にもこの関数は呼ばれているので、たぶん問題ない。(2005.4.8 yutaka)
# Line 2564  static void try_send_credentials(PTInstV Line 2554  static void try_send_credentials(PTInstV
2554                                                  begin_send_packet(pvar, SSH_CMSG_AUTH_TIS, 0);                                                  begin_send_packet(pvar, SSH_CMSG_AUTH_TIS, 0);
2555    
2556                                          notify_verbose_message(pvar,                                          notify_verbose_message(pvar,
2557                                                              "Trying TIS authentication...",                                                                 "Trying TIS authentication...",
2558                                                              LOG_LEVEL_VERBOSE);                                                                 LOG_LEVEL_VERBOSE);
2559                                          enque_handlers(pvar, 2, TIS_msgs, TIS_handlers);                                          enque_handlers(pvar, 2, TIS_msgs, TIS_handlers);
2560                                  } else {                                  } else {
2561                                          int len = strlen(cred->password);                                          int len = strlen(cred->password);
                                         int obfuscated_len = obfuscating_round_up(pvar, len);  
2562                                          unsigned char FAR *outmsg =                                          unsigned char FAR *outmsg =
2563                                                  begin_send_packet(pvar, SSH_CMSG_AUTH_TIS_RESPONSE,                                                  begin_send_packet(pvar, SSH_CMSG_AUTH_TIS_RESPONSE,
2564                                                                    4 + obfuscated_len);                                                                    4 + len);
2565    
2566                                          notify_verbose_message(pvar, "Sending TIS response",                                          notify_verbose_message(pvar,
2567                                                                                          LOG_LEVEL_VERBOSE);                                                                 "Sending TIS response",
2568                                                                   LOG_LEVEL_VERBOSE);
2569    
2570                                          set_uint32(outmsg, obfuscated_len);                                          set_uint32(outmsg, len);
2571                                          memcpy(outmsg + 4, cred->password, len);                                          memcpy(outmsg + 4, cred->password, len);
                                         memset(outmsg + 4 + len, 0, obfuscated_len - len);  
2572                                          enque_simple_auth_handlers(pvar);                                          enque_simple_auth_handlers(pvar);
2573                                  }                                  }
2574    
# Line 2609  static void try_send_user_name(PTInstVar Line 2598  static void try_send_user_name(PTInstVar
2598    
2599                  if (username != NULL) {                  if (username != NULL) {
2600                          int len = strlen(username);                          int len = strlen(username);
                         int obfuscated_len = obfuscating_round_up(pvar, len);  
2601                          unsigned char FAR *outmsg =                          unsigned char FAR *outmsg =
2602                                  begin_send_packet(pvar, SSH_CMSG_USER, 4 + obfuscated_len);                                  begin_send_packet(pvar, SSH_CMSG_USER, 4 + len);
2603                          char buf[1024] = "Sending user name: ";                          char buf[1024] = "Sending user name: ";
2604                          static const int msgs[] =                          static const int msgs[] =
2605                                  { SSH_SMSG_SUCCESS, SSH_SMSG_FAILURE };                                  { SSH_SMSG_SUCCESS, SSH_SMSG_FAILURE };
2606                          static const SSHPacketHandler handlers[]                          static const SSHPacketHandler handlers[]
2607                          = { handle_noauth_success, handle_auth_required };                          = { handle_noauth_success, handle_auth_required };
2608    
2609                          set_uint32(outmsg, obfuscated_len);                          set_uint32(outmsg, len);
2610                          memcpy(outmsg + 4, username, len);                          memcpy(outmsg + 4, username, len);
                         memset(outmsg + 4 + len, 0, obfuscated_len - len);  
2611                          finish_send_packet(pvar);                          finish_send_packet(pvar);
2612    
2613                          pvar->ssh_state.status_flags |= STATUS_DONT_SEND_USER_NAME;                          pvar->ssh_state.status_flags |= STATUS_DONT_SEND_USER_NAME;

Legend:
Removed from v.4381  
changed lines
  Added in v.4407

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