[tor-commits] [tor/master] New function to get all digests of a public key

nickm at torproject.org nickm at torproject.org
Tue Oct 11 03:22:15 UTC 2011


commit dcf69a9e12d013563575e50b7d6f547832f92f66
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Sep 13 14:32:51 2011 -0400

    New function to get all digests of a public key
---
 src/common/crypto.c |   26 ++++++++++++++++++++++++++
 src/common/crypto.h |    1 +
 2 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/src/common/crypto.c b/src/common/crypto.c
index 9ad7575..edb0d42 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -1249,6 +1249,32 @@ crypto_pk_get_digest(crypto_pk_env_t *pk, char *digest_out)
   return 0;
 }
 
+/** Compute all digests of the DER encoding of <b>pk</b>, and store them
+ * in <b>digests_out</b>.  Return 0 on success, -1 on failure. */
+int
+crypto_pk_get_all_digests(crypto_pk_env_t *pk, digests_t *digests_out)
+{
+  unsigned char *buf, *bufp;
+  int len;
+
+  len = i2d_RSAPublicKey(pk->key, NULL);
+  if (len < 0)
+    return -1;
+  buf = bufp = tor_malloc(len+1);
+  len = i2d_RSAPublicKey(pk->key, &bufp);
+  if (len < 0) {
+    crypto_log_errors(LOG_WARN,"encoding public key");
+    tor_free(buf);
+    return -1;
+  }
+  if (crypto_digest_all(digests_out, (char*)buf, len) < 0) {
+    tor_free(buf);
+    return -1;
+  }
+  tor_free(buf);
+  return 0;
+}
+
 /** Copy <b>in</b> to the <b>outlen</b>-byte buffer <b>out</b>, adding spaces
  * every four spaces. */
 /* static */ void
diff --git a/src/common/crypto.h b/src/common/crypto.h
index 9b4eee6..d50d9f9 100644
--- a/src/common/crypto.h
+++ b/src/common/crypto.h
@@ -150,6 +150,7 @@ int crypto_pk_private_hybrid_decrypt(crypto_pk_env_t *env, char *to,
 int crypto_pk_asn1_encode(crypto_pk_env_t *pk, char *dest, size_t dest_len);
 crypto_pk_env_t *crypto_pk_asn1_decode(const char *str, size_t len);
 int crypto_pk_get_digest(crypto_pk_env_t *pk, char *digest_out);
+int crypto_pk_get_all_digests(crypto_pk_env_t *pk, digests_t *digests_out);
 int crypto_pk_get_fingerprint(crypto_pk_env_t *pk, char *fp_out,int add_space);
 int crypto_pk_check_fingerprint_syntax(const char *s);
 





More information about the tor-commits mailing list