commit e30b130482be258245a4a28774959ecb2def58ed Author: Damian Johnson atagar@torproject.org Date: Wed Nov 21 10:42:20 2018 -0800
Replace microdescriptor router status entry digest attribute
Bah. Back when I added our 'digest' attribute to RouterStatusEntryMicroV3 I tried to be consistent by making all our hashes hex. However, this was a mistake. Uses of the microdescriptor digest expect base64 so deprecating the 'digest' attribute with another 'microdescriptor_digest' that's base64. --- docs/change_log.rst | 1 + stem/descriptor/router_status_entry.py | 12 +++++++++++- test/unit/descriptor/router_status_entry.py | 1 + 3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/docs/change_log.rst b/docs/change_log.rst index e99e933f..7b99f8f0 100644 --- a/docs/change_log.rst +++ b/docs/change_log.rst @@ -56,6 +56,7 @@ The following are only available within Stem's `git repository * Added the **hash_type** and **encoding** arguments to `ServerDescriptor <api/descriptor/server_descriptor.html#stem.descriptor.server_descriptor.ServerDescriptor.digest>`_ and `ExtraInfo's <api/descriptor/extrainfo_descriptor.html#stem.descriptor.extrainfo_descriptor.ExtraInfoDescriptor.digest>`_ digest methods (:trac:`28398`) * Added the network status vote's new bandwidth_file_digest attribute (:spec:`1b686ef`) * Added :func:`~stem.descriptor.networkstatus.NetworkStatusDocumentV3.is_valid` and :func:`~stem.descriptor.networkstatus.NetworkStatusDocumentV3.is_fresh` methods (:trac:`28448`) + * Replaced :func:`~stem.descriptor.router_status_entry.RouterStatusEntryMicroV3` hex encoded **digest** attribute with a base64 encoded **microdescriptor_digest** * DescriptorDownloader crashed if **use_mirrors** is set (:trac:`28393`) * Don't download from Serge, a bridge authority that frequently timeout
diff --git a/stem/descriptor/router_status_entry.py b/stem/descriptor/router_status_entry.py index b4cd506a..7e88c89a 100644 --- a/stem/descriptor/router_status_entry.py +++ b/stem/descriptor/router_status_entry.py @@ -342,6 +342,10 @@ def _parse_microdescriptor_m_line(descriptor, entries): # "m" digest # example: m aiUklwBrua82obG5AsTX+iEpkjQA2+AQHxZ7GwMfY70
+ descriptor.microdescriptor_digest = _value('m', entries) + + # TODO: drop the following in stem 2.x + descriptor.digest = _base64_to_hex(_value('m', entries), check_if_fingerprint = False)
@@ -672,7 +676,9 @@ class RouterStatusEntryMicroV3(RouterStatusEntry): information that isn't yet recognized :var dict protocols: mapping of protocols to their supported versions
- :var str digest: ***** router's hex encoded digest of our corresponding microdescriptor + :var str digest: ***** router's hex encoded digest of our corresponding + microdescriptor (**deprecated**, use microdescriptor_digest instead) + :var str microdescriptor_digest: ***** router's base64 encoded digest of our corresponding microdescriptor
.. versionchanged:: 1.6.0 Added the protocols attribute. @@ -680,6 +686,9 @@ class RouterStatusEntryMicroV3(RouterStatusEntry): .. versionchanged:: 1.7.0 Added the or_addresses attribute.
+ .. versionchanged:: 1.7.0 + Added the microdescriptor_digest attribute to replace our now deprecated digest attribute. + ***** attribute is either required when we're parsed with validation or has a default value, others are left as **None** if undefined """ @@ -692,6 +701,7 @@ class RouterStatusEntryMicroV3(RouterStatusEntry): 'unrecognized_bandwidth_entries': ([], _parse_w_line), 'protocols': ({}, _parse_pr_line),
+ 'microdescriptor_digest': (None, _parse_microdescriptor_m_line), 'digest': (None, _parse_microdescriptor_m_line), })
diff --git a/test/unit/descriptor/router_status_entry.py b/test/unit/descriptor/router_status_entry.py index 9d8bf8ac..05b4dee6 100644 --- a/test/unit/descriptor/router_status_entry.py +++ b/test/unit/descriptor/router_status_entry.py @@ -163,6 +163,7 @@ class TestRouterStatusEntry(unittest.TestCase): self.assertEqual(expected_flags, set(entry.flags)) self.assertEqual(None, entry.version_line) self.assertEqual(None, entry.version) + self.assertEqual('aiUklwBrua82obG5AsTX+iEpkjQA2+AQHxZ7GwMfY70', entry.microdescriptor_digest) self.assertEqual('6A252497006BB9AF36A1B1B902C4D7FA2129923400DBE0101F167B1B031F63BD', entry.digest) self.assertEqual([], entry.get_unrecognized_lines())
tor-commits@lists.torproject.org