Tor 0.4.9.2-alpha-dev
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
relay_crypto.h
Go to the documentation of this file.
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. */
16typedef enum relay_crypto_alg_t {
17 /** Tor1 relay crypto, as used for ordinary circuit hops. */
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. */
23 /** Tor1 relay crypto, as used as an onion service for
24 * the shared virtual HS hop created with an INTRODUCE/RENVEZVOUS
25 * handshake. */
27 /** CGO crypto, as used at a client */
29 /** CGO crypto, as used at a relay */
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
39
41 relay_crypto_t *crypto,
42 const char *key_data, size_t key_data_len);
43
44int relay_decrypt_cell(circuit_t *circ, cell_t *cell,
45 cell_direction_t cell_direction,
46 crypt_path_t **layer_hint, char *recognized);
48 crypt_path_t *layer_hint);
50
52
53void relay_crypto_assert_ok(const relay_crypto_t *crypto);
54
55const uint8_t *relay_crypto_get_sendme_tag(relay_crypto_t *crypto,
56 size_t *len_out);
58
59#endif /* !defined(TOR_RELAY_CRYPTO_H) */
cell_direction_t
Definition: or.h:423
int relay_crypto_init(relay_crypto_alg_t alg, relay_crypto_t *crypto, const char *key_data, size_t key_data_len)
Definition: relay_crypto.c:349
void relay_encrypt_cell_outbound(cell_t *cell, origin_circuit_t *or_circ, crypt_path_t *layer_hint)
Definition: relay_crypto.c:244
void relay_crypto_assert_ok(const relay_crypto_t *crypto)
Definition: relay_crypto.c:402
ssize_t relay_crypto_key_material_len(relay_crypto_alg_t alg)
Definition: relay_crypto.c:385
const uint8_t * relay_crypto_get_sendme_tag(relay_crypto_t *crypto, size_t *len_out)
Definition: relay_crypto.c:39
relay_crypto_alg_t
Definition: relay_crypto.h:16
@ RELAY_CRYPTO_ALG_TOR1_HSS
Definition: relay_crypto.h:26
@ RELAY_CRYPTO_ALG_TOR1_HSC
Definition: relay_crypto.h:22
@ RELAY_CRYPTO_ALG_TOR1
Definition: relay_crypto.h:18
@ RELAY_CRYPTO_ALG_CGO_RELAY
Definition: relay_crypto.h:30
@ RELAY_CRYPTO_ALG_CGO_CLIENT
Definition: relay_crypto.h:28
int relay_decrypt_cell(circuit_t *circ, cell_t *cell, cell_direction_t cell_direction, crypt_path_t **layer_hint, char *recognized)
Definition: relay_crypto.c:151
size_t relay_crypto_sendme_tag_len(const relay_crypto_t *crypto)
Definition: relay_crypto.c:56
void relay_crypto_clear(relay_crypto_t *crypto)
Definition: relay_crypto.c:290
void relay_encrypt_cell_inbound(cell_t *cell, or_circuit_t *or_circ)
Definition: relay_crypto.c:267
Definition: cell_st.h:17