1 /* Copyright (c) 2001 Matej Pfajfar.
2 * Copyright (c) 2001-2004, Roger Dingledine.
3 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
4 * Copyright (c) 2007-2021, The Tor Project, Inc. */
5 /* See LICENSE for licensing information */
8 * @file crypt_path_st.h
9 * @brief Path structures for origin circuits.
12 #ifndef CRYPT_PATH_ST_H
13 #define CRYPT_PATH_ST_H
15 #include "core/or/relay_crypto_st.h"
18 #define CRYPT_PATH_MAGIC 0x70127012u
20 struct fast_handshake_state_t
;
21 struct ntor_handshake_state_t
;
23 struct onion_handshake_state_t
{
24 /** One of `ONION_HANDSHAKE_TYPE_*`. Determines which member of the union
28 struct fast_handshake_state_t
*fast
;
29 struct ntor_handshake_state_t
*ntor
;
30 struct ntor3_handshake_state_t
*ntor3
;
34 struct congestion_control_t
;
36 /** Macro to encapsulate private members of a struct.
38 * Renames 'x' to 'x_crypt_path_private_field'.
40 #define CRYPT_PATH_PRIV_FIELD(x) x ## _crypt_path_private_field
42 #ifdef CRYPT_PATH_PRIVATE
44 /* Helper macro to access private members of a struct. */
45 #define pvt_crypto CRYPT_PATH_PRIV_FIELD(crypto)
47 #endif /* defined(CRYPT_PATH_PRIVATE) */
49 /** Holds accounting information for a single step in the layered encryption
50 * performed by a circuit. Used only at the client edge of a circuit. */
54 /** Current state of the handshake as performed with the OR at this
56 onion_handshake_state_t handshake_state
;
57 /** Diffie-hellman handshake state for performing an introduction
59 struct crypto_dh_t
*rend_dh_handshake_state
;
61 /** Negotiated key material shared with the OR at this step. */
62 char rend_circ_nonce
[DIGEST_LEN
];/* KH in tor-spec.txt */
64 /** Information to extend to the OR at this step. */
65 extend_info_t
*extend_info
;
67 /** Is the circuit built to this step? Must be one of:
68 * - CPATH_STATE_CLOSED (The circuit has not been extended to this step)
69 * - CPATH_STATE_AWAITING_KEYS (We have sent an EXTEND/CREATE to this step
70 * and not received an EXTENDED/CREATED)
71 * - CPATH_STATE_OPEN (The circuit has been extended to this step) */
73 #define CPATH_STATE_CLOSED 0
74 #define CPATH_STATE_AWAITING_KEYS 1
75 #define CPATH_STATE_OPEN 2
76 struct crypt_path_t
*next
; /**< Link to next crypt_path_t in the circuit.
77 * (The list is circular, so the last node
78 * links to the first.) */
79 struct crypt_path_t
*prev
; /**< Link to previous crypt_path_t in the
82 int package_window
; /**< How many cells are we allowed to originate ending
84 int deliver_window
; /**< How many cells are we willing to deliver originating
87 /** Congestion control info */
88 struct congestion_control_t
*ccontrol
;
90 /*********************** Private members ****************************/
92 /** Private member: Cryptographic state used for encrypting and
93 * authenticating relay cells to and from this hop. */
94 relay_crypto_t
CRYPT_PATH_PRIV_FIELD(crypto
);
97 #endif /* !defined(CRYPT_PATH_ST_H) */