[tor-commits] [stem/master] Parse signing certificate field

atagar at torproject.org atagar at torproject.org
Sun Aug 25 00:20:44 UTC 2019


commit 2a98ba70f1e8a0ba7b3e0b1141ad69cfec98fba5
Author: Damian Johnson <atagar at torproject.org>
Date:   Sat Aug 24 15:37:43 2019 -0700

    Parse signing certificate field
---
 stem/descriptor/hidden_service.py         | 10 +++++++---
 test/unit/descriptor/hidden_service_v3.py |  9 +++++++++
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/stem/descriptor/hidden_service.py b/stem/descriptor/hidden_service.py
index 4af40d46..84b8d5e7 100644
--- a/stem/descriptor/hidden_service.py
+++ b/stem/descriptor/hidden_service.py
@@ -183,7 +183,8 @@ _parse_publication_time_line = _parse_timestamp_line('publication-time', 'publis
 _parse_signature_line = _parse_key_block('signature', 'signature', 'SIGNATURE')
 
 _parse_v3_version_line = _parse_int_line('hs-descriptor', 'version', allow_negative = False)
-_parse_lifetime = _parse_int_line('descriptor-lifetime', 'lifetime', allow_negative = False)
+_parse_lifetime_line = _parse_int_line('descriptor-lifetime', 'lifetime', allow_negative = False)
+_parse_signing_key_line = _parse_key_block('descriptor-signing-key-cert', 'signing_cert', 'ED25519 CERT')
 
 
 class BaseHiddenServiceDescriptor(Descriptor):
@@ -462,6 +463,7 @@ class HiddenServiceDescriptorV3(BaseHiddenServiceDescriptor):
 
   :var int version: **\\*** hidden service descriptor version
   :var int lifetime: **\\*** minutes after publication this descriptor is valid
+  :var str signing_cert: **\\*** cross-certifier for the short-term descriptor signing key
 
   **\\*** attribute is either required when we're parsed with validation or has
   a default value, others are left as **None** if undefined
@@ -473,12 +475,14 @@ class HiddenServiceDescriptorV3(BaseHiddenServiceDescriptor):
 
   ATTRIBUTES = {
     'version': (None, _parse_v3_version_line),
-    'lifetime': (None, _parse_lifetime),
+    'lifetime': (None, _parse_lifetime_line),
+    'signing_cert': (None, _parse_signing_key_line),
   }
 
   PARSER_FOR_LINE = {
     'hs-descriptor': _parse_v3_version_line,
-    'descriptor-lifetime': _parse_lifetime,
+    'descriptor-lifetime': _parse_lifetime_line,
+    'descriptor-signing-key-cert': _parse_signing_key_line,
   }
 
   @classmethod
diff --git a/test/unit/descriptor/hidden_service_v3.py b/test/unit/descriptor/hidden_service_v3.py
index b7a23c86..07a8e32c 100644
--- a/test/unit/descriptor/hidden_service_v3.py
+++ b/test/unit/descriptor/hidden_service_v3.py
@@ -16,6 +16,14 @@ from test.unit.descriptor import (
 
 expect_invalid_attr = functools.partial(base_expect_invalid_attr, HiddenServiceDescriptorV3, 'version', 3)
 
+EXPECTED_SIGNING_CERT = """\
+-----BEGIN ED25519 CERT-----
+AQgABqKwAQVql1QZETyEwJjg+Cv6f2w/cp+c3juj01NPBaJqihboAQAgBACx+FKK
+oDrFE1+ztSxzN8sApKOb5UuDtoe/E03DxZU5+r/K5AV6G0hYn21V7Xbu2pZHvIkT
+2oVY4hypWNJE58eFBRFRzBA0J2h0GyFs1pIuRh5QDJuxB5j92V0aRCNZFgM=
+-----END ED25519 CERT-----\
+"""
+
 
 class TestHiddenServiceDescriptorV3(unittest.TestCase):
   def test_for_riseup(self):
@@ -30,6 +38,7 @@ class TestHiddenServiceDescriptorV3(unittest.TestCase):
 
     self.assertEqual(3, desc.version)
     self.assertEqual(180, desc.lifetime)
+    self.assertEqual(EXPECTED_SIGNING_CERT, desc.signing_cert)
 
   def test_invalid_version(self):
     """





More information about the tor-commits mailing list