]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Bug #5170 - make pkey_eq testable, introduce test_tortls.c
authorMarek Majkowski <marek@popcount.org>
Mon, 10 Jun 2013 15:21:39 +0000 (16:21 +0100)
committerMarek Majkowski <marek@popcount.org>
Mon, 10 Jun 2013 15:21:39 +0000 (16:21 +0100)
src/common/tortls.c
src/common/tortls.h
src/test/include.am
src/test/test.c
src/test/test_tortls.c [new file with mode: 0644]

index fd0a4107d151e3f2c6c102475e5bfe38eacffaf1..c0e36034d2342dda38ff6d7a87055ad0c6259adb 100644 (file)
@@ -980,8 +980,8 @@ tor_tls_cert_get_key(tor_cert_t *cert)
 }
 
 /** Return true iff <b>a</b> and <b>b</b> represent the same public key. */
-static int
-pkey_eq(EVP_PKEY *a, EVP_PKEY *b)
+int
+tor_tls_evp_pkey_eq(EVP_PKEY *a, EVP_PKEY *b)
 {
   /* We'd like to do this, but openssl 0.9.7 doesn't have it:
      return EVP_PKEY_cmp(a,b) == 1;
@@ -1017,7 +1017,7 @@ tor_tls_cert_matches_key(const tor_tls_t *tls, const tor_cert_t *cert)
   link_key = X509_get_pubkey(peercert);
   cert_key = X509_get_pubkey(cert->cert);
 
-  result = link_key && cert_key && pkey_eq(cert_key, link_key);
+  result = link_key && cert_key && tor_tls_evp_pkey_eq(cert_key, link_key);
 
   X509_free(peercert);
   if (link_key)
index 49c488b365dccc50c1b1730e69a20e5da1b0c6ab..c71ed573f29c2a5869350b93fa5b23f37b7a269f 100644 (file)
@@ -138,5 +138,10 @@ int tor_tls_cert_is_valid(int severity,
                           int check_rsa_1024);
 const char *tor_tls_get_ciphersuite_name(tor_tls_t *tls);
 
+#ifdef TORTLS_PRIVATE
+/* Prototypes for private functions only used by the unit tests. */
+int tor_tls_evp_pkey_eq(EVP_PKEY *a, EVP_PKEY *b);
+#endif
+
 #endif
 
index 112d1a79d85148184bca53d5e264eea5eef5a135..af95d44470ed77b4a1a250c026ff30a63a1214f8 100644 (file)
@@ -23,6 +23,7 @@ src_test_test_SOURCES = \
        src/test/test_microdesc.c \
        src/test/test_pt.c \
        src/test/test_replay.c \
+       src/test/test_tortls.c \
        src/test/test_util.c \
        src/test/test_config.c \
        src/ext/tinytest.c
index a9cf899a0edf5ccbf9a5d291bbcb3ae4c58679fd..da5b4e52560a5116de2286c165d03d17580cbc4a 100644 (file)
@@ -2133,6 +2133,7 @@ extern struct testcase_t config_tests[];
 extern struct testcase_t introduce_tests[];
 extern struct testcase_t replaycache_tests[];
 extern struct testcase_t cell_format_tests[];
+extern struct testcase_t tortls_tests[];
 
 static struct testgroup_t testgroups[] = {
   { "", test_array },
@@ -2147,6 +2148,7 @@ static struct testgroup_t testgroups[] = {
   { "pt/", pt_tests },
   { "config/", config_tests },
   { "replaycache/", replaycache_tests },
+  { "tortls/", tortls_tests },
   { "introduce/", introduce_tests },
   END_OF_GROUPS
 };
diff --git a/src/test/test_tortls.c b/src/test/test_tortls.c
new file mode 100644 (file)
index 0000000..28ffbb1
--- /dev/null
@@ -0,0 +1,45 @@
+/* Copyright (c) 2013-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include <openssl/evp.h>
+
+#include "orconfig.h"
+#define CRYPTO_PRIVATE
+#define TORTLS_PRIVATE
+#include "or.h"
+#include "test.h"
+
+
+static void
+test_tortls_evp_pkey_eq(void)
+{
+  crypto_pk_t *pk1 = NULL, *pk2 = NULL;
+  EVP_PKEY *evp1 = NULL, *evp2 = NULL;
+
+  pk1 = pk_generate(0);
+  pk2 = pk_generate(1);
+  test_assert(pk1 && pk2);
+
+  evp1 = crypto_pk_get_evp_pkey_(pk1, 0);
+  evp2 = crypto_pk_get_evp_pkey_(pk2, 0);
+  test_assert(evp1 && evp2);
+
+  test_assert(tor_tls_evp_pkey_eq(evp1, evp2) == 0);
+  test_assert(tor_tls_evp_pkey_eq(evp1, evp1) == 1);
+
+done:
+  crypto_pk_free(pk1);
+  crypto_pk_free(pk2);
+  if (evp1)
+    EVP_PKEY_free(evp1);
+  if (evp2)
+    EVP_PKEY_free(evp2);
+}
+
+#define TORTLS_LEGACY(name) \
+  { #name, legacy_test_helper, 0, &legacy_setup, test_tortls_ ## name }
+
+struct testcase_t tortls_tests[] = {
+  TORTLS_LEGACY(evp_pkey_eq),
+  END_OF_TESTCASES
+};