version 1.106, 2015/04/17 13:25:52 |
version 1.107, 2015/07/29 04:43:06 |
|
|
free(kex->session_id); |
free(kex->session_id); |
free(kex->client_version_string); |
free(kex->client_version_string); |
free(kex->server_version_string); |
free(kex->server_version_string); |
|
free(kex->failed_choice); |
free(kex); |
free(kex); |
} |
} |
|
|
|
|
nmac = ctos ? PROPOSAL_MAC_ALGS_CTOS : PROPOSAL_MAC_ALGS_STOC; |
nmac = ctos ? PROPOSAL_MAC_ALGS_CTOS : PROPOSAL_MAC_ALGS_STOC; |
ncomp = ctos ? PROPOSAL_COMP_ALGS_CTOS : PROPOSAL_COMP_ALGS_STOC; |
ncomp = ctos ? PROPOSAL_COMP_ALGS_CTOS : PROPOSAL_COMP_ALGS_STOC; |
if ((r = choose_enc(&newkeys->enc, cprop[nenc], |
if ((r = choose_enc(&newkeys->enc, cprop[nenc], |
sprop[nenc])) != 0) |
sprop[nenc])) != 0) { |
|
kex->failed_choice = peer[nenc]; |
|
peer[nenc] = NULL; |
goto out; |
goto out; |
|
} |
authlen = cipher_authlen(newkeys->enc.cipher); |
authlen = cipher_authlen(newkeys->enc.cipher); |
/* ignore mac for authenticated encryption */ |
/* ignore mac for authenticated encryption */ |
if (authlen == 0 && |
if (authlen == 0 && |
(r = choose_mac(ssh, &newkeys->mac, cprop[nmac], |
(r = choose_mac(ssh, &newkeys->mac, cprop[nmac], |
sprop[nmac])) != 0) |
sprop[nmac])) != 0) { |
|
kex->failed_choice = peer[nmac]; |
|
peer[nmac] = NULL; |
goto out; |
goto out; |
|
} |
if ((r = choose_comp(&newkeys->comp, cprop[ncomp], |
if ((r = choose_comp(&newkeys->comp, cprop[ncomp], |
sprop[ncomp])) != 0) |
sprop[ncomp])) != 0) { |
|
kex->failed_choice = peer[ncomp]; |
|
peer[ncomp] = NULL; |
goto out; |
goto out; |
|
} |
debug("kex: %s %s %s %s", |
debug("kex: %s %s %s %s", |
ctos ? "client->server" : "server->client", |
ctos ? "client->server" : "server->client", |
newkeys->enc.name, |
newkeys->enc.name, |
|
|
newkeys->comp.name); |
newkeys->comp.name); |
} |
} |
if ((r = choose_kex(kex, cprop[PROPOSAL_KEX_ALGS], |
if ((r = choose_kex(kex, cprop[PROPOSAL_KEX_ALGS], |
sprop[PROPOSAL_KEX_ALGS])) != 0 || |
sprop[PROPOSAL_KEX_ALGS])) != 0) { |
(r = choose_hostkeyalg(kex, cprop[PROPOSAL_SERVER_HOST_KEY_ALGS], |
kex->failed_choice = peer[PROPOSAL_KEX_ALGS]; |
sprop[PROPOSAL_SERVER_HOST_KEY_ALGS])) != 0) |
peer[PROPOSAL_KEX_ALGS] = NULL; |
goto out; |
goto out; |
|
} |
|
if ((r = choose_hostkeyalg(kex, cprop[PROPOSAL_SERVER_HOST_KEY_ALGS], |
|
sprop[PROPOSAL_SERVER_HOST_KEY_ALGS])) != 0) { |
|
kex->failed_choice = cprop[PROPOSAL_SERVER_HOST_KEY_ALGS]; |
|
cprop[PROPOSAL_SERVER_HOST_KEY_ALGS] = NULL; |
|
goto out; |
|
} |
need = dh_need = 0; |
need = dh_need = 0; |
for (mode = 0; mode < MODE_MAX; mode++) { |
for (mode = 0; mode < MODE_MAX; mode++) { |
newkeys = kex->newkeys[mode]; |
newkeys = kex->newkeys[mode]; |