From 60efce445b17d4b4153e91527887873812f5599f Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 22 Feb 2016 10:07:42 -0500 Subject: [PATCH] Enable ed25519 collator in voting. Previously, I had left in some debugging code with /*XXX*/ after it, which nobody noticed. Live and learn! Next time I will use /*XXX DO NOT COMMIT*/ or something. We need to define a new consensus method for this; consensus method 21 shouldn't actually be used. Fixes bug 17702; bugfix on 0.2.7.2-alpha. --- changes/bug17702 | 6 ++++++ src/or/dircollate.c | 2 +- src/or/dirvote.c | 7 +++++++ src/or/dirvote.h | 7 ++++--- 4 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 changes/bug17702 diff --git a/changes/bug17702 b/changes/bug17702 new file mode 100644 index 0000000000..4fda36f736 --- /dev/null +++ b/changes/bug17702 @@ -0,0 +1,6 @@ + o Major bugfixes: + - Actually enable Ed25519-based directory collation. + Previously, the code had been written, but some debugging code that had + accidentally been left in the codebase made it stay turned off. + Fixes bug 17702; bugfix on 0.2.7.2-alpha. + diff --git a/src/or/dircollate.c b/src/or/dircollate.c index 4c812c40e6..f56aea8c64 100644 --- a/src/or/dircollate.c +++ b/src/or/dircollate.c @@ -159,7 +159,7 @@ dircollator_collate(dircollator_t *dc, int consensus_method) tor_assert(!dc->is_collated); dc->all_rsa_sha1_lst = smartlist_new(); - if (consensus_method < MIN_METHOD_FOR_ED25519_ID_VOTING + 10/*XXX*/) + if (consensus_method < MIN_METHOD_FOR_ED25519_ID_VOTING) dircollator_collate_by_rsa(dc); else dircollator_collate_by_ed25519(dc); diff --git a/src/or/dirvote.c b/src/or/dirvote.c index d8e6ee2229..be0635d92b 100644 --- a/src/or/dirvote.c +++ b/src/or/dirvote.c @@ -558,6 +558,13 @@ compute_consensus_method(smartlist_t *votes) static int consensus_method_is_supported(int method) { + if (method == MIN_METHOD_FOR_ED25519_ID_IN_MD) { + /* This method was broken due to buggy code accidently left in + * dircollate.c; do not actually use it. + */ + return 0; + } + return (method >= MIN_SUPPORTED_CONSENSUS_METHOD) && (method <= MAX_SUPPORTED_CONSENSUS_METHOD); } diff --git a/src/or/dirvote.h b/src/or/dirvote.h index dca8540870..50c2496bb0 100644 --- a/src/or/dirvote.h +++ b/src/or/dirvote.h @@ -55,7 +55,7 @@ #define MIN_SUPPORTED_CONSENSUS_METHOD 13 /** The highest consensus method that we currently support. */ -#define MAX_SUPPORTED_CONSENSUS_METHOD 21 +#define MAX_SUPPORTED_CONSENSUS_METHOD 22 /** Lowest consensus method where microdesc consensuses omit any entry * with no microdesc. */ @@ -87,11 +87,12 @@ #define MIN_METHOD_FOR_GUARDFRACTION 20 /** Lowest consensus method where authorities may include an "id" line for - * ed25519 identities in microdescriptors. */ + * ed25519 identities in microdescriptors. (Broken; see + * consensus_method_is_supported() for more info.) */ #define MIN_METHOD_FOR_ED25519_ID_IN_MD 21 /** Lowest consensus method where authorities vote on ed25519 ids and ensure * ed25519 id consistency. */ -#define MIN_METHOD_FOR_ED25519_ID_VOTING MIN_METHOD_FOR_ED25519_ID_IN_MD +#define MIN_METHOD_FOR_ED25519_ID_VOTING 22 /** Default bandwidth to clip unmeasured bandwidths to using method >= * MIN_METHOD_TO_CLIP_UNMEASURED_BW. (This is not a consensus method; do not