]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
prop224: Improve comments and tests for ed25519 keys in IPs/RPs.
authorGeorge Kadianakis <desnacked@riseup.net>
Mon, 7 Aug 2017 13:17:33 +0000 (16:17 +0300)
committerNick Mathewson <nickm@torproject.org>
Wed, 9 Aug 2017 00:29:35 +0000 (20:29 -0400)
Also make sure we are not gonna advertise the ed25519 key of an intro
point that doesn't support it.

src/or/hs_circuit.c
src/or/hs_descriptor.c
src/or/hs_service.c

index 43906619d7d3b82dbee55721ce430df62a065a50..f6594739bc794d68e6d3b87dfec9b9dc8eecdb31 100644 (file)
@@ -405,7 +405,8 @@ get_rp_extend_info(const smartlist_t *link_specifiers,
     }
   } SMARTLIST_FOREACH_END(ls);
 
-  /* IPv4, legacy ID and ed25519 are mandatory. */
+  /* IPv4, legacy ID are mandatory for rend points.
+   * ed25519 keys and ipv6 are optional for rend points */
   if (!have_v4 || !have_legacy_id) {
     goto done;
   }
index 3e8343691eff4af6d5ca32737e64d0a2e9ddc1f9..9a1e377155c822ecc1a6cbff230c499bf33c83f8 100644 (file)
@@ -2510,6 +2510,7 @@ hs_desc_link_specifier_new(const extend_info_t *info, uint8_t type)
     memcpy(ls->u.legacy_id, info->identity_digest, sizeof(ls->u.legacy_id));
     break;
   case LS_ED25519_ID:
+    /* ed25519 keys are optional for intro points */
     if (ed25519_public_key_is_zero(&info->ed_identity)) {
       goto err;
     }
index 6cb24a19af1f45277f3ebef146737e86960103d0..4c0ec628cc0193686f60a2bf4930cd4384c3411e 100644 (file)
@@ -405,7 +405,7 @@ service_intro_point_new(const extend_info_t *ei, unsigned int is_legacy)
   }
   smartlist_add(ip->base.link_specifiers, ls);
 
-  /* ed25519 identity key is optional */
+  /* ed25519 identity key is optional for intro points */
   ls = hs_desc_link_specifier_new(ei, LS_ED25519_ID);
   if (ls) {
     smartlist_add(ip->base.link_specifiers, ls);
@@ -1411,6 +1411,14 @@ pick_intro_point(unsigned int direct_conn, smartlist_t *exclude_nodes)
   if (BUG(info == NULL)) {
     goto err;
   }
+
+  /* Let's do a basic sanity check here so that we don't end up advertising the
+   * ed25519 identity key of relays that don't actually support the link
+   * protocol */
+  if (!node_supports_ed25519_link_authentication(node)) {
+    tor_assert_nonfatal(ed25519_public_key_is_zero(&info->ed_identity));
+  }
+
   /* Create our objects and populate them with the node information. */
   ip = service_intro_point_new(info, !node_supports_ed25519_hs_intro(node));
   if (ip == NULL) {