tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

crypt_path_st.h (3410B)


      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 */
      6 
      7 /**
      8 * @file crypt_path_st.h
      9 * @brief Path structures for origin circuits.
     10 **/
     11 
     12 #ifndef CRYPT_PATH_ST_H
     13 #define CRYPT_PATH_ST_H
     14 
     15 #include "core/crypto/relay_crypto_st.h"
     16 #include "core/crypto/onion_crypto.h"
     17 
     18 #define CRYPT_PATH_MAGIC 0x70127012u
     19 
     20 struct fast_handshake_state_t;
     21 struct ntor_handshake_state_t;
     22 struct onion_handshake_state_t {
     23  /** One of `ONION_HANDSHAKE_TYPE_*`.  Determines which member of the union
     24   * is accessible. */
     25  uint16_t tag;
     26  /** Initial circuit parameters (selected during first stage of negotiation;
     27   * may be changed based on response from relay). */
     28  circuit_params_t chosen_params;
     29  union {
     30    struct fast_handshake_state_t *fast;
     31    struct ntor_handshake_state_t *ntor;
     32    struct ntor3_handshake_state_t *ntor3;
     33  } u;
     34 };
     35 
     36 struct congestion_control_t;
     37 
     38 /** Macro to encapsulate private members of a struct.
     39 *
     40 *  Renames 'x' to 'x_crypt_path_private_field'.
     41 */
     42 #define CRYPT_PATH_PRIV_FIELD(x) x ## _crypt_path_private_field
     43 
     44 #ifdef CRYPT_PATH_PRIVATE
     45 
     46 /* Helper macro to access private members of a struct. */
     47 #define pvt_crypto CRYPT_PATH_PRIV_FIELD(crypto)
     48 
     49 #endif /* defined(CRYPT_PATH_PRIVATE) */
     50 
     51 /** Holds accounting information for a single step in the layered encryption
     52 * performed by a circuit.  Used only at the client edge of a circuit. */
     53 struct crypt_path_t {
     54  uint32_t magic;
     55 
     56  /** Current state of the handshake as performed with the OR at this
     57   * step. */
     58  onion_handshake_state_t handshake_state;
     59 
     60  /** Negotiated key material shared with the OR at this step. */
     61  char rend_circ_nonce[DIGEST_LEN];/* KH in tor-spec.txt */
     62 
     63  /** Information to extend to the OR at this step. */
     64  extend_info_t *extend_info;
     65 
     66  /** Is the circuit built to this step?  Must be one of:
     67   *    - CPATH_STATE_CLOSED (The circuit has not been extended to this step)
     68   *    - CPATH_STATE_AWAITING_KEYS (We have sent an EXTEND/CREATE to this step
     69   *      and not received an EXTENDED/CREATED)
     70   *    - CPATH_STATE_OPEN (The circuit has been extended to this step) */
     71  uint8_t state;
     72 #define CPATH_STATE_CLOSED 0
     73 #define CPATH_STATE_AWAITING_KEYS 1
     74 #define CPATH_STATE_OPEN 2
     75  struct crypt_path_t *next; /**< Link to next crypt_path_t in the circuit.
     76                              * (The list is circular, so the last node
     77                              * links to the first.) */
     78  struct crypt_path_t *prev; /**< Link to previous crypt_path_t in the
     79                              * circuit. */
     80 
     81  int package_window; /**< How many cells are we allowed to originate ending
     82                       * at this step? */
     83  int deliver_window; /**< How many cells are we willing to deliver originating
     84                       * at this step? */
     85 
     86  /** Congestion control info */
     87  struct congestion_control_t *ccontrol;
     88 
     89  /** Format to use when exchanging relay cells with this relay. */
     90  relay_cell_fmt_t relay_cell_format;
     91 
     92  /*********************** Private members ****************************/
     93 
     94  /** Private member: Cryptographic state used for encrypting and
     95   * authenticating relay cells to and from this hop. */
     96  relay_crypto_t CRYPT_PATH_PRIV_FIELD(crypto);
     97 };
     98 
     99 #endif /* !defined(CRYPT_PATH_ST_H) */