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) */