Go to the documentation of this file.
97 #define SIGCLEARDNSCACHE 130
98 #define SIGHEARTBEAT 131
100 #define SIGDORMANT 133
102 #if (SIZEOF_CELL_T != 0)
105 #define cell_t tor_cell_t
109 #define DOWNCAST(to, ptr) ((to*)SUBTYPE_P(ptr, to, base_))
112 #define MAX_NICKNAME_LEN 19
115 #define MAX_HEX_NICKNAME_LEN (HEX_DIGEST_LEN+1)
118 #define MAX_VERBOSE_NICKNAME_LEN (1+HEX_DIGEST_LEN+1+MAX_NICKNAME_LEN)
122 #define MAX_HEADERS_SIZE 50000
127 #define MAX_DESCRIPTOR_UPLOAD_SIZE 20000
130 #define MAX_EXTRAINFO_UPLOAD_SIZE 50000
133 #define MIN_ONION_KEY_LIFETIME_DAYS (1)
136 #define MAX_ONION_KEY_LIFETIME_DAYS (90)
139 #define DEFAULT_ONION_KEY_LIFETIME_DAYS (28)
144 #define MIN_ONION_KEY_GRACE_PERIOD_DAYS (1)
147 #define DEFAULT_ONION_KEY_GRACE_PERIOD_DAYS (7)
151 #define ONION_KEY_CONSENSUS_CHECK_INTERVAL (60*60)
154 #define MAX_SSL_KEY_LIFETIME_INTERNAL (2*60*60)
158 #define ROUTER_MAX_AGE (60*60*48)
161 #define ROUTER_MAX_AGE_TO_PUBLISH (60*60*24)
163 #define OLD_ROUTER_DESC_MAX_AGE (60*60*24*5)
167 #define PROXY_CONNECT 1
168 #define PROXY_SOCKS4 2
169 #define PROXY_SOCKS5 3
170 #define PROXY_HAPROXY 4
176 #define PROXY_PLUGGABLE 5
180 #define MIN_CIRCUITS_HANDLING_STREAM 2
184 #define RELAY_COMMAND_BEGIN 1
185 #define RELAY_COMMAND_DATA 2
186 #define RELAY_COMMAND_END 3
187 #define RELAY_COMMAND_CONNECTED 4
188 #define RELAY_COMMAND_SENDME 5
189 #define RELAY_COMMAND_EXTEND 6
190 #define RELAY_COMMAND_EXTENDED 7
191 #define RELAY_COMMAND_TRUNCATE 8
192 #define RELAY_COMMAND_TRUNCATED 9
193 #define RELAY_COMMAND_DROP 10
194 #define RELAY_COMMAND_RESOLVE 11
195 #define RELAY_COMMAND_RESOLVED 12
196 #define RELAY_COMMAND_BEGIN_DIR 13
197 #define RELAY_COMMAND_EXTEND2 14
198 #define RELAY_COMMAND_EXTENDED2 15
200 #define RELAY_COMMAND_ESTABLISH_INTRO 32
201 #define RELAY_COMMAND_ESTABLISH_RENDEZVOUS 33
202 #define RELAY_COMMAND_INTRODUCE1 34
203 #define RELAY_COMMAND_INTRODUCE2 35
204 #define RELAY_COMMAND_RENDEZVOUS1 36
205 #define RELAY_COMMAND_RENDEZVOUS2 37
206 #define RELAY_COMMAND_INTRO_ESTABLISHED 38
207 #define RELAY_COMMAND_RENDEZVOUS_ESTABLISHED 39
208 #define RELAY_COMMAND_INTRODUCE_ACK 40
210 #define RELAY_COMMAND_PADDING_NEGOTIATE 41
211 #define RELAY_COMMAND_PADDING_NEGOTIATED 42
214 #define END_OR_CONN_REASON_DONE 1
215 #define END_OR_CONN_REASON_REFUSED 2
216 #define END_OR_CONN_REASON_OR_IDENTITY 3
217 #define END_OR_CONN_REASON_CONNRESET 4
218 #define END_OR_CONN_REASON_TIMEOUT 5
219 #define END_OR_CONN_REASON_NO_ROUTE 6
220 #define END_OR_CONN_REASON_IO_ERROR 7
221 #define END_OR_CONN_REASON_RESOURCE_LIMIT 8
222 #define END_OR_CONN_REASON_PT_MISSING 9
223 #define END_OR_CONN_REASON_TLS_ERROR 10
224 #define END_OR_CONN_REASON_MISC 11
228 #define END_STREAM_REASON_MISC 1
229 #define END_STREAM_REASON_RESOLVEFAILED 2
230 #define END_STREAM_REASON_CONNECTREFUSED 3
231 #define END_STREAM_REASON_EXITPOLICY 4
232 #define END_STREAM_REASON_DESTROY 5
233 #define END_STREAM_REASON_DONE 6
234 #define END_STREAM_REASON_TIMEOUT 7
235 #define END_STREAM_REASON_NOROUTE 8
236 #define END_STREAM_REASON_HIBERNATING 9
237 #define END_STREAM_REASON_INTERNAL 10
238 #define END_STREAM_REASON_RESOURCELIMIT 11
239 #define END_STREAM_REASON_CONNRESET 12
240 #define END_STREAM_REASON_TORPROTOCOL 13
241 #define END_STREAM_REASON_NOTDIRECTORY 14
242 #define END_STREAM_REASON_ENTRYPOLICY 15
251 #define END_STREAM_REASON_CANT_ATTACH 257
254 #define END_STREAM_REASON_NET_UNREACHABLE 258
257 #define END_STREAM_REASON_SOCKSPROTOCOL 259
260 #define END_STREAM_REASON_CANT_FETCH_ORIG_DEST 260
263 #define END_STREAM_REASON_INVALID_NATD_DEST 261
266 #define END_STREAM_REASON_PRIVATE_ADDR 262
270 #define END_STREAM_REASON_HTTPPROTOCOL 263
273 #define END_STREAM_REASON_MASK 511
277 #define END_STREAM_REASON_FLAG_REMOTE 512
280 #define END_STREAM_REASON_FLAG_ALREADY_SENT_CLOSED 1024
284 #define END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED 2048
287 #define RESOLVED_TYPE_HOSTNAME 0
288 #define RESOLVED_TYPE_IPV4 4
289 #define RESOLVED_TYPE_IPV6 6
290 #define RESOLVED_TYPE_ERROR_TRANSIENT 0xF0
291 #define RESOLVED_TYPE_ERROR 0xF1
297 #define END_CIRC_REASON_IP_NOW_REDUNDANT -4
301 #define END_CIRC_REASON_MEASUREMENT_EXPIRED -3
304 #define END_CIRC_REASON_NOPATH -2
306 #define END_CIRC_AT_ORIGIN -1
310 #define END_CIRC_REASON_MIN_ 0
311 #define END_CIRC_REASON_NONE 0
312 #define END_CIRC_REASON_TORPROTOCOL 1
313 #define END_CIRC_REASON_INTERNAL 2
314 #define END_CIRC_REASON_REQUESTED 3
315 #define END_CIRC_REASON_HIBERNATING 4
316 #define END_CIRC_REASON_RESOURCELIMIT 5
317 #define END_CIRC_REASON_CONNECTFAILED 6
318 #define END_CIRC_REASON_OR_IDENTITY 7
319 #define END_CIRC_REASON_CHANNEL_CLOSED 8
320 #define END_CIRC_REASON_FINISHED 9
321 #define END_CIRC_REASON_TIMEOUT 10
322 #define END_CIRC_REASON_DESTROYED 11
323 #define END_CIRC_REASON_NOSUCHSERVICE 12
324 #define END_CIRC_REASON_MAX_ 12
329 #define END_CIRC_REASON_FLAG_REMOTE 512
332 #define REND_SERVICE_ID_LEN_BASE32 16
335 #define REND_SERVICE_ADDRESS_LEN (16+1+5)
338 #define REND_SERVICE_ID_LEN 10
341 #define REND_TIME_PERIOD_V2_DESC_VALIDITY (24*60*60)
345 #define REND_TIME_PERIOD_OVERLAPPING_V2_DESCS (60*60)
349 #define REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS 2
352 #define REND_NUMBER_OF_CONSECUTIVE_REPLICAS 3
355 #define REND_DESC_ID_V2_LEN_BASE32 BASE32_DIGEST_LEN
359 #define REND_SECRET_ID_PART_LEN_BASE32 BASE32_DIGEST_LEN
363 #define REND_INTRO_POINT_ID_LEN_BASE32 BASE32_DIGEST_LEN
367 #define REND_DESC_COOKIE_LEN 16
371 #define REND_DESC_COOKIE_LEN_BASE64 22
375 #define REND_BASIC_AUTH_CLIENT_ID_LEN 4
380 #define REND_BASIC_AUTH_CLIENT_MULTIPLE 16
384 #define REND_BASIC_AUTH_CLIENT_ENTRY_LEN (REND_BASIC_AUTH_CLIENT_ID_LEN \
388 #define REND_DESC_MAX_SIZE (20 * 1024)
392 #define REND_LEGAL_CLIENTNAME_CHARACTERS \
393 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-_"
396 #define REND_CLIENTNAME_MAX_LEN 16
400 #define REND_COOKIE_LEN DIGEST_LEN
406 REND_STEALTH_AUTH = 2,
480 #define REND_REPLAY_TIME_INTERVAL (5 * 60)
502 #define CIRCWINDOW_START 1000
503 #define CIRCWINDOW_START_MIN 100
504 #define CIRCWINDOW_START_MAX 1000
506 #define CIRCWINDOW_INCREMENT 100
509 #define STREAMWINDOW_START 500
510 #define STREAMWINDOW_START_MAX 500
512 #define STREAMWINDOW_INCREMENT 50
521 #define ORCIRC_MAX_MIDDLE_CELLS (CIRCWINDOW_START_MAX*2)
525 #define ORCIRC_MAX_MIDDLE_KILL_THRESH (1.1f)
528 #define CELL_PADDING 0
529 #define CELL_CREATE 1
530 #define CELL_CREATED 2
532 #define CELL_DESTROY 4
533 #define CELL_CREATE_FAST 5
534 #define CELL_CREATED_FAST 6
535 #define CELL_VERSIONS 7
536 #define CELL_NETINFO 8
537 #define CELL_RELAY_EARLY 9
538 #define CELL_CREATE2 10
539 #define CELL_CREATED2 11
540 #define CELL_PADDING_NEGOTIATE 12
542 #define CELL_VPADDING 128
543 #define CELL_CERTS 129
544 #define CELL_AUTH_CHALLENGE 130
545 #define CELL_AUTHENTICATE 131
546 #define CELL_AUTHORIZE 132
547 #define CELL_COMMAND_MAX_ 132
550 #define TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT (20*60)
553 #define LEGAL_NICKNAME_CHARACTERS \
554 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
558 #define DEFAULT_CLIENT_NICKNAME "client"
561 #define UNNAMED_ROUTER_NICKNAME "Unnamed"
564 #define SOCKS4_NETWORK_LEN 8
577 #define CELL_PAYLOAD_SIZE 509
580 #define CELL_MAX_NETWORK_SIZE 514
583 #define VAR_CELL_MAX_HEADER_SIZE 7
585 static int get_cell_network_size(
int wide_circ_ids);
586 static inline int get_cell_network_size(
int wide_circ_ids)
590 static int get_var_cell_header_size(
int wide_circ_ids);
591 static inline int get_var_cell_header_size(
int wide_circ_ids)
596 static int get_circ_id_size(
int wide_circ_ids);
597 static inline int get_circ_id_size(
int wide_circ_ids)
599 return wide_circ_ids ? 4 : 2;
604 #define RELAY_HEADER_SIZE (1+2+2+4+2)
606 #define RELAY_PAYLOAD_SIZE (CELL_PAYLOAD_SIZE-RELAY_HEADER_SIZE)
623 typedef struct channel_tls_t channel_tls_t;
627 typedef struct circuitmux_t circuitmux_t;
651 #define OR_AUTH_CHALLENGE_LEN 32
663 #define OR_CERT_TYPE_TLS_LINK 1
666 #define OR_CERT_TYPE_ID_1024 2
670 #define OR_CERT_TYPE_AUTH_1024 3
672 #define OR_CERT_TYPE_RSA_ED_CROSSCERT 7
681 #define AUTHTYPE_RSA_SHA256_TLSSECRET 1
689 #define AUTHTYPE_RSA_SHA256_RFC5705 2
692 #define AUTHTYPE_ED25519_SHA256_RFC5705 3
704 #define V3_AUTH_FIXED_PART_LEN (8+(32*6))
707 #define V3_AUTH_BODY_LEN (V3_AUTH_FIXED_PART_LEN + 8 + 16)
713 #define EXT_OR_CONN_ID_LEN DIGEST_LEN
721 #define OR_CONN_HIGHWATER (32*1024)
725 #define OR_CONN_LOWWATER (16*1024)
736 #define TO_CONN(c) (&(((c)->base_)))
739 #define ENTRY_TO_CONN(c) (TO_CONN(ENTRY_TO_EDGE_CONN(c)))
763 #define saved_location_bitfield_t ENUM_BF(saved_location_t)
768 DL_SCHED_GENERIC = 0,
769 DL_SCHED_CONSENSUS = 1,
772 #define download_schedule_bitfield_t ENUM_BF(download_schedule_t)
780 DL_WANT_ANY_DIRSERVER = 0,
781 DL_WANT_AUTHORITY = 1,
783 #define download_want_authority_bitfield_t \
784 ENUM_BF(download_want_authority_t)
790 DL_SCHED_INCREMENT_FAILURE = 0,
791 DL_SCHED_INCREMENT_ATTEMPT = 1,
793 #define download_schedule_increment_bitfield_t \
794 ENUM_BF(download_schedule_increment_t)
799 #define IMPOSSIBLE_TO_DOWNLOAD 255
804 #define ROUTER_ANNOTATION_BUF_LEN 256
887 #define N_CONSENSUS_FLAVORS ((int)(FLAV_MICRODESC)+1)
917 #define ALL_DIRINFO ((dirinfo_type_t)((1<<7)-1))
919 #define ONION_HANDSHAKE_TYPE_TAP 0x0000
920 #define ONION_HANDSHAKE_TYPE_FAST 0x0001
921 #define ONION_HANDSHAKE_TYPE_NTOR 0x0002
922 #define MAX_ONION_HANDSHAKE_TYPE 0x0002
929 #define CPATH_KEY_MATERIAL_LEN (20*2+16*2)
954 #define MAX_RELAY_EARLY_CELLS_PER_CIRCUIT 8
957 #define path_state_bitfield_t ENUM_BF(path_state_t)
959 #if REND_COOKIE_LEN != DIGEST_LEN
960 #error "The REND_TOKEN_LEN macro assumes REND_COOKIE_LEN == DIGEST_LEN"
962 #define REND_TOKEN_LEN DIGEST_LEN
965 #define TO_CIRCUIT(x) (&((x)->base_))
974 #define ISO_DESTPORT (1u<<0)
976 #define ISO_DESTADDR (1u<<1)
978 #define ISO_SOCKSAUTH (1u<<2)
980 #define ISO_CLIENTPROTO (1u<<3)
982 #define ISO_CLIENTADDR (1u<<4)
984 #define ISO_SESSIONGRP (1u<<5)
986 #define ISO_NYM_EPOCH (1u<<6)
988 #define ISO_STREAM (1u<<7)
992 #define ISO_DEFAULT (ISO_CLIENTADDR|ISO_SOCKSAUTH|ISO_SESSIONGRP|ISO_NYM_EPOCH)
995 #define SESSION_GROUP_UNSET -1
997 #define SESSION_GROUP_DIRCONN -2
999 #define SESSION_GROUP_CONTROL_RESOLVE -3
1001 #define SESSION_GROUP_FIRST_AUTO -4
1004 typedef struct routerset_t routerset_t;
1008 #define CFG_AUTO_PORT 0xc4005e
1014 #define MAX_SOCKS_ADDR_LEN 256
1019 #define DEFAULT_ROUTE_LEN 3
1024 #define BW_WEIGHT_SCALE 10000
1025 #define BW_MIN_WEIGHT_SCALE 1
1026 #define BW_MAX_WEIGHT_SCALE INT32_MAX
1056 #define addressmap_entry_source_bitfield_t ENUM_BF(addressmap_entry_source_t)
1058 #define WRITE_STATS_INTERVAL (24*60*60)
1077 #define MAX_INTRO_POINT_REACHABILITY_FAILURES 5
1082 #define INTRO_POINT_MIN_LIFETIME_INTRODUCTIONS 16384
1084 #define INTRO_POINT_MAX_LIFETIME_INTRODUCTIONS \
1085 (INTRO_POINT_MIN_LIFETIME_INTRODUCTIONS * 2)
1093 #define INTRO_POINT_LIFETIME_MIN_SECONDS (18*60*60)
1098 #define INTRO_POINT_LIFETIME_MAX_SECONDS (24*60*60)
1103 #define MAX_INTRO_POINT_CIRCUIT_RETRIES 3
1112 #define RELAY_REQUIRED_MIN_BANDWIDTH (75*1024)
1113 #define BRIDGE_REQUIRED_MIN_BANDWIDTH (50*1024)
1115 #define ROUTER_MAX_DECLARED_BANDWIDTH INT32_MAX
#define CELL_MAX_NETWORK_SIZE
#define DOWNCAST(to, ptr)
unsigned int supports_accepting_ipv6_extends
Definitions for sizes of Diffie-Hellman groups elements in Z_p.
char desc_id_fetch[DIGEST_LEN]
addressmap_entry_source_t
#define REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS
Macro definitions for MIN, MAX, and CLAMP.
rend_auth_type_t auth_type
download_schedule_increment_t
#define REND_SERVICE_ADDRESS_LEN
unsigned int supports_initiating_ipv6_extends
download_want_authority_t
Header for compat_string.c.
unsigned int supports_v3_hsdir
#define REND_SERVICE_ID_LEN_BASE32
Integer definitions used throughout Tor.
Functions and types for monotonic times.
unsigned int supports_ed25519_link_handshake_any
Summarize similar messages that would otherwise flood the logs.
Macros to manage assertions, fatal and non-fatal.
Header for approx_time.c.
circuit_channel_direction_t
Headers for crypto_rsa.c.
unsigned int supports_canonical_ipv6_conns
unsigned int supports_ed25519_hs_intro
char descriptor_cookie[REND_DESC_COOKIE_LEN]
unsigned int supports_extend2_cells
#define VAR_CELL_MAX_HEADER_SIZE
Definitions for timing-related constants.
Header file for buffers.c.
Headers for util_malloc.c.
Declarations for timeval-related macros that some platforms are missing.
char rend_cookie[REND_COOKIE_LEN]
unsigned int supports_establish_intro_dos_extension
unsigned int protocols_known
unsigned int supports_ed25519_link_handshake_compat
unsigned int supports_v3_rendezvous_point
Configuration structure for client ports.
Headers for crypto_cipher.c.
#define REND_DESC_COOKIE_LEN
char descriptor_id[REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS][DIGEST_LEN]
Macros to implement mocking and selective exposure for the test code.
Macros for comparing the boolean value of integers.
char onion_address[REND_SERVICE_ID_LEN_BASE32+1]
Inline functions for reading and writing multibyte values from the middle of strings,...
unsigned int supports_hs_setup_padding
Wrappers for reading and writing data to files on disk.
char rend_pk_digest[DIGEST_LEN]
Utility macros to handle different features and behavior in different compilers.
Header for util_string.c.
unsigned int waiting_time
Locale-independent character-type inspection (header)