diff --git a/changes/feature20552 b/changes/feature20552 new file mode 100644 index 0000000000000000000000000000000000000000..11954807a7eaf5df7d27629ddd73105e1c5515e6 --- /dev/null +++ b/changes/feature20552 @@ -0,0 +1,4 @@ + o Minor features (ed25519 link handshake): + - Advertise support for the ed25519 link handshake using the + subprotocol-versions mechanism, so that clients can tell which + relays can identity themselves by Ed25519 ID. diff --git a/src/or/or.h b/src/or/or.h index a43e2a33cdfb7344850e7aba892ee495f2d2bc07..eb94f63d5e758b949778a5e3fd8ae0bf860912d6 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2265,6 +2265,10 @@ typedef struct routerstatus_t { * accept EXTEND2 cells */ unsigned int supports_extend2_cells:1; + /** True iff this router has a protocol list that allows it to negotiate + * ed25519 identity keys on a link handshake. */ + unsigned int supports_ed25519_link_handshake:1; + unsigned int has_bandwidth:1; /**< The vote/consensus had bw info */ unsigned int has_exitsummary:1; /**< The vote/consensus had exit summaries */ unsigned int bw_is_unmeasured:1; /**< This is a consensus entry, with diff --git a/src/or/protover.c b/src/or/protover.c index 6c2da165f74752c6f85f67119484cb813f48fd5f..5972e61be75098f73f3298eff60af9c1c854d095 100644 --- a/src/or/protover.c +++ b/src/or/protover.c @@ -293,7 +293,7 @@ protover_get_supported_protocols(void) "HSIntro=3 " "HSRend=1-2 " "Link=1-4 " - "LinkAuth=1 " + "LinkAuth=1,3 " "Microdesc=1-2 " "Relay=1-2"; } diff --git a/src/or/routerparse.c b/src/or/routerparse.c index b391e88f22b5d4dce0e064a13920e30c622116f9..2cfd3fc58a4ce1e5e37b057b91499c737bfe16c2 100644 --- a/src/or/routerparse.c +++ b/src/or/routerparse.c @@ -2682,6 +2682,8 @@ routerstatus_parse_entry_from_string(memarea_t *area, rs->protocols_known = 1; rs->supports_extend2_cells = protocol_list_supports_protocol(tok->args[0], PRT_RELAY, 2); + rs->supports_ed25519_link_handshake = + protocol_list_supports_protocol(tok->args[0], PRT_LINKAUTH, 3); } if ((tok = find_opt_by_keyword(tokens, K_V))) { tor_assert(tok->n_args == 1);