tor

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

relay_crypto.h (2212B)


      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 relay.h
      9 * \brief Header file for relay.c.
     10 **/
     11 
     12 #ifndef TOR_RELAY_CRYPTO_H
     13 #define TOR_RELAY_CRYPTO_H
     14 
     15 /** Enumeration to identify which relay crypto algorithm is in use. */
     16 typedef enum relay_crypto_alg_t {
     17  /** Tor1 relay crypto, as used for ordinary circuit hops. */
     18  RELAY_CRYPTO_ALG_TOR1,
     19  /** Tor1 relay crypto, as used as an onion service client for
     20   * the shared virtual HS hop created with an INTRODUCE/RENVEZVOUS
     21   * handshake. */
     22  RELAY_CRYPTO_ALG_TOR1_HSC,
     23  /** Tor1 relay crypto, as used as an onion service for
     24   * the shared virtual HS hop created with an INTRODUCE/RENVEZVOUS
     25   * handshake. */
     26  RELAY_CRYPTO_ALG_TOR1_HSS,
     27  /** CGO crypto, as used at a client */
     28  RELAY_CRYPTO_ALG_CGO_CLIENT,
     29  /** CGO crypto, as used at a relay */
     30  RELAY_CRYPTO_ALG_CGO_RELAY,
     31 } relay_crypto_alg_t;
     32 
     33 /** Largest possible return value for relay_crypto_key_material_len. */
     34 /* This is 2x the length needed for a single cgo direction with 256-bit AES
     35 */
     36 #define MAX_RELAY_KEY_MATERIAL_LEN 224
     37 
     38 ssize_t relay_crypto_key_material_len(relay_crypto_alg_t alg);
     39 
     40 int relay_crypto_init(relay_crypto_alg_t alg,
     41                      relay_crypto_t *crypto,
     42                      const char *key_data, size_t key_data_len);
     43 
     44 int relay_decrypt_cell(circuit_t *circ, cell_t *cell,
     45                       cell_direction_t cell_direction,
     46                       crypt_path_t **layer_hint, char *recognized);
     47 void relay_encrypt_cell_outbound(cell_t *cell, origin_circuit_t *or_circ,
     48                            crypt_path_t *layer_hint);
     49 void relay_encrypt_cell_inbound(cell_t *cell, or_circuit_t *or_circ);
     50 
     51 void relay_crypto_clear(relay_crypto_t *crypto);
     52 
     53 void relay_crypto_assert_ok(const relay_crypto_t *crypto);
     54 
     55 const uint8_t *relay_crypto_get_sendme_tag(relay_crypto_t *crypto,
     56                                           size_t *len_out);
     57 size_t relay_crypto_sendme_tag_len(const relay_crypto_t *crypto);
     58 
     59 #endif /* !defined(TOR_RELAY_CRYPTO_H) */