diff options
author | Colin Watson <cjwatson@debian.org> | 2006-05-12 08:53:37 +0000 |
---|---|---|
committer | Colin Watson <cjwatson@debian.org> | 2006-05-12 08:53:37 +0000 |
commit | 2ee73b36b9a35daeaa4b065046882dc1f5f551b6 (patch) | |
tree | f64a4ace625514e94759878c0b94ab0a79805bbd /kexgexc.c | |
parent | 3c190ec8e469477ea65fbf4cc83062c65c281434 (diff) | |
parent | 3e2e0ac10674d77618c4c7339e18b83ced247492 (diff) |
Merge 4.3p2 to the trunk.
Diffstat (limited to 'kexgexc.c')
-rw-r--r-- | kexgexc.c | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -24,7 +24,7 @@ | |||
24 | */ | 24 | */ |
25 | 25 | ||
26 | #include "includes.h" | 26 | #include "includes.h" |
27 | RCSID("$OpenBSD: kexgexc.c,v 1.2 2003/12/08 11:00:47 markus Exp $"); | 27 | RCSID("$OpenBSD: kexgexc.c,v 1.3 2005/11/04 05:15:59 djm Exp $"); |
28 | 28 | ||
29 | #include "xmalloc.h" | 29 | #include "xmalloc.h" |
30 | #include "key.h" | 30 | #include "key.h" |
@@ -42,7 +42,7 @@ kexgex_client(Kex *kex) | |||
42 | BIGNUM *p = NULL, *g = NULL; | 42 | BIGNUM *p = NULL, *g = NULL; |
43 | Key *server_host_key; | 43 | Key *server_host_key; |
44 | u_char *kbuf, *hash, *signature = NULL, *server_host_key_blob = NULL; | 44 | u_char *kbuf, *hash, *signature = NULL, *server_host_key_blob = NULL; |
45 | u_int klen, kout, slen, sbloblen; | 45 | u_int klen, kout, slen, sbloblen, hashlen; |
46 | int min, max, nbits; | 46 | int min, max, nbits; |
47 | DH *dh; | 47 | DH *dh; |
48 | 48 | ||
@@ -155,7 +155,8 @@ kexgex_client(Kex *kex) | |||
155 | min = max = -1; | 155 | min = max = -1; |
156 | 156 | ||
157 | /* calc and verify H */ | 157 | /* calc and verify H */ |
158 | hash = kexgex_hash( | 158 | kexgex_hash( |
159 | kex->evp_md, | ||
159 | kex->client_version_string, | 160 | kex->client_version_string, |
160 | kex->server_version_string, | 161 | kex->server_version_string, |
161 | buffer_ptr(&kex->my), buffer_len(&kex->my), | 162 | buffer_ptr(&kex->my), buffer_len(&kex->my), |
@@ -165,25 +166,27 @@ kexgex_client(Kex *kex) | |||
165 | dh->p, dh->g, | 166 | dh->p, dh->g, |
166 | dh->pub_key, | 167 | dh->pub_key, |
167 | dh_server_pub, | 168 | dh_server_pub, |
168 | shared_secret | 169 | shared_secret, |
170 | &hash, &hashlen | ||
169 | ); | 171 | ); |
172 | |||
170 | /* have keys, free DH */ | 173 | /* have keys, free DH */ |
171 | DH_free(dh); | 174 | DH_free(dh); |
172 | xfree(server_host_key_blob); | 175 | xfree(server_host_key_blob); |
173 | BN_clear_free(dh_server_pub); | 176 | BN_clear_free(dh_server_pub); |
174 | 177 | ||
175 | if (key_verify(server_host_key, signature, slen, hash, 20) != 1) | 178 | if (key_verify(server_host_key, signature, slen, hash, hashlen) != 1) |
176 | fatal("key_verify failed for server_host_key"); | 179 | fatal("key_verify failed for server_host_key"); |
177 | key_free(server_host_key); | 180 | key_free(server_host_key); |
178 | xfree(signature); | 181 | xfree(signature); |
179 | 182 | ||
180 | /* save session id */ | 183 | /* save session id */ |
181 | if (kex->session_id == NULL) { | 184 | if (kex->session_id == NULL) { |
182 | kex->session_id_len = 20; | 185 | kex->session_id_len = hashlen; |
183 | kex->session_id = xmalloc(kex->session_id_len); | 186 | kex->session_id = xmalloc(kex->session_id_len); |
184 | memcpy(kex->session_id, hash, kex->session_id_len); | 187 | memcpy(kex->session_id, hash, kex->session_id_len); |
185 | } | 188 | } |
186 | kex_derive_keys(kex, hash, shared_secret); | 189 | kex_derive_keys(kex, hash, hashlen, shared_secret); |
187 | BN_clear_free(shared_secret); | 190 | BN_clear_free(shared_secret); |
188 | 191 | ||
189 | kex_finish(kex); | 192 | kex_finish(kex); |