]> andersk Git - openssh.git/blobdiff - kex.c
Hopefully things did not get mixed around too much. It compiles under
[openssh.git] / kex.c
diff --git a/kex.c b/kex.c
index 2dbac9b13bdb1146e5d2670d23a94e4904c9ce9c..d3099f7085cff5321606193aa28a36adfc45842f 100644 (file)
--- a/kex.c
+++ b/kex.c
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: kex.c,v 1.13 2000/11/12 19:50:37 markus Exp $");
-
-#include "ssh.h"
-#include "ssh2.h"
-#include "xmalloc.h"
-#include "buffer.h"
-#include "bufaux.h"
-#include "packet.h"
-#include "compat.h"
-
-#include <openssl/bn.h>
-#include <openssl/dh.h>
+RCSID("$OpenBSD: kex.c,v 1.18 2001/01/21 19:05:49 markus Exp $");
 
 #include <openssl/crypto.h>
 #include <openssl/bio.h>
@@ -42,8 +31,16 @@ RCSID("$OpenBSD: kex.c,v 1.13 2000/11/12 19:50:37 markus Exp $");
 #include <openssl/dh.h>
 #include <openssl/pem.h>
 
+#include "ssh2.h"
+#include "xmalloc.h"
+#include "buffer.h"
+#include "bufaux.h"
+#include "packet.h"
+#include "compat.h"
+#include "cipher.h"
 #include "kex.h"
 #include "key.h"
+#include "log.h"
 
 #define KEX_COOKIE_LEN 16
 
@@ -51,7 +48,7 @@ Buffer *
 kex_init(char *myproposal[PROPOSAL_MAX])
 {
        int first_kex_packet_follows = 0;
-       unsigned char cookie[KEX_COOKIE_LEN];
+       u_char cookie[KEX_COOKIE_LEN];
        u_int32_t rand = 0;
        int i;
        Buffer *ki = xmalloc(sizeof(*ki));
@@ -139,7 +136,7 @@ dh_pub_is_valid(DH *dh, BIGNUM *dh_pub)
        return 0;
 }
 
-DH *
+void
 dh_gen_key(DH *dh)
 {
        int tries = 0;
@@ -150,7 +147,6 @@ dh_gen_key(DH *dh)
                if (tries++ > 10)
                        fatal("dh_new_group1: too many bad keys: giving up");
        } while (!dh_pub_is_valid(dh, dh->pub_key));
-       return dh;
 }
 
 DH *
@@ -168,9 +164,14 @@ dh_new_group_asc(const char *gen, const char *modulus)
        if ((ret = BN_hex2bn(&dh->g, gen)) < 0)
                fatal("BN_hex2bn g");
 
-       return (dh_gen_key(dh));
+       return (dh);
 }
 
+/*
+ * This just returns the group, we still need to generate the exchange
+ * value.
+ */
+
 DH *
 dh_new_group(BIGNUM *gen, BIGNUM *modulus)
 {
@@ -182,11 +183,11 @@ dh_new_group(BIGNUM *gen, BIGNUM *modulus)
        dh->p = modulus;
        dh->g = gen;
 
-       return (dh_gen_key(dh));
+       return (dh);
 }
 
 DH *
-dh_new_group1()
+dh_new_group1(void)
 {
        static char *gen = "2", *group1 =
            "FFFFFFFF" "FFFFFFFF" "C90FDAA2" "2168C234" "C4C6628B" "80DC1CD1"
@@ -200,7 +201,7 @@ dh_new_group1()
 }
 
 void
-dump_digest(unsigned char *digest, int len)
+dump_digest(u_char *digest, int len)
 {
        int i;
        for (i = 0; i< len; i++){
@@ -211,7 +212,7 @@ dump_digest(unsigned char *digest, int len)
        fprintf(stderr, "\n");
 }
 
-unsigned char *
+u_char *
 kex_hash(
     char *client_version_string,
     char *server_version_string,
@@ -223,7 +224,7 @@ kex_hash(
     BIGNUM *shared_secret)
 {
        Buffer b;
-       static unsigned char digest[EVP_MAX_MD_SIZE];
+       static u_char digest[EVP_MAX_MD_SIZE];
        EVP_MD *evp_md = EVP_sha1();
        EVP_MD_CTX md;
 
@@ -260,7 +261,7 @@ kex_hash(
        return digest;
 }
 
-unsigned char *
+u_char *
 kex_hash_gex(
     char *client_version_string,
     char *server_version_string,
@@ -273,7 +274,7 @@ kex_hash_gex(
     BIGNUM *shared_secret)
 {
        Buffer b;
-       static unsigned char digest[EVP_MAX_MD_SIZE];
+       static u_char digest[EVP_MAX_MD_SIZE];
        EVP_MD *evp_md = EVP_sha1();
        EVP_MD_CTX md;
 
@@ -313,8 +314,8 @@ kex_hash_gex(
        return digest;
 }
 
-unsigned char *
-derive_key(int id, int need, char unsigned *hash, BIGNUM *shared_secret)
+u_char *
+derive_key(int id, int need, u_char *hash, BIGNUM *shared_secret)
 {
        Buffer b;
        EVP_MD *evp_md = EVP_sha1();
@@ -322,7 +323,7 @@ derive_key(int id, int need, char unsigned *hash, BIGNUM *shared_secret)
        char c = id;
        int have;
        int mdsz = evp_md->md_size;
-       unsigned char *digest = xmalloc(((need+mdsz-1)/mdsz)*mdsz);
+       u_char *digest = xmalloc(((need+mdsz-1)/mdsz)*mdsz);
 
        buffer_init(&b);
        buffer_put_bignum2(&b, shared_secret);
@@ -461,6 +462,7 @@ choose_hostkeyalg(Kex *k, char *client, char *server)
        k->hostkey_type = key_type_from_name(hostkeyalg);
        if (k->hostkey_type == KEY_UNSPEC)
                fatal("bad hostkey alg '%s'", hostkeyalg);
+       xfree(hostkeyalg);
 }
 
 Kex *
@@ -508,12 +510,12 @@ kex_choose_conf(char *cprop[PROPOSAL_MAX], char *sprop[PROPOSAL_MAX], int server
 }
 
 int
-kex_derive_keys(Kex *k, unsigned char *hash, BIGNUM *shared_secret)
+kex_derive_keys(Kex *k, u_char *hash, BIGNUM *shared_secret)
 {
        int i;
        int mode;
        int ctos;
-       unsigned char *keys[NKEYS];
+       u_char *keys[NKEYS];
 
        for (i = 0; i < NKEYS; i++)
                keys[i] = derive_key('A'+i, k->we_need, hash, shared_secret);
This page took 0.039656 seconds and 4 git commands to generate.