=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/kex.c,v retrieving revision 1.64.2.2 retrieving revision 1.65 diff -u -r1.64.2.2 -r1.65 --- src/usr.bin/ssh/kex.c 2006/10/06 03:19:32 1.64.2.2 +++ src/usr.bin/ssh/kex.c 2005/11/04 05:15:59 1.65 @@ -1,4 +1,3 @@ -/* $OpenBSD: kex.c,v 1.64.2.2 2006/10/06 03:19:32 brad Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * @@ -23,23 +22,20 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include +#include "includes.h" +RCSID("$OpenBSD: kex.c,v 1.65 2005/11/04 05:15:59 djm Exp $"); -#include -#include -#include -#include - #include -#include "xmalloc.h" #include "ssh2.h" +#include "xmalloc.h" #include "buffer.h" +#include "bufaux.h" #include "packet.h" #include "compat.h" #include "cipher.h" -#include "key.h" #include "kex.h" +#include "key.h" #include "log.h" #include "mac.h" #include "match.h" @@ -48,8 +44,6 @@ #define KEX_COOKIE_LEN 16 -extern const EVP_MD *evp_ssh_sha256(void); - /* prototype */ static void kex_kexinit_finish(Kex *); static void kex_choose_conf(Kex *); @@ -81,7 +75,7 @@ int i; char **proposal; - proposal = xcalloc(PROPOSAL_MAX, sizeof(char *)); + proposal = xmalloc(PROPOSAL_MAX * sizeof(char *)); buffer_init(&b); buffer_append(&b, buffer_ptr(raw), buffer_len(raw)); @@ -216,7 +210,8 @@ { Kex *kex; - kex = xcalloc(1, sizeof(*kex)); + kex = xmalloc(sizeof(*kex)); + memset(kex, 0, sizeof(*kex)); buffer_init(&kex->peer); buffer_init(&kex->my); kex_prop2buf(&kex->my, proposal); @@ -259,7 +254,6 @@ enc->key_len = cipher_keylen(enc->cipher); enc->block_size = cipher_blocksize(enc->cipher); } - static void choose_mac(Mac *mac, char *client, char *server) { @@ -275,7 +269,6 @@ mac->key = NULL; mac->enabled = 0; } - static void choose_comp(Comp *comp, char *client, char *server) { @@ -293,7 +286,6 @@ } comp->name = name; } - static void choose_kex(Kex *k, char *client, char *server) { @@ -309,9 +301,6 @@ } else if (strcmp(k->name, KEX_DHGEX_SHA1) == 0) { k->kex_type = KEX_DH_GEX_SHA1; k->evp_md = EVP_sha1(); - } else if (strcmp(k->name, KEX_DHGEX_SHA256) == 0) { - k->kex_type = KEX_DH_GEX_SHA256; - k->evp_md = evp_ssh_sha256(); } else fatal("bad kex alg %s", k->name); } @@ -375,7 +364,8 @@ /* Algorithm Negotiation */ for (mode = 0; mode < MODE_MAX; mode++) { - newkeys = xcalloc(1, sizeof(*newkeys)); + newkeys = xmalloc(sizeof(*newkeys)); + memset(newkeys, 0, sizeof(*newkeys)); kex->newkeys[mode] = newkeys; ctos = (!kex->server && mode == MODE_OUT) || (kex->server && mode == MODE_IN); nenc = ctos ? PROPOSAL_ENC_ALGS_CTOS : PROPOSAL_ENC_ALGS_STOC; @@ -430,7 +420,7 @@ if ((mdsz = EVP_MD_size(kex->evp_md)) <= 0) fatal("bad kex md size %d", mdsz); - digest = xmalloc(roundup(need, mdsz)); + digest = xmalloc(roundup(need, mdsz)); buffer_init(&b); buffer_put_bignum2(&b, shared_secret); @@ -483,8 +473,7 @@ for (mode = 0; mode < MODE_MAX; mode++) { current_keys[mode] = kex->newkeys[mode]; kex->newkeys[mode] = NULL; - ctos = (!kex->server && mode == MODE_OUT) || - (kex->server && mode == MODE_IN); + ctos = (!kex->server && mode == MODE_OUT) || (kex->server && mode == MODE_IN); current_keys[mode]->enc.iv = keys[ctos ? 0 : 1]; current_keys[mode]->enc.key = keys[ctos ? 2 : 3]; current_keys[mode]->mac.key = keys[ctos ? 4 : 5];