Commit d769cd82 authored by Marek Majkowski's avatar Marek Majkowski
Browse files

Bug #5170 - make pkey_eq testable, introduce test_tortls.c

parent e4f51682
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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)
+5 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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
+2 −0
Original line number Diff line number Diff line
@@ -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
};

src/test/test_tortls.c

0 → 100644
+45 −0
Original line number Diff line number Diff line
/* 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
};