diff options
author | Colin Watson <cjwatson@debian.org> | 2009-12-29 21:38:40 +0000 |
---|---|---|
committer | Colin Watson <cjwatson@debian.org> | 2009-12-29 21:38:40 +0000 |
commit | 1b816ea846aca3ee89e7995373ace609e9518424 (patch) | |
tree | b41cdc8495cae7fa9c2e0f98a5f2e71656b61f9a /kexdhc.c | |
parent | fa585019a79ebcb4e0202b1c33f87ff1c5c9ce1c (diff) | |
parent | 086ea76990b1e6287c24b6db74adffd4605eb3b0 (diff) |
import openssh-4.6p1-gsskex-20070312.patch
Diffstat (limited to 'kexdhc.c')
-rw-r--r-- | kexdhc.c | 22 |
1 files changed, 17 insertions, 5 deletions
@@ -1,3 +1,4 @@ | |||
1 | /* $OpenBSD: kexdhc.c,v 1.11 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,10 +24,18 @@ | |||
23 | */ | 24 | */ |
24 | 25 | ||
25 | #include "includes.h" | 26 | #include "includes.h" |
26 | RCSID("$OpenBSD: kexdhc.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 <stdio.h> | ||
32 | #include <string.h> | ||
33 | #include <signal.h> | ||
27 | 34 | ||
28 | #include "xmalloc.h" | 35 | #include "xmalloc.h" |
36 | #include "buffer.h" | ||
29 | #include "key.h" | 37 | #include "key.h" |
38 | #include "cipher.h" | ||
30 | #include "kex.h" | 39 | #include "kex.h" |
31 | #include "log.h" | 40 | #include "log.h" |
32 | #include "packet.h" | 41 | #include "packet.h" |
@@ -41,7 +50,8 @@ kexdh_client(Kex *kex) | |||
41 | Key *server_host_key; | 50 | Key *server_host_key; |
42 | u_char *server_host_key_blob = NULL, *signature = NULL; | 51 | u_char *server_host_key_blob = NULL, *signature = NULL; |
43 | u_char *kbuf, *hash; | 52 | u_char *kbuf, *hash; |
44 | u_int klen, kout, slen, sbloblen, hashlen; | 53 | u_int klen, slen, sbloblen, hashlen; |
54 | int kout; | ||
45 | 55 | ||
46 | /* generate and send 'e', client DH public key */ | 56 | /* generate and send 'e', client DH public key */ |
47 | switch (kex->kex_type) { | 57 | switch (kex->kex_type) { |
@@ -82,7 +92,7 @@ kexdh_client(Kex *kex) | |||
82 | if (kex->verify_host_key(server_host_key) == -1) | 92 | if (kex->verify_host_key(server_host_key) == -1) |
83 | fatal("server_host_key verification failed"); | 93 | fatal("server_host_key verification failed"); |
84 | 94 | ||
85 | /* DH paramter f, server public DH key */ | 95 | /* DH parameter f, server public DH key */ |
86 | if ((dh_server_pub = BN_new()) == NULL) | 96 | if ((dh_server_pub = BN_new()) == NULL) |
87 | fatal("dh_server_pub == NULL"); | 97 | fatal("dh_server_pub == NULL"); |
88 | packet_get_bignum2(dh_server_pub); | 98 | packet_get_bignum2(dh_server_pub); |
@@ -103,13 +113,15 @@ kexdh_client(Kex *kex) | |||
103 | 113 | ||
104 | klen = DH_size(dh); | 114 | klen = DH_size(dh); |
105 | kbuf = xmalloc(klen); | 115 | kbuf = xmalloc(klen); |
106 | kout = DH_compute_key(kbuf, dh_server_pub, dh); | 116 | if ((kout = DH_compute_key(kbuf, dh_server_pub, dh)) < 0) |
117 | fatal("DH_compute_key: failed"); | ||
107 | #ifdef DEBUG_KEXDH | 118 | #ifdef DEBUG_KEXDH |
108 | dump_digest("shared secret", kbuf, kout); | 119 | dump_digest("shared secret", kbuf, kout); |
109 | #endif | 120 | #endif |
110 | if ((shared_secret = BN_new()) == NULL) | 121 | if ((shared_secret = BN_new()) == NULL) |
111 | fatal("kexdh_client: BN_new failed"); | 122 | fatal("kexdh_client: BN_new failed"); |
112 | BN_bin2bn(kbuf, kout, shared_secret); | 123 | if (BN_bin2bn(kbuf, kout, shared_secret) == NULL) |
124 | fatal("kexdh_client: BN_bin2bn failed"); | ||
113 | memset(kbuf, 0, klen); | 125 | memset(kbuf, 0, klen); |
114 | xfree(kbuf); | 126 | xfree(kbuf); |
115 | 127 | ||