commit 52ba4b35fed17a1e0bded2b4e850a979ce08041f Author: Damian Johnson atagar@torproject.org Date: Thu Feb 19 10:03:15 2015 -0800
Directory authority's dir-source has its v3ident, not fingerprint
The authority entries in the consensus have the authority's v3ident, not its fingerprint. That is to say, our DirectoryAuthority class' attribute was misnamed. --- docs/change_log.rst | 1 + stem/descriptor/networkstatus.py | 30 ++++++++++++++++++------------ test/integ/descriptor/remote.py | 2 +- 3 files changed, 20 insertions(+), 13 deletions(-)
diff --git a/docs/change_log.rst b/docs/change_log.rst index 945a52f..178fea4 100644 --- a/docs/change_log.rst +++ b/docs/change_log.rst @@ -56,6 +56,7 @@ conversion (:trac:`14075`). * **Descriptors**
* Lazy-loading descriptors, improving performance by 25-70% depending on what type it is (:trac:`14011`) + * The :class:`~stem.descriptor.networkstatus.DirectoryAuthority` 'fingerprint' attribute was actually its 'v3ident'
* **Utilities**
diff --git a/stem/descriptor/networkstatus.py b/stem/descriptor/networkstatus.py index b356787..f465e6f 100644 --- a/stem/descriptor/networkstatus.py +++ b/stem/descriptor/networkstatus.py @@ -1006,7 +1006,7 @@ def _parse_int_mappings(keyword, value, validate): return results
-def _parse_dir_source_line(descriptor, entries): +def _parse_dirauth_source_line(descriptor, entries): # "dir-source" nickname identity address IP dirport orport
value = _value('dir-source', entries) @@ -1018,7 +1018,7 @@ def _parse_dir_source_line(descriptor, entries): if not stem.util.tor_tools.is_valid_nickname(dir_source_comp[0].rstrip('-legacy')): raise ValueError("Authority's nickname is invalid: %s" % dir_source_comp[0]) elif not stem.util.tor_tools.is_valid_fingerprint(dir_source_comp[1]): - raise ValueError("Authority's fingerprint is invalid: %s" % dir_source_comp[1]) + raise ValueError("Authority's v3ident is invalid: %s" % dir_source_comp[1]) elif not dir_source_comp[2]: # https://trac.torproject.org/7055 raise ValueError("Authority's hostname can't be blank: dir-source %s" % value) @@ -1030,7 +1030,7 @@ def _parse_dir_source_line(descriptor, entries): raise ValueError("Authority's ORPort is invalid: %s" % dir_source_comp[5])
descriptor.nickname = dir_source_comp[0] - descriptor.fingerprint = dir_source_comp[1] + descriptor.v3ident = dir_source_comp[1] descriptor.hostname = dir_source_comp[2] descriptor.address = dir_source_comp[3] descriptor.dir_port = None if dir_source_comp[4] == '0' else int(dir_source_comp[4]) @@ -1053,7 +1053,7 @@ class DirectoryAuthority(Descriptor): * There's no **contact** or **vote_digest** attribute.
:var str nickname: ***** authority's nickname - :var str fingerprint: ***** authority's fingerprint + :var str v3ident: ***** identity key fingerprint used to sign votes and consensus :var str hostname: ***** hostname of the authority :var str address: ***** authority's IP address :var int dir_port: ***** authority's DirPort @@ -1075,20 +1075,20 @@ class DirectoryAuthority(Descriptor): """
ATTRIBUTES = { - 'nickname': (None, _parse_dir_source_line), - 'fingerprint': (None, _parse_dir_source_line), - 'hostname': (None, _parse_dir_source_line), - 'address': (None, _parse_dir_source_line), - 'dir_port': (None, _parse_dir_source_line), - 'or_port': (None, _parse_dir_source_line), - 'is_legacy': (False, _parse_dir_source_line), + 'nickname': (None, _parse_dirauth_source_line), + 'v3ident': (None, _parse_dirauth_source_line), + 'hostname': (None, _parse_dirauth_source_line), + 'address': (None, _parse_dirauth_source_line), + 'dir_port': (None, _parse_dirauth_source_line), + 'or_port': (None, _parse_dirauth_source_line), + 'is_legacy': (False, _parse_dirauth_source_line), 'contact': (None, _parse_contact_line), 'vote_digest': (None, _parse_vote_digest_line), 'legacy_dir_key': (None, _parse_legacy_dir_key_line), }
PARSER_FOR_LINE = { - 'dir-source': _parse_dir_source_line, + 'dir-source': _parse_dirauth_source_line, 'contact': _parse_contact_line, 'legacy-dir-key': _parse_legacy_dir_key_line, 'vote-digest': _parse_vote_digest_line, @@ -1168,6 +1168,12 @@ class DirectoryAuthority(Descriptor): else: self._entries = entries
+ # TODO: Due to a bug we had a 'fingerprint' rather than 'v3ident' attribute + # for a long while. Keeping this around for backward compatability, but + # this will be dropped in stem's 2.0 release. + + self.fingerprint = self.v3ident + def _compare(self, other, method): if not isinstance(other, DirectoryAuthority): return False diff --git a/test/integ/descriptor/remote.py b/test/integ/descriptor/remote.py index 61370d2..2f09597 100644 --- a/test/integ/descriptor/remote.py +++ b/test/integ/descriptor/remote.py @@ -35,7 +35,7 @@ class TestDescriptorDownloader(unittest.TestCase): if not stem_auth: self.fail("%s isn't a recognized directory authority in stem" % auth.nickname)
- for attr in ('address', 'fingerprint', 'or_port', 'dir_port'): + for attr in ('address', 'v3ident', 'or_port', 'dir_port'): if getattr(auth, attr) != getattr(stem_auth, attr): self.fail("%s has %s %s, but we expected %s" % (auth.nickname, attr, getattr(auth, attr), getattr(stem_auth, attr)))
tor-commits@lists.torproject.org