diff options
author | Nick Mathewson <nickm@torproject.org> | 2016-10-28 11:15:21 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2016-12-08 16:47:58 -0500 |
commit | 9e840e6c7d10a3dfa188d2186ce3c67ca1d698f5 (patch) | |
tree | 9361f0c7dc0663997200df0366bac68984916afd /src/or | |
parent | 6788418f28930467121537f31c4b43f981ae6ca8 (diff) | |
download | tor-9e840e6c7d10a3dfa188d2186ce3c67ca1d698f5.tar.gz tor-9e840e6c7d10a3dfa188d2186ce3c67ca1d698f5.zip |
Add ExtendByEd25519ID consensus parameter/torrc option
I need to be able to turn on Ed25519 support in client generation
of extend cells so I can test it, but leave it off-by-default until
enough clients support it for us to turn it on for a bunch at once.
This is part of #15056 / prop#220.
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/circuitbuild.c | 4 | ||||
-rw-r--r-- | src/or/config.c | 1 | ||||
-rw-r--r-- | src/or/onion.c | 15 | ||||
-rw-r--r-- | src/or/or.h | 4 |
4 files changed, 22 insertions, 2 deletions
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index e833fcba7c..bdbbacd3ec 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -1043,8 +1043,8 @@ circuit_send_next_onion_skin(origin_circuit_t *circ) ec.orport_ipv4.port = hop->extend_info->port; tor_addr_make_unspec(&ec.orport_ipv6.addr); memcpy(ec.node_id, hop->extend_info->identity_digest, DIGEST_LEN); - /* 15056 Either here or in the onion.c encoding code, we should make an - * option to decide whether we declare the ED identity (if we know one) */ + /* Set the ED25519 identity too -- it will only get included + * in the extend2 cell if we're configured to use it, though. */ memcpy(&ec.ed_pubkey, &hop->extend_info->ed_identity, sizeof(ed25519_public_key_t)); diff --git a/src/or/config.c b/src/or/config.c index 9553822ba3..51c62908e3 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -305,6 +305,7 @@ static config_var_t option_vars_[] = { V(ExtORPortCookieAuthFile, STRING, NULL), V(ExtORPortCookieAuthFileGroupReadable, BOOL, "0"), V(ExtraInfoStatistics, BOOL, "1"), + V(ExtendByEd25519ID, AUTOBOOL, "auto"), V(FallbackDir, LINELIST, NULL), V(UseDefaultFallbackDirs, BOOL, "1"), diff --git a/src/or/onion.c b/src/or/onion.c index f49707f07a..8e0896f360 100644 --- a/src/or/onion.c +++ b/src/or/onion.c @@ -1170,6 +1170,21 @@ created_cell_format(cell_t *cell_out, const created_cell_t *cell_in) return 0; } +/** Return true iff we are configured (by torrc or by the networkstatus + * parameters) to use Ed25519 identities in our Extend2 cells. */ +static int +should_include_ed25519_id_extend_cells(const networkstatus_t *ns, + const or_options_t *options) +{ + if (options->ExtendByEd25519ID != -1) + return options->ExtendByEd25519ID; /* The user has an opinion. */ + + return (int) networkstatus_get_param(ns, "ExtendByEd25519ID", + 0 /* default */, + 0 /* min */, + 1 /*max*/); +} + /** Format the EXTEND{,2} cell in <b>cell_in</b>, storing its relay payload in * <b>payload_out</b>, the number of bytes used in *<b>len_out</b>, and the * relay command in *<b>command_out</b>. The <b>payload_out</b> must have diff --git a/src/or/or.h b/src/or/or.h index 32c194a7a8..0ebeda285a 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -4571,6 +4571,10 @@ typedef struct { /** If 1, we skip all OOS checks. */ int DisableOOSCheck; + + /** Autobool: Should we include Ed25519 identities in extend2 cells? + * If -1, we should do whatever the consensus parameter says. */ + int ExtendByEd25519ID; } or_options_t; /** Persistent state for an onion router, as saved to disk. */ |