Annotation of src/usr.bin/ssh/fingerprint.c, Revision 1.3
1.1 markus 1: #include "includes.h"
1.3 ! deraadt 2: RCSID("$Id: fingerprint.c,v 1.2 1999/11/23 22:25:53 markus Exp $");
1.1 markus 3:
4: #include "ssh.h"
5: #include "xmalloc.h"
6: #include <ssl/md5.h>
7:
8: #define FPRINT "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x"
9:
1.3 ! deraadt 10: /*
! 11: * Generate key fingerprint in ascii format.
! 12: * Based on ideas and code from Bjoern Groenvall <bg@sics.se>
! 13: */
1.1 markus 14: char *
15: fingerprint(BIGNUM *e, BIGNUM *n)
16: {
1.2 markus 17: static char retval[80];
18: MD5_CTX md;
19: unsigned char d[16];
20: char *buf;
21: int nlen, elen;
1.1 markus 22:
23: nlen = BN_num_bytes(n);
24: elen = BN_num_bytes(e);
25:
26: buf = xmalloc(nlen + elen);
27:
28: BN_bn2bin(n, buf);
29: BN_bn2bin(e, buf + nlen);
30:
31: MD5_Init(&md);
32: MD5_Update(&md, buf, nlen + elen);
33: MD5_Final(d, &md);
34: snprintf(retval, sizeof(retval), FPRINT,
1.3 ! deraadt 35: d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],
! 36: d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15]);
1.1 markus 37: memset(buf, 0, nlen + elen);
38: xfree(buf);
39: return retval;
40: }