1 /* 2 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * All rights reserved 5 * This file contains various auxiliary functions related to multiple 6 * precision integers. 7 * 8 * As far as I am concerned, the code I have written for this software 9 * can be used freely for any purpose. Any derived versions of this 10 * software must be clearly marked as such, and if the derived work is 11 * incompatible with the protocol description in the RFC file, it must be 12 * called by a name other than "ssh" or "Secure Shell". 13 */ 14 15 #include "includes.h" 16 RCSID("$OpenBSD: mpaux.c,v 1.16 2001/02/08 19:30:52 itojun Exp $"); 17 18 #pragma ident "%Z%%M% %I% %E% SMI" 19 20 #include <openssl/opensslconf.h> 21 #include <openssl/bn.h> 22 #include "getput.h" 23 #include "xmalloc.h" 24 25 #include <openssl/md5.h> 26 27 #include "mpaux.h" 28 29 void 30 compute_session_id(u_char session_id[16], 31 u_char cookie[8], 32 BIGNUM* host_key_n, 33 BIGNUM* session_key_n) 34 { 35 u_int host_key_bytes = BN_num_bytes(host_key_n); 36 u_int session_key_bytes = BN_num_bytes(session_key_n); 37 u_int bytes = host_key_bytes + session_key_bytes; 38 u_char *buf = xmalloc(bytes); 39 MD5_CTX md; 40 41 BN_bn2bin(host_key_n, buf); 42 BN_bn2bin(session_key_n, buf + host_key_bytes); 43 MD5_Init(&md); 44 MD5_Update(&md, buf, bytes); 45 MD5_Update(&md, cookie, 8); 46 MD5_Final(session_id, &md); 47 memset(buf, 0, bytes); 48 xfree(buf); 49 }