1 /* * Copyright (c) 2012-2019, The Tor Project, Inc. */
2 /* See LICENSE for licensing information */
6 * \brief Header file for channeltls.c
9 #ifndef TOR_CHANNELTLS_H
10 #define TOR_CHANNELTLS_H
12 #include "core/or/or.h"
13 #include "core/or/channel.h"
15 struct ed25519_public_key_t
;
16 struct curve25519_public_key_t
;
18 #define TLS_PER_CELL_OVERHEAD 29
20 #define BASE_CHAN_TO_TLS(c) (channel_tls_from_base((c)))
21 #define TLS_CHAN_TO_BASE(c) (channel_tls_to_base((c)))
23 #define TLS_CHAN_MAGIC 0x8a192427U
25 #ifdef TOR_CHANNEL_INTERNAL_
27 struct channel_tls_s
{
28 /* Base channel_t struct */
30 /* or_connection_t pointer */
31 or_connection_t
*conn
;
34 #endif /* defined(TOR_CHANNEL_INTERNAL_) */
36 channel_t
* channel_tls_connect(const tor_addr_t
*addr
, uint16_t port
,
37 const char *id_digest
,
38 const struct ed25519_public_key_t
*ed_id
);
39 channel_listener_t
* channel_tls_get_listener(void);
40 channel_listener_t
* channel_tls_start_listener(void);
41 channel_t
* channel_tls_handle_incoming(or_connection_t
*orconn
);
45 channel_t
* channel_tls_to_base(channel_tls_t
*tlschan
);
46 channel_tls_t
* channel_tls_from_base(channel_t
*chan
);
48 /* Things for connection_or.c to call back into */
49 void channel_tls_handle_cell(cell_t
*cell
, or_connection_t
*conn
);
50 void channel_tls_handle_state_change_on_orconn(channel_tls_t
*chan
,
51 or_connection_t
*conn
,
53 void channel_tls_handle_var_cell(var_cell_t
*var_cell
,
54 or_connection_t
*conn
);
55 void channel_tls_update_marks(or_connection_t
*conn
);
57 /* Cleanup at shutdown */
58 void channel_tls_free_all(void);
60 extern uint64_t stats_n_authorize_cells_processed
;
61 extern uint64_t stats_n_authenticate_cells_processed
;
62 extern uint64_t stats_n_versions_cells_processed
;
63 extern uint64_t stats_n_netinfo_cells_processed
;
64 extern uint64_t stats_n_vpadding_cells_processed
;
65 extern uint64_t stats_n_certs_cells_processed
;
66 extern uint64_t stats_n_auth_challenge_cells_processed
;
68 #ifdef CHANNELTLS_PRIVATE
69 STATIC
void channel_tls_process_certs_cell(var_cell_t
*cell
,
70 channel_tls_t
*tlschan
);
71 STATIC
void channel_tls_process_auth_challenge_cell(var_cell_t
*cell
,
72 channel_tls_t
*tlschan
);
73 STATIC
void channel_tls_common_init(channel_tls_t
*tlschan
);
74 STATIC
void channel_tls_process_authenticate_cell(var_cell_t
*cell
,
75 channel_tls_t
*tlschan
);
76 #endif /* defined(CHANNELTLS_PRIVATE) */
78 #endif /* !defined(TOR_CHANNELTLS_H) */