Tor 0.4.9.0-alpha-dev
or.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 or.h
9 * \brief Master header file for Tor-specific functionality.
10 **/
11
12#ifndef TOR_OR_H
13#define TOR_OR_H
14
15#include "orconfig.h"
16#include "lib/cc/torint.h"
17
18#ifdef HAVE_SIGNAL_H
19#include <signal.h>
20#endif
21#ifdef HAVE_TIME_H
22#include <time.h>
23#endif
24
25#include "lib/arch/bytes.h"
27#include "lib/container/map.h"
28#include "lib/buf/buffers.h"
32#include "lib/ctime/di_ops.h"
33#include "lib/defs/dh_sizes.h"
37#include "lib/err/torerr.h"
38#include "lib/fs/dir.h"
39#include "lib/fs/files.h"
40#include "lib/fs/mmap.h"
41#include "lib/fs/path.h"
42#include "lib/fs/userdb.h"
43#include "lib/geoip/country.h"
44#include "lib/intmath/addsub.h"
45#include "lib/intmath/bits.h"
46#include "lib/intmath/cmp.h"
47#include "lib/intmath/logic.h"
48#include "lib/intmath/muldiv.h"
49#include "lib/log/escape.h"
50#include "lib/log/ratelim.h"
51#include "lib/log/util_bug.h"
52#include "lib/malloc/malloc.h"
53#include "lib/net/address.h"
54#include "lib/net/inaddr.h"
55#include "lib/net/socket.h"
59#include "lib/string/printf.h"
60#include "lib/string/scanf.h"
63#include "lib/thread/threads.h"
67
68#include "ht.h"
69
70// These, more than other includes, are for keeping the other struct
71// definitions working. We should remove them when we minimize our includes.
73
76
77/* These signals are defined to help handle_control_signal work.
78 */
79#ifndef SIGHUP
80#define SIGHUP 1
81#endif
82#ifndef SIGINT
83#define SIGINT 2
84#endif
85#ifndef SIGUSR1
86#define SIGUSR1 10
87#endif
88#ifndef SIGUSR2
89#define SIGUSR2 12
90#endif
91#ifndef SIGTERM
92#define SIGTERM 15
93#endif
94/* Controller signals start at a high number so we don't
95 * conflict with system-defined signals. */
96#define SIGNEWNYM 129
97#define SIGCLEARDNSCACHE 130
98#define SIGHEARTBEAT 131
99#define SIGACTIVE 132
100#define SIGDORMANT 133
101
102#if (SIZEOF_CELL_T != 0)
103/* On Irix, stdlib.h defines a cell_t type, so we need to make sure
104 * that our stuff always calls cell_t something different. */
105#define cell_t tor_cell_t
106#endif
107
108/** Helper macro: Given a pointer to to.base_, of type from*, return &to. */
109#define DOWNCAST(to, ptr) ((to*)SUBTYPE_P(ptr, to, base_))
110
111/** Length of longest allowable configured nickname. */
112#define MAX_NICKNAME_LEN 19
113/** Length of a router identity encoded as a hexadecimal digest, plus
114 * possible dollar sign. */
115#define MAX_HEX_NICKNAME_LEN (HEX_DIGEST_LEN+1)
116/** Maximum length of verbose router identifier: dollar sign, hex ID digest,
117 * equal sign or tilde, nickname. */
118#define MAX_VERBOSE_NICKNAME_LEN (1+HEX_DIGEST_LEN+1+MAX_NICKNAME_LEN)
119
120/** For HTTP parsing: Maximum number of bytes we'll accept in the headers
121 * of an HTTP request or response. */
122#define MAX_HEADERS_SIZE 50000
123
124/** Maximum size, in bytes, of a single router descriptor uploaded to us
125 * as a directory authority. Caches and clients fetch whatever descriptors
126 * the authorities tell them to fetch, and don't care about size. */
127#define MAX_DESCRIPTOR_UPLOAD_SIZE 20000
128
129/** Maximum size of a single extrainfo document, as above. */
130#define MAX_EXTRAINFO_UPLOAD_SIZE 50000
131
132/** Minimum lifetime for an onion key in days. */
133#define MIN_ONION_KEY_LIFETIME_DAYS (1)
134
135/** Maximum lifetime for an onion key in days. */
136#define MAX_ONION_KEY_LIFETIME_DAYS (90)
137
138/** Default lifetime for an onion key in days. */
139#define DEFAULT_ONION_KEY_LIFETIME_DAYS (28)
140
141/** Minimum grace period for acceptance of an onion key in days.
142 * The maximum value is defined in proposal #274 as being the current network
143 * consensus parameter for "onion-key-rotation-days". */
144#define MIN_ONION_KEY_GRACE_PERIOD_DAYS (1)
145
146/** Default grace period for acceptance of an onion key in days. */
147#define DEFAULT_ONION_KEY_GRACE_PERIOD_DAYS (7)
148
149/** How often we should check the network consensus if it is time to rotate or
150 * expire onion keys. */
151#define ONION_KEY_CONSENSUS_CHECK_INTERVAL (60*60)
152
153/** How often do we rotate TLS contexts? */
154#define MAX_SSL_KEY_LIFETIME_INTERNAL (2*60*60)
155
156/** How old do we allow a router to get before removing it
157 * from the router list? In seconds. */
158#define ROUTER_MAX_AGE (60*60*48)
159/** How old can a router get before we (as a server) will no longer
160 * consider it live? In seconds. */
161#define ROUTER_MAX_AGE_TO_PUBLISH (60*60*24)
162/** How old do we let a saved descriptor get before force-removing it? */
163#define OLD_ROUTER_DESC_MAX_AGE (60*60*24*5)
164
165/* Proxy client types */
166#define PROXY_NONE 0
167#define PROXY_CONNECT 1
168#define PROXY_SOCKS4 2
169#define PROXY_SOCKS5 3
170#define PROXY_HAPROXY 4
171/* !!!! If there is ever a PROXY_* type over 7, we must grow the proxy_type
172 * field in or_connection_t */
173
174/* Pluggable transport proxy type. Don't use this in or_connection_t,
175 * instead use the actual underlying proxy type (see above). */
176#define PROXY_PLUGGABLE 5
177
178/** How many circuits do we want simultaneously in-progress to handle
179 * a given stream? */
180#define MIN_CIRCUITS_HANDLING_STREAM 2
181
182/* These RELAY_COMMAND constants define values for relay cell commands, and
183* must match those defined in tor-spec.txt. */
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
189#define RELAY_COMMAND_SENDME 5
190#define RELAY_COMMAND_EXTEND 6
191#define RELAY_COMMAND_EXTENDED 7
192#define RELAY_COMMAND_TRUNCATE 8
193#define RELAY_COMMAND_TRUNCATED 9
194#define RELAY_COMMAND_DROP 10
195
196#define RELAY_COMMAND_RESOLVE 11
197#define RELAY_COMMAND_RESOLVED 12
198
199#define RELAY_COMMAND_BEGIN_DIR 13
200#define RELAY_COMMAND_EXTEND2 14
201#define RELAY_COMMAND_EXTENDED2 15
202
203/* Conflux */
204#define RELAY_COMMAND_CONFLUX_LINK 19
205#define RELAY_COMMAND_CONFLUX_LINKED 20
206#define RELAY_COMMAND_CONFLUX_LINKED_ACK 21
207#define RELAY_COMMAND_CONFLUX_SWITCH 22
208
209#define RELAY_COMMAND_ESTABLISH_INTRO 32
210#define RELAY_COMMAND_ESTABLISH_RENDEZVOUS 33
211#define RELAY_COMMAND_INTRODUCE1 34
212#define RELAY_COMMAND_INTRODUCE2 35
213#define RELAY_COMMAND_RENDEZVOUS1 36
214#define RELAY_COMMAND_RENDEZVOUS2 37
215#define RELAY_COMMAND_INTRO_ESTABLISHED 38
216#define RELAY_COMMAND_RENDEZVOUS_ESTABLISHED 39
217#define RELAY_COMMAND_INTRODUCE_ACK 40
218
219#define RELAY_COMMAND_PADDING_NEGOTIATE 41
220#define RELAY_COMMAND_PADDING_NEGOTIATED 42
221
222#define RELAY_COMMAND_XOFF 43
223#define RELAY_COMMAND_XON 44
224
225/* Reasons why an OR connection is closed. */
226#define END_OR_CONN_REASON_DONE 1
227#define END_OR_CONN_REASON_REFUSED 2 /* connection refused */
228#define END_OR_CONN_REASON_OR_IDENTITY 3
229#define END_OR_CONN_REASON_CONNRESET 4 /* connection reset by peer */
230#define END_OR_CONN_REASON_TIMEOUT 5
231#define END_OR_CONN_REASON_NO_ROUTE 6 /* no route to host/net */
232#define END_OR_CONN_REASON_IO_ERROR 7 /* read/write error */
233#define END_OR_CONN_REASON_RESOURCE_LIMIT 8 /* sockets, buffers, etc */
234#define END_OR_CONN_REASON_PT_MISSING 9 /* PT failed or not available */
235#define END_OR_CONN_REASON_TLS_ERROR 10 /* Problem in TLS protocol */
236#define END_OR_CONN_REASON_MISC 11
237
238/* Reasons why we (or a remote OR) might close a stream. See tor-spec.txt for
239 * documentation of these. The values must match. */
240#define END_STREAM_REASON_MISC 1
241#define END_STREAM_REASON_RESOLVEFAILED 2
242#define END_STREAM_REASON_CONNECTREFUSED 3
243#define END_STREAM_REASON_EXITPOLICY 4
244#define END_STREAM_REASON_DESTROY 5
245#define END_STREAM_REASON_DONE 6
246#define END_STREAM_REASON_TIMEOUT 7
247#define END_STREAM_REASON_NOROUTE 8
248#define END_STREAM_REASON_HIBERNATING 9
249#define END_STREAM_REASON_INTERNAL 10
250#define END_STREAM_REASON_RESOURCELIMIT 11
251#define END_STREAM_REASON_CONNRESET 12
252#define END_STREAM_REASON_TORPROTOCOL 13
253#define END_STREAM_REASON_NOTDIRECTORY 14
254#define END_STREAM_REASON_ENTRYPOLICY 15
255
256/* These high-numbered end reasons are not part of the official spec,
257 * and are not intended to be put in relay end cells. They are here
258 * to be more informative when sending back socks replies to the
259 * application. */
260/* XXXX 256 is no longer used; feel free to reuse it. */
261/** We were unable to attach the connection to any circuit at all. */
262/* XXXX the ways we use this one don't make a lot of sense. */
263#define END_STREAM_REASON_CANT_ATTACH 257
264/** We can't connect to any directories at all, so we killed our streams
265 * before they can time out. */
266#define END_STREAM_REASON_NET_UNREACHABLE 258
267/** This is a SOCKS connection, and the client used (or misused) the SOCKS
268 * protocol in a way we couldn't handle. */
269#define END_STREAM_REASON_SOCKSPROTOCOL 259
270/** This is a transparent proxy connection, but we can't extract the original
271 * target address:port. */
272#define END_STREAM_REASON_CANT_FETCH_ORIG_DEST 260
273/** This is a connection on the NATD port, and the destination IP:Port was
274 * either ill-formed or out-of-range. */
275#define END_STREAM_REASON_INVALID_NATD_DEST 261
276/** The target address is in a private network (like 127.0.0.1 or 10.0.0.1);
277 * you don't want to do that over a randomly chosen exit */
278#define END_STREAM_REASON_PRIVATE_ADDR 262
279/** This is an HTTP tunnel connection and the client used or misused HTTP in a
280 * way we can't handle.
281 */
282#define END_STREAM_REASON_HTTPPROTOCOL 263
283
284/** Bitwise-and this value with endreason to mask out all flags. */
285#define END_STREAM_REASON_MASK 511
286
287/** Bitwise-or this with the argument to control_event_stream_status
288 * to indicate that the reason came from an END cell. */
289#define END_STREAM_REASON_FLAG_REMOTE 512
290/** Bitwise-or this with the argument to control_event_stream_status
291 * to indicate that we already sent a CLOSED stream event. */
292#define END_STREAM_REASON_FLAG_ALREADY_SENT_CLOSED 1024
293/** Bitwise-or this with endreason to indicate that we already sent
294 * a socks reply, and no further reply needs to be sent from
295 * connection_mark_unattached_ap(). */
296#define END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED 2048
297
298/* 'type' values to use in RESOLVED cells. Specified in tor-spec.txt. */
299#define RESOLVED_TYPE_HOSTNAME 0
300#define RESOLVED_TYPE_IPV4 4
301#define RESOLVED_TYPE_IPV6 6
302#define RESOLVED_TYPE_ERROR_TRANSIENT 0xF0
303#define RESOLVED_TYPE_ERROR 0xF1
304
305/* Negative reasons are internal: we never send them in a DESTROY or TRUNCATE
306 * call; they only go to the controller for tracking */
307
308/* Closing introduction point that were opened in parallel. */
309#define END_CIRC_REASON_IP_NOW_REDUNDANT -4
310
311/** Our post-timeout circuit time measurement period expired.
312 * We must give up now */
313#define END_CIRC_REASON_MEASUREMENT_EXPIRED -3
314
315/** We couldn't build a path for this circuit. */
316#define END_CIRC_REASON_NOPATH -2
317/** Catch-all "other" reason for closing origin circuits. */
318#define END_CIRC_AT_ORIGIN -1
319
320/* Reasons why we (or a remote OR) might close a circuit. See tor-spec.txt
321 * section 5.4 for documentation of these. */
322#define END_CIRC_REASON_MIN_ 0
323#define END_CIRC_REASON_NONE 0
324#define END_CIRC_REASON_TORPROTOCOL 1
325#define END_CIRC_REASON_INTERNAL 2
326#define END_CIRC_REASON_REQUESTED 3
327#define END_CIRC_REASON_HIBERNATING 4
328#define END_CIRC_REASON_RESOURCELIMIT 5
329#define END_CIRC_REASON_CONNECTFAILED 6
330#define END_CIRC_REASON_OR_IDENTITY 7
331#define END_CIRC_REASON_CHANNEL_CLOSED 8
332#define END_CIRC_REASON_FINISHED 9
333#define END_CIRC_REASON_TIMEOUT 10
334#define END_CIRC_REASON_DESTROYED 11
335#define END_CIRC_REASON_NOSUCHSERVICE 12
336#define END_CIRC_REASON_MAX_ 12
337
338/** Bitwise-OR this with the argument to circuit_mark_for_close() or
339 * control_event_circuit_status() to indicate that the reason was
340 * passed through from a destroy or truncate cell. */
341#define END_CIRC_REASON_FLAG_REMOTE 512
342
343/** Length of v2 descriptor ID (32 base32 chars = 160 bits).
344 *
345 * XXX: It is still used by v3 code but should be renamed or maybe removed. */
346#define REND_DESC_ID_V2_LEN_BASE32 BASE32_DIGEST_LEN
347
348/** Maximum length of authorized client names for a hidden service. */
349#define REND_CLIENTNAME_MAX_LEN 16
350
351/** Length of the rendezvous cookie that is used to connect circuits at the
352 * rendezvous point. */
353#define REND_COOKIE_LEN DIGEST_LEN
354
355/** Client authorization type that a hidden service performs. */
356typedef enum rend_auth_type_t {
357 REND_NO_AUTH = 0,
358 REND_V3_AUTH = 1, /* Dummy flag to allow adding v3 services on the
359 * control port */
361
362/* Stub because we can't include hs_ident.h. */
365struct hs_ident_circuit_t;
366
367typedef struct hsdir_index_t hsdir_index_t;
368
369/** Time interval for tracking replays of DH public keys received in
370 * INTRODUCE2 cells. Used only to avoid launching multiple
371 * simultaneous attempts to connect to the same rendezvous point. */
372#define REND_REPLAY_TIME_INTERVAL (5 * 60)
373
374/** Used to indicate which way a cell is going on a circuit. */
375typedef enum {
376 CELL_DIRECTION_IN=1, /**< The cell is moving towards the origin. */
377 CELL_DIRECTION_OUT=2, /**< The cell is moving away from the origin. */
379
380/**
381 * An enum to allow us to specify which channel in a circuit
382 * we're interested in.
383 *
384 * This is needed because our data structures and other fields
385 * for channel delivery are disassociated from the channel.
386 */
387typedef enum {
388 CIRCUIT_N_CHAN = 0,
389 CIRCUIT_P_CHAN = 1
391
392/** Initial value for both sides of a circuit transmission window when the
393 * circuit is initialized. Measured in cells. */
394#define CIRCWINDOW_START 1000
395#define CIRCWINDOW_START_MIN 100
396#define CIRCWINDOW_START_MAX 1000
397/** Amount to increment a circuit window when we get a circuit SENDME. */
398#define CIRCWINDOW_INCREMENT 100
399/** Initial value on both sides of a stream transmission window when the
400 * stream is initialized. Measured in cells. */
401#define STREAMWINDOW_START 500
402#define STREAMWINDOW_START_MAX 500
403/** Amount to increment a stream window when we get a stream SENDME. */
404#define STREAMWINDOW_INCREMENT 50
405
406/** Maximum number of queued cells on a circuit for which we are the
407 * midpoint before we give up and kill it. This must be >= circwindow
408 * to avoid killing innocent circuits, and >= circwindow*2 to give
409 * leaky-pipe a chance of working someday. The ORCIRC_MAX_MIDDLE_KILL_THRESH
410 * ratio controls the margin of error between emitting a warning and
411 * killing the circuit.
412 */
413#define ORCIRC_MAX_MIDDLE_CELLS (CIRCWINDOW_START_MAX*2)
414/** Ratio of hard (circuit kill) to soft (warning) thresholds for the
415 * ORCIRC_MAX_MIDDLE_CELLS tests.
416 */
417#define ORCIRC_MAX_MIDDLE_KILL_THRESH (1.1f)
418
419/* Cell commands. These values are defined in tor-spec.txt. */
420#define CELL_PADDING 0
421#define CELL_CREATE 1
422#define CELL_CREATED 2
423#define CELL_RELAY 3
424#define CELL_DESTROY 4
425#define CELL_CREATE_FAST 5
426#define CELL_CREATED_FAST 6
427#define CELL_VERSIONS 7
428#define CELL_NETINFO 8
429#define CELL_RELAY_EARLY 9
430#define CELL_CREATE2 10
431#define CELL_CREATED2 11
432#define CELL_PADDING_NEGOTIATE 12
433
434#define CELL_VPADDING 128
435#define CELL_CERTS 129
436#define CELL_AUTH_CHALLENGE 130
437#define CELL_AUTHENTICATE 131
438#define CELL_AUTHORIZE 132
439#define CELL_COMMAND_MAX_ 132
440
441/** How long to test reachability before complaining to the user. */
442#define TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT (20*60)
443
444/** Legal characters in a nickname. */
445#define LEGAL_NICKNAME_CHARACTERS \
446 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
447
448/** Name chosen by routers that don't configure nicknames */
449#define UNNAMED_ROUTER_NICKNAME "Unnamed"
450
451/** Number of bytes in a SOCKS4 header. */
452#define SOCKS4_NETWORK_LEN 8
453
454/*
455 * Relay payload:
456 * Relay command [1 byte]
457 * Recognized [2 bytes]
458 * Stream ID [2 bytes]
459 * Partial SHA-1 [4 bytes]
460 * Length [2 bytes]
461 * Relay payload [498 bytes]
462 */
463
464/** Number of bytes in a cell, minus cell header. */
465#define CELL_PAYLOAD_SIZE 509
466/** Number of bytes in a cell transmitted over the network, in the longest
467 * form */
468#define CELL_MAX_NETWORK_SIZE 514
469
470/** Maximum length of a header on a variable-length cell. */
471#define VAR_CELL_MAX_HEADER_SIZE 7
472
473static int get_cell_network_size(int wide_circ_ids);
474static inline int get_cell_network_size(int wide_circ_ids)
475{
476 return wide_circ_ids ? CELL_MAX_NETWORK_SIZE : CELL_MAX_NETWORK_SIZE - 2;
477}
478static int get_var_cell_header_size(int wide_circ_ids);
479static inline int get_var_cell_header_size(int wide_circ_ids)
480{
481 return wide_circ_ids ? VAR_CELL_MAX_HEADER_SIZE :
483}
484static int get_circ_id_size(int wide_circ_ids);
485static inline int get_circ_id_size(int wide_circ_ids)
486{
487 return wide_circ_ids ? 4 : 2;
488}
489
490/** Number of bytes in a relay cell's header (not including general cell
491 * header). */
492#define RELAY_HEADER_SIZE (1+2+2+4+2)
493/** Largest number of bytes that can fit in a relay cell payload. */
494#define RELAY_PAYLOAD_SIZE (CELL_PAYLOAD_SIZE-RELAY_HEADER_SIZE)
495
496/** Identifies a circuit on an or_connection */
497typedef uint32_t circid_t;
498/** Identifies a stream on a circuit */
499typedef uint16_t streamid_t;
500
501/* channel_t typedef; struct channel_t is in channel.h */
502
503typedef struct channel_t channel_t;
504
505/* channel_listener_t typedef; struct channel_listener_t is in channel.h */
506
508
509/* TLS channel stuff */
510
511typedef struct channel_tls_t channel_tls_t;
512
513/* circuitmux_t typedef; struct circuitmux_t is in circuitmux.h */
514
515typedef struct circuitmux_t circuitmux_t;
516
517typedef struct cell_t cell_t;
518typedef struct var_cell_t var_cell_t;
519typedef struct packed_cell_t packed_cell_t;
520typedef struct cell_queue_t cell_queue_t;
521typedef struct destroy_cell_t destroy_cell_t;
523typedef struct ext_or_cmd_t ext_or_cmd_t;
524
525/** Beginning of a RELAY cell payload. */
526typedef struct {
527 uint8_t command; /**< The end-to-end relay command. */
528 uint16_t recognized; /**< Used to tell whether cell is for us. */
529 streamid_t stream_id; /**< Which stream is this cell associated with? */
530 char integrity[4]; /**< Used to tell whether cell is corrupted. */
531 uint16_t length; /**< How long is the payload body? */
533
534typedef struct socks_request_t socks_request_t;
537
538/** Minimum length of the random part of an AUTH_CHALLENGE cell. */
539#define OR_AUTH_CHALLENGE_LEN 32
540
541/**
542 * @name Certificate types for CERTS cells.
543 *
544 * These values are defined by the protocol, and affect how an X509
545 * certificate in a CERTS cell is interpreted and used.
546 *
547 * @{ */
548/** A certificate that authenticates a TLS link key. The subject key
549 * must match the key used in the TLS handshake; it must be signed by
550 * the identity key. */
551#define OR_CERT_TYPE_TLS_LINK 1
552/** A self-signed identity certificate. The subject key must be a
553 * 1024-bit RSA key. */
554#define OR_CERT_TYPE_ID_1024 2
555/** A certificate that authenticates a key used in an AUTHENTICATE cell
556 * in the v3 handshake. The subject key must be a 1024-bit RSA key; it
557 * must be signed by the identity key */
558#define OR_CERT_TYPE_AUTH_1024 3
559/* DOCDOC */
560#define OR_CERT_TYPE_RSA_ED_CROSSCERT 7
561/**@}*/
562
563/** The first supported type of AUTHENTICATE cell. It contains
564 * a bunch of structures signed with an RSA1024 key. The signed
565 * structures include a HMAC using negotiated TLS secrets, and a digest
566 * of all cells sent or received before the AUTHENTICATE cell (including
567 * the random server-generated AUTH_CHALLENGE cell).
568 */
569#define AUTHTYPE_RSA_SHA256_TLSSECRET 1
570/** As AUTHTYPE_RSA_SHA256_TLSSECRET, but instead of using the
571 * negotiated TLS secrets, uses exported keying material from the TLS
572 * session as described in RFC 5705.
573 *
574 * Not used by today's tors, since everything that supports this
575 * also supports ED25519_SHA256_5705, which is better.
576 **/
577#define AUTHTYPE_RSA_SHA256_RFC5705 2
578/** As AUTHTYPE_RSA_SHA256_RFC5705, but uses an Ed25519 identity key to
579 * authenticate. */
580#define AUTHTYPE_ED25519_SHA256_RFC5705 3
581/*
582 * NOTE: authchallenge_type_is_better() relies on these AUTHTYPE codes
583 * being sorted in order of preference. If we someday add one with
584 * a higher numerical value that we don't like as much, we should revise
585 * authchallenge_type_is_better().
586 */
587
588/** The length of the part of the AUTHENTICATE cell body that the client and
589 * server can generate independently (when using RSA_SHA256_TLSSECRET). It
590 * contains everything except the client's timestamp, the client's randomly
591 * generated nonce, and the signature. */
592#define V3_AUTH_FIXED_PART_LEN (8+(32*6))
593/** The length of the part of the AUTHENTICATE cell body that the client
594 * signs. */
595#define V3_AUTH_BODY_LEN (V3_AUTH_FIXED_PART_LEN + 8 + 16)
596
599
600/** Length of Extended ORPort connection identifier. */
601#define EXT_OR_CONN_ID_LEN DIGEST_LEN /* 20 */
602
603typedef struct connection_t connection_t;
609typedef struct or_connection_t or_connection_t;
610
611/** Cast a connection_t subtype pointer to a connection_t **/
612#define TO_CONN(c) (&(((c)->base_)))
613
614/** Cast a entry_connection_t subtype pointer to a connection_t **/
615#define ENTRY_TO_CONN(c) (TO_CONN(ENTRY_TO_EDGE_CONN(c)))
616
617typedef struct addr_policy_t addr_policy_t;
618
619typedef struct cached_dir_t cached_dir_t;
620
621/** Enum used to remember where a signed_descriptor_t is stored and how to
622 * manage the memory for signed_descriptor_body. */
623typedef enum {
624 /** The descriptor isn't stored on disk at all: the copy in memory is
625 * canonical; the saved_offset field is meaningless. */
627 /** The descriptor is stored in the cached_routers file: the
628 * signed_descriptor_body is meaningless; the signed_descriptor_len and
629 * saved_offset are used to index into the mmaped cache file. */
631 /** The descriptor is stored in the cached_routers.new file: the
632 * signed_descriptor_body and saved_offset fields are both set. */
633 /* FFFF (We could also mmap the file and grow the mmap as needed, or
634 * lazy-load the descriptor text by using seek and read. We don't, for
635 * now.)
636 */
639#define saved_location_bitfield_t ENUM_BF(saved_location_t)
640
641/** Enumeration: what directory object is being downloaded?
642 * This determines which schedule is selected to perform the download. */
643typedef enum {
644 DL_SCHED_GENERIC = 0,
645 DL_SCHED_CONSENSUS = 1,
646 DL_SCHED_BRIDGE = 2,
648#define download_schedule_bitfield_t ENUM_BF(download_schedule_t)
649
650/** Enumeration: is the download schedule for downloading from an authority,
651 * or from any available directory mirror?
652 * During bootstrap, "any" means a fallback (or an authority, if there
653 * are no fallbacks).
654 * When we have a valid consensus, "any" means any directory server. */
655typedef enum {
656 DL_WANT_ANY_DIRSERVER = 0,
657 DL_WANT_AUTHORITY = 1,
659#define download_want_authority_bitfield_t \
660 ENUM_BF(download_want_authority_t)
661
662/** Enumeration: do we want to increment the schedule position each time a
663 * connection is attempted (these attempts can be concurrent), or do we want
664 * to increment the schedule position after a connection fails? */
665typedef enum {
666 DL_SCHED_INCREMENT_FAILURE = 0,
667 DL_SCHED_INCREMENT_ATTEMPT = 1,
669#define download_schedule_increment_bitfield_t \
670 ENUM_BF(download_schedule_increment_t)
671
673
674/** If n_download_failures is this high, the download can never happen. */
675#define IMPOSSIBLE_TO_DOWNLOAD 255
676
677/** The max size we expect router descriptor annotations we create to
678 * be. We'll accept larger ones if we see them on disk, but we won't
679 * create any that are larger than this. */
680#define ROUTER_ANNOTATION_BUF_LEN 256
681
683
684/** Flags used to summarize the declared protocol versions of a relay,
685 * so we don't need to parse them again and again. */
687 /** True iff we have a proto line for this router, or a versions line
688 * from which we could infer the protocols. */
689 unsigned int protocols_known:1;
690
691 /** True iff this router has a version or protocol list that allows it to
692 * accept EXTEND2 cells. This requires Relay=2. */
694
695 /** True iff this router has a version or protocol list that allows it to
696 * accept IPv6 connections. This requires Relay=2 or Relay=3. */
698
699 /** True iff this router has a version or protocol list that allows it to
700 * initiate IPv6 connections. This requires Relay=3. */
702
703 /** True iff this router has a version or protocol list that allows it to
704 * consider IPv6 connections canonical. This requires Relay=3. */
706
707 /** True iff this router has a protocol list that allows it to negotiate
708 * ed25519 identity keys on a link handshake with us. This
709 * requires LinkAuth=3. */
711
712 /** True iff this router has a protocol list that allows it to negotiate
713 * ed25519 identity keys on a link handshake, at all. This requires some
714 * LinkAuth=X for X >= 3. */
716
717 /** True iff this router has a protocol list that allows it to be an
718 * introduction point supporting ed25519 authentication key which is part of
719 * the v3 protocol detailed in proposal 224. This requires HSIntro=4. */
721
722 /** True iff this router has a protocol list that allows it to support the
723 * ESTABLISH_INTRO DoS cell extension. Requires HSIntro=5. */
725
726 /** True iff this router has a protocol list that allows it to be an hidden
727 * service directory supporting version 3 as seen in proposal 224. This
728 * requires HSDir=2. */
729 unsigned int supports_v3_hsdir : 1;
730
731 /** True iff this router has a protocol list that allows it to be an hidden
732 * service rendezvous point supporting version 3 as seen in proposal 224.
733 * This requires HSRend=2. */
735
736 /** True iff this router has a protocol list that allows clients to
737 * negotiate hs circuit setup padding. Requires Padding=2. */
739
740 /** True iff this router supports congestion control.
741 * Requires both FlowCtrl=2 *and* Relay=4 */
743
744 /** True iff this router supports conflux. Requires Relay=5 */
745 unsigned int supports_conflux : 1;
747
748typedef struct routerinfo_t routerinfo_t;
749typedef struct extrainfo_t extrainfo_t;
750typedef struct routerstatus_t routerstatus_t;
751
752typedef struct microdesc_t microdesc_t;
753typedef struct node_t node_t;
759
760/** Enumerates recognized flavors of a consensus networkstatus document. All
761 * flavors of a consensus are generated from the same set of votes, but they
762 * present different types information to different versions of Tor. */
763typedef enum {
764 FLAV_NS = 0,
765 FLAV_MICRODESC = 1,
767
768/** How many different consensus flavors are there? */
769#define N_CONSENSUS_FLAVORS ((int)(FLAV_MICRODESC)+1)
770
771typedef struct networkstatus_t networkstatus_t;
773typedef struct desc_store_t desc_store_t;
774typedef struct routerlist_t routerlist_t;
775typedef struct extend_info_t extend_info_t;
777
778/** Bitfield enum type listing types of information that directory authorities
779 * can be authoritative about, and that directory caches may or may not cache.
780 *
781 * Note that the granularity here is based on authority granularity and on
782 * cache capabilities. Thus, one particular bit may correspond in practice to
783 * a few types of directory info, so long as every authority that pronounces
784 * officially about one of the types prounounces officially about all of them,
785 * and so long as every cache that caches one of them caches all of them.
786 */
787typedef enum {
788 NO_DIRINFO = 0,
789 /** Serves/signs v3 directory information: votes, consensuses, certs */
790 V3_DIRINFO = 1 << 2,
791 /** Serves bridge descriptors. */
793 /** Serves extrainfo documents. */
795 /** Serves microdescriptors. */
798
799#define ALL_DIRINFO ((dirinfo_type_t)((1<<7)-1))
800
801#define ONION_HANDSHAKE_TYPE_TAP 0x0000
802#define ONION_HANDSHAKE_TYPE_FAST 0x0001
803#define ONION_HANDSHAKE_TYPE_NTOR 0x0002
804#define ONION_HANDSHAKE_TYPE_NTOR_V3 0x0003
805#define MAX_ONION_HANDSHAKE_TYPE 0x0003
806
808typedef struct relay_crypto_t relay_crypto_t;
809typedef struct crypt_path_t crypt_path_t;
811
812#define CPATH_KEY_MATERIAL_LEN (20*2+16*2)
813
815
816struct create_cell_t;
817
818/** Entry in the cell stats list of a circuit; used only if CELL_STATS
819 * events are enabled. */
821 uint8_t command; /**< cell command number. */
822 /** Waiting time in centiseconds if this event is for a removed cell,
823 * or 0 if this event is for adding a cell to the queue. 22 bits can
824 * store more than 11 hours, enough to assume that a circuit with this
825 * delay would long have been closed. */
826 unsigned int waiting_time:22;
827 unsigned int removed:1; /**< 0 for added to, 1 for removed from queue. */
828 unsigned int exitward:1; /**< 0 for app-ward, 1 for exit-ward. */
830
831typedef struct circuit_t circuit_t;
833typedef struct or_circuit_t or_circuit_t;
834
835/** Largest number of relay_early cells that we can send on a given
836 * circuit. */
837#define MAX_RELAY_EARLY_CELLS_PER_CIRCUIT 8
838
839typedef enum path_state_t path_state_t;
840#define path_state_bitfield_t ENUM_BF(path_state_t)
841
842#if REND_COOKIE_LEN != DIGEST_LEN
843#error "The REND_TOKEN_LEN macro assumes REND_COOKIE_LEN == DIGEST_LEN"
844#endif
845#define REND_TOKEN_LEN DIGEST_LEN
846
847/** Convert a circuit subtype to a circuit_t. */
848#define TO_CIRCUIT(x) (&((x)->base_))
849
850/** @name Isolation flags
851
852 Ways to isolate client streams
853
854 @{
855*/
856/** Isolate based on destination port */
857#define ISO_DESTPORT (1u<<0)
858/** Isolate based on destination address */
859#define ISO_DESTADDR (1u<<1)
860/** Isolate based on SOCKS authentication */
861#define ISO_SOCKSAUTH (1u<<2)
862/** Isolate based on client protocol choice */
863#define ISO_CLIENTPROTO (1u<<3)
864/** Isolate based on client address */
865#define ISO_CLIENTADDR (1u<<4)
866/** Isolate based on session group (always on). */
867#define ISO_SESSIONGRP (1u<<5)
868/** Isolate based on newnym epoch (always on). */
869#define ISO_NYM_EPOCH (1u<<6)
870/** Isolate all streams (Internal only). */
871#define ISO_STREAM (1u<<7)
872/**@}*/
873
874/** Default isolation level for ports. */
875#define ISO_DEFAULT (ISO_CLIENTADDR|ISO_SOCKSAUTH|ISO_SESSIONGRP|ISO_NYM_EPOCH)
876
877/** Indicates that we haven't yet set a session group on a port_cfg_t. */
878#define SESSION_GROUP_UNSET -1
879/** Session group reserved for directory connections */
880#define SESSION_GROUP_DIRCONN -2
881/** Session group reserved for resolve requests launched by a controller */
882#define SESSION_GROUP_CONTROL_RESOLVE -3
883/** First automatically allocated session group number */
884#define SESSION_GROUP_FIRST_AUTO -4
885
886typedef struct port_cfg_t port_cfg_t;
887typedef struct routerset_t routerset_t;
888
889/** A magic value for the (Socks|OR|...)Port options below, telling Tor
890 * to pick its own port. */
891#define CFG_AUTO_PORT 0xc4005e
892
893typedef struct or_options_t or_options_t;
894
895typedef struct or_state_t or_state_t;
896
897#define MAX_SOCKS_ADDR_LEN 256
898
899/********************************* circuitbuild.c **********************/
900
901/** How many hops does a general-purpose circuit have by default? */
902#define DEFAULT_ROUTE_LEN 3
903
904/* Circuit Build Timeout "public" structures. */
905
906/** Precision multiplier for the Bw weights */
907#define BW_WEIGHT_SCALE 10000
908#define BW_MIN_WEIGHT_SCALE 1
909#define BW_MAX_WEIGHT_SCALE INT32_MAX
910
912
913/********************************* config.c ***************************/
914
915/********************************* connection_edge.c *************************/
916
917/** Enumerates possible origins of a client-side address mapping. */
918typedef enum {
919 /** We're remapping this address because the controller told us to. */
921 /** We're remapping this address because of an AutomapHostsOnResolve
922 * configuration. */
924 /** We're remapping this address because our configuration (via torrc, the
925 * command line, or a SETCONF command) told us to. */
927 /** We're remapping this address because we have TrackHostExit configured,
928 * and we want to remember to use the same exit next time. */
930 /** We're remapping this address because we got a DNS resolution from a
931 * Tor server that told us what its value was. */
933
934 /** No remapping has occurred. This isn't a possible value for an
935 * addrmap_entry_t; it's used as a null value when we need to answer "Why
936 * did this remapping happen." */
939#define addressmap_entry_source_bitfield_t ENUM_BF(addressmap_entry_source_t)
940
941#define WRITE_STATS_INTERVAL (24*60*60)
942
943/********************************* dirvote.c ************************/
944
945typedef struct vote_timing_t vote_timing_t;
946
947/********************************* microdesc.c *************************/
948
950
951/** The maximum number of non-circuit-build-timeout failures a hidden
952 * service client will tolerate while trying to build a circuit to an
953 * introduction point. */
954#define MAX_INTRO_POINT_REACHABILITY_FAILURES 5
955
956/** The minimum and maximum number of distinct INTRODUCE2 cells which a
957 * hidden service's introduction point will receive before it begins to
958 * expire. */
959#define INTRO_POINT_MIN_LIFETIME_INTRODUCTIONS 16384
960/* Double the minimum value so the interval is [min, min * 2]. */
961#define INTRO_POINT_MAX_LIFETIME_INTRODUCTIONS \
962 (INTRO_POINT_MIN_LIFETIME_INTRODUCTIONS * 2)
963
964/** The minimum number of seconds that an introduction point will last
965 * before expiring due to old age. (If it receives
966 * INTRO_POINT_LIFETIME_INTRODUCTIONS INTRODUCE2 cells, it may expire
967 * sooner.)
968 *
969 * XXX Should this be configurable? */
970#define INTRO_POINT_LIFETIME_MIN_SECONDS (18*60*60)
971/** The maximum number of seconds that an introduction point will last
972 * before expiring due to old age.
973 *
974 * XXX Should this be configurable? */
975#define INTRO_POINT_LIFETIME_MAX_SECONDS (24*60*60)
976
977/** The maximum number of circuit creation retry we do to an intro point
978 * before giving up. We try to reuse intro point that fails during their
979 * lifetime so this is a hard limit on the amount of time we do that. */
980#define MAX_INTRO_POINT_CIRCUIT_RETRIES 3
981
982/********************************* routerlist.c ***************************/
983
984typedef struct dir_server_t dir_server_t;
985
986#define RELAY_REQUIRED_MIN_BANDWIDTH (75*1024)
987#define BRIDGE_REQUIRED_MIN_BANDWIDTH (50*1024)
988
989#define ROUTER_MAX_DECLARED_BANDWIDTH INT32_MAX
990
991typedef struct tor_version_t tor_version_t;
992
993#endif /* !defined(TOR_OR_H) */
Headers for address.h.
Header for addsub.c.
Header for approx_time.c.
Header for binascii.c.
Header for bits.c.
Header file for buffers.c.
Inline functions for reading and writing multibyte values from the middle of strings,...
Macro definitions for MIN, MAX, and CLAMP.
Utility macros to handle different features and behavior in different compilers.
Locale-independent character-type inspection (header)
Header for compat_string.c.
Functions and types for monotonic times.
Country type for geoip.
Headers for crypto_cipher.c.
Headers for crypto_rsa.c.
Header for cstring.c.
Definitions for sizes of Diffie-Hellman groups elements in Z_p.
Headers for di_ops.c.
Header for dir.c.
Configuration structure for client ports.
Header for escape.c.
Wrappers for reading and writing data to files on disk.
Header for inaddr.c.
Macros for comparing the boolean value of integers.
Headers for util_malloc.c.
Headers for map.c.
Header for mmap.c.
Header for muldiv.c.
saved_location_t
Definition: or.h:623
@ SAVED_IN_JOURNAL
Definition: or.h:637
@ SAVED_NOWHERE
Definition: or.h:626
@ SAVED_IN_CACHE
Definition: or.h:630
#define VAR_CELL_MAX_HEADER_SIZE
Definition: or.h:471
addressmap_entry_source_t
Definition: or.h:918
@ ADDRMAPSRC_TRACKEXIT
Definition: or.h:929
@ ADDRMAPSRC_AUTOMAP
Definition: or.h:923
@ ADDRMAPSRC_NONE
Definition: or.h:937
@ ADDRMAPSRC_CONTROLLER
Definition: or.h:920
@ ADDRMAPSRC_DNS
Definition: or.h:932
@ ADDRMAPSRC_TORRC
Definition: or.h:926
#define CELL_MAX_NETWORK_SIZE
Definition: or.h:468
uint32_t circid_t
Definition: or.h:497
uint16_t streamid_t
Definition: or.h:499
download_want_authority_t
Definition: or.h:655
rend_auth_type_t
Definition: or.h:356
download_schedule_t
Definition: or.h:643
cell_direction_t
Definition: or.h:375
@ CELL_DIRECTION_OUT
Definition: or.h:377
@ CELL_DIRECTION_IN
Definition: or.h:376
consensus_flavor_t
Definition: or.h:763
dirinfo_type_t
Definition: or.h:787
@ V3_DIRINFO
Definition: or.h:790
@ BRIDGE_DIRINFO
Definition: or.h:792
@ EXTRAINFO_DIRINFO
Definition: or.h:794
@ MICRODESC_DIRINFO
Definition: or.h:796
download_schedule_increment_t
Definition: or.h:665
circuit_channel_direction_t
Definition: or.h:387
path_state_t
Header for parse_int.c.
Header for path.c.
Header for printf.c.
Summarize similar messages that would otherwise flood the logs.
Header for scanf.c.
Header for smartlist.c.
Header for socket.c.
Definition: cell_st.h:17
Definition: node_st.h:34
unsigned int supports_extend2_cells
Definition: or.h:693
unsigned int supports_ed25519_link_handshake_compat
Definition: or.h:710
unsigned int supports_v3_rendezvous_point
Definition: or.h:734
unsigned int supports_hs_setup_padding
Definition: or.h:738
unsigned int supports_initiating_ipv6_extends
Definition: or.h:701
unsigned int supports_v3_hsdir
Definition: or.h:729
unsigned int supports_ed25519_link_handshake_any
Definition: or.h:715
unsigned int supports_congestion_control
Definition: or.h:742
unsigned int supports_canonical_ipv6_conns
Definition: or.h:705
unsigned int supports_conflux
Definition: or.h:745
unsigned int protocols_known
Definition: or.h:689
unsigned int supports_accepting_ipv6_extends
Definition: or.h:697
unsigned int supports_ed25519_hs_intro
Definition: or.h:720
unsigned int supports_establish_intro_dos_extension
Definition: or.h:724
uint16_t length
Definition: or.h:531
uint8_t command
Definition: or.h:527
streamid_t stream_id
Definition: or.h:529
uint16_t recognized
Definition: or.h:528
Definition: or.h:820
uint8_t command
Definition: or.h:821
unsigned int waiting_time
Definition: or.h:826
unsigned int exitward
Definition: or.h:828
unsigned int removed
Definition: or.h:827
Macros to implement mocking and selective exposure for the test code.
Header for threads.c.
Definitions for timing-related constants.
Header for time_fmt.c.
Declarations for timeval-related macros that some platforms are missing.
Headers for torerr.c.
Integer definitions used throughout Tor.
Header for userdb.c.
Macros to manage assertions, fatal and non-fatal.
Header for util_string.c.