mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Merge branch 'prop221_squashed_024'
Conflicts: src/or/or.h
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
o Minor features:
|
||||
- Stop sending the CREATE_FAST cells by default; instead, use a
|
||||
parameter in the consensus to decide whether to use
|
||||
CREATE_FAST. This can improve security on connections where
|
||||
Tor's circuit handshake is stronger than the available TLS
|
||||
connection security levels. Implements proposal 221.
|
||||
+5
-3
@@ -1140,15 +1140,17 @@ The following options are useful only for clients (that is, if
|
||||
the node "foo". Disabled by default since attacking websites and exit
|
||||
relays can use it to manipulate your path selection. (Default: 0)
|
||||
|
||||
[[FastFirstHopPK]] **FastFirstHopPK** **0**|**1**::
|
||||
[[FastFirstHopPK]] **FastFirstHopPK** **0**|**1**|**auto**::
|
||||
When this option is disabled, Tor uses the public key step for the first
|
||||
hop of creating circuits. Skipping it is generally safe since we have
|
||||
already used TLS to authenticate the relay and to establish forward-secure
|
||||
keys. Turning this option off makes circuit building slower. +
|
||||
keys. Turning this option off makes circuit building a little
|
||||
slower. Setting this option to "auto" takes advice from the authorities
|
||||
in the latest consensus about whether to use this feature. +
|
||||
+
|
||||
Note that Tor will always use the public key step for the first hop if it's
|
||||
operating as a relay, and it will never use the public key step if it
|
||||
doesn't yet know the onion key of the first hop. (Default: 1)
|
||||
doesn't yet know the onion key of the first hop. (Default: auto)
|
||||
|
||||
[[TransPort]] **TransPort** \['address':]__port__|**auto** [_isolation flags_]::
|
||||
Open this port to listen for transparent proxy connections. Set this to
|
||||
|
||||
@@ -585,16 +585,18 @@ should_use_create_fast_for_circuit(origin_circuit_t *circ)
|
||||
|
||||
if (!circ->cpath->extend_info->onion_key)
|
||||
return 1; /* our hand is forced: only a create_fast will work. */
|
||||
if (!options->FastFirstHopPK)
|
||||
return 0; /* we prefer to avoid create_fast */
|
||||
if (public_server_mode(options)) {
|
||||
/* We're a server, and we know an onion key. We can choose.
|
||||
* Prefer to blend our circuit into the other circuits we are
|
||||
* creating on behalf of others. */
|
||||
return 0;
|
||||
}
|
||||
if (options->FastFirstHopPK == -1) {
|
||||
/* option is "auto", so look at the consensus. */
|
||||
return networkstatus_get_param(NULL, "usecreatefast", 1, 0, 1);
|
||||
}
|
||||
|
||||
return 1;
|
||||
return options->FastFirstHopPK;
|
||||
}
|
||||
|
||||
/** Return true if <b>circ</b> is the type of circuit we want to count
|
||||
|
||||
+5
-4
@@ -1378,10 +1378,11 @@ circuit_build_failed(origin_circuit_t *circ)
|
||||
failed_at_last_hop = 1;
|
||||
}
|
||||
if (circ->cpath &&
|
||||
circ->cpath->state != CPATH_STATE_OPEN) {
|
||||
/* We failed at the first hop. If there's an OR connection
|
||||
* to blame, blame it. Also, avoid this relay for a while, and
|
||||
* fail any one-hop directory fetches destined for it. */
|
||||
circ->cpath->state != CPATH_STATE_OPEN &&
|
||||
! circ->base_.received_destroy) {
|
||||
/* We failed at the first hop for some reason other than a DESTROY cell.
|
||||
* If there's an OR connection to blame, blame it. Also, avoid this relay
|
||||
* for a while, and fail any one-hop directory fetches destined for it. */
|
||||
const char *n_chan_id = circ->cpath->extend_info->identity_digest;
|
||||
int already_marked = 0;
|
||||
if (circ->base_.n_chan) {
|
||||
|
||||
@@ -526,6 +526,7 @@ command_process_destroy_cell(cell_t *cell, channel_t *chan)
|
||||
log_debug(LD_OR,"Received for circID %u.",(unsigned)cell->circ_id);
|
||||
|
||||
reason = (uint8_t)cell->payload[0];
|
||||
circ->received_destroy = 1;
|
||||
|
||||
if (!CIRCUIT_IS_ORIGIN(circ) &&
|
||||
cell->circ_id == TO_OR_CIRCUIT(circ)->p_circ_id) {
|
||||
|
||||
+1
-1
@@ -242,7 +242,7 @@ static config_var_t option_vars_[] = {
|
||||
OBSOLETE("FallbackNetworkstatusFile"),
|
||||
V(FascistFirewall, BOOL, "0"),
|
||||
V(FirewallPorts, CSV, ""),
|
||||
V(FastFirstHopPK, BOOL, "1"),
|
||||
V(FastFirstHopPK, AUTOBOOL, "auto"),
|
||||
V(FetchDirInfoEarly, BOOL, "0"),
|
||||
V(FetchDirInfoExtraEarly, BOOL, "0"),
|
||||
V(FetchServerDescriptors, BOOL, "1"),
|
||||
|
||||
@@ -2898,6 +2898,9 @@ typedef struct circuit_t {
|
||||
* it on the output buffer. */
|
||||
unsigned int n_delete_pending : 1;
|
||||
|
||||
/** True iff this circuit has received a DESTROY cell in either direction */
|
||||
unsigned int received_destroy : 1;
|
||||
|
||||
uint8_t state; /**< Current status of this circuit. */
|
||||
uint8_t purpose; /**< Why are we creating this circuit? */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user