|
@@ -131,7 +131,8 @@ get_onion_key(void)
|
|
|
}
|
|
|
|
|
|
/** Store a full copy of the current onion key into *<b>key</b>, and a full
|
|
|
- * copy of the most recent onion key into *<b>last</b>.
|
|
|
+ * copy of the most recent onion key into *<b>last</b>. Store NULL into
|
|
|
+ * a pointer if the corresponding key does not exist.
|
|
|
*/
|
|
|
void
|
|
|
dup_onion_keys(crypto_pk_t **key, crypto_pk_t **last)
|
|
@@ -139,8 +140,10 @@ dup_onion_keys(crypto_pk_t **key, crypto_pk_t **last)
|
|
|
tor_assert(key);
|
|
|
tor_assert(last);
|
|
|
tor_mutex_acquire(key_lock);
|
|
|
- tor_assert(onionkey);
|
|
|
- *key = crypto_pk_copy_full(onionkey);
|
|
|
+ if (onionkey)
|
|
|
+ *key = crypto_pk_copy_full(onionkey);
|
|
|
+ else
|
|
|
+ *last = NULL;
|
|
|
if (lastonionkey)
|
|
|
*last = crypto_pk_copy_full(lastonionkey);
|
|
|
else
|
|
@@ -207,10 +210,14 @@ construct_ntor_key_map(void)
|
|
|
{
|
|
|
di_digest256_map_t *m = NULL;
|
|
|
|
|
|
- dimap_add_entry(&m,
|
|
|
- curve25519_onion_key.pubkey.public_key,
|
|
|
- tor_memdup(&curve25519_onion_key,
|
|
|
- sizeof(curve25519_keypair_t)));
|
|
|
+ if (!tor_mem_is_zero((const char*)
|
|
|
+ curve25519_onion_key.pubkey.public_key,
|
|
|
+ CURVE25519_PUBKEY_LEN)) {
|
|
|
+ dimap_add_entry(&m,
|
|
|
+ curve25519_onion_key.pubkey.public_key,
|
|
|
+ tor_memdup(&curve25519_onion_key,
|
|
|
+ sizeof(curve25519_keypair_t)));
|
|
|
+ }
|
|
|
if (!tor_mem_is_zero((const char*)
|
|
|
last_curve25519_onion_key.pubkey.public_key,
|
|
|
CURVE25519_PUBKEY_LEN)) {
|