| 1038 |
// ※本関数は SSH2 でのみ使用される。 |
// ※本関数は SSH2 でのみ使用される。 |
| 1039 |
// (2004.12.17 yutaka) |
// (2004.12.17 yutaka) |
| 1040 |
BOOL CRYPT_verify_receiver_MAC(PTInstVar pvar, uint32 sequence_number, |
BOOL CRYPT_verify_receiver_MAC(PTInstVar pvar, uint32 sequence_number, |
| 1041 |
char FAR * data, int len, char FAR * MAC) |
char FAR * data, int len, char FAR * MAC) |
| 1042 |
{ |
{ |
| 1043 |
HMAC_CTX c; |
HMAC_CTX c; |
| 1044 |
unsigned char m[EVP_MAX_MD_SIZE]; |
unsigned char m[EVP_MAX_MD_SIZE]; |
| 1048 |
mac = &pvar->ssh2_keys[MODE_IN].mac; |
mac = &pvar->ssh2_keys[MODE_IN].mac; |
| 1049 |
|
|
| 1050 |
// HMACがまだ有効でない場合は、検証OKとして返す。 |
// HMACがまだ有効でない場合は、検証OKとして返す。 |
| 1051 |
if (mac == NULL || mac->enabled == 0) |
if (mac == NULL || mac->enabled == 0) |
| 1052 |
return TRUE; |
return TRUE; |
| 1053 |
|
|
| 1054 |
if (mac->key == NULL) |
if (mac->key == NULL) { |
| 1055 |
|
logprintf(pvar, LOG_LEVEL_VERBOSE, "HMAC key is NULL(seq %lu len %d)", sequence_number, len); |
| 1056 |
goto error; |
goto error; |
| 1057 |
|
} |
| 1058 |
|
|
| 1059 |
if ((u_int)mac->mac_len > sizeof(m)) |
if ((u_int)mac->mac_len > sizeof(m)) { |
| 1060 |
|
logprintf(pvar, LOG_LEVEL_VERBOSE, "HMAC len(%d) is larger than %d bytes(seq %lu len %d)", |
| 1061 |
|
mac->mac_len, sizeof(m), sequence_number, len); |
| 1062 |
goto error; |
goto error; |
| 1063 |
|
} |
| 1064 |
|
|
| 1065 |
HMAC_Init(&c, mac->key, mac->key_len, mac->md); |
HMAC_Init(&c, mac->key, mac->key_len, mac->md); |
| 1066 |
set_uint32_MSBfirst(b, sequence_number); |
set_uint32_MSBfirst(b, sequence_number); |
| 1070 |
HMAC_cleanup(&c); |
HMAC_cleanup(&c); |
| 1071 |
|
|
| 1072 |
if (memcmp(m, MAC, mac->mac_len)) { |
if (memcmp(m, MAC, mac->mac_len)) { |
| 1073 |
|
logprintf(pvar, LOG_LEVEL_VERBOSE, "HMAC key is not matched(seq %lu len %d)", sequence_number, len); |
| 1074 |
|
logprintf_hexdump(pvar, LOG_LEVEL_VERBOSE, m, mac->mac_len, "m:"); |
| 1075 |
|
logprintf_hexdump(pvar, LOG_LEVEL_VERBOSE, MAC, mac->mac_len, "MAC:"); |
| 1076 |
goto error; |
goto error; |
| 1077 |
} |
} |
| 1078 |
|
|