- unsigned int bytes = (host_key_bits + 7) / 8 + (session_key_bits + 7) / 8 + 8;
- unsigned char *buf = xmalloc(bytes);
- MD5_CTX md;
-
- BN_bn2bin(host_key_n, buf);
- BN_bn2bin(session_key_n, buf + (host_key_bits + 7 ) / 8);
- memcpy(buf + (host_key_bits + 7) / 8 + (session_key_bits + 7) / 8,
- cookie, 8);
- MD5_Init(&md);
- MD5_Update(&md, buf, bytes);
- MD5_Final(session_id, &md);
- memset(buf, 0, bytes);
- xfree(buf);
+ u_int host_key_bytes = BN_num_bytes(host_key_n);
+ u_int session_key_bytes = BN_num_bytes(session_key_n);
+ u_int bytes = host_key_bytes + session_key_bytes;
+ u_char *buf = xmalloc(bytes);
+ MD5_CTX md;
+
+ BN_bn2bin(host_key_n, buf);
+ BN_bn2bin(session_key_n, buf + host_key_bytes);
+ MD5_Init(&md);
+ MD5_Update(&md, buf, bytes);
+ MD5_Update(&md, cookie, 8);
+ MD5_Final(session_id, &md);
+ memset(buf, 0, bytes);
+ xfree(buf);