summaryrefslogtreecommitdiffstats
path: root/src/dh.c
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2013-09-21 23:34:50 +0200
committerAris Adamantiadis <aris@0xbadc0de.be>2013-09-27 16:06:09 +0200
commit666db37e210c4d880cb1d9cfbfca9c11ed374ba7 (patch)
tree579a9cfddd85ab6d33e4c5f697e3925d8e2abc4d /src/dh.c
parent391bd8835572831e02b88f6bdb0dcb8785d9bbdb (diff)
kex: implement curve25519-sha256@libssh.org
Diffstat (limited to 'src/dh.c')
-rw-r--r--src/dh.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/dh.c b/src/dh.c
index aa01c198..f96a94a3 100644
--- a/src/dh.c
+++ b/src/dh.c
@@ -771,6 +771,18 @@ int make_sessionid(ssh_session session) {
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 += buffer_add_data(buf, session->next_crypto->curve25519_client_pubkey,
+ CURVE25519_PUBKEY_SIZE);
+ rc += buffer_add_u32(buf, htonl(CURVE25519_PUBKEY_SIZE));
+ rc += buffer_add_data(buf, session->next_crypto->curve25519_server_pubkey,
+ CURVE25519_PUBKEY_SIZE);
+ if (rc != SSH_OK) {
+ goto error;
+ }
+#endif
}
num = make_bignum_string(session->next_crypto->k);
if (num == NULL) {
@@ -800,6 +812,7 @@ int make_sessionid(ssh_session session) {
session->next_crypto->secret_hash);
break;
case SSH_KEX_ECDH_SHA2_NISTP256:
+ case SSH_KEX_CURVE25519_SHA256_LIBSSH_ORG:
session->next_crypto->digest_len = SHA256_DIGEST_LENGTH;
session->next_crypto->mac_type = SSH_MAC_SHA256;
session->next_crypto->secret_hash = malloc(session->next_crypto->digest_len);