diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/session.c | 4 | ||||
-rw-r--r-- | src/wrapper.c | 24 |
2 files changed, 17 insertions, 11 deletions
diff --git a/src/session.c b/src/session.c index 3b151bf7..d4600861 100644 --- a/src/session.c +++ b/src/session.c @@ -419,7 +419,7 @@ const char* ssh_get_cipher_out(ssh_session session) { const char* ssh_get_hmac_in(ssh_session session) { if ((session != NULL) && (session->current_crypto != NULL)) { - return ssh_hmac_type_to_string(session->current_crypto->in_hmac); + return ssh_hmac_type_to_string(session->current_crypto->in_hmac, session->current_crypto->in_hmac_etm); } return NULL; } @@ -434,7 +434,7 @@ const char* ssh_get_hmac_in(ssh_session session) { const char* ssh_get_hmac_out(ssh_session session) { if ((session != NULL) && (session->current_crypto != NULL)) { - return ssh_hmac_type_to_string(session->current_crypto->out_hmac); + return ssh_hmac_type_to_string(session->current_crypto->out_hmac, session->current_crypto->out_hmac_etm); } return NULL; } diff --git a/src/wrapper.c b/src/wrapper.c index 6c4e6767..33f55840 100644 --- a/src/wrapper.c +++ b/src/wrapper.c @@ -56,13 +56,13 @@ #include "libssh/curve25519.h" static struct ssh_hmac_struct ssh_hmac_tab[] = { - { "hmac-sha1", SSH_HMAC_SHA1 }, - { "hmac-sha2-256", SSH_HMAC_SHA256 }, - { "hmac-sha2-512", SSH_HMAC_SHA512 }, - { "hmac-md5", SSH_HMAC_MD5 }, - { "aead-poly1305", SSH_HMAC_AEAD_POLY1305 }, - { "aead-gcm", SSH_HMAC_AEAD_GCM }, - { NULL, 0} + { "hmac-sha1", SSH_HMAC_SHA1, false }, + { "hmac-sha2-256", SSH_HMAC_SHA256, false }, + { "hmac-sha2-512", SSH_HMAC_SHA512, false }, + { "hmac-md5", SSH_HMAC_MD5, false }, + { "aead-poly1305", SSH_HMAC_AEAD_POLY1305, false }, + { "aead-gcm", SSH_HMAC_AEAD_GCM, false }, + { NULL, 0, false } }; struct ssh_hmac_struct *ssh_get_hmactab(void) { @@ -88,11 +88,13 @@ size_t hmac_digest_len(enum ssh_hmac_e type) { } } -const char *ssh_hmac_type_to_string(enum ssh_hmac_e hmac_type) +const char *ssh_hmac_type_to_string(enum ssh_hmac_e hmac_type, bool etm) { int i = 0; struct ssh_hmac_struct *ssh_hmactab = ssh_get_hmactab(); - while (ssh_hmactab[i].name && (ssh_hmactab[i].hmac_type != hmac_type)) { + while (ssh_hmactab[i].name && + ((ssh_hmactab[i].hmac_type != hmac_type) || + (ssh_hmactab[i].etm != etm))) { i++; } return ssh_hmactab[i].name; @@ -293,6 +295,7 @@ static int crypt_set_algorithms2(ssh_session session) SSH_LOG(SSH_LOG_PACKET, "Set HMAC output algorithm to %s", wanted); session->next_crypto->out_hmac = ssh_hmactab[i].hmac_type; + session->next_crypto->out_hmac_etm = ssh_hmactab[i].etm; /* in */ wanted = session->next_crypto->kex_methods[SSH_CRYPT_S_C]; @@ -346,6 +349,7 @@ static int crypt_set_algorithms2(ssh_session session) SSH_LOG(SSH_LOG_PACKET, "Set HMAC input algorithm to %s", wanted); session->next_crypto->in_hmac = ssh_hmactab[i].hmac_type; + session->next_crypto->in_hmac_etm = ssh_hmactab[i].etm; /* compression */ cmp = strcmp(session->next_crypto->kex_methods[SSH_COMP_C_S], "zlib"); @@ -443,6 +447,7 @@ int crypt_set_algorithms_server(ssh_session session){ SSH_LOG(SSH_LOG_PACKET, "Set HMAC output algorithm to %s", method); session->next_crypto->out_hmac = ssh_hmactab[i].hmac_type; + session->next_crypto->out_hmac_etm = ssh_hmactab[i].etm; /* in */ method = session->next_crypto->kex_methods[SSH_CRYPT_C_S]; @@ -495,6 +500,7 @@ int crypt_set_algorithms_server(ssh_session session){ SSH_LOG(SSH_LOG_PACKET, "Set HMAC input algorithm to %s", method); session->next_crypto->in_hmac = ssh_hmactab[i].hmac_type; + session->next_crypto->in_hmac_etm = ssh_hmactab[i].etm; /* compression */ method = session->next_crypto->kex_methods[SSH_COMP_C_S]; |