]> andersk Git - openssh.git/blob - fingerprint.c
- Merged OpenBSD CVS changes
[openssh.git] / fingerprint.c
1 #include "includes.h"
2 RCSID("$Id$");
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
10 /* Generate key fingerprint in ascii format.
11    Based on ideas and code from Bjoern Groenvall <bg@sics.se> */
12
13 char *
14 fingerprint(BIGNUM *e, BIGNUM *n)
15 {
16         static char     retval[80];
17         MD5_CTX         md;
18         unsigned char   d[16];
19         char           *buf;
20         int             nlen, elen;
21
22         nlen = BN_num_bytes(n);
23         elen = BN_num_bytes(e);
24
25         buf = xmalloc(nlen + elen);
26
27         BN_bn2bin(n, buf);
28         BN_bn2bin(e, buf + nlen);
29
30         MD5_Init(&md);
31         MD5_Update(&md, buf, nlen + elen);
32         MD5_Final(d, &md);
33         snprintf(retval, sizeof(retval), FPRINT,
34                  d[0], d[1], d[2],  d[3],  d[4],  d[5],  d[6],  d[7],
35                  d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15]);
36         memset(buf, 0, nlen + elen);
37         xfree(buf);
38         return retval;
39 }
This page took 0.037876 seconds and 5 git commands to generate.