mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-14 15:23:27 +01:00
test: Crypto groundwork for e2e circuit unittests.
- Move some crypto structures so that they are visible by tests. - Introduce a func to count number of hops in cpath which will be used by the tests. - Mark a function as mockable.
This commit is contained in:
parent
9ff5613a34
commit
43a73f6eb6
@ -1839,21 +1839,6 @@ crypto_digest_algorithm_get_length(digest_algorithm_t alg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Intermediate information about the digest of a stream of data. */
|
|
||||||
struct crypto_digest_t {
|
|
||||||
digest_algorithm_t algorithm; /**< Which algorithm is in use? */
|
|
||||||
/** State for the digest we're using. Only one member of the
|
|
||||||
* union is usable, depending on the value of <b>algorithm</b>. Note also
|
|
||||||
* that space for other members might not even be allocated!
|
|
||||||
*/
|
|
||||||
union {
|
|
||||||
SHA_CTX sha1; /**< state for SHA1 */
|
|
||||||
SHA256_CTX sha2; /**< state for SHA256 */
|
|
||||||
SHA512_CTX sha512; /**< state for SHA512 */
|
|
||||||
keccak_state sha3; /**< state for SHA3-[256,512] */
|
|
||||||
} d;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the number of bytes we need to malloc in order to get a
|
* Return the number of bytes we need to malloc in order to get a
|
||||||
* crypto_digest_t for <b>alg</b>, or the number of bytes we need to wipe
|
* crypto_digest_t for <b>alg</b>, or the number of bytes we need to wipe
|
||||||
|
@ -20,6 +20,9 @@
|
|||||||
#include "testsupport.h"
|
#include "testsupport.h"
|
||||||
#include "compat.h"
|
#include "compat.h"
|
||||||
|
|
||||||
|
#include <openssl/engine.h>
|
||||||
|
#include "keccak-tiny/keccak-tiny.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Macro to create an arbitrary OpenSSL version number as used by
|
Macro to create an arbitrary OpenSSL version number as used by
|
||||||
OPENSSL_VERSION_NUMBER or SSLeay(), since the actual numbers are a bit hard
|
OPENSSL_VERSION_NUMBER or SSLeay(), since the actual numbers are a bit hard
|
||||||
@ -335,6 +338,22 @@ struct dh_st *crypto_dh_get_dh_(crypto_dh_t *dh);
|
|||||||
void crypto_add_spaces_to_fp(char *out, size_t outlen, const char *in);
|
void crypto_add_spaces_to_fp(char *out, size_t outlen, const char *in);
|
||||||
|
|
||||||
#ifdef CRYPTO_PRIVATE
|
#ifdef CRYPTO_PRIVATE
|
||||||
|
|
||||||
|
/** Intermediate information about the digest of a stream of data. */
|
||||||
|
struct crypto_digest_t {
|
||||||
|
digest_algorithm_t algorithm; /**< Which algorithm is in use? */
|
||||||
|
/** State for the digest we're using. Only one member of the
|
||||||
|
* union is usable, depending on the value of <b>algorithm</b>. Note also
|
||||||
|
* that space for other members might not even be allocated!
|
||||||
|
*/
|
||||||
|
union {
|
||||||
|
SHA_CTX sha1; /**< state for SHA1 */
|
||||||
|
SHA256_CTX sha2; /**< state for SHA256 */
|
||||||
|
SHA512_CTX sha512; /**< state for SHA512 */
|
||||||
|
keccak_state sha3; /**< state for SHA3-[256,512] */
|
||||||
|
} d;
|
||||||
|
};
|
||||||
|
|
||||||
STATIC int crypto_force_rand_ssleay(void);
|
STATIC int crypto_force_rand_ssleay(void);
|
||||||
STATIC int crypto_strongest_rand_raw(uint8_t *out, size_t out_len);
|
STATIC int crypto_strongest_rand_raw(uint8_t *out, size_t out_len);
|
||||||
|
|
||||||
|
@ -2338,6 +2338,30 @@ onion_append_to_cpath(crypt_path_t **head_ptr, crypt_path_t *new_hop)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef TOR_UNIT_TESTS
|
||||||
|
|
||||||
|
/** Unittest helper function: Count number of hops in cpath linked list. */
|
||||||
|
unsigned int
|
||||||
|
cpath_get_n_hops(crypt_path_t **head_ptr)
|
||||||
|
{
|
||||||
|
unsigned int n_hops = 0;
|
||||||
|
crypt_path_t *tmp;
|
||||||
|
|
||||||
|
if (!*head_ptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp = *head_ptr;
|
||||||
|
if (tmp) {
|
||||||
|
n_hops++;
|
||||||
|
tmp = (*head_ptr)->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return n_hops;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/** A helper function used by onion_extend_cpath(). Use <b>purpose</b>
|
/** A helper function used by onion_extend_cpath(). Use <b>purpose</b>
|
||||||
* and <b>state</b> and the cpath <b>head</b> (currently populated only
|
* and <b>state</b> and the cpath <b>head</b> (currently populated only
|
||||||
* to length <b>cur_len</b> to decide a suitable middle hop for a
|
* to length <b>cur_len</b> to decide a suitable middle hop for a
|
||||||
|
@ -83,6 +83,8 @@ MOCK_DECL(STATIC int, count_acceptable_nodes, (smartlist_t *nodes));
|
|||||||
#if defined(ENABLE_TOR2WEB_MODE) || defined(TOR_UNIT_TESTS)
|
#if defined(ENABLE_TOR2WEB_MODE) || defined(TOR_UNIT_TESTS)
|
||||||
STATIC const node_t *pick_tor2web_rendezvous_node(router_crn_flags_t flags,
|
STATIC const node_t *pick_tor2web_rendezvous_node(router_crn_flags_t flags,
|
||||||
const or_options_t *options);
|
const or_options_t *options);
|
||||||
|
unsigned int cpath_get_n_hops(crypt_path_t **head_ptr);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -2455,8 +2455,8 @@ connection_ap_get_begincell_flags(entry_connection_t *ap_conn)
|
|||||||
*
|
*
|
||||||
* If ap_conn is broken, mark it for close and return -1. Else return 0.
|
* If ap_conn is broken, mark it for close and return -1. Else return 0.
|
||||||
*/
|
*/
|
||||||
int
|
MOCK_IMPL(int,
|
||||||
connection_ap_handshake_send_begin(entry_connection_t *ap_conn)
|
connection_ap_handshake_send_begin,(entry_connection_t *ap_conn))
|
||||||
{
|
{
|
||||||
char payload[CELL_PAYLOAD_SIZE];
|
char payload[CELL_PAYLOAD_SIZE];
|
||||||
int payload_len;
|
int payload_len;
|
||||||
|
@ -33,7 +33,8 @@ int connection_edge_finished_connecting(edge_connection_t *conn);
|
|||||||
void connection_ap_about_to_close(entry_connection_t *edge_conn);
|
void connection_ap_about_to_close(entry_connection_t *edge_conn);
|
||||||
void connection_exit_about_to_close(edge_connection_t *edge_conn);
|
void connection_exit_about_to_close(edge_connection_t *edge_conn);
|
||||||
|
|
||||||
int connection_ap_handshake_send_begin(entry_connection_t *ap_conn);
|
MOCK_DECL(int,
|
||||||
|
connection_ap_handshake_send_begin,(entry_connection_t *ap_conn));
|
||||||
int connection_ap_handshake_send_resolve(entry_connection_t *ap_conn);
|
int connection_ap_handshake_send_resolve(entry_connection_t *ap_conn);
|
||||||
|
|
||||||
entry_connection_t *connection_ap_make_link(connection_t *partner,
|
entry_connection_t *connection_ap_make_link(connection_t *partner,
|
||||||
|
Loading…
Reference in New Issue
Block a user