1
0
mirror of https://git.libssh.org/projects/libssh.git synced 2025-11-30 13:01:23 +03:00

Moved DH specific code to dh.h

This commit is contained in:
Aris Adamantiadis
2011-06-12 20:55:58 +02:00
parent 113de13543
commit 3b72bf0880
2 changed files with 46 additions and 45 deletions

View File

@@ -318,39 +318,14 @@ error:
* completed * completed
*/ */
static int dh_handshake(ssh_session session) { static int dh_handshake(ssh_session session) {
ssh_string e = NULL;
ssh_string f = NULL; int rc = SSH_AGAIN;
ssh_string signature = NULL;
int rc = SSH_ERROR;
enter_function(); enter_function();
switch (session->dh_handshake_state) { switch (session->dh_handshake_state) {
case DH_STATE_INIT: case DH_STATE_INIT:
if (buffer_add_u8(session->out_buffer, SSH2_MSG_KEXDH_INIT) < 0) { rc = ssh_client_dh_init(session);
goto error;
}
if (dh_generate_x(session) < 0) {
goto error;
}
if (dh_generate_e(session) < 0) {
goto error;
}
e = dh_get_e(session);
if (e == NULL) {
goto error;
}
if (buffer_add_ssh_string(session->out_buffer, e) < 0) {
goto error;
}
ssh_string_burn(e);
ssh_string_free(e);
e=NULL;
rc = packet_send(session);
if (rc == SSH_ERROR) { if (rc == SSH_ERROR) {
goto error; goto error;
} }
@@ -371,23 +346,7 @@ static int dh_handshake(ssh_session session) {
leave_function(); leave_function();
return SSH_ERROR; return SSH_ERROR;
} }
leave_function();
return SSH_AGAIN;
error: error:
if(e != NULL){
ssh_string_burn(e);
ssh_string_free(e);
}
if(f != NULL){
ssh_string_burn(f);
ssh_string_free(f);
}
if(signature != NULL){
ssh_string_burn(signature);
ssh_string_free(signature);
}
leave_function(); leave_function();
return rc; return rc;
} }

View File

@@ -55,6 +55,7 @@
#include "libssh/session.h" #include "libssh/session.h"
#include "libssh/keys.h" #include "libssh/keys.h"
#include "libssh/dh.h" #include "libssh/dh.h"
#include "libssh/ssh2.h"
/* todo: remove it */ /* todo: remove it */
#include "libssh/string.h" #include "libssh/string.h"
@@ -479,6 +480,47 @@ int dh_build_k(ssh_session session) {
return 0; return 0;
} }
/** @internal
* @brief Starts diffie-hellman-group1 key exchange
*/
int ssh_client_dh_init(ssh_session session){
ssh_string e = NULL;
int rc;
enter_function();
if (buffer_add_u8(session->out_buffer, SSH2_MSG_KEXDH_INIT) < 0) {
goto error;
}
if (dh_generate_x(session) < 0) {
goto error;
}
if (dh_generate_e(session) < 0) {
goto error;
}
e = dh_get_e(session);
if (e == NULL) {
goto error;
}
if (buffer_add_ssh_string(session->out_buffer, e) < 0) {
goto error;
}
ssh_string_burn(e);
ssh_string_free(e);
e=NULL;
rc = packet_send(session);
return rc;
error:
if(e != NULL){
ssh_string_burn(e);
ssh_string_free(e);
}
leave_function();
return SSH_ERROR;
}
/* /*
static void sha_add(ssh_string str,SHACTX ctx){ static void sha_add(ssh_string str,SHACTX ctx){
sha1_update(ctx,str,string_len(str)+4); sha1_update(ctx,str,string_len(str)+4);
@@ -849,7 +891,7 @@ int ssh_get_pubkey_hash(ssh_session session, unsigned char **hash) {
return SSH_ERROR; return SSH_ERROR;
} }
h = malloc(sizeof(unsigned char *) * MD5_DIGEST_LEN); h = malloc(sizeof(unsigned char) * MD5_DIGEST_LEN);
if (h == NULL) { if (h == NULL) {
return SSH_ERROR; return SSH_ERROR;
} }