summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2014-04-10 17:47:16 +0200
committerAndreas Schneider <asn@cryptomilk.org>2014-08-06 09:20:49 +0200
commit1dd95675dfb81c6ff24af01c96197f8816a25a0b (patch)
tree69bbaf3f4271178289b315f6b926751bd4d83523 /src
parentcb10ad0c8471bfb86f0d2394a5abb33477c46026 (diff)
buffer: adapt dh.c to new ssh_buffer_(un)pack()
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'src')
-rw-r--r--src/dh.c136
1 files changed, 40 insertions, 96 deletions
diff --git a/src/dh.c b/src/dh.c
index b1c655e7..c95e5b58 100644
--- a/src/dh.c
+++ b/src/dh.c
@@ -504,10 +504,6 @@ int ssh_client_dh_init(ssh_session session){
ssh_string e = NULL;
int rc;
- if (buffer_add_u8(session->out_buffer, SSH2_MSG_KEXDH_INIT) < 0) {
- goto error;
- }
-
if (dh_generate_x(session) < 0) {
goto error;
}
@@ -520,9 +516,11 @@ int ssh_client_dh_init(ssh_session session){
goto error;
}
- if (buffer_add_ssh_string(session->out_buffer, e) < 0) {
+ rc = ssh_buffer_pack(session->out_buffer, "bS", SSH2_MSG_KEXDH_INIT, e);
+ if (rc != SSH_OK) {
goto error;
}
+
ssh_string_burn(e);
ssh_string_free(e);
e=NULL;
@@ -589,11 +587,9 @@ error:
int make_sessionid(ssh_session session) {
ssh_string num = NULL;
- ssh_string str = NULL;
ssh_buffer server_hash = NULL;
ssh_buffer client_hash = NULL;
ssh_buffer buf = NULL;
- uint32_t len;
int rc = SSH_ERROR;
buf = ssh_buffer_new();
@@ -601,24 +597,11 @@ int make_sessionid(ssh_session session) {
return rc;
}
- str = ssh_string_from_char(session->clientbanner);
- if (str == NULL) {
- goto error;
- }
-
- rc = buffer_add_ssh_string(buf, str);
- if (rc < 0) {
- goto error;
- }
- ssh_string_free(str);
-
- str = ssh_string_from_char(session->serverbanner);
- if (str == NULL) {
- goto error;
- }
-
- rc = buffer_add_ssh_string(buf, str);
- if (rc < 0) {
+ rc = ssh_buffer_pack(buf,
+ "ss",
+ session->clientbanner,
+ session->serverbanner);
+ if (rc == SSH_ERROR) {
goto error;
}
@@ -657,61 +640,30 @@ int make_sessionid(ssh_session session) {
}
}
- len = ntohl(buffer_get_rest_len(client_hash));
- rc = buffer_add_u32(buf,len);
- if (rc < 0) {
- goto error;
- }
- rc = ssh_buffer_add_data(buf, buffer_get_rest(client_hash),
- buffer_get_rest_len(client_hash));
- if (rc < 0) {
- goto error;
- }
-
- len = ntohl(buffer_get_rest_len(server_hash));
- rc = buffer_add_u32(buf, len);
- if (rc < 0) {
- goto error;
- }
- rc = ssh_buffer_add_data(buf, buffer_get_rest(server_hash),
- buffer_get_rest_len(server_hash));
- if (rc < 0) {
- goto error;
- }
-
- len = ssh_string_len(session->next_crypto->server_pubkey) + 4;
- rc = ssh_buffer_add_data(buf, session->next_crypto->server_pubkey, len);
- if (rc < 0) {
+ rc = ssh_buffer_pack(buf,
+ "dPdPS",
+ buffer_get_rest_len(client_hash),
+ buffer_get_rest_len(client_hash),
+ buffer_get_rest(client_hash),
+ buffer_get_rest_len(server_hash),
+ buffer_get_rest_len(server_hash),
+ buffer_get_rest(server_hash),
+ session->next_crypto->server_pubkey);
+
+ if(rc != SSH_OK){
goto error;
}
if (session->next_crypto->kex_type == SSH_KEX_DH_GROUP1_SHA1 ||
- session->next_crypto->kex_type == SSH_KEX_DH_GROUP14_SHA1) {
-
- num = make_bignum_string(session->next_crypto->e);
- if (num == NULL) {
- goto error;
- }
-
- len = ssh_string_len(num) + 4;
- rc = ssh_buffer_add_data(buf, num, len);
- if (rc < 0) {
- goto error;
- }
-
- ssh_string_free(num);
- num = make_bignum_string(session->next_crypto->f);
- if (num == NULL) {
+ session->next_crypto->kex_type == SSH_KEX_DH_GROUP14_SHA1) {
+ rc = ssh_buffer_pack(buf,
+ "BB",
+ session->next_crypto->e,
+ session->next_crypto->f);
+ if (rc != SSH_OK) {
goto error;
}
- len = ssh_string_len(num) + 4;
- rc = ssh_buffer_add_data(buf, num, len);
- if (rc < 0) {
- goto error;
- }
-
- ssh_string_free(num);
#ifdef HAVE_ECDH
} else if (session->next_crypto->kex_type == SSH_KEX_ECDH_SHA2_NISTP256) {
if (session->next_crypto->ecdh_client_pubkey == NULL ||
@@ -719,37 +671,30 @@ int make_sessionid(ssh_session session) {
SSH_LOG(SSH_LOG_WARNING, "ECDH parameted missing");
goto error;
}
- rc = buffer_add_ssh_string(buf,session->next_crypto->ecdh_client_pubkey);
- if (rc < 0) {
- goto error;
- }
- rc = buffer_add_ssh_string(buf,session->next_crypto->ecdh_server_pubkey);
- if (rc < 0) {
+ rc = ssh_buffer_pack(buf,
+ "SS",
+ session->next_crypto->ecdh_client_pubkey,
+ session->next_crypto->ecdh_server_pubkey);
+ if (rc != SSH_OK) {
goto error;
}
#endif
#ifdef HAVE_CURVE25519
} else if (session->next_crypto->kex_type == SSH_KEX_CURVE25519_SHA256_LIBSSH_ORG) {
- rc = buffer_add_u32(buf, htonl(CURVE25519_PUBKEY_SIZE));
- rc += ssh_buffer_add_data(buf, session->next_crypto->curve25519_client_pubkey,
- CURVE25519_PUBKEY_SIZE);
- rc += buffer_add_u32(buf, htonl(CURVE25519_PUBKEY_SIZE));
- rc += ssh_buffer_add_data(buf, session->next_crypto->curve25519_server_pubkey,
- CURVE25519_PUBKEY_SIZE);
+ rc = ssh_buffer_pack(buf,
+ "dPdP",
+ CURVE25519_PUBKEY_SIZE,
+ session->next_crypto->curve25519_client_pubkey,
+ CURVE25519_PUBKEY_SIZE,
+ session->next_crypto->curve25519_server_pubkey);
+
if (rc != SSH_OK) {
- goto error;
+ goto error;
}
#endif
}
-
- num = make_bignum_string(session->next_crypto->k);
- if (num == NULL) {
- goto error;
- }
-
- len = ssh_string_len(num) + 4;
- rc = ssh_buffer_add_data(buf, num, len);
- if (rc < 0) {
+ rc = ssh_buffer_pack(buf, "B", session->next_crypto->k);
+ if (rc != SSH_OK) {
goto error;
}
@@ -811,7 +756,6 @@ error:
session->in_hashbuf = NULL;
session->out_hashbuf = NULL;
- ssh_string_free(str);
ssh_string_free(num);
return rc;