aboutsummaryrefslogtreecommitdiff
path: root/src/dh.c
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2011-06-12 20:55:58 +0200
committerAris Adamantiadis <aris@0xbadc0de.be>2011-06-12 20:55:58 +0200
commit3b72bf08802a058cb663a40359ed0e006a1480ca (patch)
tree7edbcd4d07215559574592f830071a055250a25b /src/dh.c
parent113de1354322f3fb310b23b412c548d8a9e417bc (diff)
downloadlibssh-3b72bf08802a058cb663a40359ed0e006a1480ca.tar.gz
libssh-3b72bf08802a058cb663a40359ed0e006a1480ca.tar.xz
libssh-3b72bf08802a058cb663a40359ed0e006a1480ca.zip
Moved DH specific code to dh.h
Diffstat (limited to 'src/dh.c')
-rw-r--r--src/dh.c44
1 files changed, 43 insertions, 1 deletions
diff --git a/src/dh.c b/src/dh.c
index 30625db3..8be99bf4 100644
--- a/src/dh.c
+++ b/src/dh.c
@@ -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;
}