[Ttssh2-commit] [6117] SSH key fingerprint の hex 形式の出力を関数に移動 ( OpenSSH と同じ )

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2015年 11月 12日 (木) 07:38:30 JST


Revision: 6117
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/6117
Author:   maya
Date:     2015-11-12 07:38:30 +0900 (Thu, 12 Nov 2015)
Log Message:
-----------
SSH key fingerprint の hex 形式の出力を関数に移動(OpenSSH と同じ)
ダイジェストの形式を引数に追加

この変更は内部的なもので、外から見た動作は一切変わらないはず

Modified Paths:
--------------
    trunk/ttssh2/ttxssh/hosts.c
    trunk/ttssh2/ttxssh/key.c
    trunk/ttssh2/ttxssh/key.h
    trunk/ttssh2/ttxssh/ttxssh.c

-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/hosts.c
===================================================================
--- trunk/ttssh2/ttxssh/hosts.c	2015-11-10 15:54:38 UTC (rev 6116)
+++ trunk/ttssh2/ttxssh/hosts.c	2015-11-11 22:38:30 UTC (rev 6117)
@@ -1097,12 +1097,12 @@
 	SetDlgItemText(dlg, IDC_HOSTWARNING, buf2);
 
 	// fingerprint\x82\xF0\x90ݒ肷\x82\xE9
-	fp = key_fingerprint(&pvar->hosts_state.hostkey, SSH_FP_HEX);
+	fp = key_fingerprint(&pvar->hosts_state.hostkey, SSH_FP_HEX, SSH_FP_MD5);
 	SendMessage(GetDlgItem(dlg, IDC_FINGER_PRINT), WM_SETTEXT, 0, (LPARAM)fp);
 	free(fp);
 
 	// \x83r\x83W\x83\x85\x83A\x83\x8B\x89\xBBfingerprint\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9
-	fp = key_fingerprint(&pvar->hosts_state.hostkey, SSH_FP_RANDOMART);
+	fp = key_fingerprint(&pvar->hosts_state.hostkey, SSH_FP_RANDOMART, SSH_FP_MD5);
 	SendMessage(GetDlgItem(dlg, IDC_FP_RANDOMART), WM_SETTEXT, 0, (LPARAM)fp);
 	SendMessage(GetDlgItem(dlg, IDC_FP_RANDOMART), WM_SETFONT, (WPARAM)GetStockObject(ANSI_FIXED_FONT), TRUE);
 	free(fp);

Modified: trunk/ttssh2/ttxssh/key.c
===================================================================
--- trunk/ttssh2/ttxssh/key.c	2015-11-10 15:54:38 UTC (rev 6116)
+++ trunk/ttssh2/ttxssh/key.c	2015-11-11 22:38:30 UTC (rev 6117)
@@ -666,6 +666,27 @@
 	return 0;
 }
 
+static char *
+key_fingerprint_hash(u_char *dgst_raw, u_int dgst_raw_len)
+{
+	char *retval;
+	unsigned int i, retval_len;
+
+	retval_len = dgst_raw_len * 3 + 1;
+	retval = malloc(retval_len);
+	retval[0] = '\0';
+	for (i = 0; i < dgst_raw_len; i++) {
+		char hex[4];
+		_snprintf_s(hex, sizeof(hex), _TRUNCATE, "%02x:", dgst_raw[i]);
+		strncat_s(retval, retval_len, hex, _TRUNCATE);
+	}
+
+	/* Remove the trailing ':' character */
+	retval[(dgst_raw_len * 3) - 1] = '\0';
+
+	return (retval);
+}
+
 // based on OpenSSH 5.1
 #define	FLDBASE		8
 #define	FLDSIZE_Y	(FLDBASE + 1)
@@ -753,32 +774,20 @@
 //
 // fingerprint\x81i\x8Ew\x96\xE4\x81F\x83z\x83X\x83g\x8C\xF6\x8AJ\x8C\xAE\x82̃n\x83b\x83V\x83\x85\x81j\x82𐶐\xAC\x82\xB7\x82\xE9
 //
