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 5925 by maya, Mon Jul 27 04:32:54 2015 UTC revision 5926 by doda, Tue Aug 4 03:17:44 2015 UTC
# Line 5262  error:; Line 5262  error:;
5262  static BOOL handle_SSH2_dh_gex_group(PTInstVar pvar)  static BOOL handle_SSH2_dh_gex_group(PTInstVar pvar)
5263  {  {
5264          char *data;          char *data;
5265          int len;          int len, grp_bits;
5266          BIGNUM *p = NULL, *g = NULL;          BIGNUM *p = NULL, *g = NULL;
5267          DH *dh = NULL;          DH *dh = NULL;
5268          buffer_t *msg = NULL;          buffer_t *msg = NULL;
5269          unsigned char *outmsg;          unsigned char *outmsg;
5270            char tmpbuf[256];
5271    
5272          notify_verbose_message(pvar, "SSH2_MSG_KEX_DH_GEX_GROUP was received.", LOG_LEVEL_VERBOSE);          notify_verbose_message(pvar, "SSH2_MSG_KEX_DH_GEX_GROUP was received.", LOG_LEVEL_VERBOSE);
5273    
# Line 5283  static BOOL handle_SSH2_dh_gex_group(PTI Line 5284  static BOOL handle_SSH2_dh_gex_group(PTI
5284          buffer_get_bignum2(&data, p); // 素数の取得          buffer_get_bignum2(&data, p); // 素数の取得
5285          buffer_get_bignum2(&data, g); // 生成元の取得          buffer_get_bignum2(&data, g); // 生成元の取得
5286    
5287            grp_bits = BN_num_bits(p);
5288            _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE, "DH-GEX: Request: %d / %d / %d, Received: %d",
5289                        pvar->kexgex_min, pvar->kexgex_bits, pvar->kexgex_max, BN_num_bits(p));
5290            notify_verbose_message(pvar, tmpbuf, LOG_LEVEL_VERBOSE);
5291    
5292            //
5293            // (1) < GEX_GRP_MINSIZE <= (2) < kexgex_min <= (3) < kexgex_bits <= (4) <= kexgex_max < (5) <= GEX_GRP_MAXSIZE < (6)
5294            //
5295            if (grp_bits < GEX_GRP_MINSIZE || grp_bits > GEX_GRP_MAXSIZE) {
5296            // (1), (6) プロトコルで認められている範囲(1024 <= grp_bits <= 8192)の外。強制切断。
5297                    _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE,
5298                        "Received group size out of range: %d", grp_bits);
5299                    notify_fatal_error(pvar, tmpbuf, FALSE);
5300                    goto error;
5301            }
5302            else if (grp_bits < pvar->kexgex_min) {
5303            // (2) プロトコルで認められている範囲内だが、こちらの設定した最小値より小さい。確認ダイアログを出す。
5304                    _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE,
5305                        "DH-GEX: grp_bits(%d) < kexgex_min(%d)", grp_bits, pvar->kexgex_min);
5306                        notify_verbose_message(pvar, tmpbuf, LOG_LEVEL_WARNING);
5307                    _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE,
5308                        "Received group size is smaller than requested minimal.\nrequested: %d, received:%d\nAccept this?",
5309                        pvar->kexgex_min, grp_bits);
5310            }
5311            else if (grp_bits < pvar->kexgex_bits) {
5312            // (3) 要求の最小値は満たすが、要求値よりは小さい。確認ダイアログ。
5313                    _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE,
5314                        "DH-GEX: grp_bits(%d) < kexgex_bits(%d)", grp_bits, pvar->kexgex_bits);
5315                        notify_verbose_message(pvar, tmpbuf, LOG_LEVEL_WARNING);
5316                    _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE,
5317                        "Received group size is smaller than requested.\nrequested: %d, received: %d\nAccept this?",
5318                        pvar->kexgex_bits, grp_bits);
5319            }
5320            else if (grp_bits <= pvar->kexgex_max) {
5321            // (4) 要求値以上、かつ要求の最大値以下。問題なし。
5322                    tmpbuf[0] = 0; // no message
5323            }
5324            else {
5325            // (5) こちらの設定した最大値より大きい。確認ダイアログを出す。
5326            //     ただし現状では kexgex_max == GEX_GRP_MAXSIZE(8192) である為この状況になる事は無い。
5327                    _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE,
5328                        "DH-GEX: grp_bits(%d) > kexgex_max(%d)", grp_bits, pvar->kexgex_max);
5329                        notify_verbose_message(pvar, tmpbuf, LOG_LEVEL_WARNING);
5330                    _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE,
5331                        "Received group size is larger than requested maximal.\nrequested: %d, received: %d\nAccept this?",
5332                        pvar->kexgex_max, grp_bits);
5333            }
5334            
5335            if (tmpbuf[0] != 0) {
5336                    if (MessageBox(NULL, tmpbuf, "TTSSH: confirm GEX group size", MB_YESNO | MB_ICONERROR) == IDNO) {
5337                            notify_fatal_error(pvar, "connection canceled.", FALSE);
5338                            goto error;
5339                    }
5340            }
5341    
5342          dh = DH_new();          dh = DH_new();
5343          if (dh == NULL)          if (dh == NULL)
5344                  goto error;                  goto error;

Legend:
Removed from v.5925  
changed lines
  Added in v.5926

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