[Ttssh2-commit] [4305] KEX用ハッシュ関数のパラメータを変更

Back to archive index

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 @@
 	// ƒnƒbƒVƒ…‚ÌŒvŽZ
 	/* 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));



Ttssh2-commit メーリングリストの案内
Back to archive index