Revision: 10249 https://osdn.net/projects/ttssh2/scm/svn/commits/10249 Author: doda Date: 2022-09-07 02:08:13 +0900 (Wed, 07 Sep 2022) Log Message: ----------- Client Secretの記録形式をWiresharkが扱う形式に合わせた。 記録時にメモリーリークしていたのも修正した。 Modified Paths: -------------- trunk/ttssh2/ttxssh/ssh.c -------------- next part -------------- Modified: trunk/ttssh2/ttxssh/ssh.c =================================================================== --- trunk/ttssh2/ttxssh/ssh.c 2022-09-06 17:08:03 UTC (rev 10248) +++ trunk/ttssh2/ttxssh/ssh.c 2022-09-06 17:08:13 UTC (rev 10249) @@ -646,28 +646,32 @@ free(buf); // free } -log_kex_key(PTInstVar pvar, char *type, char *msg) +void log_kex_key(PTInstVar pvar, const BIGNUM *secret) { int fd, i; unsigned char buff[4], *cookie; + char *hexstr; if (pvar->settings.KexKeyLogging && pvar->settings.KexKeyLogFile[0] != 0) { + hexstr = BN_bn2hex(secret); + if (hexstr == NULL) { + return; + } fd = _open(pvar->settings.KexKeyLogFile, _O_RDWR | _O_APPEND | _O_CREAT | _O_TEXT, _S_IREAD | _S_IWRITE); if (fd >= 0) { cookie = pvar->crypt_state.client_cookie; - _write(fd, type, strlen(type)); - _write(fd, " ", 1); for (i=0; i<16; i++) { _snprintf_s(buff, sizeof(buff), _TRUNCATE, "%02x", cookie[i]); _write(fd, buff, 2); } _write(fd, " ", 1); - _write(fd, msg, strlen(msg)); + _write(fd, hexstr, strlen(hexstr)); _write(fd, "\n", 1); _close(fd); } + OPENSSL_free(hexstr); } } @@ -5099,7 +5103,7 @@ // \x94閧\x82ɂ\xB7\x82ׂ\xAB\x97\x90\x90\x94(X)\x82\xAC dh_gen_key(pvar, dh, pvar->we_need); - log_kex_key(pvar, "CLIENT_SECRET", BN_bn2hex(dh->priv_key)); + log_kex_key(pvar, dh->priv_key); msg = buffer_init(); if (msg == NULL) { @@ -5331,7 +5335,7 @@ // \x94閧\x82ɂ\xB7\x82ׂ\xAB\x97\x90\x90\x94(X)\x82\xAC dh_gen_key(pvar, dh, pvar->we_need); - log_kex_key(pvar, "CLIENT_SECRET", BN_bn2hex(dh->priv_key)); + log_kex_key(pvar, dh->priv_key); // \x8C\xF6\x8AJ\x8C\xAE\x82\xF0\x83T\x81[\x83o\x82֑\x97\x90M msg = buffer_init(); @@ -5410,7 +5414,7 @@ } group = EC_KEY_get0_group(client_key); - log_kex_key(pvar, "CLIENT_SECRET", BN_bn2hex(EC_KEY_get0_private_key(client_key))); + log_kex_key(pvar, EC_KEY_get0_private_key(client_key)); msg = buffer_init(); if (msg == NULL) {