[tor-commits] [tor/master] Unit tests for pk fingerprint functions

nickm at torproject.org nickm at torproject.org
Fri Feb 28 13:56:35 UTC 2014


commit 0be9e6099b4ca5597459ce1a9561812a8e7343e0
Author: Nick Mathewson <nickm at torproject.org>
Date:   Wed Feb 26 11:15:43 2014 -0500

    Unit tests for pk fingerprint functions
---
 src/test/test_crypto.c |   51 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c
index 00b8693..1fda334 100644
--- a/src/test/test_crypto.c
+++ b/src/test/test_crypto.c
@@ -509,6 +509,56 @@ test_crypto_pk(void)
   tor_free(encoded);
 }
 
+static void
+test_crypto_pk_fingerprints(void *arg)
+{
+  crypto_pk_t *pk = NULL;
+  char encoded[512];
+  char d[DIGEST_LEN], d2[DIGEST_LEN];
+  char fingerprint[FINGERPRINT_LEN+1];
+  int n;
+  unsigned i;
+  char *mem_op_hex_tmp=NULL;
+
+  (void)arg;
+
+  pk = pk_generate(1);
+  tt_assert(pk);
+  n = crypto_pk_asn1_encode(pk, encoded, sizeof(encoded));
+  tt_int_op(n, >, 0);
+  tt_int_op(n, >, 128);
+  tt_int_op(n, <, 256);
+
+  /* Is digest as expected? */
+  crypto_digest(d, encoded, n);
+  tt_int_op(0, ==, crypto_pk_get_digest(pk, d2));
+  test_memeq(d, d2, DIGEST_LEN);
+
+  /* Is fingerprint right? */
+  tt_int_op(0, ==, crypto_pk_get_fingerprint(pk, fingerprint, 0));
+  tt_int_op(strlen(fingerprint), ==, DIGEST_LEN * 2);
+  test_memeq_hex(d, fingerprint);
+
+  /* Are spaces right? */
+  tt_int_op(0, ==, crypto_pk_get_fingerprint(pk, fingerprint, 1));
+  for (i = 4; i < strlen(fingerprint); i += 5) {
+    tt_int_op(fingerprint[i], ==, ' ');
+  }
+  tor_strstrip(fingerprint, " ");
+  tt_int_op(strlen(fingerprint), ==, DIGEST_LEN * 2);
+  test_memeq_hex(d, fingerprint);
+
+  /* Now hash again and check crypto_pk_get_hashed_fingerprint. */
+  crypto_digest(d2, d, sizeof(d));
+  tt_int_op(0, ==, crypto_pk_get_hashed_fingerprint(pk, fingerprint));
+  tt_int_op(strlen(fingerprint), ==, DIGEST_LEN * 2);
+  test_memeq_hex(d2, fingerprint);
+
+ done:
+  crypto_pk_free(pk);
+  tor_free(mem_op_hex_tmp);
+}
+
 /** Sanity check for crypto pk digests  */
 static void
 test_crypto_digests(void)
@@ -1234,6 +1284,7 @@ struct testcase_t crypto_tests[] = {
   { "aes_EVP", test_crypto_aes, TT_FORK, &pass_data, (void*)"evp" },
   CRYPTO_LEGACY(sha),
   CRYPTO_LEGACY(pk),
+  { "pk_fingerprints", test_crypto_pk_fingerprints, TT_FORK, NULL, NULL },
   CRYPTO_LEGACY(digests),
   CRYPTO_LEGACY(dh),
   CRYPTO_LEGACY(s2k),





More information about the tor-commits mailing list