commit 86974319b9e98668af9d5711b5d5e0a729237646 Author: George Kadianakis desnacked@riseup.net Date: Thu Oct 10 20:48:43 2019 +0300
Add support for encoding link specifiers.
We need this to encode v3 introduction points. --- stem/client/datatype.py | 15 +++++++++++++++ test/unit/client/link_specifier.py | 12 ++++++++++++ 2 files changed, 27 insertions(+)
diff --git a/stem/client/datatype.py b/stem/client/datatype.py index 7e33e353..22212036 100644 --- a/stem/client/datatype.py +++ b/stem/client/datatype.py @@ -574,6 +574,21 @@ class LinkSpecifier(object): else: return LinkSpecifier(link_type, value), content # unrecognized type
+ def encode(self): + """ + Encode this link specifier to bytes + + LSTYPE (Link specifier type) [1 byte] + LSLEN (Link specifier length) [1 byte] + LSPEC (Link specifier) [LSLEN bytes] + """ + ls = b"" + + ls += bytes([self.type]) + ls += bytes([len(self.value)]) + ls += self.value + + return ls
class LinkByIPv4(LinkSpecifier): """ diff --git a/test/unit/client/link_specifier.py b/test/unit/client/link_specifier.py index 470ee276..9ae5c6f9 100644 --- a/test/unit/client/link_specifier.py +++ b/test/unit/client/link_specifier.py @@ -57,3 +57,15 @@ class TestLinkSpecifier(unittest.TestCase):
def test_wrong_size(self): self.assertRaisesWith(ValueError, 'Link specifier should have 32 bytes, but only had 7 remaining', LinkSpecifier.pop, b'\x04\x20CCCCCCC') + + def test_encode_decode(self): + test_cases = [b'\x03\x20CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', + b'\x04\x20CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', + b'\x01\x12&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01#)', + b'\x00\x06\x01\x02\x03\x04#)' ] + + for test_case in test_cases: + destination, _ = LinkSpecifier.pop(test_case) + test_bytes = destination.encode() + self.assertEqual(test_bytes, test_case) +
tor-commits@lists.torproject.org