]> andersk Git - openssh.git/blobdiff - kex.c
20010115
[openssh.git] / kex.c
diff --git a/kex.c b/kex.c
index 68b9e522e73d96bfdc9b8c502ccb700ef7427888..9a31ae92739aec0fb62fba7603c9fbbf740c9282 100644 (file)
--- a/kex.c
+++ b/kex.c
@@ -23,7 +23,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: kex.c,v 1.12 2000/10/11 20:27:23 markus Exp $");
+RCSID("$OpenBSD: kex.c,v 1.17 2001/01/08 21:48:17 markus Exp $");
 
 #include "ssh.h"
 #include "ssh2.h"
@@ -43,6 +43,7 @@ RCSID("$OpenBSD: kex.c,v 1.12 2000/10/11 20:27:23 markus Exp $");
 #include <openssl/pem.h>
 
 #include "kex.h"
+#include "key.h"
 
 #define KEX_COOKIE_LEN 16
 
@@ -50,7 +51,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));
@@ -138,7 +139,7 @@ dh_pub_is_valid(DH *dh, BIGNUM *dh_pub)
        return 0;
 }
 
-DH *
+void
 dh_gen_key(DH *dh)
 {
        int tries = 0;
@@ -149,7 +150,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 *
@@ -167,9 +167,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)
 {
@@ -181,11 +186,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"
@@ -199,7 +204,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++){
@@ -210,7 +215,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,
@@ -222,7 +227,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;
 
@@ -259,7 +264,7 @@ kex_hash(
        return digest;
 }
 
-unsigned char *
+u_char *
 kex_hash_gex(
     char *client_version_string,
     char *server_version_string,
@@ -272,7 +277,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;
 
@@ -312,8 +317,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();
@@ -321,7 +326,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);
@@ -454,11 +459,13 @@ choose_kex(Kex *k, char *client, char *server)
 void
 choose_hostkeyalg(Kex *k, char *client, char *server)
 {
-       k->hostkeyalg = get_match(client, server);
-       if (k->hostkeyalg == NULL)
+       char *hostkeyalg = get_match(client, server);
+       if (hostkeyalg == NULL)
                fatal("no hostkey alg");
-       if (strcmp(k->hostkeyalg, KEX_DSS) != 0)
-               fatal("bad hostkey alg %s", k->hostkeyalg);
+       k->hostkey_type = key_type_from_name(hostkeyalg);
+       if (k->hostkey_type == KEY_UNSPEC)
+               fatal("bad hostkey alg '%s'", hostkeyalg);
+       xfree(hostkeyalg);
 }
 
 Kex *
@@ -506,12 +513,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.038266 seconds and 4 git commands to generate.