svnno****@sourc*****
svnno****@sourc*****
2011年 2月 14日 (月) 23:30:19 JST
Revision: 4305 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4305 Author: maya Date: 2011-02-14 23:30:19 +0900 (Mon, 14 Feb 2011) Log Message: ----------- KEXç¨ããã·ã¥é¢æ°ã®ãã©ã¡ã¼ã¿ãå¤æ´ Modified Paths: -------------- trunk/ttssh2/ttxssh/kex.c trunk/ttssh2/ttxssh/kex.h trunk/ttssh2/ttxssh/ssh.c -------------- next part -------------- Modified: trunk/ttssh2/ttxssh/kex.c =================================================================== --- trunk/ttssh2/ttxssh/kex.c 2011-02-14 09:09:07 UTC (rev 4304) +++ trunk/ttssh2/ttxssh/kex.c 2011-02-14 14:30:19 UTC (rev 4305) @@ -143,7 +143,8 @@ u_char *serverhostkeyblob, int sbloblen, BIGNUM *client_dh_pub, BIGNUM *server_dh_pub, - BIGNUM *shared_secret) + BIGNUM *shared_secret, + unsigned int *hashlen) { buffer_t *b; static unsigned char digest[EVP_MAX_MD_SIZE]; @@ -178,12 +179,15 @@ //write_buffer_file(digest, EVP_MD_size(evp_md)); + *hashlen = EVP_MD_size(evp_md); + return digest; } // SHA-1(160bit)/SHA-256(256bit)ðßé -unsigned char *kex_dh_gex_hash(char *client_version_string, +unsigned char *kex_dh_gex_hash(const EVP_MD *evp_md, + char *client_version_string, char *server_version_string, char *ckexinit, int ckexinitlen, char *skexinit, int skexinitlen, @@ -194,13 +198,12 @@ BIGNUM *kexgex_p, BIGNUM *kexgex_g, BIGNUM *client_dh_pub, - enum kex_algorithm kex_type, BIGNUM *server_dh_pub, - BIGNUM *shared_secret) + BIGNUM *shared_secret, + unsigned int *hashlen) { buffer_t *b; static unsigned char digest[EVP_MAX_MD_SIZE]; - const EVP_MD *evp_md = ssh2_kex_algorithms[kex_type].evp_md(); EVP_MD_CTX md; b = buffer_init(); @@ -241,6 +244,8 @@ //write_buffer_file(digest, EVP_MD_size(evp_md)); + *hashlen = EVP_MD_size(evp_md); + return digest; } @@ -270,10 +275,9 @@ static u_char *derive_key(int id, int need, u_char *hash, BIGNUM *shared_secret, char *session_id, int session_id_len, - enum kex_algorithm kex_type) + const EVP_MD *evp_md) { buffer_t *b; - const EVP_MD *evp_md = ssh2_kex_algorithms[kex_type].evp_md(); EVP_MD_CTX md; char c = id; int have; @@ -324,7 +328,8 @@ int i, mode, ctos; for (i = 0; i < NKEYS; i++) { - keys[i] = derive_key('A'+i, need, hash, shared_secret, session_id, session_id_len, pvar->kex_type); + keys[i] = derive_key('A'+i, need, hash, shared_secret, session_id, session_id_len, + ssh2_kex_algorithms[pvar->kex_type].evp_md()); //debug_print(i, keys[i], need); } Modified: trunk/ttssh2/ttxssh/kex.h =================================================================== --- trunk/ttssh2/ttxssh/kex.h 2011-02-14 09:09:07 UTC (rev 4304) +++ trunk/ttssh2/ttxssh/kex.h 2011-02-14 14:30:19 UTC (rev 4305) @@ -40,8 +40,10 @@ u_char *serverhostkeyblob, int sbloblen, BIGNUM *client_dh_pub, BIGNUM *server_dh_pub, - BIGNUM *shared_secret); -unsigned char *kex_dh_gex_hash(char *client_version_string, + BIGNUM *shared_secret, + unsigned int *hashlen); +unsigned char *kex_dh_gex_hash(const EVP_MD *evp_md, + char *client_version_string, char *server_version_string, char *ckexinit, int ckexinitlen, char *skexinit, int skexinitlen, @@ -52,9 +54,9 @@ BIGNUM *kexgex_p, BIGNUM *kexgex_g, BIGNUM *client_dh_pub, - enum kex_algorithm kex_type, BIGNUM *server_dh_pub, - BIGNUM *shared_secret); + BIGNUM *shared_secret, + unsigned int *hashlen); int dh_pub_is_valid(DH *dh, BIGNUM *dh_pub); void kex_derive_keys(PTInstVar pvar, int need, u_char *hash, BIGNUM *shared_secret, Modified: trunk/ttssh2/ttxssh/ssh.c =================================================================== --- trunk/ttssh2/ttxssh/ssh.c 2011-02-14 09:09:07 UTC (rev 4304) +++ trunk/ttssh2/ttxssh/ssh.c 2011-02-14 14:30:19 UTC (rev 4305) @@ -5083,9 +5083,9 @@ server_host_key_blob, bloblen, pvar->kexdh->pub_key, dh_server_pub, - share_key); + share_key, + &hashlen); - hashlen = EVP_MD_size(ssh2_kex_algorithms[pvar->kex_type].evp_md()); //debug_print(30, hash, hashlen); //debug_print(31, pvar->client_version_string, strlen(pvar->client_version_string)); //debug_print(32, pvar->server_version_string, strlen(pvar->server_version_string)); @@ -5360,6 +5360,7 @@ // nbV ÌvZ /* calc and verify H */ hash = kex_dh_gex_hash( + ssh2_kex_algorithms[pvar->kex_type].evp_md(), pvar->client_version_string, pvar->server_version_string, buffer_ptr(pvar->my_kex), buffer_len(pvar->my_kex), @@ -5372,12 +5373,11 @@ pvar->kexdh->p, pvar->kexdh->g, pvar->kexdh->pub_key, - pvar->kex_type, /////// KEXGEX dh_server_pub, - share_key); + share_key, + &hashlen); - hashlen = EVP_MD_size(ssh2_kex_algorithms[pvar->kex_type].evp_md()); { push_memdump("DH_GEX_REPLY kex_dh_gex_hash", "my_kex", buffer_ptr(pvar->my_kex), buffer_len(pvar->my_kex)); push_memdump("DH_GEX_REPLY kex_dh_gex_hash", "peer_kex", buffer_ptr(pvar->peer_kex), buffer_len(pvar->peer_kex));