mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Fix logic for whether a channel's Ed25519 ID is changing
The previous code would notice if we were changing from one identity to another, but not if we were changing from no identity to having an identity. This problem caused a bug (spotted by cypherpunks in ticket #40563) where if we created a channel for a circuit request that doesn't include an Ed25519 identity, we won't be able to use that channel later for requests that _do_ list Ed25519. Fix for 40563; bugfix on 0.3.0.1-alpha.
This commit is contained in:
@@ -179,8 +179,9 @@ connection_or_set_identity_digest(or_connection_t *conn,
|
||||
chan && !ed25519_public_key_is_zero(&chan->ed25519_identity);
|
||||
const int rsa_changed =
|
||||
tor_memneq(conn->identity_digest, rsa_digest, DIGEST_LEN);
|
||||
const int ed_changed = ed_id_was_set &&
|
||||
(!ed_id || !ed25519_pubkey_eq(ed_id, &chan->ed25519_identity));
|
||||
const int ed_changed = (!ed_id_was_set && ed_id) ||
|
||||
(ed_id_was_set && ed_id && chan &&
|
||||
!ed25519_pubkey_eq(ed_id, &chan->ed25519_identity));
|
||||
|
||||
if (BUG(rsa_changed && rsa_id_was_set))
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user