aboutsummaryrefslogtreecommitdiff
path: root/src/curve25519.c
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2014-04-16 18:05:14 +0200
committerAndreas Schneider <asn@cryptomilk.org>2014-08-06 09:33:32 +0200
commit673990f56854a489f9d10712a835f4fb3d81d1bc (patch)
tree9b966c8509379bdebb70072d8fc23e46bce9e5ea /src/curve25519.c
parent97638a1465e2b7fffe25caa0eab96c9d7099191a (diff)
downloadlibssh-673990f56854a489f9d10712a835f4fb3d81d1bc.tar.gz
libssh-673990f56854a489f9d10712a835f4fb3d81d1bc.tar.xz
libssh-673990f56854a489f9d10712a835f4fb3d81d1bc.zip
buffers: adapt curve25519.c to ssh_buffer_(un)pack()
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'src/curve25519.c')
-rw-r--r--src/curve25519.c23
1 files changed, 8 insertions, 15 deletions
diff --git a/src/curve25519.c b/src/curve25519.c
index 784d4106..cbef5765 100644
--- a/src/curve25519.c
+++ b/src/curve25519.c
@@ -42,14 +42,8 @@
* @brief Starts curve25519-sha256@libssh.org key exchange
*/
int ssh_client_curve25519_init(ssh_session session){
- ssh_string client_pubkey;
int rc;
- rc = buffer_add_u8(session->out_buffer, SSH2_MSG_KEX_ECDH_INIT);
- if (rc < 0) {
- return SSH_ERROR;
- }
-
rc = ssh_get_random(session->next_crypto->curve25519_privkey, CURVE25519_PRIVKEY_SIZE, 1);
if (rc == 0){
ssh_set_error(session, SSH_FATAL, "PRNG error");
@@ -58,15 +52,14 @@ int ssh_client_curve25519_init(ssh_session session){
crypto_scalarmult_base(session->next_crypto->curve25519_client_pubkey,
session->next_crypto->curve25519_privkey);
- client_pubkey = ssh_string_new(CURVE25519_PUBKEY_SIZE);
- if (client_pubkey == NULL) {
- return SSH_ERROR;
- }
- ssh_string_fill(client_pubkey, session->next_crypto->curve25519_client_pubkey,
- CURVE25519_PUBKEY_SIZE);
- rc = buffer_add_ssh_string(session->out_buffer,client_pubkey);
- ssh_string_free(client_pubkey);
- if (rc < 0) {
+
+ rc = ssh_buffer_pack(session->out_buffer,
+ "bdP",
+ SSH2_MSG_KEX_ECDH_INIT,
+ CURVE25519_PUBKEY_SIZE,
+ (size_t)CURVE25519_PUBKEY_SIZE, session->next_crypto->curve25519_client_pubkey);
+ if (rc != SSH_OK) {
+ ssh_set_error_oom(session);
return SSH_ERROR;
}