mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 05:33:47 +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
|
||||
* crypto_digest_t for <b>alg</b>, or the number of bytes we need to wipe
|
||||
|
@ -20,6 +20,9 @@
|
||||
#include "testsupport.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
|
||||
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);
|
||||
|
||||
#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_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>
|
||||
* 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
|
||||
|
@ -83,6 +83,8 @@ MOCK_DECL(STATIC int, count_acceptable_nodes, (smartlist_t *nodes));
|
||||
#if defined(ENABLE_TOR2WEB_MODE) || defined(TOR_UNIT_TESTS)
|
||||
STATIC const node_t *pick_tor2web_rendezvous_node(router_crn_flags_t flags,
|
||||
const or_options_t *options);
|
||||
unsigned int cpath_get_n_hops(crypt_path_t **head_ptr);
|
||||
|
||||
#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.
|
||||
*/
|
||||
int
|
||||
connection_ap_handshake_send_begin(entry_connection_t *ap_conn)
|
||||
MOCK_IMPL(int,
|
||||
connection_ap_handshake_send_begin,(entry_connection_t *ap_conn))
|
||||
{
|
||||
char payload[CELL_PAYLOAD_SIZE];
|
||||
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_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);
|
||||
|
||||
entry_connection_t *connection_ap_make_link(connection_t *partner,
|
||||
|
Loading…
Reference in New Issue
Block a user