diff options
author | Marek Majkowski <marek@popcount.org> | 2013-06-10 16:21:39 +0100 |
---|---|---|
committer | Marek Majkowski <marek@popcount.org> | 2013-06-10 16:21:39 +0100 |
commit | d769cd82b5b9517971bdefabfcc1c68b0a901751 (patch) | |
tree | f47cff5dff640df813f4d937a9bcf21282f2ee51 | |
parent | e4f51682bc6d15e5ba78dfe6dfe69e95c298954e (diff) | |
download | tor-d769cd82b5b9517971bdefabfcc1c68b0a901751.tar.gz tor-d769cd82b5b9517971bdefabfcc1c68b0a901751.zip |
Bug #5170 - make pkey_eq testable, introduce test_tortls.c
-rw-r--r-- | src/common/tortls.c | 6 | ||||
-rw-r--r-- | src/common/tortls.h | 5 | ||||
-rw-r--r-- | src/test/include.am | 1 | ||||
-rw-r--r-- | src/test/test.c | 2 | ||||
-rw-r--r-- | src/test/test_tortls.c | 45 |
5 files changed, 56 insertions, 3 deletions
diff --git a/src/common/tortls.c b/src/common/tortls.c index fd0a4107d1..c0e36034d2 100644 --- a/src/common/tortls.c +++ b/src/common/tortls.c @@ -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) diff --git a/src/common/tortls.h b/src/common/tortls.h index 49c488b365..c71ed573f2 100644 --- a/src/common/tortls.h +++ b/src/common/tortls.h @@ -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 diff --git a/src/test/include.am b/src/test/include.am index 112d1a79d8..af95d44470 100644 --- a/src/test/include.am +++ b/src/test/include.am @@ -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 diff --git a/src/test/test.c b/src/test/test.c index a9cf899a0e..da5b4e5256 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -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 index 0000000000..28ffbb1759 --- /dev/null +++ b/src/test/test_tortls.c @@ -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 +}; |