X-Git-Url: http://andersk.mit.edu/gitweb/openssh.git/blobdiff_plain/5881cd602cf8b58856359c0d7a30c2a15d6ef9f8..f9e4952c0d45a2afdc9267c8cc9500462a82ad11:/mpaux.c diff --git a/mpaux.c b/mpaux.c index c17df9e7..0c486275 100644 --- a/mpaux.c +++ b/mpaux.c @@ -1,54 +1,46 @@ /* + * Author: Tatu Ylonen + * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland + * All rights reserved + * This file contains various auxiliary functions related to multiple + * precision integers. + * + * As far as I am concerned, the code I have written for this software + * can be used freely for any purpose. Any derived versions of this + * software must be clearly marked as such, and if the derived work is + * incompatible with the protocol description in the RFC file, it must be + * called by a name other than "ssh" or "Secure Shell". + */ -mpaux.c - -Author: Tatu Ylonen - -Copyright (c) 1995 Tatu Ylonen , Espoo, Finland - All rights reserved - -Created: Sun Jul 16 04:29:30 1995 ylo - -This file contains various auxiliary functions related to multiple -precision integers. - -*/ - -#include "config.h" #include "includes.h" -RCSID("$Id$"); +RCSID("$OpenBSD: mpaux.c,v 1.16 2001/02/08 19:30:52 itojun Exp $"); -#ifdef HAVE_OPENSSL #include -#include -#endif -#ifdef HAVE_SSL -#include -#include -#endif - #include "getput.h" #include "xmalloc.h" +#include + +#include "mpaux.h" void -compute_session_id(unsigned char session_id[16], - unsigned char cookie[8], - unsigned int host_key_bits, - BIGNUM *host_key_n, - unsigned int session_key_bits, - BIGNUM *session_key_n) +compute_session_id(u_char session_id[16], + u_char cookie[8], + BIGNUM* host_key_n, + BIGNUM* session_key_n) { - 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); - 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); }