version 1.20, 2002/02/28 15:46:33 |
version 1.21, 2002/03/18 17:50:31 |
|
|
#include "dh.h" |
#include "dh.h" |
#include "ssh2.h" |
#include "ssh2.h" |
#include "compat.h" |
#include "compat.h" |
|
#include "monitor_wrap.h" |
|
|
static u_char * |
static u_char * |
kexgex_hash( |
kexgex_hash( |
|
|
fatal("DH_GEX_REQUEST, bad parameters: %d !< %d !< %d", |
fatal("DH_GEX_REQUEST, bad parameters: %d !< %d !< %d", |
min, nbits, max); |
min, nbits, max); |
|
|
dh = choose_dh(min, nbits, max); |
/* Contact privileged parent */ |
|
dh = PRIVSEP(choose_dh(min, nbits, max)); |
if (dh == NULL) |
if (dh == NULL) |
packet_disconnect("Protocol error: no matching DH grp found"); |
packet_disconnect("Protocol error: no matching DH grp found"); |
|
|
|
|
|
|
/* sign H */ |
/* sign H */ |
/* XXX hashlen depends on KEX */ |
/* XXX hashlen depends on KEX */ |
key_sign(server_host_key, &signature, &slen, hash, 20); |
PRIVSEP(key_sign(server_host_key, &signature, &slen, hash, 20)); |
|
|
/* destroy_sensitive_data(); */ |
/* destroy_sensitive_data(); */ |
|
|
|
|
packet_put_bignum2(dh->pub_key); /* f */ |
packet_put_bignum2(dh->pub_key); /* f */ |
packet_put_string(signature, slen); |
packet_put_string(signature, slen); |
packet_send(); |
packet_send(); |
|
|
xfree(signature); |
xfree(signature); |
xfree(server_host_key_blob); |
xfree(server_host_key_blob); |
/* have keys, free DH */ |
/* have keys, free DH */ |