version 1.6, 1999/11/15 20:53:24 |
version 1.7, 1999/11/23 22:25:54 |
|
|
void |
void |
compute_session_id(unsigned char session_id[16], |
compute_session_id(unsigned char session_id[16], |
unsigned char cookie[8], |
unsigned char cookie[8], |
BIGNUM *host_key_n, |
BIGNUM* host_key_n, |
BIGNUM *session_key_n) |
BIGNUM* session_key_n) |
{ |
{ |
unsigned int host_key_bits = BN_num_bits(host_key_n); |
unsigned int host_key_bits = BN_num_bits(host_key_n); |
unsigned int session_key_bits = BN_num_bits(session_key_n); |
unsigned int session_key_bits = BN_num_bits(session_key_n); |
unsigned int bytes = (host_key_bits + 7) / 8 + (session_key_bits + 7) / 8 + 8; |
unsigned int bytes = (host_key_bits + 7) / 8 + (session_key_bits + 7) / 8 + 8; |
unsigned char *buf = xmalloc(bytes); |
unsigned char *buf = xmalloc(bytes); |
MD5_CTX md; |
MD5_CTX md; |
|
|
BN_bn2bin(host_key_n, buf); |
BN_bn2bin(host_key_n, buf); |
BN_bn2bin(session_key_n, buf + (host_key_bits + 7 ) / 8); |
BN_bn2bin(session_key_n, buf + (host_key_bits + 7) / 8); |
memcpy(buf + (host_key_bits + 7) / 8 + (session_key_bits + 7) / 8, |
memcpy(buf + (host_key_bits + 7) / 8 + (session_key_bits + 7) / 8, cookie, 8); |
cookie, 8); |
MD5_Init(&md); |
MD5_Init(&md); |
MD5_Update(&md, buf, bytes); |
MD5_Update(&md, buf, bytes); |
MD5_Final(session_id, &md); |
MD5_Final(session_id, &md); |
memset(buf, 0, bytes); |
memset(buf, 0, bytes); |
xfree(buf); |
xfree(buf); |
|
} |
} |