1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
/* Copyright 2006 Nick Mathewson; see LICENSE for licensing information */
/* $Id$ */
/* id_to_fp.c : Helper for directory authority ops. When somebody sends us
* a private key, this utility converts the private key into a fingerprint
* so you can de-list that fingerprint.
*/
#include <openssl/rsa.h>
#include <openssl/bio.h>
#include <openssl/sha.h>
#include <openssl/pem.h>
#include <stdio.h>
#include <stdlib.h>
#define die(s) do { fprintf(stderr, "%s\n", s); return 1; } while (0)
int
main(int argc, char **argv)
{
BIO *b;
RSA *key;
unsigned char *buf, *bufp;
int len, i;
unsigned char digest[20];
if (argc != 2)
die("I want a filename");
if (!(b = BIO_new_file(argv[1], "r")))
die("couldn't open file");
if (!(key = PEM_read_bio_RSAPrivateKey(b, NULL, NULL, NULL)))
die("couldn't parse key");
len = i2d_RSAPublicKey(key, NULL);
bufp = buf = malloc(len+1);
len = i2d_RSAPublicKey(key, &bufp);
if (len < 0)
die("Bizarre key");
SHA1(buf, len, digest);
for (i=0; i < 20; i += 2) {
printf("%02X%02X ", (int)digest[i], (int)digest[i+1]);
}
printf("\n");
return 0;
}
|