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); }