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
*/
static int dh_handshake(ssh_session session) {
ssh_string e = NULL;
ssh_string f = NULL;
ssh_string signature = NULL;
int rc = SSH_ERROR;
int rc = SSH_AGAIN;
enter_function();
switch (session->dh_handshake_state) {
case DH_STATE_INIT:
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);
rc = ssh_client_dh_init(session);
if (rc == SSH_ERROR) {
goto error;
}
@@ -371,23 +346,7 @@ static int dh_handshake(ssh_session session) {
leave_function();
return SSH_ERROR;
}
leave_function();
return SSH_AGAIN;
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();
return rc;
}

View File

@@ -55,6 +55,7 @@
#include "libssh/session.h"
#include "libssh/keys.h"
#include "libssh/dh.h"
#include "libssh/ssh2.h"
/* todo: remove it */
#include "libssh/string.h"
@@ -479,6 +480,47 @@ int dh_build_k(ssh_session session) {
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){
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;
}
h = malloc(sizeof(unsigned char *) * MD5_DIGEST_LEN);
h = malloc(sizeof(unsigned char) * MD5_DIGEST_LEN);
if (h == NULL) {
return SSH_ERROR;
}