-char *key_fingerprint(Key *key, enum fp_rep dgst_rep)
+char *key_fingerprint(Key *key, enum fp_rep dgst_rep, enum fp_type dgst_type)
 {
 	char *retval = NULL;
 	unsigned char *dgst_raw;
 	int dgst_raw_len;
-	int i, retval_len;
 
 	// fingerprint\x82̃n\x83b\x83V\x83\x85\x92l\x81i\x83o\x83C\x83i\x83\x8A\x81j\x82\xF0\x8B\x81\x82߂\xE9
-	dgst_raw = key_fingerprint_raw(key, SSH_FP_MD5, &dgst_raw_len);
+	dgst_raw = key_fingerprint_raw(key, dgst_type, &dgst_raw_len);
 	if (dgst_raw == NULL)
 		return NULL;
 
 	if (dgst_rep == SSH_FP_HEX) {
-		// 16\x90i\x95\\x8BL\x82֕ϊ\xB7\x82\xB7\x82\xE9
-		retval_len = dgst_raw_len * 3 + 1;
-		retval = malloc(retval_len);
-		retval[0] = '\0';
-		for (i = 0; i < dgst_raw_len; i++) {
-			char hex[4];
-			_snprintf_s(hex, sizeof(hex), _TRUNCATE, "%02x:", dgst_raw[i]);
-			strncat_s(retval, retval_len, hex, _TRUNCATE);
-		}
+		retval = key_fingerprint_hash(dgst_raw, dgst_raw_len);
 
-		/* Remove the trailing ':' character */
-		retval[(dgst_raw_len * 3) - 1] = '\0';
-
 	} else if (dgst_rep == SSH_FP_RANDOMART) {
 		retval = key_fingerprint_randomart(dgst_raw, dgst_raw_len, key);
 
@@ -1954,7 +1963,7 @@
 		for (i = 0; i < ctx->nkeys; i++) {
 			if (ctx->keys_seen[i])
 				continue;
-			fp = key_fingerprint(ctx->keys[i], SSH_FP_HEX);
+			fp = key_fingerprint(ctx->keys[i], SSH_FP_HEX, SSH_FP_MD5);
 			buf[0] = 0;
 			strcat_s(buf, sizeof(buf), get_sshname_from_key(ctx->keys[i]));
 			strcat_s(buf, sizeof(buf), " ");
@@ -1969,7 +1978,7 @@
 		_snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, ctx->nold);
 		SetDlgItemText(dlg, IDC_REMOVEKEY_TEXT, buf);
 		for (i = 0; i < ctx->nold; i++) {
-			fp = key_fingerprint(ctx->old_keys[i], SSH_FP_HEX);
+			fp = key_fingerprint(ctx->old_keys[i], SSH_FP_HEX, SSH_FP_MD5);
 			buf[0] = 0;
 			strcat_s(buf, sizeof(buf), get_sshname_from_key(ctx->old_keys[i]));
 			strcat_s(buf, sizeof(buf), " ");
@@ -2227,7 +2236,7 @@
 		free(blob);
 		blob = NULL;
 
-		fp = key_fingerprint(key, SSH_FP_HEX);
+		fp = key_fingerprint(key, SSH_FP_HEX, SSH_FP_MD5);
 		_snprintf_s(msg, sizeof(msg), _TRUNCATE, "Received %s host key %s", 
 			get_sshname_from_key(key), fp);
 		notify_verbose_message(pvar, msg, LOG_LEVEL_VERBOSE);

Modified: trunk/ttssh2/ttxssh/key.h
===================================================================
--- trunk/ttssh2/ttxssh/key.h	2015-11-10 15:54:38 UTC (rev 6116)
+++ trunk/ttssh2/ttxssh/key.h	2015-11-11 22:38:30 UTC (rev 6117)
@@ -43,7 +43,7 @@
 unsigned char *duplicate_ED25519_PK(unsigned char *src);
 
 char *key_fingerprint_raw(Key *k, enum fp_type dgst_type, int *dgst_raw_length);
-char *key_fingerprint(Key *key, enum fp_rep dgst_rep);
+char *key_fingerprint(Key *key, enum fp_rep dgst_rep, enum fp_type dgst_type);
 
 const char *ssh_key_type(ssh_keytype type);
 char *get_sshname_from_key(Key *key);

Modified: trunk/ttssh2/ttxssh/ttxssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ttxssh.c	2015-11-10 15:54:38 UTC (rev 6116)
+++ trunk/ttssh2/ttxssh/ttxssh.c	2015-11-11 22:38:30 UTC (rev 6117)
@@ -2747,12 +2747,12 @@
 		// \x83z\x83X\x83g\x8C\xF6\x8AJ\x8C\xAE\x82\xCCfingerprint\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9\x81B
 		// Random art\x82̕\\x8E\xA6\x82\xAA\x95\xF6\x82\xEA\x82Ă\xB5\x82܂\xA4\x82̂\xAA\x89ۑ\xE8\x81B
 		// (2014.5.1 yutaka)
-		fp = key_fingerprint(&pvar->hosts_state.hostkey, SSH_FP_HEX);
+		fp = key_fingerprint(&pvar->hosts_state.hostkey, SSH_FP_HEX, SSH_FP_MD5);
 		UTIL_get_lang_msg("DLG_ABOUT_FINGERPRINT", pvar, "Host key's fingerprint:");
 		append_about_text(dlg, pvar->ts->UIMsg, fp);
 		free(fp);
 
-		fp = key_fingerprint(&pvar->hosts_state.hostkey, SSH_FP_RANDOMART);
+		fp = key_fingerprint(&pvar->hosts_state.hostkey, SSH_FP_RANDOMART, SSH_FP_MD5);
 		append_about_text(dlg, "", fp);
 		free(fp);
 	}



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