summaryrefslogtreecommitdiff
path: root/kexdhs.c
diff options
context:
space:
mode:
Diffstat (limited to 'kexdhs.c')
-rw-r--r--kexdhs.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/kexdhs.c b/kexdhs.c
index 26c8cdfd6..861708818 100644
--- a/kexdhs.c
+++ b/kexdhs.c
@@ -1,3 +1,4 @@
1/* $OpenBSD: kexdhs.c,v 1.9 2006/11/06 21:25:28 markus Exp $ */
1/* 2/*
2 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
3 * 4 *
@@ -23,15 +24,25 @@
23 */ 24 */
24 25
25#include "includes.h" 26#include "includes.h"
26RCSID("$OpenBSD: kexdhs.c,v 1.3 2005/11/04 05:15:59 djm Exp $"); 27
28#include <sys/types.h>
29
30#include <stdarg.h>
31#include <string.h>
32#include <signal.h>
27 33
28#include "xmalloc.h" 34#include "xmalloc.h"
35#include "buffer.h"
29#include "key.h" 36#include "key.h"
37#include "cipher.h"
30#include "kex.h" 38#include "kex.h"
31#include "log.h" 39#include "log.h"
32#include "packet.h" 40#include "packet.h"
33#include "dh.h" 41#include "dh.h"
34#include "ssh2.h" 42#include "ssh2.h"
43#ifdef GSSAPI
44#include "ssh-gss.h"
45#endif
35#include "monitor_wrap.h" 46#include "monitor_wrap.h"
36 47
37void 48void
@@ -41,8 +52,8 @@ kexdh_server(Kex *kex)
41 DH *dh; 52 DH *dh;
42 Key *server_host_key; 53 Key *server_host_key;
43 u_char *kbuf, *hash, *signature = NULL, *server_host_key_blob = NULL; 54 u_char *kbuf, *hash, *signature = NULL, *server_host_key_blob = NULL;
44 u_int sbloblen, klen, kout, hashlen; 55 u_int sbloblen, klen, hashlen, slen;
45 u_int slen; 56 int kout;
46 57
47 /* generate server DH public key */ 58 /* generate server DH public key */
48 switch (kex->kex_type) { 59 switch (kex->kex_type) {
@@ -90,13 +101,15 @@ kexdh_server(Kex *kex)
90 101
91 klen = DH_size(dh); 102 klen = DH_size(dh);
92 kbuf = xmalloc(klen); 103 kbuf = xmalloc(klen);
93 kout = DH_compute_key(kbuf, dh_client_pub, dh); 104 if ((kout = DH_compute_key(kbuf, dh_client_pub, dh)) < 0)
105 fatal("DH_compute_key: failed");
94#ifdef DEBUG_KEXDH 106#ifdef DEBUG_KEXDH
95 dump_digest("shared secret", kbuf, kout); 107 dump_digest("shared secret", kbuf, kout);
96#endif 108#endif
97 if ((shared_secret = BN_new()) == NULL) 109 if ((shared_secret = BN_new()) == NULL)
98 fatal("kexdh_server: BN_new failed"); 110 fatal("kexdh_server: BN_new failed");
99 BN_bin2bn(kbuf, kout, shared_secret); 111 if (BN_bin2bn(kbuf, kout, shared_secret) == NULL)
112 fatal("kexdh_server: BN_bin2bn failed");
100 memset(kbuf, 0, klen); 113 memset(kbuf, 0, klen);
101 xfree(kbuf); 114 xfree(kbuf);
102 115