version 1.28, 2001/04/04 09:48:34 |
version 1.29, 2001/04/04 14:34:58 |
|
|
} |
} |
|
|
void |
void |
|
kex_clear_dispatch(void) |
|
{ |
|
int i; |
|
|
|
/* Numbers 30-49 are used for kex packets */ |
|
for (i = 30; i <= 49; i++) |
|
dispatch_set(i, &kex_protocol_error); |
|
} |
|
|
|
void |
kex_finish(Kex *kex) |
kex_finish(Kex *kex) |
{ |
{ |
int i, plen; |
int plen; |
|
|
|
kex_clear_dispatch(); |
|
|
packet_start(SSH2_MSG_NEWKEYS); |
packet_start(SSH2_MSG_NEWKEYS); |
packet_send(); |
packet_send(); |
/* packet_write_wait(); */ |
/* packet_write_wait(); */ |
|
|
packet_read_expect(&plen, SSH2_MSG_NEWKEYS); |
packet_read_expect(&plen, SSH2_MSG_NEWKEYS); |
debug("SSH2_MSG_NEWKEYS received"); |
debug("SSH2_MSG_NEWKEYS received"); |
kex->newkeys = 1; |
kex->newkeys = 1; |
for (i = 30; i <= 49; i++) |
|
dispatch_set(i, &kex_protocol_error); |
|
buffer_clear(&kex->peer); |
buffer_clear(&kex->peer); |
/* buffer_clear(&kex->my); */ |
/* buffer_clear(&kex->my); */ |
kex->flags &= ~KEX_INIT_SENT; |
kex->flags &= ~KEX_INIT_SENT; |
|
|
void |
void |
kex_send_kexinit(Kex *kex) |
kex_send_kexinit(Kex *kex) |
{ |
{ |
|
if (kex == NULL) { |
|
error("kex_send_kexinit: no kex, cannot rekey"); |
|
return; |
|
} |
if (kex->flags & KEX_INIT_SENT) { |
if (kex->flags & KEX_INIT_SENT) { |
debug("KEX_INIT_SENT"); |
debug("KEX_INIT_SENT"); |
return; |
return; |
|
|
Kex *kex = (Kex *)ctxt; |
Kex *kex = (Kex *)ctxt; |
|
|
debug("SSH2_MSG_KEXINIT received"); |
debug("SSH2_MSG_KEXINIT received"); |
|
if (kex == NULL) |
|
fatal("kex_input_kexinit: no kex, cannot rekey"); |
|
|
ptr = packet_get_raw(&dlen); |
ptr = packet_get_raw(&dlen); |
buffer_append(&kex->peer, ptr, dlen); |
buffer_append(&kex->peer, ptr, dlen); |
|
|
kex_setup(char *proposal[PROPOSAL_MAX]) |
kex_setup(char *proposal[PROPOSAL_MAX]) |
{ |
{ |
Kex *kex; |
Kex *kex; |
int i; |
|
|
|
kex = xmalloc(sizeof(*kex)); |
kex = xmalloc(sizeof(*kex)); |
memset(kex, 0, sizeof(*kex)); |
memset(kex, 0, sizeof(*kex)); |
|
|
kex->newkeys = 0; |
kex->newkeys = 0; |
|
|
kex_send_kexinit(kex); /* we start */ |
kex_send_kexinit(kex); /* we start */ |
/* Numbers 30-49 are used for kex packets */ |
kex_clear_dispatch(); |
for (i = 30; i <= 49; i++) |
|
dispatch_set(i, kex_protocol_error); |
|
|
|
dispatch_set(SSH2_MSG_KEXINIT, &kex_input_kexinit); |
dispatch_set(SSH2_MSG_KEXINIT, &kex_input_kexinit); |
|
|
return kex; |
return kex; |
} |
} |
|
|