1
1

Fix generation of 'e' portion of Diffie-Hellman keyset.

Этот коммит содержится в:
Sara Golemon 2005-07-11 15:56:09 +00:00
родитель 6cc50263e2
Коммит 01de39e585
2 изменённых файлов: 13 добавлений и 10 удалений

3
README
Просмотреть файл

@ -4,6 +4,9 @@ libssh2 - SSH2 library
Version 0.12 Version 0.12
------------ ------------
Fix generation of 'e' portion of Diffie-Hellman keyset.
Use appropriate order for BN_rand() rather than fixed group1-specific value.
Re-fixed libssh2_sftp_rename_ex() Re-fixed libssh2_sftp_rename_ex()
Transport had right packet_len, but sftp layer still had extra 4 bytes. Transport had right packet_len, but sftp layer still had extra 4 bytes.

Просмотреть файл

@ -68,7 +68,7 @@
/* {{{ libssh2_kex_method_diffie_hellman_groupGP_sha1_key_exchange /* {{{ libssh2_kex_method_diffie_hellman_groupGP_sha1_key_exchange
* Diffie Hellman Key Exchange, Group Agnostic * Diffie Hellman Key Exchange, Group Agnostic
*/ */
static int libssh2_kex_method_diffie_hellman_groupGP_sha1_key_exchange(LIBSSH2_SESSION *session, BIGNUM *g, BIGNUM *p, static int libssh2_kex_method_diffie_hellman_groupGP_sha1_key_exchange(LIBSSH2_SESSION *session, BIGNUM *g, BIGNUM *p, int group_order,
unsigned char packet_type_init, unsigned char packet_type_reply, unsigned char packet_type_init, unsigned char packet_type_reply,
unsigned char *midhash, unsigned long midhash_len) unsigned char *midhash, unsigned long midhash_len)
{ {
@ -85,7 +85,7 @@ static int libssh2_kex_method_diffie_hellman_groupGP_sha1_key_exchange(LIBSSH2_S
SHA_CTX exchange_hash; SHA_CTX exchange_hash;
/* Generate x and e */ /* Generate x and e */
BN_rand(x, 128, 0, -1); BN_rand(x, group_order, 0, -1);
BN_mod_exp(e, g, x, p, ctx); BN_mod_exp(e, g, x, p, ctx);
/* Send KEX init */ /* Send KEX init */
@ -518,7 +518,7 @@ static int libssh2_kex_method_diffie_hellman_group1_sha1_key_exchange(LIBSSH2_SE
#ifdef LIBSSH2_DEBUG_KEX #ifdef LIBSSH2_DEBUG_KEX
_libssh2_debug(session, LIBSSH2_DBG_KEX, "Initiating Diffie-Hellman Group1 Key Exchange"); _libssh2_debug(session, LIBSSH2_DBG_KEX, "Initiating Diffie-Hellman Group1 Key Exchange");
#endif #endif
ret = libssh2_kex_method_diffie_hellman_groupGP_sha1_key_exchange(session, g, p, SSH_MSG_KEXDH_INIT, SSH_MSG_KEXDH_REPLY, NULL, 0); ret = libssh2_kex_method_diffie_hellman_groupGP_sha1_key_exchange(session, g, p, 128, SSH_MSG_KEXDH_INIT, SSH_MSG_KEXDH_REPLY, NULL, 0);
BN_clear_free(p); BN_clear_free(p);
BN_clear_free(g); BN_clear_free(g);
@ -577,7 +577,7 @@ static int libssh2_kex_method_diffie_hellman_group14_sha1_key_exchange(LIBSSH2_S
#ifdef LIBSSH2_DEBUG_KEX #ifdef LIBSSH2_DEBUG_KEX
_libssh2_debug(session, LIBSSH2_DBG_KEX, "Initiating Diffie-Hellman Group14 Key Exchange"); _libssh2_debug(session, LIBSSH2_DBG_KEX, "Initiating Diffie-Hellman Group14 Key Exchange");
#endif #endif
ret = libssh2_kex_method_diffie_hellman_groupGP_sha1_key_exchange(session, g, p, SSH_MSG_KEXDH_INIT, SSH_MSG_KEXDH_REPLY, NULL, 0); ret = libssh2_kex_method_diffie_hellman_groupGP_sha1_key_exchange(session, g, p, 256, SSH_MSG_KEXDH_INIT, SSH_MSG_KEXDH_REPLY, NULL, 0);
BN_clear_free(p); BN_clear_free(p);
BN_clear_free(g); BN_clear_free(g);
@ -593,7 +593,7 @@ static int libssh2_kex_method_diffie_hellman_group14_sha1_key_exchange(LIBSSH2_S
static int libssh2_kex_method_diffie_hellman_group_exchange_sha1_key_exchange(LIBSSH2_SESSION *session) static int libssh2_kex_method_diffie_hellman_group_exchange_sha1_key_exchange(LIBSSH2_SESSION *session)
{ {
unsigned char request[13], *s, *data; unsigned char request[13], *s, *data;
unsigned long data_len, len, request_len; unsigned long data_len, p_len, g_len, request_len;
BIGNUM *p = BN_new(); BIGNUM *p = BN_new();
BIGNUM *g = BN_new(); BIGNUM *g = BN_new();
int ret; int ret;
@ -630,13 +630,13 @@ static int libssh2_kex_method_diffie_hellman_group_exchange_sha1_key_exchange(LI
} }
s = data + 1; s = data + 1;
len = libssh2_ntohu32(s); s += 4; p_len = libssh2_ntohu32(s); s += 4;
BN_bin2bn(s, len, p); s += len; BN_bin2bn(s, p_len, p); s += p_len;
len = libssh2_ntohu32(s); s += 4; g_len = libssh2_ntohu32(s); s += 4;
BN_bin2bn(s, len, g); s += len; BN_bin2bn(s, g_len, g); s += g_len;
ret = libssh2_kex_method_diffie_hellman_groupGP_sha1_key_exchange(session, g, p, SSH_MSG_KEX_DH_GEX_INIT, SSH_MSG_KEX_DH_GEX_REPLY, data + 1, data_len - 1); ret = libssh2_kex_method_diffie_hellman_groupGP_sha1_key_exchange(session, g, p, p_len, SSH_MSG_KEX_DH_GEX_INIT, SSH_MSG_KEX_DH_GEX_REPLY, data + 1, data_len - 1);
LIBSSH2_FREE(session, data); LIBSSH2_FREE(session, data);