From scmnotify @ osdn.net Mon Dec 18 19:40:54 2017
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Mon, 18 Dec 2017 19:40:54 +0900
Subject: [Ttssh2-commit] [6999] typo fix.
Message-ID: <1513593654.071385.95053.nullmailer@users.osdn.me>
Revision: 6999
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/6999
Author: doda
Date: 2017-12-18 19:40:53 +0900 (Mon, 18 Dec 2017)
Log Message:
-----------
typo fix.
Modified Paths:
--------------
trunk/doc/ja/html/about/history.html
-------------- next part --------------
Modified: trunk/doc/ja/html/about/history.html
===================================================================
--- trunk/doc/ja/html/about/history.html 2017-11-29 22:54:33 UTC (rev 6998)
+++ trunk/doc/ja/html/about/history.html 2017-12-18 10:40:53 UTC (rev 6999)
@@ -43,7 +43,7 @@
DA2 \x97v\x8B\x81\x82??\x9E\x93\x9A\x93\xE0\x97e\x82\xF0\x95ύX\x82\xB5\x82\xBD\x81B
Telnet \x90?\xB1\x8E\x9E\x81A\x92[\x96\x96\x91\xAC\x93x\x82\xF0\x83T\x81[\x83o\x82?`\x82\xA6\x82\xE9\x82悤\x82?\xB5\x82\xBD\x81B
- - Tlnet Terminal Speed Option \x82?Ή\x9E\x82\xB5\x82\xBD\x81B
+ - Telnet Terminal Speed Option \x82?Ή\x9E\x82\xB5\x82\xBD\x81B
- teraterm.ini \x82\xC9 TerminalSpeed \x83G\x83\x93\x83g\x83\x8A\x82\xF0\x92?\xC1\x82\xB5\x82\xBD\x81B\x83f\x83t\x83H\x83\x8B\x83g\x82\xCD38400\x81B
\x83\x8D\x83O\x82?s\x93\xAA\x82??\xC1\x82\xB7\x82\xE9\x83^\x83C\x83\x80\x83X\x83^\x83\x93\x83v\x82?\xED\x97?\xF0\x90?\xE8\x82ł\xAB\x82\xE9\x82悤\x82?\xB5\x82\xBD\x81B
From scmnotify @ osdn.net Mon Dec 18 19:40:58 2017
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Mon, 18 Dec 2017 19:40:58 +0900
Subject: [Ttssh2-commit] =?utf-8?b?WzcwMDBdIEVsYXBzZWQgVGltZSAtPiAg57WM?=
=?utf-8?b?6YGO5pmC6ZaT?=
Message-ID: <1513593658.767192.95115.nullmailer@users.osdn.me>
Revision: 7000
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7000
Author: doda
Date: 2017-12-18 19:40:58 +0900 (Mon, 18 Dec 2017)
Log Message:
-----------
Elapsed Time -> 経過時間
Modified Paths:
--------------
trunk/doc/ja/html/macro/command/logopen.html
trunk/installer/release/lang/Japanese.lng
-------------- next part --------------
Modified: trunk/doc/ja/html/macro/command/logopen.html
===================================================================
--- trunk/doc/ja/html/macro/command/logopen.html 2017-12-18 10:40:53 UTC (rev 6999)
+++ trunk/doc/ja/html/macro/command/logopen.html 2017-12-18 10:40:58 UTC (rev 7000)
@@ -74,12 +74,12 @@
2 |
- Elapsed Time (Logging) |
+ \x8Co\x89?\x9E\x8A\xD4 (Logging) |
3 |
- Elapsed Time (Connection) |
+ \x8Co\x89?\x9E\x8A\xD4 (Connection) |
Modified: trunk/installer/release/lang/Japanese.lng
===================================================================
--- trunk/installer/release/lang/Japanese.lng 2017-12-18 10:40:53 UTC (rev 6999)
+++ trunk/installer/release/lang/Japanese.lng 2017-12-18 10:40:58 UTC (rev 7000)
@@ -430,8 +430,8 @@
DLG_FOPT_ALLBUFFINFIRST=\x8C\xBB\x8D?o\x83b\x83t\x83@\x82\xF0\x8A?\xDE(&C)
DLG_FOPT_TIMESTAMP_LOCAL=\x83\x8D\x81[\x83J\x83\x8B\x83^\x83C\x83\x80
DLG_FOPT_TIMESTAMP_UTC=UTC
-DLG_FOPT_TIMESTAMP_ELAPSED_LOGGING=Elapsed Time (Logging)
-DLG_FOPT_TIMESTAMP_ELAPSED_CONNECTION=Elapsed Time (Connection)
+DLG_FOPT_TIMESTAMP_ELAPSED_LOGGING=\x8Co\x89?\x9E\x8A\xD4(Logging)
+DLG_FOPT_TIMESTAMP_ELAPSED_CONNECTION=\x8Co\x89?\x9E\x8A\xD4(Connection)
DLG_XOPT=\x83I\x83v\x83V\x83\x87\x83\x93
DLG_XOPT_CHECKSUM=\x83`\x83F\x83b\x83N\x83T\x83\x80(&S)
From scmnotify @ osdn.net Mon Dec 18 19:41:06 2017
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Mon, 18 Dec 2017 19:41:06 +0900
Subject: [Ttssh2-commit] =?utf-8?b?WzcwMDJdICDmmpflj7fmlrnlvI/jga7nrqE=?=
=?utf-8?b?55CG44KS44CB5pqX5Y+35pa55byP44KS6KGo44GZ5YCkIChTU0hDaXBoZXIp?=
=?utf-8?b?IOOBi+OCiSBzc2gyX2NpcGhlcnMg5YaF44Gu44Ko44Oz44OI44Oq44G444Gu?=
=?utf-8?b?44Od44Kk44Oz44K/44KS5L2/44GG44KI44GG44Gr5aSJ5pu044CC?=
Message-ID: <1513593666.872488.95376.nullmailer@users.osdn.me>
Revision: 7002
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7002
Author: doda
Date: 2017-12-18 19:41:06 +0900 (Mon, 18 Dec 2017)
Log Message:
-----------
暗号方式の管理を、暗号方式を表す値(SSHCipher)から ssh2_ciphers 内のエントリへのポインタを使うように変更。
これにより、暗号方式のパラメータ(ブロックサイズ等)が容易に参照できるようになる。
SSHCipher の値が欲しい時は cipher->id を使う。
Modified Paths:
--------------
trunk/ttssh2/ttxssh/crypt.c
trunk/ttssh2/ttxssh/keyfiles.c
trunk/ttssh2/ttxssh/ssh.c
trunk/ttssh2/ttxssh/ssh.h
trunk/ttssh2/ttxssh/ttxssh.c
trunk/ttssh2/ttxssh/ttxssh.h
-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/crypt.c
===================================================================
--- trunk/ttssh2/ttxssh/crypt.c 2017-12-18 10:41:02 UTC (rev 7001)
+++ trunk/ttssh2/ttxssh/crypt.c 2017-12-18 10:41:06 UTC (rev 7002)
@@ -765,9 +765,18 @@
choose_cipher(pvar, pvar->crypt_state.supported_receiver_ciphers);
} else { // SSH2(yutaka)
- pvar->crypt_state.sender_cipher = pvar->ctos_cipher;
- pvar->crypt_state.receiver_cipher =pvar->stoc_cipher;
-
+ if (pvar->ciphers[MODE_OUT] == NULL) {
+ pvar->crypt_state.sender_cipher = SSH_CIPHER_NONE;
+ }
+ else {
+ pvar->crypt_state.sender_cipher = pvar->ciphers[MODE_OUT]->id;
+ }
+ if (pvar->ciphers[MODE_IN] == NULL) {
+ pvar->crypt_state.receiver_cipher = SSH_CIPHER_NONE;
+ }
+ else {
+ pvar->crypt_state.receiver_cipher = pvar->ciphers[MODE_IN]->id;
+ }
}
if (pvar->crypt_state.sender_cipher == SSH_CIPHER_NONE
@@ -1060,36 +1069,39 @@
struct Enc *enc;
char *encryption_key = pvar->crypt_state.sender_cipher_key;
char *decryption_key = pvar->crypt_state.receiver_cipher_key;
- int cipher;
+ ssh2_cipher_t *cipher;
BOOL isOK = TRUE;
if (sender_flag) {
- cipher = pvar->crypt_state.sender_cipher;
- switch (cipher) {
- case SSH_CIPHER_3DES:
- c3DES_init(encryption_key, &pvar->crypt_state.enc.c3DES);
- pvar->crypt_state.encrypt = c3DES_encrypt;
- break;
+ if (SSHv1(pvar)) {
+ switch (pvar->crypt_state.sender_cipher) {
+ case SSH_CIPHER_3DES:
+ c3DES_init(encryption_key, &pvar->crypt_state.enc.c3DES);
+ pvar->crypt_state.encrypt = c3DES_encrypt;
+ break;
- case SSH_CIPHER_DES:
- cDES_init(encryption_key, &pvar->crypt_state.enc.cDES);
- pvar->crypt_state.encrypt = cDES_encrypt;
- break;
+ case SSH_CIPHER_DES:
+ cDES_init(encryption_key, &pvar->crypt_state.enc.cDES);
+ pvar->crypt_state.encrypt = cDES_encrypt;
+ break;
- case SSH_CIPHER_BLOWFISH:
- cBlowfish_init(encryption_key, &pvar->crypt_state.enc.cBlowfish);
- pvar->crypt_state.encrypt = cBlowfish_encrypt;
- break;
+ case SSH_CIPHER_BLOWFISH:
+ cBlowfish_init(encryption_key, &pvar->crypt_state.enc.cBlowfish);
+ pvar->crypt_state.encrypt = cBlowfish_encrypt;
+ break;
- case SSH_CIPHER_NONE:
- case SSH_CIPHER_IDEA:
- case SSH_CIPHER_TSS:
- case SSH_CIPHER_RC4:
- isOK = FALSE;
- break;
-
- default: // SSH2
- if (cipher <= SSH_CIPHER_MAX) {
+ case SSH_CIPHER_NONE:
+ case SSH_CIPHER_IDEA:
+ case SSH_CIPHER_TSS:
+ case SSH_CIPHER_RC4:
+ isOK = FALSE;
+ break;
+ }
+ }
+ else {
+ // SSH2
+ cipher = pvar->ciphers[MODE_OUT];
+ if (cipher) {
enc = &pvar->ssh2_keys[MODE_OUT].enc;
cipher_init_SSH2(&pvar->evpcip[MODE_OUT],
enc->key, get_cipher_key_len(cipher),
@@ -1105,37 +1117,39 @@
else {
isOK = FALSE;
}
- break;
}
}
if (receiver_flag) {
- cipher = pvar->crypt_state.receiver_cipher;
- switch (cipher) {
- case SSH_CIPHER_3DES:
- c3DES_init(decryption_key, &pvar->crypt_state.dec.c3DES);
- pvar->crypt_state.decrypt = c3DES_decrypt;
- break;
+ if (SSHv1(pvar)) {
+ switch (pvar->crypt_state.receiver_cipher) {
+ case SSH_CIPHER_3DES:
+ c3DES_init(decryption_key, &pvar->crypt_state.dec.c3DES);
+ pvar->crypt_state.decrypt = c3DES_decrypt;
+ break;
- case SSH_CIPHER_DES:
- cDES_init(decryption_key, &pvar->crypt_state.dec.cDES);
- pvar->crypt_state.decrypt = cDES_decrypt;
- break;
+ case SSH_CIPHER_DES:
+ cDES_init(decryption_key, &pvar->crypt_state.dec.cDES);
+ pvar->crypt_state.decrypt = cDES_decrypt;
+ break;
- case SSH_CIPHER_BLOWFISH:
- cBlowfish_init(decryption_key, &pvar->crypt_state.dec.cBlowfish);
- pvar->crypt_state.decrypt = cBlowfish_decrypt;
- break;
+ case SSH_CIPHER_BLOWFISH:
+ cBlowfish_init(decryption_key, &pvar->crypt_state.dec.cBlowfish);
+ pvar->crypt_state.decrypt = cBlowfish_decrypt;
+ break;
- case SSH_CIPHER_NONE:
- case SSH_CIPHER_IDEA:
- case SSH_CIPHER_TSS:
- case SSH_CIPHER_RC4:
- isOK = FALSE;
- break;
-
- default: // SSH2
- if (cipher <= SSH_CIPHER_MAX) {
+ case SSH_CIPHER_NONE:
+ case SSH_CIPHER_IDEA:
+ case SSH_CIPHER_TSS:
+ case SSH_CIPHER_RC4:
+ isOK = FALSE;
+ break;
+ }
+ }
+ else {
+ // SSH2
+ cipher = pvar->ciphers[MODE_IN];
+ if (cipher) {
enc = &pvar->ssh2_keys[MODE_IN].enc;
cipher_init_SSH2(&pvar->evpcip[MODE_IN],
enc->key, get_cipher_key_len(cipher),
@@ -1151,7 +1165,6 @@
else {
isOK = FALSE;
}
- break;
}
}
Modified: trunk/ttssh2/ttxssh/keyfiles.c
===================================================================
--- trunk/ttssh2/ttxssh/keyfiles.c 2017-12-18 10:41:02 UTC (rev 7001)
+++ trunk/ttssh2/ttxssh/keyfiles.c 2017-12-18 10:41:06 UTC (rev 7002)
@@ -371,7 +371,7 @@
unsigned int len, klen, nkeys, blocksize, keylen, ivlen, slen, rounds;
unsigned int check1, check2, m1len, m2len;
int dlen, i;
- SSHCipher ciphernameval;
+ ssh2_cipher_t *cipher;
size_t authlen;
EVP_CIPHER_CTX cipher_ctx;
@@ -452,8 +452,8 @@
*/
// \x88Í\x86\x89\xBB\x83A\x83\x8B\x83S\x83\x8A\x83Y\x83\x80\x82?\xBC\x91O
ciphername = buffer_get_string_msg(copy_consumed, NULL);
- ciphernameval = get_cipher_by_name(ciphername);
- if (ciphernameval == SSH_CIPHER_NONE && strcmp(ciphername, "none") != 0) {
+ cipher = get_cipher_by_name(ciphername);
+ if (cipher->id == SSH_CIPHER_NONE && strcmp(ciphername, "none") != 0) {
logprintf(LOG_LEVEL_ERROR, "%s: unknown cipher name", __FUNCTION__);
goto error;
}
@@ -509,7 +509,7 @@
/* size of encrypted key blob */
len = buffer_get_int(copy_consumed);
- blocksize = get_cipher_block_size(ciphernameval);
+ blocksize = get_cipher_block_size(cipher);
authlen = 0; // TODO: \x82??\x82\xA6\x82\xB8\x8CŒ艻
if (len < blocksize) {
logprintf(LOG_LEVEL_ERROR, __FUNCTION__ ": encrypted data too small");
@@ -521,7 +521,7 @@
}
/* setup key */
- keylen = get_cipher_key_len(ciphernameval);
+ keylen = get_cipher_key_len(cipher);
ivlen = blocksize;
key = calloc(1, keylen + ivlen);
if (!strcmp(kdfname, KDFNAME)) {
@@ -542,7 +542,7 @@
// \x95\x9C\x8D\x86\x89\xBB
cp = buffer_append_space(b, len);
cipher_init_SSH2(&cipher_ctx, key, keylen, key + keylen, ivlen, CIPHER_DECRYPT,
- get_cipher_EVP_CIPHER(ciphernameval), 0, 0, pvar);
+ get_cipher_EVP_CIPHER(cipher), 0, 0, pvar);
if (EVP_Cipher(&cipher_ctx, cp, buffer_tail_ptr(copy_consumed), len) == 0) {
cipher_cleanup_SSH2(&cipher_ctx);
goto error;
Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c 2017-12-18 10:41:02 UTC (rev 7001)
+++ trunk/ttssh2/ttxssh/ssh.c 2017-12-18 10:41:06 UTC (rev 7002)
@@ -4091,134 +4091,96 @@
// general
//
-int get_cipher_block_size(SSHCipher cipher)
+int get_cipher_block_size(ssh2_cipher_t *cipher)
{
- ssh2_cipher_t *ptr = ssh2_ciphers;
-
- while (ptr->name != NULL) {
- if (cipher == ptr->cipher) {
- return ptr->block_size;
- }
- ptr++;
+ int blocksize = 0;
+
+ if (cipher) {
+ blocksize = cipher->block_size;
}
- // not found.
- return 8;
+ return max(blocksize, 8);
}
-int get_cipher_key_len(SSHCipher cipher)
+int get_cipher_key_len(ssh2_cipher_t *cipher)
{
- ssh2_cipher_t *ptr = ssh2_ciphers;
-
- while (ptr->name != NULL) {
- if (cipher == ptr->cipher) {
- return ptr->key_len;
- }
- ptr++;
+ if (cipher) {
+ return cipher->key_len;
}
-
- // not found.
- return 0;
+ else {
+ return 0;
+ }
}
-int get_cipher_discard_len(SSHCipher cipher)
+int get_cipher_discard_len(ssh2_cipher_t *cipher)
{
- ssh2_cipher_t *ptr = ssh2_ciphers;
-
- while (ptr->name != NULL) {
- if (cipher == ptr->cipher) {
- return ptr->discard_len;
- }
- ptr++;
+ if (cipher) {
+ return cipher->discard_len;
}
-
- // not found.
- return 0;
+ else {
+ return 0;
+ }
}
-int get_cipher_iv_len(SSHCipher cipher)
+int get_cipher_iv_len(ssh2_cipher_t *cipher)
{
- ssh2_cipher_t *ptr = ssh2_ciphers;
-
- while (ptr->name != NULL) {
- if (cipher == ptr->cipher) {
- if (ptr->iv_len != 0) {
- return ptr->iv_len;
- }
- else {
- return ptr->block_size;
- }
+ if (cipher) {
+ if (cipher->iv_len != 0) {
+ return cipher->iv_len;
}
- ptr++;
+ else {
+ return cipher->block_size;
+ }
}
-
- // not found.
- return 8; // block_size
+ else {
+ return 8; // block_size
+ }
}
-int get_cipher_auth_len(SSHCipher cipher)
+int get_cipher_auth_len(ssh2_cipher_t *cipher)
{
- ssh2_cipher_t *ptr = ssh2_ciphers;
-
- while (ptr->name != NULL) {
- if (cipher == ptr->cipher) {
- return ptr->auth_len;
- }
- ptr++;
+ if (cipher) {
+ return cipher->auth_len;
}
-
- // not found.
- return 0;
+ else {
+ return 0;
+ }
}
// \x88Í\x86\x83A\x83\x8B\x83S\x83\x8A\x83Y\x83\x80\x96\xBC\x82\xA9\x82猟\x8D\x{142DC2}\xE9\x81B
-SSHCipher get_cipher_by_name(char *name)
+ssh2_cipher_t *get_cipher_by_name(char *name)
{
ssh2_cipher_t *ptr = ssh2_ciphers;
- if (name == NULL)
- goto error;
-
while (ptr->name != NULL) {
- if (strcmp(ptr->name, name) == 0) {
- return ptr->cipher;
+ if (name != NULL && strcmp(ptr->name, name) == 0) {
+ return ptr;
}
ptr++;
}
// not found.
-error:
- return SSH_CIPHER_NONE;
+ return ptr;
}
-static char * get_cipher_string(SSHCipher cipher)
+static char * get_cipher_string(ssh2_cipher_t *cipher)
{
- ssh2_cipher_t *ptr = ssh2_ciphers;
-
- while (ptr->name != NULL) {
- if (cipher == ptr->cipher) {
- return ptr->name;
- }
- ptr++;
+ if (cipher) {
+ return cipher->name;
}
-
- // not found.
- return "unknown";
+ else {
+ return "unknown";
+ }
}
-const EVP_CIPHER* get_cipher_EVP_CIPHER(SSHCipher cipher)
+const EVP_CIPHER* get_cipher_EVP_CIPHER(ssh2_cipher_t *cipher)
{
- ssh2_cipher_t *ptr = ssh2_ciphers;
-
- while (ptr->name != NULL) {
- if (cipher == ptr->cipher) {
- return ptr->func();
- }
- ptr++;
+ if (cipher) {
+ return cipher->func();
}
-
- // not found.
- return EVP_enc_null();
+ else {
+ return EVP_enc_null();
+ }
}
char* get_kex_algorithm_name(kex_algorithm kextype)
@@ -4711,7 +4673,6 @@
{
char tmp_cli[1024], *ptr_cli, *ctc_cli;
char tmp_svr[1024], *ptr_svr, *ctc_svr;
- SSHCipher cipher = SSH_CIPHER_NONE;
strncpy_s(tmp_cli, sizeof(tmp_cli), my_proposal, _TRUNCATE);
ptr_cli = strtok_s(tmp_cli, ",", &ctc_cli);
@@ -4756,23 +4717,13 @@
return (type);
}
-static SSHCipher choose_SSH2_cipher_algorithm(char *server_proposal, char *my_proposal)
+static ssh2_cipher_t *choose_SSH2_cipher_algorithm(char *server_proposal, char *my_proposal)
{
- SSHCipher cipher = SSH_CIPHER_NONE;
char str_cipher[32];
ssh2_cipher_t *ptr = ssh2_ciphers;
choose_SSH2_proposal(server_proposal, my_proposal, str_cipher, sizeof(str_cipher));
-
- while (ptr->name != NULL) {
- if (strcmp(ptr->name, str_cipher) == 0) {
- cipher = ptr->cipher;
- break;
- }
- ptr++;
- }
-
- return (cipher);
+ return get_cipher_by_name(str_cipher);
}
@@ -4828,19 +4779,19 @@
int mode, val;
unsigned int need = 0;
const EVP_MD *md;
- SSHCipher cipher;
+ ssh2_cipher_t *cipher;
hmac_type mac;
for (mode = 0; mode < MODE_MAX; mode++) {
if (mode == MODE_OUT) {
mac = pvar->ctos_hmac;
- cipher = pvar->ctos_cipher;
}
else {
mac = pvar->stoc_hmac;
- cipher = pvar->stoc_cipher;
}
+ cipher = pvar->ciphers[mode];
+
// current_keys[]\x82???\x82Ă\xA8\x82\xA2\x82āA\x82\xA0\x82?\xC5 pvar->ssh2_keys[] \x82?R\x83s\x81[\x82\xB7\x82\xE9\x81B
md = get_ssh2_mac_EVP_MD(mac);
current_keys[mode].mac.md = md;
@@ -4997,8 +4948,8 @@
logprintf(LOG_LEVEL_VERBOSE, "server proposal: encryption algorithm client to server: %s", buf);
- pvar->ctos_cipher = choose_SSH2_cipher_algorithm(buf, myproposal[PROPOSAL_ENC_ALGS_CTOS]);
- if (pvar->ctos_cipher == SSH_CIPHER_NONE) {
+ pvar->ciphers[MODE_OUT] = choose_SSH2_cipher_algorithm(buf, myproposal[PROPOSAL_ENC_ALGS_CTOS]);
+ if (pvar->ciphers[MODE_OUT]->id == SSH_CIPHER_NONE) {
strncpy_s(tmp, sizeof(tmp), "unknown Encrypt algorithm(ctos): ", _TRUNCATE);
strncat_s(tmp, sizeof(tmp), buf, _TRUNCATE);
msg = tmp;
@@ -5017,8 +4968,8 @@
logprintf(LOG_LEVEL_VERBOSE, "server proposal: encryption algorithm server to client: %s", buf);
- pvar->stoc_cipher = choose_SSH2_cipher_algorithm(buf, myproposal[PROPOSAL_ENC_ALGS_STOC]);
- if (pvar->stoc_cipher == SSH_CIPHER_NONE) {
+ pvar->ciphers[MODE_IN] = choose_SSH2_cipher_algorithm(buf, myproposal[PROPOSAL_ENC_ALGS_STOC]);
+ if (pvar->ciphers[MODE_IN]->id == SSH_CIPHER_NONE) {
strncpy_s(tmp, sizeof(tmp), "unknown Encrypt algorithm(stoc): ", _TRUNCATE);
strncat_s(tmp, sizeof(tmp), buf, _TRUNCATE);
msg = tmp;
@@ -5116,11 +5067,11 @@
logprintf(LOG_LEVEL_VERBOSE,
"encryption algorithm client to server: %s",
- get_cipher_string(pvar->ctos_cipher));
+ get_cipher_string(pvar->ciphers[MODE_OUT]));
logprintf(LOG_LEVEL_VERBOSE,
"encryption algorithm server to client: %s",
- get_cipher_string(pvar->stoc_cipher));
+ get_cipher_string(pvar->ciphers[MODE_IN]));
logprintf(LOG_LEVEL_VERBOSE,
"MAC algorithm client to server: %s",
Modified: trunk/ttssh2/ttxssh/ssh.h
===================================================================
--- trunk/ttssh2/ttxssh/ssh.h 2017-12-18 10:41:02 UTC (rev 7001)
+++ trunk/ttssh2/ttxssh/ssh.h 2017-12-18 10:41:06 UTC (rev 7002)
@@ -376,7 +376,7 @@
typedef struct ssh2_cipher {
- SSHCipher cipher;
+ SSHCipher id;
char *name;
int block_size;
int key_len;
@@ -773,13 +773,13 @@
BOOL do_SSH2_userauth(PTInstVar pvar);
BOOL do_SSH2_authrequest(PTInstVar pvar);
void debug_print(int no, char *msg, int len);
-int get_cipher_block_size(SSHCipher cipher);
-int get_cipher_key_len(SSHCipher cipher);
-int get_cipher_iv_len(SSHCipher cipher);
-int get_cipher_auth_len(SSHCipher cipher);
-SSHCipher get_cipher_by_name(char *name);
+int get_cipher_block_size(ssh2_cipher_t *cipher);
+int get_cipher_key_len(ssh2_cipher_t *cipher);
+int get_cipher_iv_len(ssh2_cipher_t *cipher);
+int get_cipher_auth_len(ssh2_cipher_t *cipher);
+ssh2_cipher_t *get_cipher_by_name(char *name);
char* get_kex_algorithm_name(kex_algorithm kextype);
-const EVP_CIPHER* get_cipher_EVP_CIPHER(SSHCipher cipher);
+const EVP_CIPHER* get_cipher_EVP_CIPHER(ssh2_cipher_t *cipher);
const EVP_MD* get_kex_algorithm_EVP_MD(kex_algorithm kextype);
char* get_ssh2_mac_name(hmac_type type);
const EVP_MD* get_ssh2_mac_EVP_MD(hmac_type type);
@@ -787,7 +787,7 @@
char* get_ssh2_comp_name(compression_type type);
char* get_ssh_keytype_name(ssh_keytype type);
char* get_digest_algorithm_name(digest_algorithm id);
-int get_cipher_discard_len(SSHCipher cipher);
+int get_cipher_discard_len(ssh2_cipher_t *cipher);
void ssh_heartbeat_lock_initialize(void);
void ssh_heartbeat_lock_finalize(void);
void ssh_heartbeat_lock(void);
Modified: trunk/ttssh2/ttxssh/ttxssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ttxssh.c 2017-12-18 10:41:02 UTC (rev 7001)
+++ trunk/ttssh2/ttxssh/ttxssh.c 2017-12-18 10:41:06 UTC (rev 7002)
@@ -4128,7 +4128,7 @@
// based on OpenSSH 6.5:key_save_private(), key_private_to_blob2()
static void save_bcrypt_private_key(char *passphrase, char *filename, char *comment, HWND dlg, PTInstVar pvar, int rounds)
{
- SSHCipher ciphernameval = SSH_CIPHER_NONE;
+ ssh2_cipher_t *cipher = NULL;
char *ciphername = DEFAULT_CIPHERNAME;
buffer_t *b = NULL;
buffer_t *kdf = NULL;
@@ -4156,9 +4156,9 @@
kdfname = "none";
}
- ciphernameval = get_cipher_by_name(ciphername);
- blocksize = get_cipher_block_size(ciphernameval);
- keylen = get_cipher_key_len(ciphernameval);
+ cipher = get_cipher_by_name(ciphername);
+ blocksize = get_cipher_block_size(cipher);
+ keylen = get_cipher_key_len(cipher);
ivlen = blocksize;
authlen = 0; // TODO: \x82??\x82\xA6\x82\xB8\x8CŒ艻
key = calloc(1, keylen + ivlen);
@@ -4176,7 +4176,7 @@
// TODO: OpenSSH 6.5\x82ł\xCD -Z \x83I\x83v\x83V\x83\x87\x83\x93\x82ŁA\x88Í\x86\x89\xBB\x83A\x83\x8B\x83S\x83\x8A\x83Y\x83\x80\x82\xF0\x8Ew\x92\xE8\x89?\\x82\xBE\x82\xAA\x81A
// \x82\xB1\x82\xB1\x82ł\xCD"AES256-CBC"\x82?Œ\xE8\x82?\xB7\x82\xE9\x81B
cipher_init_SSH2(&cipher_ctx, key, keylen, key + keylen, ivlen, CIPHER_ENCRYPT,
- get_cipher_EVP_CIPHER(ciphernameval), 0, 0, pvar);
+ get_cipher_EVP_CIPHER(cipher), 0, 0, pvar);
SecureZeroMemory(key, keylen + ivlen);
free(key);
Modified: trunk/ttssh2/ttxssh/ttxssh.h
===================================================================
--- trunk/ttssh2/ttxssh/ttxssh.h 2017-12-18 10:41:02 UTC (rev 7001)
+++ trunk/ttssh2/ttxssh/ttxssh.h 2017-12-18 10:41:06 UTC (rev 7002)
@@ -257,8 +257,7 @@
buffer_t *peer_kex;
kex_algorithm kex_type; // KEX algorithm
ssh_keytype hostkey_type;
- SSHCipher ctos_cipher;
- SSHCipher stoc_cipher;
+ ssh2_cipher_t *ciphers[MODE_MAX];
hmac_type ctos_hmac;
hmac_type stoc_hmac;
compression_type ctos_compression;
From scmnotify @ osdn.net Mon Dec 18 19:41:02 2017
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Mon, 18 Dec 2017 19:41:02 +0900
Subject: [Ttssh2-commit] =?utf-8?q?=5B7001=5D__Newkeys_=E3=82=92_SSHKeys_?=
=?utf-8?b?44Gr5ZCN56ew5aSJ5pu0?=
Message-ID: <1513593662.919949.95249.nullmailer@users.osdn.me>
Revision: 7001
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7001
Author: doda
Date: 2017-12-18 19:41:02 +0900 (Mon, 18 Dec 2017)
Log Message:
-----------
Newkeys を SSHKeys に名称変更
SSHKeys の方が実態を表しているので。
Modified Paths:
--------------
trunk/ttssh2/ttxssh/kex.c
trunk/ttssh2/ttxssh/ssh.c
trunk/ttssh2/ttxssh/ssh.h
trunk/ttssh2/ttxssh/ttxssh.h
-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/kex.c
===================================================================
--- trunk/ttssh2/ttxssh/kex.c 2017-12-18 10:40:58 UTC (rev 7000)
+++ trunk/ttssh2/ttxssh/kex.c 2017-12-18 10:41:02 UTC (rev 7001)
@@ -29,7 +29,7 @@
#include "ttxssh.h"
#include "kex.h"
-extern Newkeys current_keys[MODE_MAX];
+extern SSHKeys current_keys[MODE_MAX];
static DH *dh_new_group_asc(const char *gen, const char *modulus)
{
Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c 2017-12-18 10:40:58 UTC (rev 7000)
+++ trunk/ttssh2/ttxssh/ssh.c 2017-12-18 10:41:02 UTC (rev 7001)
@@ -4081,7 +4081,7 @@
#endif
}
-Newkeys current_keys[MODE_MAX];
+SSHKeys current_keys[MODE_MAX];
#define write_buffer_file(buf,len) do_write_buffer_file(buf,len,__FILE__,__LINE__)
Modified: trunk/ttssh2/ttxssh/ssh.h
===================================================================
--- trunk/ttssh2/ttxssh/ssh.h 2017-12-18 10:40:58 UTC (rev 7000)
+++ trunk/ttssh2/ttxssh/ssh.h 2017-12-18 10:41:02 UTC (rev 7001)
@@ -561,7 +561,7 @@
struct Enc enc;
struct Mac mac;
struct Comp comp;
-} Newkeys;
+} SSHKeys;
#define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
Modified: trunk/ttssh2/ttxssh/ttxssh.h
===================================================================
--- trunk/ttssh2/ttxssh/ttxssh.h 2017-12-18 10:40:58 UTC (rev 7000)
+++ trunk/ttssh2/ttxssh/ttxssh.h 2017-12-18 10:41:02 UTC (rev 7001)
@@ -268,7 +268,7 @@
int rekeying;
char *session_id;
int session_id_len;
- Newkeys ssh2_keys[MODE_MAX];
+ SSHKeys ssh2_keys[MODE_MAX];
EVP_CIPHER_CTX evpcip[MODE_MAX];
int userauth_success;
int shell_id;
From scmnotify @ osdn.net Mon Dec 18 19:41:13 2017
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Mon, 18 Dec 2017 19:41:13 +0900
Subject: [Ttssh2-commit] =?utf-8?b?WzcwMDRdICDlnovlkI3lpInmm7TjgILkuLs=?=
=?utf-8?b?44Gr6KaL5qCE44GI44Gu54K644CC?=
Message-ID: <1513593673.704923.95605.nullmailer@users.osdn.me>
Revision: 7004
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7004
Author: doda
Date: 2017-12-18 19:41:13 +0900 (Mon, 18 Dec 2017)
Log Message:
-----------
型名変更。主に見栄えの為。
・SSHCipher -> SSHCipherId
・ssh2_cipher_t -> SSH2Cipher
Modified Paths:
--------------
trunk/ttssh2/ttxssh/crypt.c
trunk/ttssh2/ttxssh/keyfiles.c
trunk/ttssh2/ttxssh/ssh.c
trunk/ttssh2/ttxssh/ssh.h
trunk/ttssh2/ttxssh/ttxssh.c
trunk/ttssh2/ttxssh/ttxssh.h
-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/crypt.c
===================================================================
--- trunk/ttssh2/ttxssh/crypt.c 2017-12-18 10:41:10 UTC (rev 7003)
+++ trunk/ttssh2/ttxssh/crypt.c 2017-12-18 10:41:13 UTC (rev 7004)
@@ -1069,7 +1069,7 @@
struct Enc *enc;
char *encryption_key = pvar->crypt_state.sender_cipher_key;
char *decryption_key = pvar->crypt_state.receiver_cipher_key;
- ssh2_cipher_t *cipher;
+ SSH2Cipher *cipher;
BOOL isOK = TRUE;
if (sender_flag) {
Modified: trunk/ttssh2/ttxssh/keyfiles.c
===================================================================
--- trunk/ttssh2/ttxssh/keyfiles.c 2017-12-18 10:41:10 UTC (rev 7003)
+++ trunk/ttssh2/ttxssh/keyfiles.c 2017-12-18 10:41:13 UTC (rev 7004)
@@ -371,7 +371,7 @@
unsigned int len, klen, nkeys, blocksize, keylen, ivlen, slen, rounds;
unsigned int check1, check2, m1len, m2len;
int dlen, i;
- ssh2_cipher_t *cipher;
+ SSH2Cipher *cipher;
size_t authlen;
EVP_CIPHER_CTX cipher_ctx;
Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c 2017-12-18 10:41:10 UTC (rev 7003)
+++ trunk/ttssh2/ttxssh/ssh.c 2017-12-18 10:41:13 UTC (rev 7004)
@@ -4091,7 +4091,7 @@
// general
//
-int get_cipher_block_size(ssh2_cipher_t *cipher)
+int get_cipher_block_size(SSH2Cipher *cipher)
{
int blocksize = 0;
@@ -4102,7 +4102,7 @@
return max(blocksize, 8);
}
-int get_cipher_key_len(ssh2_cipher_t *cipher)
+int get_cipher_key_len(SSH2Cipher *cipher)
{
if (cipher) {
return cipher->key_len;
@@ -4112,7 +4112,7 @@
}
}
-int get_cipher_discard_len(ssh2_cipher_t *cipher)
+int get_cipher_discard_len(SSH2Cipher *cipher)
{
if (cipher) {
return cipher->discard_len;
@@ -4122,7 +4122,7 @@
}
}
-int get_cipher_iv_len(ssh2_cipher_t *cipher)
+int get_cipher_iv_len(SSH2Cipher *cipher)
{
if (cipher) {
if (cipher->iv_len != 0) {
@@ -4137,7 +4137,7 @@
}
}
-int get_cipher_auth_len(ssh2_cipher_t *cipher)
+int get_cipher_auth_len(SSH2Cipher *cipher)
{
if (cipher) {
return cipher->auth_len;
@@ -4148,9 +4148,9 @@
}
// \x88Í\x86\x83A\x83\x8B\x83S\x83\x8A\x83Y\x83\x80\x96\xBC\x82\xA9\x82猟\x8D\x{142DC2}\xE9\x81B
-ssh2_cipher_t *get_cipher_by_name(char *name)
+SSH2Cipher *get_cipher_by_name(char *name)
{
- ssh2_cipher_t *ptr = ssh2_ciphers;
+ SSH2Cipher *ptr = ssh2_ciphers;
while (ptr->name != NULL) {
if (name != NULL && strcmp(ptr->name, name) == 0) {
@@ -4163,7 +4163,7 @@
return ptr;
}
-static char * get_cipher_string(ssh2_cipher_t *cipher)
+static char * get_cipher_string(SSH2Cipher *cipher)
{
if (cipher) {
return cipher->name;
@@ -4173,7 +4173,7 @@
}
}
-const EVP_CIPHER* get_cipher_EVP_CIPHER(ssh2_cipher_t *cipher)
+const EVP_CIPHER* get_cipher_EVP_CIPHER(SSH2Cipher *cipher)
{
if (cipher) {
return cipher->func();
@@ -4717,10 +4717,10 @@
return (type);
}
-static ssh2_cipher_t *choose_SSH2_cipher_algorithm(char *server_proposal, char *my_proposal)
+static SSH2Cipher *choose_SSH2_cipher_algorithm(char *server_proposal, char *my_proposal)
{
char str_cipher[32];
- ssh2_cipher_t *ptr = ssh2_ciphers;
+ SSH2Cipher *ptr = ssh2_ciphers;
choose_SSH2_proposal(server_proposal, my_proposal, str_cipher, sizeof(str_cipher));
return get_cipher_by_name(str_cipher);
@@ -4779,7 +4779,7 @@
int mode, val;
unsigned int need = 0;
const EVP_MD *md;
- ssh2_cipher_t *cipher;
+ SSH2Cipher *cipher;
hmac_type mac;
for (mode = 0; mode < MODE_MAX; mode++) {
Modified: trunk/ttssh2/ttxssh/ssh.h
===================================================================
--- trunk/ttssh2/ttxssh/ssh.h 2017-12-18 10:41:10 UTC (rev 7003)
+++ trunk/ttssh2/ttxssh/ssh.h 2017-12-18 10:41:13 UTC (rev 7004)
@@ -97,7 +97,7 @@
SSH2_CIPHER_CAMELLIA128_CTR, SSH2_CIPHER_CAMELLIA192_CTR, SSH2_CIPHER_CAMELLIA256_CTR,
SSH2_CIPHER_AES128_GCM, SSH2_CIPHER_AES256_GCM,
SSH_CIPHER_MAX = SSH2_CIPHER_AES256_GCM,
-} SSHCipher;
+} SSHCipherId;
typedef enum {
SSH_AUTH_NONE, SSH_AUTH_RHOSTS, SSH_AUTH_RSA, SSH_AUTH_PASSWORD,
@@ -376,7 +376,7 @@
typedef struct ssh2_cipher {
- SSHCipher id;
+ SSHCipherId id;
char *name;
int block_size;
int key_len;
@@ -384,9 +384,9 @@
int iv_len;
int auth_len;
const EVP_CIPHER *(*func)(void);
-} ssh2_cipher_t;
+} SSH2Cipher;
-static ssh2_cipher_t ssh2_ciphers[] = {
+static SSH2Cipher ssh2_ciphers[] = {
{SSH2_CIPHER_3DES_CBC, "3des-cbc", 8, 24, 0, 0, 0, EVP_des_ede3_cbc}, // RFC4253
{SSH2_CIPHER_AES128_CBC, "aes128-cbc", 16, 16, 0, 0, 0, EVP_aes_128_cbc}, // RFC4253
{SSH2_CIPHER_AES192_CBC, "aes192-cbc", 16, 24, 0, 0, 0, EVP_aes_192_cbc}, // RFC4253
@@ -773,13 +773,13 @@
BOOL do_SSH2_userauth(PTInstVar pvar);
BOOL do_SSH2_authrequest(PTInstVar pvar);
void debug_print(int no, char *msg, int len);
-int get_cipher_block_size(ssh2_cipher_t *cipher);
-int get_cipher_key_len(ssh2_cipher_t *cipher);
-int get_cipher_iv_len(ssh2_cipher_t *cipher);
-int get_cipher_auth_len(ssh2_cipher_t *cipher);
-ssh2_cipher_t *get_cipher_by_name(char *name);
+int get_cipher_block_size(SSH2Cipher *cipher);
+int get_cipher_key_len(SSH2Cipher *cipher);
+int get_cipher_iv_len(SSH2Cipher *cipher);
+int get_cipher_auth_len(SSH2Cipher *cipher);
+SSH2Cipher *get_cipher_by_name(char *name);
char* get_kex_algorithm_name(kex_algorithm kextype);
-const EVP_CIPHER* get_cipher_EVP_CIPHER(ssh2_cipher_t *cipher);
+const EVP_CIPHER* get_cipher_EVP_CIPHER(SSH2Cipher *cipher);
const EVP_MD* get_kex_algorithm_EVP_MD(kex_algorithm kextype);
char* get_ssh2_mac_name(hmac_type type);
const EVP_MD* get_ssh2_mac_EVP_MD(hmac_type type);
@@ -787,7 +787,7 @@
char* get_ssh2_comp_name(compression_type type);
char* get_ssh_keytype_name(ssh_keytype type);
char* get_digest_algorithm_name(digest_algorithm id);
-int get_cipher_discard_len(ssh2_cipher_t *cipher);
+int get_cipher_discard_len(SSH2Cipher *cipher);
void ssh_heartbeat_lock_initialize(void);
void ssh_heartbeat_lock_finalize(void);
void ssh_heartbeat_lock(void);
Modified: trunk/ttssh2/ttxssh/ttxssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ttxssh.c 2017-12-18 10:41:10 UTC (rev 7003)
+++ trunk/ttssh2/ttxssh/ttxssh.c 2017-12-18 10:41:13 UTC (rev 7004)
@@ -4128,7 +4128,7 @@
// based on OpenSSH 6.5:key_save_private(), key_private_to_blob2()
static void save_bcrypt_private_key(char *passphrase, char *filename, char *comment, HWND dlg, PTInstVar pvar, int rounds)
{
- ssh2_cipher_t *cipher = NULL;
+ SSH2Cipher *cipher = NULL;
char *ciphername = DEFAULT_CIPHERNAME;
buffer_t *b = NULL;
buffer_t *kdf = NULL;
Modified: trunk/ttssh2/ttxssh/ttxssh.h
===================================================================
--- trunk/ttssh2/ttxssh/ttxssh.h 2017-12-18 10:41:10 UTC (rev 7003)
+++ trunk/ttssh2/ttxssh/ttxssh.h 2017-12-18 10:41:13 UTC (rev 7004)
@@ -257,7 +257,7 @@
buffer_t *peer_kex;
kex_algorithm kex_type; // KEX algorithm
ssh_keytype hostkey_type;
- ssh2_cipher_t *ciphers[MODE_MAX];
+ SSH2Cipher *ciphers[MODE_MAX];
hmac_type ctos_hmac;
hmac_type stoc_hmac;
compression_type ctos_compression;
From scmnotify @ osdn.net Mon Dec 18 19:41:10 2017
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Mon, 18 Dec 2017 19:41:10 +0900
Subject: [Ttssh2-commit] [7003] memset() -> SecureZeroMemory()
Message-ID: <1513593670.263509.95492.nullmailer@users.osdn.me>
Revision: 7003
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7003
Author: doda
Date: 2017-12-18 19:41:10 +0900 (Mon, 18 Dec 2017)
Log Message:
-----------
memset() -> SecureZeroMemory()
memset() のままでも大丈夫だと思うけれど、念の為。
Modified Paths:
--------------
trunk/ttssh2/ttxssh/crypt.c
-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/crypt.c
===================================================================
--- trunk/ttssh2/ttxssh/crypt.c 2017-12-18 10:41:06 UTC (rev 7002)
+++ trunk/ttssh2/ttxssh/crypt.c 2017-12-18 10:41:10 UTC (rev 7003)
@@ -934,7 +934,7 @@
challenge + decrypted_challenge_len -
SSH_RSA_CHALLENGE_LENGTH, SSH_RSA_CHALLENGE_LENGTH);
} else {
- memset(decrypted_challenge, 0,
+ SecureZeroMemory(decrypted_challenge,
SSH_RSA_CHALLENGE_LENGTH - decrypted_challenge_len);
memcpy(decrypted_challenge + SSH_RSA_CHALLENGE_LENGTH -
decrypted_challenge_len, challenge,
@@ -960,15 +960,15 @@
DES_set_key((const_DES_cblock *) session_key, &state->k1);
DES_set_key((const_DES_cblock *) (session_key + 8), &state->k2);
DES_set_key((const_DES_cblock *) (session_key + 16), &state->k3);
- memset(state->ivec1, 0, 8);
- memset(state->ivec2, 0, 8);
- memset(state->ivec3, 0, 8);
+ SecureZeroMemory(state->ivec1, 8);
+ SecureZeroMemory(state->ivec2, 8);
+ SecureZeroMemory(state->ivec3, 8);
}
static void cDES_init(char *session_key, CipherDESState *state)
{
DES_set_key((const_DES_cblock *) session_key, &state->k);
- memset(state->ivec, 0, 8);
+ SecureZeroMemory(state->ivec, 8);
}
static void cBlowfish_init(char *session_key,
@@ -975,7 +975,7 @@
CipherBlowfishState *state)
{
BF_set_key(&state->k, 32, session_key);
- memset(state->ivec, 0, 8);
+ SecureZeroMemory(state->ivec, 8);
}
@@ -1174,8 +1174,8 @@
notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE);
return FALSE;
} else {
- memset(encryption_key, 0, CRYPT_KEY_LENGTH);
- memset(decryption_key, 0, CRYPT_KEY_LENGTH);
+ SecureZeroMemory(encryption_key, CRYPT_KEY_LENGTH);
+ SecureZeroMemory(decryption_key, CRYPT_KEY_LENGTH);
return TRUE;
}
}
@@ -1345,9 +1345,9 @@
&state.k2);
DES_set_key((const_DES_cblock *) passphrase_key,
&state.k3);
- memset(state.ivec1, 0, 8);
- memset(state.ivec2, 0, 8);
- memset(state.ivec3, 0, 8);
+ SecureZeroMemory(state.ivec1, 8);
+ SecureZeroMemory(state.ivec2, 8);
+ SecureZeroMemory(state.ivec3, 8);
DES_ncbc_encrypt(buf, buf, bytes,
&state.k3, &state.ivec3, DES_DECRYPT);
DES_ncbc_encrypt(buf, buf, bytes,
@@ -1370,7 +1370,7 @@
CipherBlowfishState state;
BF_set_key(&state.k, 16, passphrase_key);
- memset(state.ivec, 0, 8);
+ SecureZeroMemory(state.ivec, 8);
flip_endianness(buf, bytes);
BF_cbc_encrypt(buf, buf, bytes, &state.k, state.ivec,
BF_DECRYPT);
From scmnotify @ osdn.net Mon Dec 18 20:06:06 2017
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Mon, 18 Dec 2017 20:06:06 +0900
Subject: [Ttssh2-commit] =?utf-8?b?WzcwMDVdICDjg5Hjgrnjg6/jg7zjg4nnhKE=?=
=?utf-8?b?44GX44GnIGJjcnlwdF9LREYg5b2i5byP44Gn56eY5a+G6Y2144KS5L+d5a2Y?=
=?utf-8?b?44GX44Gf5pmC44Gr6JC944Gh44KL44Gu44KS5L+u5q2j44CC?=
Message-ID: <1513595166.590754.10206.nullmailer@users.osdn.me>
Revision: 7005
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7005
Author: doda
Date: 2017-12-18 20:06:06 +0900 (Mon, 18 Dec 2017)
Log Message:
-----------
パスワード無しで bcrypt_KDF 形式で秘密鍵を保存した時に落ちるのを修正。
r7002 でのエンバグ。
get_cipher_by_name() で暗号が見つからなかった場合に SSH_CIPHER_NONE
へのポインタではなく、NULL を返すようにした。
Revision Links:
--------------
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7002
Modified Paths:
--------------
trunk/ttssh2/ttxssh/keyfiles.c
trunk/ttssh2/ttxssh/ssh.c
-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/keyfiles.c
===================================================================
--- trunk/ttssh2/ttxssh/keyfiles.c 2017-12-18 10:41:13 UTC (rev 7004)
+++ trunk/ttssh2/ttxssh/keyfiles.c 2017-12-18 11:06:06 UTC (rev 7005)
@@ -453,7 +453,7 @@
// \x88Í\x86\x89\xBB\x83A\x83\x8B\x83S\x83\x8A\x83Y\x83\x80\x82?\xBC\x91O
ciphername = buffer_get_string_msg(copy_consumed, NULL);
cipher = get_cipher_by_name(ciphername);
- if (cipher->id == SSH_CIPHER_NONE && strcmp(ciphername, "none") != 0) {
+ if (cipher == NULL && strcmp(ciphername, "none") != 0) {
logprintf(LOG_LEVEL_ERROR, "%s: unknown cipher name", __FUNCTION__);
goto error;
}
Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c 2017-12-18 10:41:13 UTC (rev 7004)
+++ trunk/ttssh2/ttxssh/ssh.c 2017-12-18 11:06:06 UTC (rev 7005)
@@ -4152,8 +4152,11 @@
{
SSH2Cipher *ptr = ssh2_ciphers;
+ if (name == NULL || name[0] == '\0')
+ return NULL;
+
while (ptr->name != NULL) {
- if (name != NULL && strcmp(ptr->name, name) == 0) {
+ if (strcmp(ptr->name, name) == 0) {
return ptr;
}
ptr++;
@@ -4160,7 +4163,7 @@
}
// not found.
- return ptr;
+ return NULL;
}
static char * get_cipher_string(SSH2Cipher *cipher)
From scmnotify @ osdn.net Mon Dec 18 20:06:13 2017
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Mon, 18 Dec 2017 20:06:13 +0900
Subject: [Ttssh2-commit] =?utf-8?b?WzcwMDddICBNQUMg56iu5Yil44Go44GX44Gm?=
=?utf-8?b?IEltcGxpY2l0IOOCkui/veWKoCBUaWNrZXQgOiAgIzM3NzQx?=
Message-ID: <1513595173.564414.10353.nullmailer@users.osdn.me>
Revision: 7007
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7007
Author: doda
Date: 2017-12-18 20:06:13 +0900 (Mon, 18 Dec 2017)
Log Message:
-----------
MAC 種別として Implicit を追加 Ticket: #37741
取りあえず ssh.h に Implicit を追加
Ticket Links:
------------
http://sourceforge.jp/projects/ttssh2/tracker/detail/37741
Modified Paths:
--------------
trunk/ttssh2/ttxssh/ssh.h
-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/ssh.h
===================================================================
--- trunk/ttssh2/ttxssh/ssh.h 2017-12-18 11:06:09 UTC (rev 7006)
+++ trunk/ttssh2/ttxssh/ssh.h 2017-12-18 11:06:13 UTC (rev 7007)
@@ -477,6 +477,7 @@
HMAC_RIPEMD160_EtM,
HMAC_SHA2_256_EtM,
HMAC_SHA2_512_EtM,
+ HMAC_IMPLICIT,
HMAC_UNKNOWN,
HMAC_MAX = HMAC_UNKNOWN,
} SSH2MacId;
@@ -506,6 +507,7 @@
{HMAC_RIPEMD160_EtM,"hmac-ripemd160-etm @ openssh.com",EVP_ripemd160, 0, 1},
{HMAC_SHA2_256_EtM, "hmac-sha2-256-etm @ openssh.com", EVP_sha256, 0, 1},
{HMAC_SHA2_512_EtM, "hmac-sha2-512-etm @ openssh.com", EVP_sha512, 0, 1},
+ {HMAC_IMPLICIT, "", EVP_md_null, 0, 0}, // for AEAD cipher
{HMAC_NONE, NULL, NULL, 0, 0},
};
From scmnotify @ osdn.net Mon Dec 18 20:06:10 2017
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Mon, 18 Dec 2017 20:06:10 +0900
Subject: [Ttssh2-commit] =?utf-8?b?WzcwMDZdICBNQUMg5pa55byP44Gu566h55CG?=
=?utf-8?b?44KS44CB5pqX5Y+35pa55byP44KS6KGo44GZ5YCkIChobWFjX3R5cGUpIA==?=
=?utf-8?b?44GL44KJIHNzaDJfbWFjcyDlhoXjga7jgqjjg7Pjg4jjg6rjgbjjga7jg50=?=
=?utf-8?b?44Kk44Oz44K/44KS5L2/44GG44KI44GG44Gr5aSJ5pu044CC?=
Message-ID: <1513595170.121325.10292.nullmailer@users.osdn.me>
Revision: 7006
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7006
Author: doda
Date: 2017-12-18 20:06:09 +0900 (Mon, 18 Dec 2017)
Log Message:
-----------
MAC 方式の管理を、暗号方式を表す値(hmac_type)から ssh2_macs 内のエントリへのポインタを使うように変更。
これにより、MAC 式のパラメータ(truncatebits等)が容易に参照できるようになる。
また、TInstVar 内でも ctos_hmac/stoc_hmac のように方向を名前で分けるのではなく、
macs[MODE] のように配列にする事で扱い易くする。
Modified Paths:
--------------
trunk/ttssh2/ttxssh/ssh.c
trunk/ttssh2/ttxssh/ssh.h
trunk/ttssh2/ttxssh/ttxssh.c
trunk/ttssh2/ttxssh/ttxssh.h
-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c 2017-12-18 11:06:06 UTC (rev 7005)
+++ trunk/ttssh2/ttxssh/ssh.c 2017-12-18 11:06:09 UTC (rev 7006)
@@ -3165,8 +3165,8 @@
UTIL_get_lang_msg("DLG_ABOUT_MAC_INFO", pvar,
"%s to server, %s from server");
_snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg,
- get_ssh2_mac_name(pvar->ctos_hmac),
- get_ssh2_mac_name(pvar->stoc_hmac));
+ get_ssh2_mac_name(pvar->macs[MODE_OUT]),
+ get_ssh2_mac_name(pvar->macs[MODE_IN]));
}
void SSH_end(PTInstVar pvar)
@@ -4216,64 +4216,63 @@
return EVP_md_null();
}
-char* get_ssh2_mac_name(hmac_type type)
+SSH2Mac *get_ssh2_mac(SSH2MacId id)
{
- ssh2_mac_t *ptr = ssh2_macs;
+ SSH2Mac *ptr = ssh2_macs;
while (ptr->name != NULL) {
- if (type == ptr->type) {
- return ptr->name;
+ if (ptr->id == id) {
+ return ptr;
}
ptr++;
}
- // not found.
- return "unknown";
+ return NULL;
}
-const EVP_MD* get_ssh2_mac_EVP_MD(hmac_type type)
+char* get_ssh2_mac_name(SSH2Mac *mac)
{
- ssh2_mac_t *ptr = ssh2_macs;
-
- while (ptr->name != NULL) {
- if (type == ptr->type) {
- return ptr->evp_md();
- }
- ptr++;
+ if (mac) {
+ return mac->name;
}
+ else {
+ return "unknown";
+ }
+}
- // not found.
- return EVP_md_null();
+char* get_ssh2_mac_name_by_id(SSH2MacId id)
+{
+ return get_ssh2_mac_name(get_ssh2_mac(id));
}
-int get_ssh2_mac_truncatebits(hmac_type type)
+const EVP_MD* get_ssh2_mac_EVP_MD(SSH2Mac *mac)
{
- ssh2_mac_t *ptr = ssh2_macs;
+ if (mac) {
+ return mac->evp_md();
+ }
+ else {
+ return EVP_md_null();
+ }
+}
- while (ptr->name != NULL) {
- if (type == ptr->type) {
- return ptr->truncatebits;
- }
- ptr++;
+int get_ssh2_mac_truncatebits(SSH2Mac *mac)
+{
+ if (mac) {
+ return mac->truncatebits;
}
-
- // not found.
- return 0;
+ else {
+ return 0;
+ }
}
-int get_ssh2_mac_etm(hmac_type type)
+int get_ssh2_mac_etm(SSH2Mac *mac)
{
- ssh2_mac_t *ptr = ssh2_macs;
-
- while (ptr->name != NULL) {
- if (type == ptr->type) {
- return ptr->etm;
- }
- ptr++;
+ if (mac) {
+ return mac->etm;
}
-
- // not found
- return 0;
+ else {
+ return 0;
+ }
}
char* get_ssh2_comp_name(compression_type type)
@@ -4580,7 +4579,7 @@
index = pvar->settings.MacOrder[i] - '0';
if (index == HMAC_NONE) // disabled line
break;
- strncat_s(buf, sizeof(buf), get_ssh2_mac_name(index), _TRUNCATE);
+ strncat_s(buf, sizeof(buf), get_ssh2_mac_name_by_id(index), _TRUNCATE);
strncat_s(buf, sizeof(buf), ",", _TRUNCATE);
}
len = strlen(buf);
@@ -4730,23 +4729,21 @@
}
-static hmac_type choose_SSH2_hmac_algorithm(char *server_proposal, char *my_proposal)
+static SSH2Mac *choose_SSH2_mac_algorithm(char *server_proposal, char *my_proposal)
{
- hmac_type type = HMAC_UNKNOWN;
char str_hmac[64];
- ssh2_mac_t *ptr = ssh2_macs;
+ SSH2Mac *ptr = ssh2_macs;
choose_SSH2_proposal(server_proposal, my_proposal, str_hmac, sizeof(str_hmac));
while (ptr->name != NULL) {
if (strcmp(ptr->name, str_hmac) == 0) {
- type = ptr->type;
- break;
+ return ptr;
}
ptr++;
}
- return (type);
+ return (NULL);
}
@@ -4783,17 +4780,11 @@
unsigned int need = 0;
const EVP_MD *md;
SSH2Cipher *cipher;
- hmac_type mac;
+ SSH2Mac *mac;
for (mode = 0; mode < MODE_MAX; mode++) {
- if (mode == MODE_OUT) {
- mac = pvar->ctos_hmac;
- }
- else {
- mac = pvar->stoc_hmac;
- }
-
cipher = pvar->ciphers[mode];
+ mac = pvar->macs[mode];
// current_keys[]\x82???\x82Ă\xA8\x82\xA2\x82āA\x82\xA0\x82?\xC5 pvar->ssh2_keys[] \x82?R\x83s\x81[\x82\xB7\x82\xE9\x81B
md = get_ssh2_mac_EVP_MD(mac);
@@ -4817,9 +4808,7 @@
// \x8C\xBB\x8E\x9E\x93_\x82ł\xCDMAC\x82\xCDdisable
pvar->ssh2_keys[mode].mac.enabled = 0;
pvar->ssh2_keys[mode].comp.enabled = 0; // (2005.7.9 yutaka)
- }
- for (mode = 0; mode < MODE_MAX; mode++) {
need = max(need, current_keys[mode].enc.key_len);
need = max(need, current_keys[mode].enc.block_size);
need = max(need, current_keys[mode].enc.iv_len);
@@ -4991,8 +4980,8 @@
logprintf(LOG_LEVEL_VERBOSE, "server proposal: MAC algorithm client to server: %s", buf);
- pvar->ctos_hmac = choose_SSH2_hmac_algorithm(buf, myproposal[PROPOSAL_MAC_ALGS_CTOS]);
- if (pvar->ctos_hmac == HMAC_UNKNOWN) { // not match
+ pvar->macs[MODE_OUT] = choose_SSH2_mac_algorithm(buf, myproposal[PROPOSAL_MAC_ALGS_CTOS]);
+ if (pvar->macs[MODE_OUT] == NULL) { // not match
strncpy_s(tmp, sizeof(tmp), "unknown MAC algorithm: ", _TRUNCATE);
strncat_s(tmp, sizeof(tmp), buf, _TRUNCATE);
msg = tmp;
@@ -5010,8 +4999,8 @@
logprintf(LOG_LEVEL_VERBOSE, "server proposal: MAC algorithm server to client: %s", buf);
- pvar->stoc_hmac = choose_SSH2_hmac_algorithm(buf, myproposal[PROPOSAL_MAC_ALGS_STOC]);
- if (pvar->stoc_hmac == HMAC_UNKNOWN) { // not match
+ pvar->macs[MODE_IN] = choose_SSH2_mac_algorithm(buf, myproposal[PROPOSAL_MAC_ALGS_STOC]);
+ if (pvar->macs[MODE_IN] == NULL) { // not match
strncpy_s(tmp, sizeof(tmp), "unknown MAC algorithm: ", _TRUNCATE);
strncat_s(tmp, sizeof(tmp), buf, _TRUNCATE);
msg = tmp;
@@ -5078,11 +5067,11 @@
logprintf(LOG_LEVEL_VERBOSE,
"MAC algorithm client to server: %s",
- get_ssh2_mac_name(pvar->ctos_hmac));
+ get_ssh2_mac_name(pvar->macs[MODE_OUT]));
logprintf(LOG_LEVEL_VERBOSE,
"MAC algorithm server to client: %s",
- get_ssh2_mac_name(pvar->stoc_hmac));
+ get_ssh2_mac_name(pvar->macs[MODE_IN]));
logprintf(LOG_LEVEL_VERBOSE,
"compression algorithm client to server: %s",
Modified: trunk/ttssh2/ttxssh/ssh.h
===================================================================
--- trunk/ttssh2/ttxssh/ssh.h 2017-12-18 11:06:06 UTC (rev 7005)
+++ trunk/ttssh2/ttxssh/ssh.h 2017-12-18 11:06:09 UTC (rev 7006)
@@ -479,17 +479,17 @@
HMAC_SHA2_512_EtM,
HMAC_UNKNOWN,
HMAC_MAX = HMAC_UNKNOWN,
-} hmac_type;
+} SSH2MacId;
typedef struct ssh2_mac {
- hmac_type type;
+ SSH2MacId id;
char *name;
const EVP_MD *(*evp_md)(void);
int truncatebits;
int etm;
-} ssh2_mac_t;
+} SSH2Mac;
-static ssh2_mac_t ssh2_macs[] = {
+static SSH2Mac ssh2_macs[] = {
{HMAC_SHA1, "hmac-sha1", EVP_sha1, 0, 0}, // RFC4253
{HMAC_MD5, "hmac-md5", EVP_md5, 0, 0}, // RFC4253
{HMAC_SHA1_96, "hmac-sha1-96", EVP_sha1, 96, 0}, // RFC4253
@@ -781,9 +781,11 @@
char* get_kex_algorithm_name(kex_algorithm kextype);
const EVP_CIPHER* get_cipher_EVP_CIPHER(SSH2Cipher *cipher);
const EVP_MD* get_kex_algorithm_EVP_MD(kex_algorithm kextype);
-char* get_ssh2_mac_name(hmac_type type);
-const EVP_MD* get_ssh2_mac_EVP_MD(hmac_type type);
-int get_ssh2_mac_truncatebits(hmac_type type);
+SSH2Mac *get_ssh2_mac(SSH2MacId id);
+char* get_ssh2_mac_name(SSH2Mac *mac);
+char* get_ssh2_mac_name_by_id(SSH2MacId id);
+const EVP_MD* get_ssh2_mac_EVP_MD(SSH2Mac *mac);
+int get_ssh2_mac_truncatebits(SSH2Mac *mac);
char* get_ssh2_comp_name(compression_type type);
char* get_ssh_keytype_name(ssh_keytype type);
char* get_digest_algorithm_name(digest_algorithm id);
Modified: trunk/ttssh2/ttxssh/ttxssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ttxssh.c 2017-12-18 11:06:06 UTC (rev 7005)
+++ trunk/ttssh2/ttxssh/ttxssh.c 2017-12-18 11:06:09 UTC (rev 7006)
@@ -2833,7 +2833,7 @@
"");
name = pvar->ts->UIMsg;
} else {
- name = get_ssh2_mac_name(index);
+ name = get_ssh2_mac_name_by_id(index);
}
if (name != NULL) {
@@ -3093,7 +3093,7 @@
SendMessage(cipherControl, LB_GETTEXT, i, (LPARAM) buf);
for (j = 0;
j <= HMAC_MAX
- && strcmp(buf, get_ssh2_mac_name(j)) != 0; j++) {
+ && strcmp(buf, get_ssh2_mac_name_by_id(j)) != 0; j++) {
}
if (j <= HMAC_MAX) {
buf2[buf2index] = '0' + j;
Modified: trunk/ttssh2/ttxssh/ttxssh.h
===================================================================
--- trunk/ttssh2/ttxssh/ttxssh.h 2017-12-18 11:06:06 UTC (rev 7005)
+++ trunk/ttssh2/ttxssh/ttxssh.h 2017-12-18 11:06:09 UTC (rev 7006)
@@ -258,8 +258,7 @@
kex_algorithm kex_type; // KEX algorithm
ssh_keytype hostkey_type;
SSH2Cipher *ciphers[MODE_MAX];
- hmac_type ctos_hmac;
- hmac_type stoc_hmac;
+ SSH2Mac *macs[MODE_MAX];
compression_type ctos_compression;
compression_type stoc_compression;
int we_need;
From scmnotify @ osdn.net Mon Dec 18 20:06:16 2017
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Mon, 18 Dec 2017 20:06:16 +0900
Subject: [Ttssh2-commit] =?utf-8?b?WzcwMDhdICBBRUFEIOaal+WPt+S9v+eUqA==?=
=?utf-8?b?5pmC44GvIE1BQyBOZWdvdGlhdGlvbiDjga7ntZDmnpzjgpLnhKHoppbjgZk=?=
=?utf-8?b?44KL44KI44GG44Gr44GX44GfICMzNzc1MA==?=
Message-ID: <1513595176.705539.10405.nullmailer@users.osdn.me>
Revision: 7008
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7008
Author: doda
Date: 2017-12-18 20:06:16 +0900 (Mon, 18 Dec 2017)
Log Message:
-----------
AEAD 暗号使用時は MAC Negotiation の結果を無視するようにした #37750
併せて、AEAD 暗号使用時に About TTSSH ダイアログで MAC 方式を
と表示するようにした。 #37741
Ticket Links:
------------
http://sourceforge.jp/projects/ttssh2/tracker/detail/37750
http://sourceforge.jp/projects/ttssh2/tracker/detail/37741
Modified Paths:
--------------
trunk/doc/en/html/about/history.html
trunk/doc/ja/html/about/history.html
trunk/ttssh2/ttxssh/ssh.c
-------------- next part --------------
Modified: trunk/doc/en/html/about/history.html
===================================================================
--- trunk/doc/en/html/about/history.html 2017-12-18 11:06:13 UTC (rev 7007)
+++ trunk/doc/en/html/about/history.html 2017-12-18 11:06:16 UTC (rev 7008)
@@ -33,6 +33,11 @@
+ - Misc
+
+ - upgraded TTSSH to 2.84.
+
+
@@ -2968,7 +2973,9 @@
Bug fixes
-
+
+ - When using aes128-gcm @ openssh.com or aes256-gcm @ openssh.com as symmetric cipher algorithm, connection is terminated if MAC algorithm cannot negotiate.
+ - When using aes128-gcm @ openssh.com or aes256-gcm @ openssh.com as symmetric cipher algorithm, un-used MAC algorithm is displayed on "About TTSSH" dialog.
Modified: trunk/doc/ja/html/about/history.html
===================================================================
--- trunk/doc/ja/html/about/history.html 2017-12-18 11:06:13 UTC (rev 7007)
+++ trunk/doc/ja/html/about/history.html 2017-12-18 11:06:16 UTC (rev 7008)
@@ -33,6 +33,11 @@
@@ -2974,7 +2979,9 @@
\x83o\x83O\x8FC\x90\xB3
- \x83o\x81[\x83W\x83\x87\x83\x93\x8F\xEE\x95\xF1\x83_\x83C\x83A\x83\x8D\x83O\x82?T\x81[\x83o\x83z\x83X\x83g\x8C\xAE\x82?w\x96\xE4\x82?A\x93\xAF\x88\xEA\x83T\x81[\x83o\x82Ő?\xB1\x82?g\x97p\x82\xB3\x82\xEA\x82Ă\xA2\x82?\xA2\x95\xFB\x8E\xAE\x82?\xAE\x82\xAA\x95\\x8E\xA6\x82\xB3\x82\xEA\x82邱\x82?\xAA\x82\xA0\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B
- - \x83V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x90?\xB1\x8E\x9E\x82\xC9
- [File] \x83\x81\x83j\x83\x85\x81[\x82\xCC [SSH SCP] \x82\xAA\x96\xB3\x8C\xF8\x82??\xE7\x82?\xA2\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B
+ - \x83V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x90?\xB1\x8E\x9E\x82\xC9 [File] \x83\x81\x83j\x83\x85\x81[\x82\xCC [SSH SCP] \x82\xAA\x96\xB3\x8C\xF8\x82??\xE7\x82?\xA2\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B
+ - \x88Í\x86\x95\xFB\x8E\xAE\x82\xC5 aes128-gcm @ openss.com \x82?\xBD\x82\xCD aes256-gcm @ openssh.com \x82\xF0\x8Eg\x97p\x8E\x9E\x81AMAC \x95\xFB\x8E\xAE\x82?l\x83S\x83V\x83G\x81[\x83V\x83\x87\x83\x93\x82\xAA\x8Ds\x82\xA6\x82?\xA9\x82\xC1\x82\xBD\x8E\x9E\x82??\xB1\x82\xF0\x90?\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B
+ - \x88Í\x86\x95\xFB\x8E\xAE\x82\xC5 aes128-gcm @ openss.com \x82?\xBD\x82\xCD aes256-gcm @ openssh.com \x82\xF0\x8Eg\x97p\x8E\x9E\x81A"About TTSSH" \x83_\x83C\x83A\x83\x8D\x83O\x82?g\x97p\x82\xB5\x82Ă\xA2\x82?\xA2 MAC \x95\xFB\x8E\xAE\x82\xF0\x95\\x8E\xA6\x82\xB7\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B
Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c 2017-12-18 11:06:13 UTC (rev 7007)
+++ trunk/ttssh2/ttxssh/ssh.c 2017-12-18 11:06:16 UTC (rev 7008)
@@ -4980,15 +4980,20 @@
logprintf(LOG_LEVEL_VERBOSE, "server proposal: MAC algorithm client to server: %s", buf);
- pvar->macs[MODE_OUT] = choose_SSH2_mac_algorithm(buf, myproposal[PROPOSAL_MAC_ALGS_CTOS]);
- if (pvar->macs[MODE_OUT] == NULL) { // not match
- strncpy_s(tmp, sizeof(tmp), "unknown MAC algorithm: ", _TRUNCATE);
- strncat_s(tmp, sizeof(tmp), buf, _TRUNCATE);
- msg = tmp;
- goto error;
+ if (pvar->ciphers[MODE_OUT]->auth_len > 0) {
+ logputs(LOG_LEVEL_VERBOSE, "AEAD cipher is selected, ignoring MAC algorithms. (c2s)");
+ pvar->macs[MODE_OUT] = get_ssh2_mac(HMAC_IMPLICIT);
}
+ else {
+ pvar->macs[MODE_OUT] = choose_SSH2_mac_algorithm(buf, myproposal[PROPOSAL_MAC_ALGS_CTOS]);
+ if (pvar->macs[MODE_OUT] == NULL) { // not match
+ strncpy_s(tmp, sizeof(tmp), "unknown MAC algorithm: ", _TRUNCATE);
+ strncat_s(tmp, sizeof(tmp), buf, _TRUNCATE);
+ msg = tmp;
+ goto error;
+ }
+ }
-
size = get_payload_uint32(pvar, offset);
offset += 4;
for (i = 0; i < size; i++) {
@@ -4999,15 +5004,20 @@
logprintf(LOG_LEVEL_VERBOSE, "server proposal: MAC algorithm server to client: %s", buf);
- pvar->macs[MODE_IN] = choose_SSH2_mac_algorithm(buf, myproposal[PROPOSAL_MAC_ALGS_STOC]);
- if (pvar->macs[MODE_IN] == NULL) { // not match
- strncpy_s(tmp, sizeof(tmp), "unknown MAC algorithm: ", _TRUNCATE);
- strncat_s(tmp, sizeof(tmp), buf, _TRUNCATE);
- msg = tmp;
- goto error;
+ if (pvar->ciphers[MODE_IN]->auth_len > 0) {
+ logputs(LOG_LEVEL_VERBOSE, "AEAD cipher is selected, ignoring MAC algorithms. (s2c)");
+ pvar->macs[MODE_IN] = get_ssh2_mac(HMAC_IMPLICIT);
}
+ else {
+ pvar->macs[MODE_IN] = choose_SSH2_mac_algorithm(buf, myproposal[PROPOSAL_MAC_ALGS_STOC]);
+ if (pvar->macs[MODE_IN] == NULL) { // not match
+ strncpy_s(tmp, sizeof(tmp), "unknown MAC algorithm: ", _TRUNCATE);
+ strncat_s(tmp, sizeof(tmp), buf, _TRUNCATE);
+ msg = tmp;
+ goto error;
+ }
+ }
-
// \x88\xB3\x8Fk\x83A\x83\x8B\x83S\x83\x8A\x83Y\x83\x80\x82?\x88\x92\xE8
// pvar->ssh_state.compressing = FALSE; \x82?\xB5\x82ĉ\xBA\x8BL\x83\x81\x83\x93\x83o\x82\xF0\x8Eg\x97p\x82\xB7\x82\xE9\x81B
// (2005.7.9 yutaka)
From scmnotify @ osdn.net Tue Dec 19 20:50:14 2017
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Tue, 19 Dec 2017 20:50:14 +0900
Subject: [Ttssh2-commit] =?utf-8?b?WzcwMDldICBzaGFyZV9rZXkg44Gu6Kej5pS+?=
=?utf-8?b?44KC44KM44KS5L+u5q2j44CC44Gd44Gu5LuW44Kz44O844OJ5pW055CG44CC?=
Message-ID: <1513684214.534160.133472.nullmailer@users.osdn.me>
Revision: 7009
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7009
Author: doda
Date: 2017-12-19 20:50:14 +0900 (Tue, 19 Dec 2017)
Log Message:
-----------
share_key の解放もれを修正。その他コード整理。
・free() するポインタが NULL かどうかチェックするのを廃止
free(NULL) は何も行わない事が保証されている。
・正常系と異常系でのリソース解放を共通化。
解放漏れが起きにくくするため。
Modified Paths:
--------------
trunk/ttssh2/ttxssh/ssh.c
-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c 2017-12-18 11:06:16 UTC (rev 7008)
+++ trunk/ttssh2/ttxssh/ssh.c 2017-12-19 11:50:14 UTC (rev 7009)
@@ -5520,6 +5520,7 @@
char *emsg, emsg_tmp[1024]; // error message
int ret, hashlen;
Key *hostkey; // hostkey
+ BOOL result = FALSE;
logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_KEXDH_REPLY was received.");
@@ -5705,22 +5706,19 @@
SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX: Tru64 UNIX workaround (2005.3.5 yutaka)
SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
- BN_free(dh_server_pub);
- DH_free(pvar->kexdh); pvar->kexdh = NULL;
- key_free(hostkey);
- if (dh_buf != NULL) free(dh_buf);
- return TRUE;
+ result = TRUE;
error:
BN_free(dh_server_pub);
DH_free(pvar->kexdh); pvar->kexdh = NULL;
key_free(hostkey);
- if (dh_buf != NULL) free(dh_buf);
+ free(dh_buf);
BN_free(share_key);
- notify_fatal_error(pvar, emsg, TRUE);
+ if (result == FALSE)
+ notify_fatal_error(pvar, emsg, TRUE);
- return FALSE;
+ return result;
}
@@ -5745,6 +5743,7 @@
char *emsg, emsg_tmp[1024]; // error message
int ret, hashlen;
Key *hostkey = NULL; // hostkey
+ BOOL result = FALSE;
logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_KEX_DH_GEX_REPLY was received.");
@@ -5939,22 +5938,19 @@
SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX: Tru64 UNIX workaround (2005.3.5 yutaka)
SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
- BN_free(dh_server_pub);
- DH_free(pvar->kexdh); pvar->kexdh = NULL;
- key_free(hostkey);
- if (dh_buf != NULL) free(dh_buf);
- return TRUE;
+ result = TRUE;
error:
BN_free(dh_server_pub);
DH_free(pvar->kexdh); pvar->kexdh = NULL;
key_free(hostkey);
- if (dh_buf != NULL) free(dh_buf);
+ free(dh_buf);
BN_free(share_key);
- notify_fatal_error(pvar, emsg, TRUE);
+ if (result == FALSE)
+ notify_fatal_error(pvar, emsg, TRUE);
- return FALSE;
+ return result;
}
@@ -5978,6 +5974,7 @@
char *emsg, emsg_tmp[1024]; // error message
int ret, hashlen;
Key *hostkey = NULL; // hostkey
+ BOOL result = FALSE;
logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_KEX_ECDH_REPLY was received.");
@@ -6185,22 +6182,19 @@
SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX: Tru64 UNIX workaround (2005.3.5 yutaka)
SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
- EC_KEY_free(pvar->ecdh_client_key); pvar->ecdh_client_key = NULL;
- EC_POINT_clear_free(server_public);
- key_free(hostkey);
- if (ecdh_buf != NULL) free(ecdh_buf);
- return TRUE;
+ result = TRUE;
error:
+ EC_KEY_free(pvar->ecdh_client_key); pvar->ecdh_client_key = NULL;
EC_POINT_clear_free(server_public);
- EC_KEY_free(pvar->ecdh_client_key); pvar->ecdh_client_key = NULL;
key_free(hostkey);
- if (ecdh_buf != NULL) free(ecdh_buf);
+ free(ecdh_buf);
BN_free(share_key);
- notify_fatal_error(pvar, emsg, TRUE);
+ if (result == FALSE)
+ notify_fatal_error(pvar, emsg, TRUE);
- return FALSE;
+ return result;
}
From scmnotify @ osdn.net Tue Dec 26 18:13:33 2017
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Tue, 26 Dec 2017 18:13:33 +0900
Subject: [Ttssh2-commit] =?utf-8?q?=5B7010=5D__Kex_Reply_=E3=81=AE_handler?=
=?utf-8?b?IOOBruWFsemAmumDqOWIhuOCkumWouaVsOOBq+aLrOOCiuOBoOOBl+OBnw==?=
Message-ID: <1514279613.454811.51264.nullmailer@users.osdn.me>
Revision: 7010
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7010
Author: doda
Date: 2017-12-26 18:13:33 +0900 (Tue, 26 Dec 2017)
Log Message:
-----------
Kex Reply の handler の共通部分を関数に括りだした
KEX 後に必要な共通の処理が各 KEX のハンドラに分散していてメンテナンス
しづらいので、関数にまとめた。
もうちょっとうまくまとまらないだろうか。
Modified Paths:
--------------
trunk/ttssh2/ttxssh/ssh.c
-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c 2017-12-19 11:50:14 UTC (rev 7009)
+++ trunk/ttssh2/ttxssh/ssh.c 2017-12-26 09:13:33 UTC (rev 7010)
@@ -5500,7 +5500,94 @@
pvar->ssh2_keys[mode] = current_keys[mode];
}
+static BOOL ssh2_kex_finish(PTInstVar pvar, char *hash, int hashlen, BIGNUM *share_key, Key *hostkey, char *signature, int siglen)
+{
+ int ret;
+ char emsg[1024]; // error message
+ //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));
+ //debug_print(33, buffer_ptr(pvar->my_kex), buffer_len(pvar->my_kex));
+ //debug_print(34, buffer_ptr(pvar->peer_kex), buffer_len(pvar->peer_kex));
+ //debug_print(35, server_host_key_blob, bloblen);
+
+ // session id\x82??\xB6\x81i\x8F\x89\x89\xF1\x90?\xB1\x8E\x9E\x82??j
+ if (pvar->session_id == NULL) {
+ pvar->session_id_len = hashlen;
+ pvar->session_id = malloc(pvar->session_id_len);
+ if (pvar->session_id != NULL) {
+ memcpy(pvar->session_id, hash, pvar->session_id_len);
+ } else {
+ // TODO:
+ }
+ }
+
+ if ((ret = key_verify(hostkey, signature, siglen, hash, hashlen)) != 1) {
+ if (ret == -3 && hostkey->type == KEY_RSA) {
+ if (!pvar->settings.EnableRsaShortKeyServer) {
+ _snprintf_s(emsg, sizeof(emsg), _TRUNCATE, __FUNCTION__
+ ": key verify error. remote rsa key length is too short (%d-bit)",
+ BN_num_bits(hostkey->rsa->n));
+ }
+ else {
+ goto cont;
+ }
+ }
+ else {
+ _snprintf_s(emsg, sizeof(emsg), _TRUNCATE, __FUNCTION__ ": key verify error (%d)\r\n%s", ret, SENDTOME);
+ }
+
+ save_memdump(LOGDUMP);
+ notify_fatal_error(pvar, emsg, TRUE);
+ return FALSE;
+ }
+
+cont:
+ kex_derive_keys(pvar, pvar->we_need, hash, share_key, pvar->session_id, pvar->session_id_len);
+
+ // KEX finish
+ begin_send_packet(pvar, SSH2_MSG_NEWKEYS, 0);
+ finish_send_packet(pvar);
+
+ logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_NEWKEYS was sent at handle_SSH2_dh_kex_reply().");
+
+ // SSH2_MSG_NEWKEYS\x82?\xE8\x8FI\x82\xED\x82\xC1\x82\xBD\x82\xA0\x82??L\x81[\x82???\x82\xE6\x82эĐ?\xE8\x82\xF0\x8Ds\x82\xA4
+ // \x91\x97\x90M\x97p\x82?Í\x86\x8C\xAE\x82\xCD SSH2_MSG_NEWKEYS \x82?\x97\x90M\x8C\xE3\x82?A\x8E\xF3\x90M\x97p\x82?\xCD SSH2_MSG_NEWKEYS \x82\xCC
+ // \x8E\xF3\x90M\x8C\xE3\x82?Đ?\xE8\x82\xF0\x8Ds\x82\xA4\x81B
+ if (pvar->rekeying == 1) { // \x83L\x81[\x82?Đ?\xE8
+ // \x82?\xB8\x81A\x91\x97\x90M\x97p\x82\xBE\x82\xAF\x90??\x82\xE9\x81B
+ ssh2_set_newkeys(pvar, MODE_OUT);
+ pvar->ssh2_keys[MODE_OUT].mac.enabled = 1;
+ pvar->ssh2_keys[MODE_OUT].comp.enabled = 1;
+ enable_send_compression(pvar);
+ if (!CRYPT_start_encryption(pvar, 1, 0)) {
+ // TODO: error
+ }
+
+ } else {
+ // \x8F\x89\x89\xF1\x90?\xB1\x82??\x82?\xC0\x8D??Í\x86\x83\x8B\x81[\x83`\x83\x93\x82\xAA\x90??\x82\xEA\x82\xE9\x82??A\x82\xA0\x82???\xC1\x82Ă\xA9\x82\xE7
+ // \x82??ŁiCRYPT_start_encryption\x8A?\x94\x81j\x81A\x82\xB1\x82\xB1\x82Ō\xAE\x82??\xE8\x82\xF0\x82\xB5\x82Ă\xB5\x82?\xC1\x82Ă\xE0\x82悢\x81B
+ ssh2_set_newkeys(pvar, MODE_OUT);
+
+ // SSH2_MSG_NEWKEYS\x82?M\x82\xB5\x82\xBD\x8E\x9E\x93_\x82ŁAMAC\x82\xF0\x97L\x8C\xF8\x82?\xB7\x82\xE9\x81B(2006.10.30 yutaka)
+ pvar->ssh2_keys[MODE_OUT].mac.enabled = 1;
+ pvar->ssh2_keys[MODE_OUT].comp.enabled = 1;
+
+ // \x83p\x83P\x83b\x83g\x88\xB3\x8Fk\x82\xAA\x97L\x8C\xF8\x82?珉\x8A\x{227B0B7}\x82\xE9\x81B(2005.7.9 yutaka)
+ // SSH2_MSG_NEWKEYS\x82?\xF3\x90M\x82\xE6\x82\xE8\x91O\x82??ł\xB1\x82\xB1\x82\xBE\x82\xAF\x82ł悢\x81B(2006.10.30 maya)
+ prep_compression(pvar);
+ enable_compression(pvar);
+ }
+
+ SSH2_dispatch_init(3);
+ SSH2_dispatch_add_message(SSH2_MSG_NEWKEYS);
+ SSH2_dispatch_add_message(SSH2_MSG_IGNORE);
+ SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
+
+ return TRUE;
+}
+
//
// Diffie-Hellman Key Exchange Reply(SSH2_MSG_KEXDH_REPLY:31)
//
@@ -5517,8 +5604,8 @@
char *dh_buf = NULL;
BIGNUM *share_key = NULL;
char *hash;
- char *emsg, emsg_tmp[1024]; // error message
- int ret, hashlen;
+ char *emsg = NULL, emsg_tmp[1024]; // error message
+ int hashlen;
Key *hostkey; // hostkey
BOOL result = FALSE;
@@ -5622,92 +5709,12 @@
push_memdump("KEXDH_REPLY kex_dh_kex_hash", "hash", hash, hashlen);
}
- //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));
- //debug_print(33, buffer_ptr(pvar->my_kex), buffer_len(pvar->my_kex));
- //debug_print(34, buffer_ptr(pvar->peer_kex), buffer_len(pvar->peer_kex));
- //debug_print(35, server_host_key_blob, bloblen);
-
- // session id\x82??\xB6\x81i\x8F\x89\x89\xF1\x90?\xB1\x8E\x9E\x82??j
- if (pvar->session_id == NULL) {
- pvar->session_id_len = hashlen;
- pvar->session_id = malloc(pvar->session_id_len);
- if (pvar->session_id != NULL) {
- memcpy(pvar->session_id, hash, pvar->session_id_len);
- } else {
- // TODO:
- }
- }
-
- if ((ret = key_verify(hostkey, signature, siglen, hash, hashlen)) != 1) {
- if (ret == -3 && hostkey->type == KEY_RSA) {
- if (!pvar->settings.EnableRsaShortKeyServer) {
- _snprintf_s(emsg_tmp, sizeof(emsg_tmp), _TRUNCATE,
- "key verify error(remote rsa key length is too short %d-bit) "
- "@ handle_SSH2_dh_kex_reply()", BN_num_bits(hostkey->rsa->n));
- }
- else {
- goto cont;
- }
- }
- else {
- _snprintf_s(emsg_tmp, sizeof(emsg_tmp), _TRUNCATE,
- "key verify error(%d) @ handle_SSH2_dh_kex_reply()\r\n%s", ret, SENDTOME);
- }
- emsg = emsg_tmp;
- save_memdump(LOGDUMP);
- goto error;
- }
-
-cont:
- kex_derive_keys(pvar, pvar->we_need, hash, share_key, pvar->session_id, pvar->session_id_len);
-
- // KEX finish
- begin_send_packet(pvar, SSH2_MSG_NEWKEYS, 0);
- finish_send_packet(pvar);
-
- logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_NEWKEYS was sent at handle_SSH2_dh_kex_reply().");
-
- // SSH2_MSG_NEWKEYS\x82?\xE8\x8FI\x82\xED\x82\xC1\x82\xBD\x82\xA0\x82??L\x81[\x82???\x82\xE6\x82эĐ?\xE8\x82\xF0\x8Ds\x82\xA4
- // \x91\x97\x90M\x97p\x82?Í\x86\x8C\xAE\x82\xCD SSH2_MSG_NEWKEYS \x82?\x97\x90M\x8C\xE3\x82?A\x8E\xF3\x90M\x97p\x82?\xCD SSH2_MSG_NEWKEYS \x82\xCC
- // \x8E\xF3\x90M\x8C\xE3\x82?Đ?\xE8\x82\xF0\x8Ds\x82\xA4\x81B
- if (pvar->rekeying == 1) { // \x83L\x81[\x82?Đ?\xE8
- // \x82?\xB8\x81A\x91\x97\x90M\x97p\x82\xBE\x82\xAF\x90??\x82\xE9\x81B
- ssh2_set_newkeys(pvar, MODE_OUT);
- pvar->ssh2_keys[MODE_OUT].mac.enabled = 1;
- pvar->ssh2_keys[MODE_OUT].comp.enabled = 1;
- enable_send_compression(pvar);
- if (!CRYPT_start_encryption(pvar, 1, 0)) {
- // TODO: error
- }
-
- } else {
- // \x8F\x89\x89\xF1\x90?\xB1\x82??\x82?\xC0\x8D??Í\x86\x83\x8B\x81[\x83`\x83\x93\x82\xAA\x90??\x82\xEA\x82\xE9\x82??A\x82\xA0\x82???\xC1\x82Ă\xA9\x82\xE7
- // \x82??ŁiCRYPT_start_encryption\x8A?\x94\x81j\x81A\x82\xB1\x82\xB1\x82Ō\xAE\x82??\xE8\x82\xF0\x82\xB5\x82Ă\xB5\x82?\xC1\x82Ă\xE0\x82悢\x81B
- ssh2_set_newkeys(pvar, MODE_OUT);
-
- // SSH2_MSG_NEWKEYS\x82?M\x82\xB5\x82\xBD\x8E\x9E\x93_\x82ŁAMAC\x82\xF0\x97L\x8C\xF8\x82?\xB7\x82\xE9\x81B(2006.10.30 yutaka)
- pvar->ssh2_keys[MODE_OUT].mac.enabled = 1;
- pvar->ssh2_keys[MODE_OUT].comp.enabled = 1;
-
- // \x83p\x83P\x83b\x83g\x88\xB3\x8Fk\x82\xAA\x97L\x8C\xF8\x82?珉\x8A\x{227B0B7}\x82\xE9\x81B(2005.7.9 yutaka)
- // SSH2_MSG_NEWKEYS\x82?\xF3\x90M\x82\xE6\x82\xE8\x91O\x82??ł\xB1\x82\xB1\x82\xBE\x82\xAF\x82ł悢\x81B(2006.10.30 maya)
- prep_compression(pvar);
- enable_compression(pvar);
- }
-
// TTSSH\x83o\x81[\x83W\x83\x87\x83\x93\x8F\xEE\x95\xF1\x82?\\x8E\xA6\x82\xB7\x82\xE9\x83L\x81[\x83r\x83b\x83g\x90\x94\x82\xF0\x8B\x81\x82?Ă\xA8\x82\xAD (2004.10.30 yutaka)
pvar->client_key_bits = BN_num_bits(pvar->kexdh->pub_key);
pvar->server_key_bits = BN_num_bits(dh_server_pub);
- SSH2_dispatch_init(3);
- SSH2_dispatch_add_message(SSH2_MSG_NEWKEYS);
- SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX: Tru64 UNIX workaround (2005.3.5 yutaka)
- SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
+ result = ssh2_kex_finish(pvar, hash, hashlen, share_key, hostkey, signature, siglen);
- result = TRUE;
-
error:
BN_free(dh_server_pub);
DH_free(pvar->kexdh); pvar->kexdh = NULL;
@@ -5715,7 +5722,7 @@
free(dh_buf);
BN_free(share_key);
- if (result == FALSE)
+ if (emsg)
notify_fatal_error(pvar, emsg, TRUE);
return result;
@@ -5740,8 +5747,8 @@
char *dh_buf = NULL;
BIGNUM *share_key = NULL;
char *hash;
- char *emsg, emsg_tmp[1024]; // error message
- int ret, hashlen;
+ char *emsg = NULL, emsg_tmp[1024]; // error message
+ int hashlen;
Key *hostkey = NULL; // hostkey
BOOL result = FALSE;
@@ -5854,92 +5861,12 @@
push_memdump("DH_GEX_REPLY kex_dh_gex_hash", "hash", hash, hashlen);
}
- //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));
- //debug_print(33, buffer_ptr(pvar->my_kex), buffer_len(pvar->my_kex));
- //debug_print(34, buffer_ptr(pvar->peer_kex), buffer_len(pvar->peer_kex));
- //debug_print(35, server_host_key_blob, bloblen);
-
- // session id\x82??\xB6\x81i\x8F\x89\x89\xF1\x90?\xB1\x8E\x9E\x82??j
- if (pvar->session_id == NULL) {
- pvar->session_id_len = hashlen;
- pvar->session_id = malloc(pvar->session_id_len);
- if (pvar->session_id != NULL) {
- memcpy(pvar->session_id, hash, pvar->session_id_len);
- } else {
- // TODO:
- }
- }
-
- if ((ret = key_verify(hostkey, signature, siglen, hash, hashlen)) != 1) {
- if (ret == -3 && hostkey->type == KEY_RSA) {
- if (!pvar->settings.EnableRsaShortKeyServer) {
- _snprintf_s(emsg_tmp, sizeof(emsg_tmp), _TRUNCATE,
- "key verify error(remote rsa key length is too short %d-bit) "
- "@ handle_SSH2_dh_gex_reply()", BN_num_bits(hostkey->rsa->n));
- }
- else {
- goto cont;
- }
- }
- else {
- _snprintf_s(emsg_tmp, sizeof(emsg_tmp), _TRUNCATE,
- "key verify error(%d) @ handle_SSH2_dh_gex_reply()\r\n%s", ret, SENDTOME);
- }
- emsg = emsg_tmp;
- save_memdump(LOGDUMP);
- goto error;
- }
-
-cont:
- kex_derive_keys(pvar, pvar->we_need, hash, share_key, pvar->session_id, pvar->session_id_len);
-
- // KEX finish
- begin_send_packet(pvar, SSH2_MSG_NEWKEYS, 0);
- finish_send_packet(pvar);
-
- logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_NEWKEYS was sent at handle_SSH2_dh_gex_reply().");
-
- // SSH2_MSG_NEWKEYS\x82?\xE8\x8FI\x82\xED\x82\xC1\x82\xBD\x82\xA0\x82??L\x81[\x82???\x82\xE6\x82эĐ?\xE8\x82\xF0\x8Ds\x82\xA4
- // \x91\x97\x90M\x97p\x82?Í\x86\x8C\xAE\x82\xCD SSH2_MSG_NEWKEYS \x82?\x97\x90M\x8C\xE3\x82?A\x8E\xF3\x90M\x97p\x82?\xCD SSH2_MSG_NEWKEYS \x82\xCC
- // \x8E\xF3\x90M\x8C\xE3\x82?Đ?\xE8\x82\xF0\x8Ds\x82\xA4\x81B
- if (pvar->rekeying == 1) { // \x83L\x81[\x82?Đ?\xE8
- // \x82?\xB8\x81A\x91\x97\x90M\x97p\x82\xBE\x82\xAF\x90??\x82\xE9\x81B
- ssh2_set_newkeys(pvar, MODE_OUT);
- pvar->ssh2_keys[MODE_OUT].mac.enabled = 1;
- pvar->ssh2_keys[MODE_OUT].comp.enabled = 1;
- enable_send_compression(pvar);
- if (!CRYPT_start_encryption(pvar, 1, 0)) {
- // TODO: error
- }
-
- } else {
- // \x8F\x89\x89\xF1\x90?\xB1\x82??\x82?\xC0\x8D??Í\x86\x83\x8B\x81[\x83`\x83\x93\x82\xAA\x90??\x82\xEA\x82\xE9\x82??A\x82\xA0\x82???\xC1\x82Ă\xA9\x82\xE7
- // \x82??ŁiCRYPT_start_encryption\x8A?\x94\x81j\x81A\x82\xB1\x82\xB1\x82Ō\xAE\x82??\xE8\x82\xF0\x82\xB5\x82Ă\xB5\x82?\xC1\x82Ă\xE0\x82悢\x81B
- ssh2_set_newkeys(pvar, MODE_OUT);
-
- // SSH2_MSG_NEWKEYS\x82?M\x82\xB5\x82\xBD\x8E\x9E\x93_\x82ŁAMAC\x82\xF0\x97L\x8C\xF8\x82?\xB7\x82\xE9\x81B(2006.10.30 yutaka)
- pvar->ssh2_keys[MODE_OUT].mac.enabled = 1;
- pvar->ssh2_keys[MODE_OUT].comp.enabled = 1;
-
- // \x83p\x83P\x83b\x83g\x88\xB3\x8Fk\x82\xAA\x97L\x8C\xF8\x82?珉\x8A\x{227B0B7}\x82\xE9\x81B(2005.7.9 yutaka)
- // SSH2_MSG_NEWKEYS\x82?\xF3\x90M\x82\xE6\x82\xE8\x91O\x82??ł\xB1\x82\xB1\x82\xBE\x82\xAF\x82ł悢\x81B(2006.10.30 maya)
- prep_compression(pvar);
- enable_compression(pvar);
- }
-
// TTSSH\x83o\x81[\x83W\x83\x87\x83\x93\x8F\xEE\x95\xF1\x82?\\x8E\xA6\x82\xB7\x82\xE9\x83L\x81[\x83r\x83b\x83g\x90\x94\x82\xF0\x8B\x81\x82?Ă\xA8\x82\xAD (2004.10.30 yutaka)
pvar->client_key_bits = BN_num_bits(pvar->kexdh->pub_key);
pvar->server_key_bits = BN_num_bits(dh_server_pub);
- SSH2_dispatch_init(3);
- SSH2_dispatch_add_message(SSH2_MSG_NEWKEYS);
- SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX: Tru64 UNIX workaround (2005.3.5 yutaka)
- SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
+ result = ssh2_kex_finish(pvar, hash, hashlen, share_key, hostkey, signature, siglen);
- result = TRUE;
-
error:
BN_free(dh_server_pub);
DH_free(pvar->kexdh); pvar->kexdh = NULL;
@@ -5947,7 +5874,7 @@
free(dh_buf);
BN_free(share_key);
- if (result == FALSE)
+ if (emsg)
notify_fatal_error(pvar, emsg, TRUE);
return result;
@@ -5955,7 +5882,7 @@
//
-// Elliptic Curv Diffie-Hellman Key Exchange Reply(SSH2_MSG_KEX_ECDH_REPLY:31)
+// Elliptic Curve Diffie-Hellman Key Exchange Reply(SSH2_MSG_KEX_ECDH_REPLY:31)
//
static BOOL handle_SSH2_ecdh_kex_reply(PTInstVar pvar)
{
@@ -5971,8 +5898,8 @@
char *ecdh_buf = NULL;
BIGNUM *share_key = NULL;
char *hash;
- char *emsg, emsg_tmp[1024]; // error message
- int ret, hashlen;
+ char *emsg = NULL, emsg_tmp[1024]; // error message
+ int hashlen;
Key *hostkey = NULL; // hostkey
BOOL result = FALSE;
@@ -6083,81 +6010,6 @@
push_memdump("KEX_ECDH_REPLY ecdh_kex_reply", "hash", hash, hashlen);
}
- //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));
- //debug_print(33, buffer_ptr(pvar->my_kex), buffer_len(pvar->my_kex));
- //debug_print(34, buffer_ptr(pvar->peer_kex), buffer_len(pvar->peer_kex));
- //debug_print(35, server_host_key_blob, bloblen);
-
- // session id\x82??\xB6\x81i\x8F\x89\x89\xF1\x90?\xB1\x8E\x9E\x82??j
- if (pvar->session_id == NULL) {
- pvar->session_id_len = hashlen;
- pvar->session_id = malloc(pvar->session_id_len);
- if (pvar->session_id != NULL) {
- memcpy(pvar->session_id, hash, pvar->session_id_len);
- } else {
- // TODO:
- }
- }
-
- if ((ret = key_verify(hostkey, signature, siglen, hash, hashlen)) != 1) {
- if (ret == -3 && hostkey->type == KEY_RSA) {
- if (!pvar->settings.EnableRsaShortKeyServer) {
- _snprintf_s(emsg_tmp, sizeof(emsg_tmp), _TRUNCATE,
- "key verify error(remote rsa key length is too short %d-bit) "
- "@ handle_SSH2_ecdh_kex_reply()", BN_num_bits(hostkey->rsa->n));
- }
- else {
- goto cont;
- }
- }
- else {
- _snprintf_s(emsg_tmp, sizeof(emsg_tmp), _TRUNCATE,
- "key verify error(%d) @ handle_SSH2_ecdh_kex_reply()\r\n%s", ret, SENDTOME);
- }
- emsg = emsg_tmp;
- save_memdump(LOGDUMP);
- goto error;
- }
-
-cont:
- kex_derive_keys(pvar, pvar->we_need, hash, share_key, pvar->session_id, pvar->session_id_len);
-
- // KEX finish
- begin_send_packet(pvar, SSH2_MSG_NEWKEYS, 0);
- finish_send_packet(pvar);
-
- logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_NEWKEYS was sent at handle_SSH2_ecdh_kex_reply().");
-
- // SSH2_MSG_NEWKEYS\x82?\xE8\x8FI\x82\xED\x82\xC1\x82\xBD\x82\xA0\x82??L\x81[\x82???\x82\xE6\x82эĐ?\xE8\x82\xF0\x8Ds\x82\xA4
- // \x91\x97\x90M\x97p\x82?Í\x86\x8C\xAE\x82\xCD SSH2_MSG_NEWKEYS \x82?\x97\x90M\x8C\xE3\x82?A\x8E\xF3\x90M\x97p\x82?\xCD SSH2_MSG_NEWKEYS \x82\xCC
- // \x8E\xF3\x90M\x8C\xE3\x82?Đ?\xE8\x82\xF0\x8Ds\x82\xA4\x81B
- if (pvar->rekeying == 1) { // \x83L\x81[\x82?Đ?\xE8
- // \x82?\xB8\x81A\x91\x97\x90M\x97p\x82\xBE\x82\xAF\x90??\x82\xE9\x81B
- ssh2_set_newkeys(pvar, MODE_OUT);
- pvar->ssh2_keys[MODE_OUT].mac.enabled = 1;
- pvar->ssh2_keys[MODE_OUT].comp.enabled = 1;
- enable_send_compression(pvar);
- if (!CRYPT_start_encryption(pvar, 1, 0)) {
- // TODO: error
- }
-
- } else {
- // \x8F\x89\x89\xF1\x90?\xB1\x82??\x82?\xC0\x8D??Í\x86\x83\x8B\x81[\x83`\x83\x93\x82\xAA\x90??\x82\xEA\x82\xE9\x82??A\x82\xA0\x82???\xC1\x82Ă\xA9\x82\xE7
- // \x82??ŁiCRYPT_start_encryption\x8A?\x94\x81j\x81A\x82\xB1\x82\xB1\x82Ō\xAE\x82??\xE8\x82\xF0\x82\xB5\x82Ă\xB5\x82?\xC1\x82Ă\xE0\x82悢\x81B
- ssh2_set_newkeys(pvar, MODE_OUT);
-
- // SSH2_MSG_NEWKEYS\x82?M\x82\xB5\x82\xBD\x8E\x9E\x93_\x82ŁAMAC\x82\xF0\x97L\x8C\xF8\x82?\xB7\x82\xE9\x81B(2006.10.30 yutaka)
- pvar->ssh2_keys[MODE_OUT].mac.enabled = 1;
- pvar->ssh2_keys[MODE_OUT].comp.enabled = 1;
-
- // \x83p\x83P\x83b\x83g\x88\xB3\x8Fk\x82\xAA\x97L\x8C\xF8\x82?珉\x8A\x{227B0B7}\x82\xE9\x81B(2005.7.9 yutaka)
- // SSH2_MSG_NEWKEYS\x82?\xF3\x90M\x82\xE6\x82\xE8\x91O\x82??ł\xB1\x82\xB1\x82\xBE\x82\xAF\x82ł悢\x81B(2006.10.30 maya)
- prep_compression(pvar);
- enable_compression(pvar);
- }
-
// TTSSH\x83o\x81[\x83W\x83\x87\x83\x93\x8F\xEE\x95\xF1\x82?\\x8E\xA6\x82\xB7\x82\xE9\x83L\x81[\x83r\x83b\x83g\x90\x94\x82\xF0\x8B\x81\x82?Ă\xA8\x82\xAD
switch (pvar->kex_type) {
case KEX_ECDH_SHA2_256:
@@ -6177,21 +6029,16 @@
break;
}
- SSH2_dispatch_init(3);
- SSH2_dispatch_add_message(SSH2_MSG_NEWKEYS);
- SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX: Tru64 UNIX workaround (2005.3.5 yutaka)
- SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
+ result = ssh2_kex_finish(pvar, hash, hashlen, share_key, hostkey, signature, siglen);
- result = TRUE;
-
error:
+ EC_POINT_clear_free(server_public);
EC_KEY_free(pvar->ecdh_client_key); pvar->ecdh_client_key = NULL;
- EC_POINT_clear_free(server_public);
key_free(hostkey);
free(ecdh_buf);
BN_free(share_key);
- if (result == FALSE)
+ if (emsg)
notify_fatal_error(pvar, emsg, TRUE);
return result;
From scmnotify @ osdn.net Tue Dec 26 18:13:38 2017
From: scmnotify @ osdn.net (scmnotify @ osdn.net)
Date: Tue, 26 Dec 2017 18:13:38 +0900
Subject: [Ttssh2-commit] =?utf-8?b?WzcwMTFdICDlv4XpoIjjga7jg6Hjg4Pjgrs=?=
=?utf-8?b?44O844K444Gv5bi444Gr5Yem55CG44GV44KM44KL44KI44GG44GrIFNTSDJf?=
=?utf-8?b?ZGlzcGF0Y2hfaW5pdCAoKSAg5YaF44Gn5pyJ5Yq544Gr44GZ44KL44CC?=
Message-ID: <1514279618.230998.51336.nullmailer@users.osdn.me>
Revision: 7011
http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7011
Author: doda
Date: 2017-12-26 18:13:38 +0900 (Tue, 26 Dec 2017)
Log Message:
-----------
必須のメッセージは常に処理されるように SSH2_dispatch_init() 内で有効にする。
対象メッセージ:
・SSH2_MSG_DISCONNECT
・SSH2_MSG_IGNORE
・SSH2_MSG_DEBUG
・SSH2_MSG_UNIMPLEMENTED
RFC 4253 では、これらの Additional Messages について以下の記述がある。
| 11. Additional Messages
|
| Either party may send any of the following messages at any time.
RFC 4253 では SSH2_MSG_IGNORE, SSH2_MSG_DISCONNECT, SSH2_MSG_DEBUG は
処理が出来る必要がある。(MUST understand / MUST be able to process)
これらのメッセージを確実に処理する為に、SSH2_dispatch_init() 内で
ハンドラを有効にするようにした。
SSH2_MSG_UNIMPLEMENTED に関しては処理できる必要が有るとはなっていないが
同様に考えるべきだと思われるので、これのハンドラも一緒に有効にする。
Modified Paths:
--------------
trunk/ttssh2/ttxssh/ssh.c
-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c 2017-12-26 09:13:33 UTC (rev 7010)
+++ trunk/ttssh2/ttxssh/ssh.c 2017-12-26 09:13:38 UTC (rev 7011)
@@ -1860,8 +1860,6 @@
SSH2_dispatch_init(1);
SSH2_dispatch_add_message(SSH2_MSG_KEXINIT);
- SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX: Tru64 UNIX workaround (2005.3.3 yutaka)
- SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
}
}
@@ -2068,6 +2066,11 @@
{
handle_message_count = 0;
handle_message_stage = stage;
+
+ SSH2_dispatch_add_message(SSH2_MSG_IGNORE);
+ SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
+ SSH2_dispatch_add_message(SSH2_MSG_DISCONNECT);
+ SSH2_dispatch_add_message(SSH2_MSG_UNIMPLEMENTED);
}
int SSH2_dispatch_enabled_check(unsigned char message)
@@ -5186,8 +5189,6 @@
SSH2_dispatch_init(2);
SSH2_dispatch_add_message(SSH2_MSG_KEXDH_REPLY);
- SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX: Tru64 UNIX workaround (2005.3.5 yutaka)
- SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
buffer_free(msg);
@@ -5269,8 +5270,6 @@
SSH2_dispatch_init(2);
SSH2_dispatch_add_message(SSH2_MSG_KEX_DH_GEX_GROUP);
- SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX: Tru64 UNIX workaround (2005.3.5 yutaka)
- SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
buffer_free(msg);
@@ -5403,8 +5402,6 @@
SSH2_dispatch_init(2);
SSH2_dispatch_add_message(SSH2_MSG_KEX_DH_GEX_REPLY);
- SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX: Tru64 UNIX workaround (2005.3.5 yutaka)
- SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
buffer_free(msg);
@@ -5467,8 +5464,6 @@
SSH2_dispatch_init(2);
SSH2_dispatch_add_message(SSH2_MSG_KEX_ECDH_REPLY);
- SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX: Tru64 UNIX workaround (2005.3.5 yutaka)
- SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
buffer_free(msg);
@@ -5582,8 +5577,6 @@
SSH2_dispatch_init(3);
SSH2_dispatch_add_message(SSH2_MSG_NEWKEYS);
- SSH2_dispatch_add_message(SSH2_MSG_IGNORE);
- SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
return TRUE;
}
@@ -6081,14 +6074,7 @@
SSH2_dispatch_init(6);
SSH2_dispatch_add_range_message(SSH2_MSG_GLOBAL_REQUEST, SSH2_MSG_CHANNEL_FAILURE);
- SSH2_dispatch_add_message(SSH2_MSG_UNIMPLEMENTED);
- SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX
- // OpenSSH 3.9\x82ł?f\x81[\x83^\x92?M\x92\x86\x82\xCCDH\x8C\xAE\x8C\xF0\x8A\xB7\x97v\x8B\x81\x82\xAA\x81A\x83T\x81[\x83o\x82\xA9\x82瑗\x82\xE7\x82\xEA\x82Ă\xAD\x82邱\x82?\xAA\x82\xA0\x82\xE9\x81B
SSH2_dispatch_add_message(SSH2_MSG_KEXINIT);
- // HP-UX\x82\xC5X11 forwarding\x82\xAA\x8E\xB8\x94s\x82\xB5\x82\xBD\x8F?\x81A\x89\xBA\x8BL\x82?\x81\x83b\x83Z\x81[\x83W\x82\xAA\x91\x97\x82\xE7\x82\xEA\x82Ă\xAD\x82\xE9\x81B(2006.4.7 yutaka)
- SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
- // OpenSSH \x82?f\x81[\x83^\x92?M\x92\x86\x82?v\x96\xBD\x93I\x82?G\x83\x89\x81[\x82\xAA\x82\xA0\x82\xE9\x82\xC6 SSH2_MSG_DISCONNECT \x82?\xC1\x82Ă\xAD\x82\xE9 (2007.10.25 maya)
- SSH2_dispatch_add_message(SSH2_MSG_DISCONNECT);
}
@@ -6206,8 +6192,6 @@
SSH2_dispatch_init(4);
SSH2_dispatch_add_message(SSH2_MSG_SERVICE_ACCEPT);
- SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX: Tru64 UNIX workaround (2005.3.5 yutaka)
- SSH2_dispatch_add_message(SSH2_MSG_DEBUG);
logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_SERVICE_REQUEST was sent at do_SSH2_userauth().");
@@ -6229,7 +6213,6 @@
free(svc);
SSH2_dispatch_init(5);
- SSH2_dispatch_add_message(SSH2_MSG_IGNORE); // XXX: Tru64 UNIX workaround (2005.3.5 yutaka)
if (pvar->auth_state.cur_cred.method == SSH_AUTH_TIS) {
// keyboard-interactive method
SSH2_dispatch_add_message(SSH2_MSG_USERAUTH_INFO_REQUEST);
@@ -6244,7 +6227,6 @@
SSH2_dispatch_add_message(SSH2_MSG_USERAUTH_SUCCESS);
SSH2_dispatch_add_message(SSH2_MSG_USERAUTH_FAILURE);
SSH2_dispatch_add_message(SSH2_MSG_USERAUTH_BANNER);
- SSH2_dispatch_add_message(SSH2_MSG_DEBUG); // support for authorized_keys command (2006.2.23 yutaka)
return do_SSH2_authrequest(pvar);
}