]> andersk Git - openssh.git/blobdiff - kexgex.c
- jakob@cvs.openbsd.org 2001/07/31 09:28:44
[openssh.git] / kexgex.c
index 6e8be78b5527a894e89baca4345be4407768cb8b..1bc6b7e15ac319654e36cc4ebac6e45e15fd9116 100644 (file)
--- a/kexgex.c
+++ b/kexgex.c
@@ -24,7 +24,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: kexgex.c,v 1.2 2001/04/03 23:32:12 markus Exp $");
+RCSID("$OpenBSD: kexgex.c,v 1.8 2001/06/23 15:12:19 itojun Exp $");
 
 #include <openssl/bn.h>
 
@@ -39,7 +39,7 @@ RCSID("$OpenBSD: kexgex.c,v 1.2 2001/04/03 23:32:12 markus Exp $");
 #include "ssh2.h"
 #include "compat.h"
 
-u_char *
+static u_char *
 kexgex_hash(
     char *client_version_string,
     char *server_version_string,
@@ -57,8 +57,8 @@ kexgex_hash(
        EVP_MD_CTX md;
 
        buffer_init(&b);
-       buffer_put_string(&b, client_version_string, strlen(client_version_string));
-       buffer_put_string(&b, server_version_string, strlen(server_version_string));
+       buffer_put_cstring(&b, client_version_string);
+       buffer_put_cstring(&b, server_version_string);
 
        /* kexinit messages: fake header: len+SSH2_MSG_KEXINIT */
        buffer_put_int(&b, ckexinitlen+1);
@@ -69,7 +69,7 @@ kexgex_hash(
        buffer_append(&b, skexinit, skexinitlen);
 
        buffer_put_string(&b, serverhostkeyblob, sbloblen);
-       if (min == -1 || max == -1) 
+       if (min == -1 || max == -1)
                buffer_put_int(&b, wantbits);
        else {
                buffer_put_int(&b, min);
@@ -99,7 +99,7 @@ kexgex_hash(
 
 /* client */
 
-void
+static void
 kexgex_client(Kex *kex)
 {
        BIGNUM *dh_server_pub = NULL, *shared_secret = NULL;
@@ -177,9 +177,10 @@ kexgex_client(Kex *kex)
        if (server_host_key == NULL)
                fatal("cannot decode server_host_key_blob");
 
-       if (kex->check_host_key == NULL)
-               fatal("cannot check server_host_key");
-       kex->check_host_key(server_host_key);
+       if (kex->verify_host_key == NULL)
+               fatal("cannot verify server_host_key");
+       if (kex->verify_host_key(server_host_key) == -1)
+               fatal("server_host_key verification failed");
 
        /* DH paramter f, server public DH key */
        dh_server_pub = BN_new();
@@ -205,7 +206,7 @@ kexgex_client(Kex *kex)
        kbuf = xmalloc(klen);
        kout = DH_compute_key(kbuf, dh_server_pub, dh);
 #ifdef DEBUG_KEXDH
-        dump_digest("shared secret", kbuf, kout);
+       dump_digest("shared secret", kbuf, kout);
 #endif
        shared_secret = BN_new();
        BN_bin2bn(kbuf, kout, shared_secret);
@@ -228,6 +229,8 @@ kexgex_client(Kex *kex)
            dh_server_pub,
            shared_secret
        );
+       /* have keys, free DH */
+       DH_free(dh);
        xfree(server_host_key_blob);
        BN_free(dh_server_pub);
 
@@ -242,19 +245,15 @@ kexgex_client(Kex *kex)
                kex->session_id = xmalloc(kex->session_id_len);
                memcpy(kex->session_id, hash, kex->session_id_len);
        }
-
        kex_derive_keys(kex, hash, shared_secret);
        BN_clear_free(shared_secret);
 
-       kex_send_newkeys();
-
-       /* have keys, free DH */
-       DH_free(dh);
+       kex_finish(kex);
 }
 
 /* server */
 
-void
+static void
 kexgex_server(Kex *kex)
 {
        BIGNUM *shared_secret = NULL, *dh_client_pub = NULL;
@@ -288,7 +287,7 @@ kexgex_server(Kex *kex)
                /* unused for old GEX */
                break;
        default:
-               fatal("protocol error during kex, no DH_GEX_REQUEST");
+               fatal("protocol error during kex, no DH_GEX_REQUEST: %d", type);
        }
        packet_done();
 
@@ -341,7 +340,7 @@ kexgex_server(Kex *kex)
        kbuf = xmalloc(klen);
        kout = DH_compute_key(kbuf, dh_client_pub, dh);
 #ifdef DEBUG_KEXDH
-        dump_digest("shared secret", kbuf, kout);
+       dump_digest("shared secret", kbuf, kout);
 #endif
        shared_secret = BN_new();
        BN_bin2bn(kbuf, kout, shared_secret);
@@ -391,14 +390,13 @@ kexgex_server(Kex *kex)
        packet_send();
        xfree(signature);
        xfree(server_host_key_blob);
+       /* have keys, free DH */
+       DH_free(dh);
 
        kex_derive_keys(kex, hash, shared_secret);
        BN_clear_free(shared_secret);
 
-       kex_send_newkeys();
-
-       /* have keys, free DH */
-       DH_free(dh);
+       kex_finish(kex);
 }
 
 void
This page took 0.056115 seconds and 4 git commands to generate.