Commit 4a621a50 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Consensus method 18: Add a base64 ID digest to the microdesc

This is a stopgap measure to make sure that microdescriptors never
collide; see bug 11743.
parent 5d496963
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -3588,6 +3588,12 @@ dirvote_create_microdescriptor(const routerinfo_t *ri, int consensus_method)
    tor_free(p6);
  }

  if (consensus_method >= MIN_METHOD_FOR_ID_HASH_IN_MD) {
    char idbuf[BASE64_DIGEST_LEN+1];
    digest_to_base64(idbuf, ri->cache_info.identity_digest);
    smartlist_add_asprintf(chunks, "id %s\n", idbuf);
  }

  output = smartlist_join_strings(chunks, "", 0, NULL);

  {
@@ -3657,7 +3663,8 @@ static const struct consensus_method_range_t {
  {MIN_METHOD_FOR_MICRODESC, MIN_METHOD_FOR_A_LINES - 1},
  {MIN_METHOD_FOR_A_LINES, MIN_METHOD_FOR_P6_LINES - 1},
  {MIN_METHOD_FOR_P6_LINES, MIN_METHOD_FOR_NTOR_KEY - 1},
  {MIN_METHOD_FOR_NTOR_KEY, MAX_SUPPORTED_CONSENSUS_METHOD},
  {MIN_METHOD_FOR_NTOR_KEY, MIN_METHOD_FOR_ID_HASH_IN_MD - 1},
  {MIN_METHOD_FOR_ID_HASH_IN_MD,  MAX_SUPPORTED_CONSENSUS_METHOD},
  {-1, -1}
};

+5 −1
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@
#define MIN_VOTE_INTERVAL 300

/** The highest consensus method that we currently support. */
#define MAX_SUPPORTED_CONSENSUS_METHOD 17
#define MAX_SUPPORTED_CONSENSUS_METHOD 18

/** Lowest consensus method that contains a 'directory-footer' marker */
#define MIN_METHOD_FOR_FOOTER 9
@@ -61,6 +61,10 @@
 * Unmeasured=1 flag for unmeasured bandwidths */
#define MIN_METHOD_TO_CLIP_UNMEASURED_BW 17

/** Lowest consensus method that ensures that authorities output an
 * Unmeasured=1 flag for unmeasured bandwidths */
#define MIN_METHOD_FOR_ID_HASH_IN_MD 18

/** Default bandwidth to clip unmeasured bandwidths to using method >=
 * MIN_METHOD_TO_CLIP_UNMEASURED_BW */
#define DEFAULT_MAX_UNMEASURED_BW_KB 20