version 1.56.2.1, 2004/08/19 04:13:26 |
version 1.57, 2004/05/09 01:19:27 |
|
|
void |
void |
kex_send_kexinit(Kex *kex) |
kex_send_kexinit(Kex *kex) |
{ |
{ |
u_int32_t rnd = 0; |
u_int32_t rand = 0; |
u_char *cookie; |
u_char *cookie; |
int i; |
int i; |
|
|
|
|
cookie = buffer_ptr(&kex->my); |
cookie = buffer_ptr(&kex->my); |
for (i = 0; i < KEX_COOKIE_LEN; i++) { |
for (i = 0; i < KEX_COOKIE_LEN; i++) { |
if (i % 4 == 0) |
if (i % 4 == 0) |
rnd = arc4random(); |
rand = arc4random(); |
cookie[i] = rnd; |
cookie[i] = rand; |
rnd >>= 8; |
rand >>= 8; |
} |
} |
packet_start(SSH2_MSG_KEXINIT); |
packet_start(SSH2_MSG_KEXINIT); |
packet_put_raw(buffer_ptr(&kex->my), buffer_len(&kex->my)); |
packet_put_raw(buffer_ptr(&kex->my), buffer_len(&kex->my)); |
|
|
fatal("no kex alg"); |
fatal("no kex alg"); |
if (strcmp(k->name, KEX_DH1) == 0) { |
if (strcmp(k->name, KEX_DH1) == 0) { |
k->kex_type = KEX_DH_GRP1_SHA1; |
k->kex_type = KEX_DH_GRP1_SHA1; |
} else if (strcmp(k->name, KEX_DH14) == 0) { |
|
k->kex_type = KEX_DH_GRP14_SHA1; |
|
} else if (strcmp(k->name, KEX_DHGEX) == 0) { |
} else if (strcmp(k->name, KEX_DHGEX) == 0) { |
k->kex_type = KEX_DH_GEX_SHA1; |
k->kex_type = KEX_DH_GEX_SHA1; |
} else |
} else |
|
|
|
|
EVP_DigestUpdate(&md, cookie, 8); |
EVP_DigestUpdate(&md, cookie, 8); |
|
|
EVP_DigestFinal(&md, obuf, NULL); |
EVP_DigestFinal(&md, id, NULL); |
memcpy(id, obuf, 16); |
memcpy(id, obuf, 16); |
|
|
memset(nbuf, 0, sizeof(nbuf)); |
memset(nbuf, 0, sizeof(nbuf)); |