[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] r8373: Add non-dist utility for weasel (in tor/trunk: . contrib)



Author: nickm
Date: 2006-09-12 14:05:54 -0400 (Tue, 12 Sep 2006)
New Revision: 8373

Added:
   tor/trunk/contrib/id_to_fp.c
Modified:
   tor/trunk/
Log:
 r8785@Kushana:  nickm | 2006-09-12 14:05:46 -0400
 Add non-dist utility for weasel



Property changes on: tor/trunk
___________________________________________________________________
 svk:merge ticket from /tor/trunk [r8785] on c95137ef-5f19-0410-b913-86e773d04f59

Added: tor/trunk/contrib/id_to_fp.c
===================================================================
--- tor/trunk/contrib/id_to_fp.c	2006-09-12 07:35:37 UTC (rev 8372)
+++ tor/trunk/contrib/id_to_fp.c	2006-09-12 18:05:54 UTC (rev 8373)
@@ -0,0 +1,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"); 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;
+}
+