]> andersk Git - openssh.git/blob - fingerprint.c
- Merged very large OpenBSD source code reformat
[openssh.git] / fingerprint.c
1 #include "includes.h"
2 RCSID("$Id$");
3
4 #include "ssh.h"
5 #include "xmalloc.h"
6
7 #ifdef HAVE_OPENSSL
8 #include <openssl/md5.h>
9 #endif
10 #ifdef HAVE_SSL
11 #include <ssl/md5.h>
12 #endif
13
14 #define FPRINT "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x"
15
16 /*
17  * Generate key fingerprint in ascii format.
18  * Based on ideas and code from Bjoern Groenvall <bg@sics.se>
19  */
20 char *
21 fingerprint(BIGNUM *e, BIGNUM *n)
22 {
23         static char retval[80];
24         MD5_CTX md;
25         unsigned char d[16];
26         char *buf;
27         int nlen, elen;
28
29         nlen = BN_num_bytes(n);
30         elen = BN_num_bytes(e);
31
32         buf = xmalloc(nlen + elen);
33
34         BN_bn2bin(n, buf);
35         BN_bn2bin(e, buf + nlen);
36
37         MD5_Init(&md);
38         MD5_Update(&md, buf, nlen + elen);
39         MD5_Final(d, &md);
40         snprintf(retval, sizeof(retval), FPRINT,
41             d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],
42             d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15]);
43         memset(buf, 0, nlen + elen);
44         xfree(buf);
45         return retval;
46 }
This page took 0.037881 seconds and 5 git commands to generate.