Lines Matching refs:kex

60 static void kex_do_hook(Kex *kex);
152 kex_finish(Kex *kex) in kex_finish() argument
173 kex->done = 1; in kex_finish()
174 kex->initial_kex_done = 1; /* never to be cleared once set */ in kex_finish()
175 buffer_clear(&kex->peer); in kex_finish()
177 kex->flags &= ~KEX_INIT_SENT; in kex_finish()
178 xfree(kex->name); in kex_finish()
179 kex->name = NULL; in kex_finish()
183 kex_send_kexinit(Kex *kex) in kex_send_kexinit() argument
189 if (kex == NULL) { in kex_send_kexinit()
193 if (kex->flags & KEX_INIT_SENT) { in kex_send_kexinit()
197 kex->done = 0; in kex_send_kexinit()
200 kex_do_hook(kex); in kex_send_kexinit()
203 if (buffer_len(&kex->my) < KEX_COOKIE_LEN) in kex_send_kexinit()
205 cookie = buffer_ptr(&kex->my); in kex_send_kexinit()
213 packet_put_raw(buffer_ptr(&kex->my), buffer_len(&kex->my)); in kex_send_kexinit()
216 kex->flags |= KEX_INIT_SENT; in kex_send_kexinit()
225 Kex *kex = (Kex *)ctxt; in kex_input_kexinit() local
228 if (kex == NULL) in kex_input_kexinit()
232 buffer_append(&kex->peer, ptr, dlen); in kex_input_kexinit()
243 kex_kexinit_finish(kex); in kex_input_kexinit()
252 kex_do_hook(Kex *kex) in kex_do_hook() argument
256 if (kex->kex_hook == NULL) in kex_do_hook()
260 prop = kex_buf2prop(&kex->my, NULL); in kex_do_hook()
261 buffer_clear(&kex->my); in kex_do_hook()
262 (kex->kex_hook)(kex, prop); in kex_do_hook()
263 kex_prop2buf(&kex->my, prop); in kex_do_hook()
269 kex_start(Kex *kex) in kex_start() argument
271 kex_send_kexinit(kex); in kex_start()
282 Kex *kex; in kex_setup() local
284 kex = xmalloc(sizeof(*kex)); in kex_setup()
285 memset(kex, 0, sizeof(*kex)); in kex_setup()
286 buffer_init(&kex->peer); in kex_setup()
287 buffer_init(&kex->my); in kex_setup()
289 kex->kex_hook = hook; /* called by kex_send_kexinit() */ in kex_setup()
292 kex->serverhost = xstrdup(host); in kex_setup()
294 kex->server = 1; in kex_setup()
296 kex_prop2buf(&kex->my, proposal); in kex_setup()
298 return kex; in kex_setup()
302 kex_kexinit_finish(Kex *kex) in kex_kexinit_finish() argument
304 if (!(kex->flags & KEX_INIT_SENT)) in kex_kexinit_finish()
305 kex_send_kexinit(kex); in kex_kexinit_finish()
307 kex_choose_conf(kex); in kex_kexinit_finish()
309 if (kex->kex_type >= 0 && kex->kex_type < KEX_MAX && in kex_kexinit_finish()
310 kex->kex[kex->kex_type] != NULL) in kex_kexinit_finish()
311 (kex->kex[kex->kex_type])(kex); in kex_kexinit_finish()
313 fatal("Unsupported key exchange %d", kex->kex_type); in kex_kexinit_finish()
462 kex_choose_conf(Kex *kex) in kex_choose_conf() argument
476 my = kex_buf2prop(&kex->my, NULL); in kex_choose_conf()
477 peer = kex_buf2prop(&kex->peer, &first_kex_follows); in kex_choose_conf()
479 if (kex->server) { in kex_choose_conf()
491 kex->newkeys[mode] = newkeys; in kex_choose_conf()
492 ctos = (!kex->server && mode == MODE_OUT) || (kex->server && mode == MODE_IN); in kex_choose_conf()
496 choose_enc(kex->server, &newkeys->enc, cprop[nenc], sprop[nenc]); in kex_choose_conf()
505 choose_kex(kex, cprop[PROPOSAL_KEX_ALGS], sprop[PROPOSAL_KEX_ALGS]); in kex_choose_conf()
506 choose_hostkeyalg(kex, cprop[PROPOSAL_SERVER_HOST_KEY_ALGS], in kex_choose_conf()
510 newkeys = kex->newkeys[mode]; in kex_choose_conf()
519 kex->we_need = need; in kex_choose_conf()
530 if (!kex->initial_kex_done) { in kex_choose_conf()
574 if (kex->server) { in kex_choose_conf()
619 derive_key(Kex *kex, int id, int need, u_char *hash, BIGNUM *shared_secret) in derive_key() argument
638 EVP_DigestUpdate(&md, kex->session_id, kex->session_id_len); in derive_key()
666 kex_derive_keys(Kex *kex, u_char *hash, BIGNUM *shared_secret) in kex_derive_keys() argument
672 keys[i] = derive_key(kex, 'A'+i, kex->we_need, hash, shared_secret); in kex_derive_keys()
676 current_keys[mode] = kex->newkeys[mode]; in kex_derive_keys()
677 kex->newkeys[mode] = NULL; in kex_derive_keys()
678 ctos = (!kex->server && mode == MODE_OUT) || (kex->server && mode == MODE_IN); in kex_derive_keys()