[tor-commits] [stem/master] Python3 HSv3 descriptor creation fixes

atagar at torproject.org atagar at torproject.org
Tue Nov 19 22:56:48 UTC 2019


commit 440cb9b44ee90c48843f2baa3c3e2245683a469b
Author: Damian Johnson <atagar at torproject.org>
Date:   Tue Nov 19 14:55:36 2019 -0800

    Python3 HSv3 descriptor creation fixes
    
    My python 3.5 interpreter lacked ed25519 openssl bindings, preventing me from
    exercising these code paths. Now that they're working addressing normalization
    we need.
---
 stem/descriptor/hidden_service.py         |  4 ++--
 test/unit/descriptor/hidden_service_v3.py | 16 ++++++++++------
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/stem/descriptor/hidden_service.py b/stem/descriptor/hidden_service.py
index d17c7d9c..0f65fb24 100644
--- a/stem/descriptor/hidden_service.py
+++ b/stem/descriptor/hidden_service.py
@@ -995,7 +995,7 @@ class HiddenServiceDescriptorV3(BaseHiddenServiceDescriptor):
     ), ()) + b'\n'
 
     if custom_sig:
-      desc_content += b'signature %s' % custom_sig
+      desc_content += b'signature %s' % stem.util.str_tools._to_bytes(custom_sig)
     elif 'signature' not in exclude:
       sig_content = stem.descriptor.certificate.SIG_PREFIX_HS_V3 + desc_content
       desc_content += b'signature %s' % base64.b64encode(signing_key.sign(sig_content)).rstrip(b'=')
@@ -1212,7 +1212,7 @@ class OuterLayer(Descriptor):
     return cls(cls.content(attr, exclude, validate, sign, inner_layer, revision_counter, subcredential, blinded_key), validate = validate)
 
   def __init__(self, content, validate = False):
-    content = content.rstrip('\x00')  # strip null byte padding
+    content = stem.util.str_tools._to_bytes(content).rstrip(b'\x00')  # strip null byte padding
 
     super(OuterLayer, self).__init__(content, lazy_load = not validate)
     entries = _descriptor_components(content, validate)
diff --git a/test/unit/descriptor/hidden_service_v3.py b/test/unit/descriptor/hidden_service_v3.py
index 4549db2b..3336f45f 100644
--- a/test/unit/descriptor/hidden_service_v3.py
+++ b/test/unit/descriptor/hidden_service_v3.py
@@ -264,6 +264,11 @@ class TestHiddenServiceDescriptorV3(unittest.TestCase):
     Retrieve IntroductionPointV3 cryptographic materials.
     """
 
+    def base64_key(key):
+      pubkey = stem.util._pubkey_bytes(key)
+      pubkey_b64 = base64.b64encode(pubkey)
+      return stem.util.str_tools._to_unicode(pubkey_b64)
+
     from cryptography.hazmat.backends.openssl.x25519 import X25519PublicKey
 
     intro_point = InnerLayer(INNER_LAYER_STR).introduction_points[0]
@@ -274,8 +279,8 @@ class TestHiddenServiceDescriptorV3(unittest.TestCase):
     self.assertTrue(isinstance(intro_point.onion_key(), X25519PublicKey))
     self.assertTrue(isinstance(intro_point.enc_key(), X25519PublicKey))
 
-    self.assertEqual(intro_point.onion_key_raw, base64.b64encode(stem.util._pubkey_bytes(intro_point.onion_key())))
-    self.assertEqual(intro_point.enc_key_raw, base64.b64encode(stem.util._pubkey_bytes(intro_point.enc_key())))
+    self.assertEqual(intro_point.onion_key_raw, base64_key(intro_point.onion_key()))
+    self.assertEqual(intro_point.enc_key_raw, base64_key(intro_point.enc_key()))
 
     self.assertEqual(None, intro_point.legacy_key_raw)
     self.assertEqual(None, intro_point.legacy_key())
@@ -305,7 +310,6 @@ class TestHiddenServiceDescriptorV3(unittest.TestCase):
     reparsed = IntroductionPointV3.parse(intro_point.encode())
     self.assertEqual(intro_point, reparsed)
 
-  @test.require.ed25519_support
   def test_inner_layer_creation(self):
     """
     Internal layer creation.
@@ -346,7 +350,7 @@ class TestHiddenServiceDescriptorV3(unittest.TestCase):
 
     self.assertTrue(InnerLayer.content(introduction_points = [
       IntroductionPointV3.create('1.1.1.1', 9001),
-    ]).startswith('create2-formats 2\nintroduction-point AQAGAQEBASMp'))
+    ]).startswith(b'create2-formats 2\nintroduction-point AQAGAQEBASMp'))
 
   @test.require.ed25519_support
   def test_outer_layer_creation(self):
@@ -358,7 +362,7 @@ class TestHiddenServiceDescriptorV3(unittest.TestCase):
 
     # minimal layer
 
-    self.assertTrue(OuterLayer.content().startswith('desc-auth-type x25519\ndesc-auth-ephemeral-key '))
+    self.assertTrue(OuterLayer.content().startswith(b'desc-auth-type x25519\ndesc-auth-ephemeral-key '))
     self.assertEqual('x25519', OuterLayer.create().auth_type)
 
     # specify the parameters
@@ -414,7 +418,7 @@ class TestHiddenServiceDescriptorV3(unittest.TestCase):
 
     # minimal descriptor
 
-    self.assertTrue(HiddenServiceDescriptorV3.content().startswith('hs-descriptor 3\ndescriptor-lifetime 180\n'))
+    self.assertTrue(HiddenServiceDescriptorV3.content().startswith(b'hs-descriptor 3\ndescriptor-lifetime 180\n'))
     self.assertEqual(180, HiddenServiceDescriptorV3.create().lifetime)
 
     # specify the parameters



More information about the tor-commits mailing list