diff --git a/src/or/circpathbias.c b/src/or/circpathbias.c index f139c6d7e5..d1bdaedc3c 100644 --- a/src/or/circpathbias.c +++ b/src/or/circpathbias.c @@ -35,6 +35,7 @@ #include "networkstatus.h" #include "relay.h" +#include "crypt_path_st.h" #include "origin_circuit_st.h" static void pathbias_count_successful_close(origin_circuit_t *circ); diff --git a/src/or/circuitstats.c b/src/or/circuitstats.c index bff553a02b..f1660090f0 100644 --- a/src/or/circuitstats.c +++ b/src/or/circuitstats.c @@ -41,6 +41,7 @@ #include "circuitlist.h" #include "circuituse.h" +#include "crypt_path_st.h" #include "origin_circuit_st.h" #undef log diff --git a/src/or/crypt_path_st.h b/src/or/crypt_path_st.h new file mode 100644 index 0000000000..ebad872172 --- /dev/null +++ b/src/or/crypt_path_st.h @@ -0,0 +1,56 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2018, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#ifndef CRYPT_PATH_ST_H +#define CRYPT_PATH_ST_H + +#include "relay_crypto_st.h" + +/** Holds accounting information for a single step in the layered encryption + * performed by a circuit. Used only at the client edge of a circuit. */ +struct crypt_path_t { + uint32_t magic; + + /** Cryptographic state used for encrypting and authenticating relay + * cells to and from this hop. */ + relay_crypto_t crypto; + + /** Current state of the handshake as performed with the OR at this + * step. */ + onion_handshake_state_t handshake_state; + /** Diffie-hellman handshake state for performing an introduction + * operations */ + crypto_dh_t *rend_dh_handshake_state; + + /** Negotiated key material shared with the OR at this step. */ + char rend_circ_nonce[DIGEST_LEN];/* KH in tor-spec.txt */ + + /** Information to extend to the OR at this step. */ + extend_info_t *extend_info; + + /** Is the circuit built to this step? Must be one of: + * - CPATH_STATE_CLOSED (The circuit has not been extended to this step) + * - CPATH_STATE_AWAITING_KEYS (We have sent an EXTEND/CREATE to this step + * and not received an EXTENDED/CREATED) + * - CPATH_STATE_OPEN (The circuit has been extended to this step) */ + uint8_t state; +#define CPATH_STATE_CLOSED 0 +#define CPATH_STATE_AWAITING_KEYS 1 +#define CPATH_STATE_OPEN 2 + struct crypt_path_t *next; /**< Link to next crypt_path_t in the circuit. + * (The list is circular, so the last node + * links to the first.) */ + struct crypt_path_t *prev; /**< Link to previous crypt_path_t in the + * circuit. */ + + int package_window; /**< How many cells are we allowed to originate ending + * at this step? */ + int deliver_window; /**< How many cells are we willing to deliver originating + * at this step? */ +}; + +#endif + diff --git a/src/or/hs_circuit.c b/src/or/hs_circuit.c index 189ebdc1b9..56ae4a152e 100644 --- a/src/or/hs_circuit.c +++ b/src/or/hs_circuit.c @@ -33,6 +33,7 @@ #include "hs/cell_common.h" #include "hs/cell_establish_intro.h" +#include "crypt_path_st.h" #include "origin_circuit_st.h" /* A circuit is about to become an e2e rendezvous circuit. Check diff --git a/src/or/include.am b/src/or/include.am index 83dee5a77b..0a58796e04 100644 --- a/src/or/include.am +++ b/src/or/include.am @@ -206,6 +206,7 @@ ORHEADERS = \ src/or/consdiffmgr.h \ src/or/control_connection_st.h \ src/or/control.h \ + src/or/crypt_path_st.h \ src/or/cpuworker.h \ src/or/directory.h \ src/or/dirserv.h \ @@ -270,6 +271,7 @@ ORHEADERS = \ src/or/reasons.h \ src/or/relay.h \ src/or/relay_crypto.h \ + src/or/relay_crypto_st.h \ src/or/rendcache.h \ src/or/rendclient.h \ src/or/rendcommon.h \ diff --git a/src/or/or.h b/src/or/or.h index b9608d152d..df232604e6 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2278,64 +2278,8 @@ typedef struct { } u; } onion_handshake_state_t; -typedef struct relay_crypto_t { - /* crypto environments */ - /** Encryption key and counter for cells heading towards the OR at this - * step. */ - crypto_cipher_t *f_crypto; - /** Encryption key and counter for cells heading back from the OR at this - * step. */ - crypto_cipher_t *b_crypto; - - /** Digest state for cells heading towards the OR at this step. */ - crypto_digest_t *f_digest; /* for integrity checking */ - /** Digest state for cells heading away from the OR at this step. */ - crypto_digest_t *b_digest; - -} relay_crypto_t; - -/** Holds accounting information for a single step in the layered encryption - * performed by a circuit. Used only at the client edge of a circuit. */ -typedef struct crypt_path_t { - uint32_t magic; - - /** Cryptographic state used for encrypting and authenticating relay - * cells to and from this hop. */ - relay_crypto_t crypto; - - /** Current state of the handshake as performed with the OR at this - * step. */ - onion_handshake_state_t handshake_state; - /** Diffie-hellman handshake state for performing an introduction - * operations */ - crypto_dh_t *rend_dh_handshake_state; - - /** Negotiated key material shared with the OR at this step. */ - char rend_circ_nonce[DIGEST_LEN];/* KH in tor-spec.txt */ - - /** Information to extend to the OR at this step. */ - extend_info_t *extend_info; - - /** Is the circuit built to this step? Must be one of: - * - CPATH_STATE_CLOSED (The circuit has not been extended to this step) - * - CPATH_STATE_AWAITING_KEYS (We have sent an EXTEND/CREATE to this step - * and not received an EXTENDED/CREATED) - * - CPATH_STATE_OPEN (The circuit has been extended to this step) */ - uint8_t state; -#define CPATH_STATE_CLOSED 0 -#define CPATH_STATE_AWAITING_KEYS 1 -#define CPATH_STATE_OPEN 2 - struct crypt_path_t *next; /**< Link to next crypt_path_t in the circuit. - * (The list is circular, so the last node - * links to the first.) */ - struct crypt_path_t *prev; /**< Link to previous crypt_path_t in the - * circuit. */ - - int package_window; /**< How many cells are we allowed to originate ending - * at this step? */ - int deliver_window; /**< How many cells are we willing to deliver originating - * at this step? */ -} crypt_path_t; +typedef struct relay_crypto_t relay_crypto_t; +typedef struct crypt_path_t crypt_path_t; /** A reference-counted pointer to a crypt_path_t, used only to share * the final rendezvous cpath to be used on a service-side rendezvous diff --git a/src/or/or_circuit_st.h b/src/or/or_circuit_st.h index f76737fbd5..07022272a7 100644 --- a/src/or/or_circuit_st.h +++ b/src/or/or_circuit_st.h @@ -10,6 +10,7 @@ #include "or.h" #include "circuit_st.h" +#include "crypt_path_st.h" struct onion_queue_t; diff --git a/src/or/relay_crypto_st.h b/src/or/relay_crypto_st.h new file mode 100644 index 0000000000..4e23f4e404 --- /dev/null +++ b/src/or/relay_crypto_st.h @@ -0,0 +1,27 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2018, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#ifndef RELAY_CRYPTO_ST_H +#define RELAY_CRYPTO_ST_H + +struct relay_crypto_t { + /* crypto environments */ + /** Encryption key and counter for cells heading towards the OR at this + * step. */ + crypto_cipher_t *f_crypto; + /** Encryption key and counter for cells heading back from the OR at this + * step. */ + crypto_cipher_t *b_crypto; + + /** Digest state for cells heading towards the OR at this step. */ + crypto_digest_t *f_digest; /* for integrity checking */ + /** Digest state for cells heading away from the OR at this step. */ + crypto_digest_t *b_digest; + +}; + +#endif + diff --git a/src/or/rendclient.c b/src/or/rendclient.c index 6762bbfb00..8e621562ad 100644 --- a/src/or/rendclient.c +++ b/src/or/rendclient.c @@ -33,6 +33,7 @@ #include "routerlist.h" #include "routerset.h" +#include "crypt_path_st.h" #include "dir_connection_st.h" #include "entry_connection_st.h" #include "origin_circuit_st.h" diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c index 308b91878b..116ca730f9 100644 --- a/src/or/rendcommon.c +++ b/src/or/rendcommon.c @@ -31,6 +31,7 @@ #include "routerlist.h" #include "routerparse.h" +#include "crypt_path_st.h" #include "origin_circuit_st.h" /** Return 0 if one and two are the same service ids, else -1 or 1 */ diff --git a/src/or/rendservice.c b/src/or/rendservice.c index d1e6f8a8e3..09a52ea07b 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -36,6 +36,7 @@ #include "routerparse.h" #include "routerset.h" +#include "crypt_path_st.h" #include "edge_connection_st.h" #include "origin_circuit_st.h" diff --git a/src/or/router.c b/src/or/router.c index 11ee2e6aba..2d03058893 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -39,6 +39,7 @@ #include "dirauth/mode.h" +#include "crypt_path_st.h" #include "dir_connection_st.h" #include "dir_server_st.h" #include "origin_circuit_st.h" diff --git a/src/test/test_circuitstats.c b/src/test/test_circuitstats.c index c03164954a..8efde6f844 100644 --- a/src/test/test_circuitstats.c +++ b/src/test/test_circuitstats.c @@ -17,6 +17,7 @@ #include "circuituse.h" #include "channel.h" +#include "crypt_path_st.h" #include "origin_circuit_st.h" void test_circuitstats_timeout(void *arg); diff --git a/src/test/test_entrynodes.c b/src/test/test_entrynodes.c index 19a32aa8a2..83a3ecbfc0 100644 --- a/src/test/test_entrynodes.c +++ b/src/test/test_entrynodes.c @@ -30,11 +30,12 @@ #include "statefile.h" #include "util.h" +#include "crypt_path_st.h" #include "dir_connection_st.h" +#include "origin_circuit_st.h" #include "test_helpers.h" #include "log_test_helpers.h" -#include "origin_circuit_st.h" /* TODO: * choose_random_entry() test with state set. diff --git a/src/test/test_hs_client.c b/src/test/test_hs_client.c index bf0d56f8af..4443bd922b 100644 --- a/src/test/test_hs_client.c +++ b/src/test/test_hs_client.c @@ -37,6 +37,7 @@ #include "connection_edge.h" #include "networkstatus.h" +#include "crypt_path_st.h" #include "dir_connection_st.h" #include "entry_connection_st.h" #include "origin_circuit_st.h" diff --git a/src/test/test_hs_service.c b/src/test/test_hs_service.c index 06df50740f..947243e678 100644 --- a/src/test/test_hs_service.c +++ b/src/test/test_hs_service.c @@ -53,6 +53,7 @@ #include "dirauth/shared_random_state.h" #include "voting_schedule.h" +#include "crypt_path_st.h" #include "origin_circuit_st.h" /* Trunnel */ diff --git a/src/test/test_relaycell.c b/src/test/test_relaycell.c index e6a6734032..0d78f97d8b 100644 --- a/src/test/test_relaycell.c +++ b/src/test/test_relaycell.c @@ -16,6 +16,7 @@ #include "relay.h" #include "test.h" +#include "crypt_path_st.h" #include "entry_connection_st.h" #include "origin_circuit_st.h"