| 489 |
|
|
| 490 |
// make_key()を fingerprint 生成でも利用するので、staticを削除。(2006.3.27 yutaka) |
// make_key()を fingerprint 生成でも利用するので、staticを削除。(2006.3.27 yutaka) |
| 491 |
RSA *make_key(PTInstVar pvar, |
RSA *make_key(PTInstVar pvar, |
| 492 |
int bits, unsigned char *exp, |
int bits, unsigned char *exp, |
| 493 |
unsigned char *mod) |
unsigned char *mod) |
| 494 |
{ |
{ |
| 495 |
RSA *key = RSA_new(); |
RSA *key = RSA_new(); |
| 496 |
BIGNUM *e = NULL, *n = NULL; |
BIGNUM *e = NULL, *n = NULL; |
| 665 |
// ※本関数は SSH2 でのみ使用される。 |
// ※本関数は SSH2 でのみ使用される。 |
| 666 |
// (2004.12.17 yutaka) |
// (2004.12.17 yutaka) |
| 667 |
BOOL CRYPT_verify_receiver_MAC(PTInstVar pvar, uint32 sequence_number, |
BOOL CRYPT_verify_receiver_MAC(PTInstVar pvar, uint32 sequence_number, |
| 668 |
char *data, int len, char *MAC) |
char *data, int len, char *MAC) |
| 669 |
{ |
{ |
| 670 |
HMAC_CTX *c = NULL; |
HMAC_CTX *c = NULL; |
| 671 |
unsigned char m[EVP_MAX_MD_SIZE]; |
unsigned char m[EVP_MAX_MD_SIZE]; |
| 685 |
|
|
| 686 |
if ((u_int)mac->mac_len > sizeof(m)) { |
if ((u_int)mac->mac_len > sizeof(m)) { |
| 687 |
logprintf(LOG_LEVEL_VERBOSE, "HMAC len(%d) is larger than %d bytes(seq %lu len %d)", |
logprintf(LOG_LEVEL_VERBOSE, "HMAC len(%d) is larger than %d bytes(seq %lu len %d)", |
| 688 |
mac->mac_len, sizeof(m), sequence_number, len); |
mac->mac_len, sizeof(m), sequence_number, len); |
| 689 |
goto error; |
goto error; |
| 690 |
} |
} |
| 691 |
|
|
| 1003 |
SSH_RSA_CHALLENGE_LENGTH, SSH_RSA_CHALLENGE_LENGTH); |
SSH_RSA_CHALLENGE_LENGTH, SSH_RSA_CHALLENGE_LENGTH); |
| 1004 |
} else { |
} else { |
| 1005 |
SecureZeroMemory(decrypted_challenge, |
SecureZeroMemory(decrypted_challenge, |
| 1006 |
SSH_RSA_CHALLENGE_LENGTH - decrypted_challenge_len); |
SSH_RSA_CHALLENGE_LENGTH - decrypted_challenge_len); |
| 1007 |
memcpy(decrypted_challenge + SSH_RSA_CHALLENGE_LENGTH - |
memcpy(decrypted_challenge + SSH_RSA_CHALLENGE_LENGTH - |
| 1008 |
decrypted_challenge_len, challenge, |
decrypted_challenge_len, challenge, |
| 1009 |
decrypted_challenge_len); |
decrypted_challenge_len); |
| 1063 |
char tmp[80]; |
char tmp[80]; |
| 1064 |
unsigned char *junk = NULL, *discard = NULL; |
unsigned char *junk = NULL, *discard = NULL; |
| 1065 |
|
|
| 1066 |
EVP_CIPHER_CTX_init(evp); |
EVP_CIPHER_CTX_reset(evp); |
| 1067 |
if (EVP_CipherInit(evp, type, NULL, NULL, (encrypt == CIPHER_ENCRYPT)) == 0) { |
if (EVP_CipherInit(evp, type, NULL, NULL, (encrypt == CIPHER_ENCRYPT)) == 0) { |
| 1068 |
UTIL_get_lang_msg("MSG_CIPHER_INIT_ERROR", pvar, "Cipher initialize error(%d)"); |
UTIL_get_lang_msg("MSG_CIPHER_INIT_ERROR", pvar, "Cipher initialize error(%d)"); |
| 1069 |
_snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, 1); |
_snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, 1); |
| 1126 |
// |
// |
| 1127 |
// SSH2用アルゴリズムの破棄 |
// SSH2用アルゴリズムの破棄 |
| 1128 |
// |
// |
| 1129 |
void cipher_cleanup_SSH2(EVP_CIPHER_CTX *evp) |
void cipher_free_SSH2(EVP_CIPHER_CTX *evp) |
| 1130 |
{ |
{ |
| 1131 |
EVP_CIPHER_CTX_cleanup(evp); |
EVP_CIPHER_CTX_free(evp); |
| 1132 |
} |
} |
| 1133 |
|
|
| 1134 |
|
|
| 1392 |
|
|
| 1393 |
if (pvar->crypt_state.detect_attack_statics.h != NULL) { |
if (pvar->crypt_state.detect_attack_statics.h != NULL) { |
| 1394 |
SecureZeroMemory(pvar->crypt_state.detect_attack_statics.h, |
SecureZeroMemory(pvar->crypt_state.detect_attack_statics.h, |
| 1395 |
pvar->crypt_state.detect_attack_statics.n * HASH_ENTRYSIZE); |
pvar->crypt_state.detect_attack_statics.n * HASH_ENTRYSIZE); |
| 1396 |
free(pvar->crypt_state.detect_attack_statics.h); |
free(pvar->crypt_state.detect_attack_statics.h); |
| 1397 |
} |
} |
| 1398 |
|
|
| 1399 |
SecureZeroMemory(pvar->crypt_state.sender_cipher_key, |
SecureZeroMemory(pvar->crypt_state.sender_cipher_key, |
| 1400 |
sizeof(pvar->crypt_state.sender_cipher_key)); |
sizeof(pvar->crypt_state.sender_cipher_key)); |
| 1401 |
SecureZeroMemory(pvar->crypt_state.receiver_cipher_key, |
SecureZeroMemory(pvar->crypt_state.receiver_cipher_key, |
| 1402 |
sizeof(pvar->crypt_state.receiver_cipher_key)); |
sizeof(pvar->crypt_state.receiver_cipher_key)); |
| 1403 |
SecureZeroMemory(pvar->crypt_state.server_cookie, |
SecureZeroMemory(pvar->crypt_state.server_cookie, |
| 1404 |
sizeof(pvar->crypt_state.server_cookie)); |
sizeof(pvar->crypt_state.server_cookie)); |
| 1405 |
SecureZeroMemory(pvar->crypt_state.client_cookie, |
SecureZeroMemory(pvar->crypt_state.client_cookie, |
| 1406 |
sizeof(pvar->crypt_state.client_cookie)); |
sizeof(pvar->crypt_state.client_cookie)); |
| 1407 |
SecureZeroMemory(&pvar->crypt_state.enc, sizeof(pvar->crypt_state.enc)); |
SecureZeroMemory(&pvar->crypt_state.enc, sizeof(pvar->crypt_state.enc)); |
| 1408 |
SecureZeroMemory(&pvar->crypt_state.dec, sizeof(pvar->crypt_state.dec)); |
SecureZeroMemory(&pvar->crypt_state.dec, sizeof(pvar->crypt_state.dec)); |
| 1409 |
} |
} |
| 1453 |
SecureZeroMemory(state.ivec, 8); |
SecureZeroMemory(state.ivec, 8); |
| 1454 |
flip_endianness(buf, bytes); |
flip_endianness(buf, bytes); |
| 1455 |
BF_cbc_encrypt(buf, buf, bytes, &state.k, state.ivec, |
BF_cbc_encrypt(buf, buf, bytes, &state.k, state.ivec, |
| 1456 |
BF_DECRYPT); |
BF_DECRYPT); |
| 1457 |
flip_endianness(buf, bytes); |
flip_endianness(buf, bytes); |
| 1458 |
break; |
break; |
| 1459 |
} |
} |