Annotation of src/usr.bin/ssh/fingerprint.c, Revision 1.6
1.4 markus 1: /*
2: * Copyright (c) 1999 Markus Friedl. All rights reserved.
3: *
4: * Redistribution and use in source and binary forms, with or without
5: * modification, are permitted provided that the following conditions
6: * are met:
7: * 1. Redistributions of source code must retain the above copyright
8: * notice, this list of conditions and the following disclaimer.
9: * 2. Redistributions in binary form must reproduce the above copyright
10: * notice, this list of conditions and the following disclaimer in the
11: * documentation and/or other materials provided with the distribution.
12: * 3. All advertising materials mentioning features or use of this software
13: * must display the following acknowledgement:
14: * This product includes software developed by Markus Friedl.
15: * 4. The name of the author may not be used to endorse or promote products
16: * derived from this software without specific prior written permission.
17: *
18: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28: */
29:
1.1 markus 30: #include "includes.h"
1.6 ! markus 31: RCSID("$Id: fingerprint.c,v 1.5 2000/03/16 20:56:14 markus Exp $");
1.1 markus 32:
33: #include "ssh.h"
34: #include "xmalloc.h"
1.6 ! markus 35: #include <openssl/md5.h>
1.1 markus 36:
37: #define FPRINT "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x"
38:
1.3 deraadt 39: /*
40: * Generate key fingerprint in ascii format.
41: * Based on ideas and code from Bjoern Groenvall <bg@sics.se>
42: */
1.1 markus 43: char *
44: fingerprint(BIGNUM *e, BIGNUM *n)
45: {
1.2 markus 46: static char retval[80];
47: MD5_CTX md;
48: unsigned char d[16];
1.5 markus 49: unsigned char *buf;
1.2 markus 50: int nlen, elen;
1.1 markus 51:
52: nlen = BN_num_bytes(n);
53: elen = BN_num_bytes(e);
54:
55: buf = xmalloc(nlen + elen);
56:
57: BN_bn2bin(n, buf);
58: BN_bn2bin(e, buf + nlen);
59:
60: MD5_Init(&md);
61: MD5_Update(&md, buf, nlen + elen);
62: MD5_Final(d, &md);
63: snprintf(retval, sizeof(retval), FPRINT,
1.3 deraadt 64: d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7],
65: d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15]);
1.1 markus 66: memset(buf, 0, nlen + elen);
67: xfree(buf);
68: return retval;
69: }