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:
47
src/client.c
47
src/client.c
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
44
src/dh.c
44
src/dh.c
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user