summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/or/nodelist.c12
-rw-r--r--src/or/nodelist.h2
2 files changed, 14 insertions, 0 deletions
diff --git a/src/or/nodelist.c b/src/or/nodelist.c
index 1f993e4595..d8d2dbbfd4 100644
--- a/src/or/nodelist.c
+++ b/src/or/nodelist.c
@@ -671,6 +671,18 @@ node_get_ed25519_id(const node_t *node)
return NULL;
}
+/** Return true iff this node's Ed25519 identity matches <b>id</b>.
+ * (An absent Ed25519 identity matches NULL or zero.) */
+int
+node_ed25519_id_matches(const node_t *node, const ed25519_public_key_t *id)
+{
+ const ed25519_public_key_t *node_id = node_get_ed25519_id(node);
+ if (node_id == NULL || ed25519_public_key_is_zero(node_id)) {
+ return id == NULL || ed25519_public_key_is_zero(id);
+ } else {
+ return id && ed25519_pubkey_eq(node_id, id);
+ }
+}
/** Return true iff <b>node</b> supports authenticating itself
* by ed25519 ID during the link handshake in a way that we can understand
diff --git a/src/or/nodelist.h b/src/or/nodelist.h
index 57c3b43228..31fdc64663 100644
--- a/src/or/nodelist.h
+++ b/src/or/nodelist.h
@@ -56,6 +56,8 @@ long node_get_declared_uptime(const node_t *node);
time_t node_get_published_on(const node_t *node);
const smartlist_t *node_get_declared_family(const node_t *node);
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);
const uint8_t *node_get_rsa_id_digest(const node_t *node);