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 6982 by doda, Sat Nov 25 15:26:31 2017 UTC revision 6983 by doda, Sat Nov 25 15:26:35 2017 UTC
# Line 784  static int prep_packet_ssh1(PTInstVar pv Line 784  static int prep_packet_ssh1(PTInstVar pv
784   * 引数:   * 引数:
785   *   data - ssh パケットの先頭を指すポインタ   *   data - ssh パケットの先頭を指すポインタ
786   *   len - パケット長 (先頭のパケット長領域(4バイト)を除いた値)   *   len - パケット長 (先頭のパケット長領域(4バイト)を除いた値)
  *   padding - パディング長 (EtMの場合は0となっているので、復号後に取得する必要あり)  
787   *   etm - MAC 方式が EtM かどうかのフラグ   *   etm - MAC 方式が EtM かどうかのフラグ
788   */   */
789    
790  static int prep_packet_ssh2(PTInstVar pvar, char *data, unsigned int len, unsigned int padding, int etm)  static int prep_packet_ssh2(PTInstVar pvar, char *data, unsigned int len, int etm)
791  {  {
792            unsigned int padding;
793    
794          if (etm) {          if (etm) {
795                  // EtM の場合は先に MAC の検証を行う                  // EtM の場合は先に MAC の検証を行う
796                  if (!CRYPT_verify_receiver_MAC(pvar, pvar->ssh_state.receiver_sequence_number, data, len + 4, data + len + 4)) {                  if (!CRYPT_verify_receiver_MAC(pvar, pvar->ssh_state.receiver_sequence_number, data, len + 4, data + len + 4)) {
# Line 800  static int prep_packet_ssh2(PTInstVar pv Line 801  static int prep_packet_ssh2(PTInstVar pv
801    
802                  // パケット長部分(先頭4バイト)は暗号化されていないので、そこをスキップして復号する。                  // パケット長部分(先頭4バイト)は暗号化されていないので、そこをスキップして復号する。
803                  CRYPT_decrypt(pvar, data + 4, len);                  CRYPT_decrypt(pvar, data + 4, len);
   
                 // EtM の場合は 呼び出し元では padding 部分が読めない為、ここで値を取得する。  
                 padding = (unsigned int) data[4];  
804          }          }
805          else {          else {
806                  // E&M では先頭部分が事前復号されている。                  // E&M では先頭部分が事前復号されている。
# Line 820  static int prep_packet_ssh2(PTInstVar pv Line 818  static int prep_packet_ssh2(PTInstVar pv
818                  }                  }
819          }          }
820    
821            // パディング長の取得
822            padding = (unsigned int) data[4];
823    
824          // パケット長(4バイト) 部分とパディング長(1バイト)部分をスキップした SSH ペイロードの先頭          // パケット長(4バイト) 部分とパディング長(1バイト)部分をスキップした SSH ペイロードの先頭
825          pvar->ssh_state.payload = data + 4 + 1;          pvar->ssh_state.payload = data + 4 + 1;
826    
# Line 2114  void SSH1_handle_packet(PTInstVar pvar, Line 2115  void SSH1_handle_packet(PTInstVar pvar,
2115          }          }
2116  }  }
2117    
2118  void SSH2_handle_packet(PTInstVar pvar, char *data, unsigned int len, unsigned int padding, int etm)  void SSH2_handle_packet(PTInstVar pvar, char *data, unsigned int len, int etm)
2119  {  {
2120          unsigned char message = prep_packet_ssh2(pvar, data, len, padding, etm);          unsigned char message = prep_packet_ssh2(pvar, data, len, etm);
2121    
2122          // SSHのメッセージタイプをチェック          // SSHのメッセージタイプをチェック
2123          if (message != SSH_MSG_NONE) {          if (message != SSH_MSG_NONE) {

Legend:
Removed from v.6982  
changed lines
  Added in v.6983

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