diff options
Diffstat (limited to 'src/feature/nodelist/nodelist.c')
-rw-r--r-- | src/feature/nodelist/nodelist.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/feature/nodelist/nodelist.c b/src/feature/nodelist/nodelist.c index 75a08fe752..1a123f1ce7 100644 --- a/src/feature/nodelist/nodelist.c +++ b/src/feature/nodelist/nodelist.c @@ -1761,6 +1761,37 @@ node_get_curve25519_onion_key(const node_t *node) return NULL; } +/* Return a newly allocacted RSA onion public key taken from the given node. + * + * Return NULL if node is NULL or no RSA onion public key can be found. It is + * the caller responsability to free the returned object. */ +crypto_pk_t * +node_get_rsa_onion_key(const node_t *node) +{ + crypto_pk_t *pk = NULL; + const char *onion_pkey; + size_t onion_pkey_len; + + if (!node) { + goto end; + } + + if (node->ri) { + onion_pkey = node->ri->onion_pkey; + onion_pkey_len = node->ri->onion_pkey_len; + } else if (node->rs && node->md) { + onion_pkey = node->md->onion_pkey; + onion_pkey_len = node->md->onion_pkey_len; + } else { + /* No descriptor or microdescriptor. */ + goto end; + } + pk = router_get_rsa_onion_pkey(onion_pkey, onion_pkey_len); + + end: + return pk; +} + /** Refresh the country code of <b>ri</b>. This function MUST be called on * each router when the GeoIP database is reloaded, and on all new routers. */ void |