nodelist: Add functions to check for HS v3 support

This introduces node_supports_v3_hsdir() and node_supports_ed25519_hs_intro()
that checks the routerstatus_t of a node and if not present, checks the
routerinfo_t.

This is groundwork for proposal 224 service implementation in #20657.

Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
David Goulet 2017-05-02 15:50:33 -04:00
parent f6df433b91
commit c17a04376d
2 changed files with 44 additions and 0 deletions

View file

@ -707,6 +707,48 @@ node_supports_ed25519_link_authentication(const node_t *node)
return 0;
}
/** Return true iff <b>node</b> supports the hidden service directory version
* 3 protocol (proposal 224). */
int
node_supports_v3_hsdir(const node_t *node)
{
tor_assert(node);
if (node->rs) {
return node->rs->supports_v3_hsdir;
}
if (node->ri) {
if (node->ri->protocol_list == NULL) {
return 0;
}
return protocol_list_supports_protocol(node->ri->protocol_list,
PRT_HSDIR, 2);
}
tor_assert_nonfatal_unreached_once();
return 0;
}
/** Return true iff <b>node</b> supports ed25519 authentication as an hidden
* service introduction point.*/
int
node_supports_ed25519_hs_intro(const node_t *node)
{
tor_assert(node);
if (node->rs) {
return node->rs->supports_ed25519_hs_intro;
}
if (node->ri) {
if (node->ri->protocol_list == NULL) {
return 0;
}
return protocol_list_supports_protocol(node->ri->protocol_list,
PRT_HSINTRO, 4);
}
tor_assert_nonfatal_unreached_once();
return 0;
}
/** Return the RSA ID key's SHA1 digest for the provided node. */
const uint8_t *
node_get_rsa_id_digest(const node_t *node)

View file

@ -58,6 +58,8 @@ const ed25519_public_key_t *node_get_ed25519_id(const node_t *node);
int node_ed25519_id_matches(const node_t *node,
const ed25519_public_key_t *id);
int node_supports_ed25519_link_authentication(const node_t *node);
int node_supports_v3_hsdir(const node_t *node);
int node_supports_ed25519_hs_intro(const node_t *node);
const uint8_t *node_get_rsa_id_digest(const node_t *node);
int node_has_ipv6_addr(const node_t *node);