| 5375 |
|
|
| 5376 |
|
|
| 5377 |
|
|
| 5378 |
// |
/* |
| 5379 |
// DH-GEX (RFC 4419) |
* DH-GEX (RFC 4419) |
| 5380 |
// |
* |
| 5381 |
|
* SSH_MSG_KEY_DH_GEX_REQUEST: |
| 5382 |
|
* byte SSH_MSG_KEY_DH_GEX_REQUEST (34) |
| 5383 |
|
* uint32 min, minimal size in bits of an acceptable group |
| 5384 |
|
* uint32 n, preferred size in bits of the group the server will send |
| 5385 |
|
* uint32 max, maximal size in bits of an acceptable group |
| 5386 |
|
*/ |
| 5387 |
|
|
| 5388 |
static void SSH2_dh_gex_kex_init(PTInstVar pvar) |
static void SSH2_dh_gex_kex_init(PTInstVar pvar) |
| 5389 |
{ |
{ |
| 5397 |
goto error; |
goto error; |
| 5398 |
} |
} |
| 5399 |
|
|
| 5400 |
// サーバが保証すべき最低限のビット数を求める(we_needはバイト)。 |
// サーバに要求する group size の min, n(preferred), max を決定する。 |
| 5401 |
if (pvar->settings.GexMinimalGroupSize < GEX_GRP_LIMIT_MIN) { |
if (pvar->settings.GexMinimalGroupSize == 0) { |
| 5402 |
|
// 0 (未設定) だった時は最新の推奨値を使う |
| 5403 |
|
min = GEX_GRP_DEFAULT_MIN; |
| 5404 |
|
} |
| 5405 |
|
else if (pvar->settings.GexMinimalGroupSize < GEX_GRP_LIMIT_MIN) { |
| 5406 |
min = GEX_GRP_LIMIT_MIN; |
min = GEX_GRP_LIMIT_MIN; |
| 5407 |
|
logprintf(LOG_LEVEL_NOTICE, |
| 5408 |
|
__FUNCTION__ ": small GexMinimalGroupSize is too small (%d), use minimum limit (%sd)", |
| 5409 |
|
pvar->settings.GexMinimalGroupSize, GEX_GRP_LIMIT_MIN); |
| 5410 |
} |
} |
| 5411 |
else if (pvar->settings.GexMinimalGroupSize > GEX_GRP_LIMIT_MAX) { |
else if (pvar->settings.GexMinimalGroupSize > GEX_GRP_LIMIT_MAX) { |
| 5412 |
min = GEX_GRP_LIMIT_MAX; |
min = GEX_GRP_LIMIT_MAX; |
| 5413 |
|
logprintf(LOG_LEVEL_NOTICE, |
| 5414 |
|
__FUNCTION__ ": small GexMinimalGroupSize is too larse (%d), use maximum limit (%sd)", |
| 5415 |
|
pvar->settings.GexMinimalGroupSize, GEX_GRP_LIMIT_MAX); |
| 5416 |
} |
} |
| 5417 |
else { |
else { |
| 5418 |
min = pvar->settings.GexMinimalGroupSize; |
min = pvar->settings.GexMinimalGroupSize; |
| 5419 |
} |
} |
| 5420 |
|
|
| 5421 |
|
// max は常に上限いっぱい |
| 5422 |
max = GEX_GRP_LIMIT_MAX; |
max = GEX_GRP_LIMIT_MAX; |
| 5423 |
|
|
| 5424 |
|
// preferred は使用する各暗号要素の鍵長/ブロック長のうち、最大のものを使う |
| 5425 |
bits = dh_estimate(pvar->we_need * 8); |
bits = dh_estimate(pvar->we_need * 8); |
| 5426 |
if (bits < min) { |
if (bits < min) { |
| 5427 |
bits = min; |
bits = min; |