Ejemplo n.º 1
0
  def test_router_digest(self):
    """
    Constructs with a router-digest line with both valid and invalid contents.
    """

    # checks with valid content

    router_digest = "068A2E28D4C934D9490303B7A645BA068DCA0504"
    desc = get_bridge_server_descriptor({"router-digest": router_digest})
    self.assertEquals(router_digest, desc.digest())

    # checks when missing

    desc_text = get_bridge_server_descriptor(exclude = ["router-digest"], content = True)
    self.assertRaises(ValueError, BridgeDescriptor, desc_text)

    # check that we can still construct it without validation
    desc = BridgeDescriptor(desc_text, validate = False)
    self.assertEquals(None, desc.digest())

    # checks with invalid content

    test_values = (
      "",
      "006FD96BA35E7785A6A3B8B75FE2E2435A13BDB44",
      "006FD96BA35E7785A6A3B8B75FE2E2435A13BDB",
      "006FD96BA35E7785A6A3B8B75FE2E2435A13BDBH",
    )

    for value in test_values:
      desc_text = get_bridge_server_descriptor({"router-digest": value}, content = True)
      self.assertRaises(ValueError, BridgeDescriptor, desc_text)

      desc = BridgeDescriptor(desc_text, validate = False)
      self.assertEquals(value, desc.digest())
Ejemplo n.º 2
0
 def test_router_digest(self):
   """
   Constructs with a router-digest line with both valid and invalid contents.
   """
   
   # checks with valid content
   
   router_digest = "068A2E28D4C934D9490303B7A645BA068DCA0504"
   desc = get_bridge_server_descriptor({"router-digest": router_digest})
   self.assertEquals(router_digest, desc.digest())
   
   # checks when missing
   
   desc_text = get_bridge_server_descriptor(exclude = ["router-digest"], content = True)
   self.assertRaises(ValueError, BridgeDescriptor, desc_text)
   
   # check that we can still construct it without validation
   desc = BridgeDescriptor(desc_text, validate = False)
   self.assertEquals(None, desc.digest())
   
   # checks with invalid content
   
   test_values = (
     "",
     "006FD96BA35E7785A6A3B8B75FE2E2435A13BDB44",
     "006FD96BA35E7785A6A3B8B75FE2E2435A13BDB",
     "006FD96BA35E7785A6A3B8B75FE2E2435A13BDBH",
   )
   
   for value in test_values:
     desc_text = get_bridge_server_descriptor({"router-digest": value}, content = True)
     self.assertRaises(ValueError, BridgeDescriptor, desc_text)
     
     desc = BridgeDescriptor(desc_text, validate = False)
     self.assertEquals(value, desc.digest())
Ejemplo n.º 3
0
 def test_or_address_v4(self):
   """
   Constructs a bridge descriptor with a sanatized IPv4 or-address entry.
   """
   
   desc = get_bridge_server_descriptor({"or-address": "10.45.227.253:9001"})
   self.assertEquals([("10.45.227.253", 9001, False)], desc.address_alt)
Ejemplo n.º 4
0
  def test_or_address_v6(self):
    """
    Constructs a bridge descriptor with a sanatized IPv6 or-address entry.
    """

    desc = get_bridge_server_descriptor({'or-address': '[fd9f:2e19:3bcf::02:9970]:9001'})
    self.assertEqual([('fd9f:2e19:3bcf::02:9970', 9001, True)], desc.or_addresses)
Ejemplo n.º 5
0
  def test_or_address_v4(self):
    """
    Constructs a bridge descriptor with a sanatized IPv4 or-address entry.
    """

    desc = get_bridge_server_descriptor({'or-address': '10.45.227.253:9001'})
    self.assertEqual([('10.45.227.253', 9001, False)], desc.or_addresses)
Ejemplo n.º 6
0
 def test_or_address_v6(self):
   """
   Constructs a bridge descriptor with a sanatized IPv6 or-address entry.
   """
   
   desc = get_bridge_server_descriptor({"or-address": "[fd9f:2e19:3bcf::02:9970]:9001"})
   self.assertEquals([("fd9f:2e19:3bcf::02:9970", 9001, True)], desc.address_alt)
Ejemplo n.º 7
0
  def test_or_address_v6(self):
    """
    Constructs a bridge descriptor with a sanatized IPv6 or-address entry.
    """

    desc = get_bridge_server_descriptor({"or-address": "[fd9f:2e19:3bcf::02:9970]:9001"})
    self.assertEquals([("fd9f:2e19:3bcf::02:9970", 9001, True)], desc.or_addresses)
Ejemplo n.º 8
0
  def test_or_address_v4(self):
    """
    Constructs a bridge descriptor with a sanatized IPv4 or-address entry.
    """

    desc = get_bridge_server_descriptor({"or-address": "10.45.227.253:9001"})
    self.assertEquals([("10.45.227.253", 9001, False)], desc.or_addresses)
Ejemplo n.º 9
0
 def test_multiple_descriptor_types(self):
   """
   Attempts to make a csv with multiple descriptor types.
   """
   
   server_desc = get_relay_server_descriptor()
   bridge_desc = get_bridge_server_descriptor()
   self.assertRaises(ValueError, export_csv, (server_desc, bridge_desc))
Ejemplo n.º 10
0
    def test_multiple_descriptor_types(self):
        """
    Attempts to make a csv with multiple descriptor types.
    """

        server_desc = get_relay_server_descriptor()
        bridge_desc = get_bridge_server_descriptor()
        self.assertRaises(ValueError, export_csv, (server_desc, bridge_desc))
Ejemplo n.º 11
0
  def test_or_address_multiple(self):
    """
    Constructs a bridge descriptor with multiple or-address entries and multiple ports.
    """

    desc_text = b'\n'.join((get_bridge_server_descriptor(content = True),
                            b'or-address 10.45.227.253:9001',
                            b'or-address [fd9f:2e19:3bcf::02:9970]:443'))

    expected_or_addresses = [
      ('10.45.227.253', 9001, False),
      ('fd9f:2e19:3bcf::02:9970', 443, True),
    ]

    desc = BridgeDescriptor(desc_text)
    self.assertEqual(expected_or_addresses, desc.or_addresses)
Ejemplo n.º 12
0
 def test_minimal_bridge_descriptor(self):
   """
   Basic sanity check that we can parse a descriptor with minimal attributes.
   """
   
   desc = get_bridge_server_descriptor()
   
   self.assertEquals("Unnamed", desc.nickname)
   self.assertEquals("10.45.227.253", desc.address)
   self.assertEquals(None, desc.fingerprint)
   self.assertEquals("006FD96BA35E7785A6A3B8B75FE2E2435A13BDB4", desc.digest())
   
   # check that we don't have crypto fields
   self.assertRaises(AttributeError, getattr, desc, "onion_key")
   self.assertRaises(AttributeError, getattr, desc, "signing_key")
   self.assertRaises(AttributeError, getattr, desc, "signature")
Ejemplo n.º 13
0
  def test_minimal_bridge_descriptor(self):
    """
    Basic sanity check that we can parse a descriptor with minimal attributes.
    """

    desc = get_bridge_server_descriptor()

    self.assertEquals("Unnamed", desc.nickname)
    self.assertEquals("10.45.227.253", desc.address)
    self.assertEquals(None, desc.fingerprint)
    self.assertEquals("006FD96BA35E7785A6A3B8B75FE2E2435A13BDB4", desc.digest())

    # check that we don't have crypto fields
    self.assertRaises(AttributeError, getattr, desc, "onion_key")
    self.assertRaises(AttributeError, getattr, desc, "signing_key")
    self.assertRaises(AttributeError, getattr, desc, "signature")
Ejemplo n.º 14
0
    def test_or_address_multiple(self):
        """
    Constructs a bridge descriptor with multiple or-address entries and multiple ports.
    """

        desc_text = b'\n'.join((get_bridge_server_descriptor(content=True),
                                b'or-address 10.45.227.253:9001',
                                b'or-address [fd9f:2e19:3bcf::02:9970]:443'))

        expected_or_addresses = [
            ('10.45.227.253', 9001, False),
            ('fd9f:2e19:3bcf::02:9970', 443, True),
        ]

        desc = BridgeDescriptor(desc_text)
        self.assertEqual(expected_or_addresses, desc.or_addresses)
Ejemplo n.º 15
0
    def test_or_address_multiple(self):
        """
    Constructs a bridge descriptor with multiple or-address entries and multiple ports.
    """

        desc_text = "\n".join((get_bridge_server_descriptor(content=True),
                               "or-address 10.45.227.253:9001,9005,80",
                               "or-address [fd9f:2e19:3bcf::02:9970]:443"))

        expected_address_alt = [
            ("10.45.227.253", 9001, False),
            ("10.45.227.253", 9005, False),
            ("10.45.227.253", 80, False),
            ("fd9f:2e19:3bcf::02:9970", 443, True),
        ]

        desc = BridgeDescriptor(desc_text)
        self.assertEquals(expected_address_alt, desc.address_alt)
Ejemplo n.º 16
0
 def test_or_address_multiple(self):
   """
   Constructs a bridge descriptor with multiple or-address entries and multiple ports.
   """
   
   desc_text = "\n".join((get_bridge_server_descriptor(content = True),
                         "or-address 10.45.227.253:9001,9005,80",
                         "or-address [fd9f:2e19:3bcf::02:9970]:443"))
   
   expected_address_alt = [
     ("10.45.227.253", 9001, False),
     ("10.45.227.253", 9005, False),
     ("10.45.227.253", 80, False),
     ("fd9f:2e19:3bcf::02:9970", 443, True),
   ]
   
   desc = BridgeDescriptor(desc_text)
   self.assertEquals(expected_address_alt, desc.address_alt)
Ejemplo n.º 17
0
  def test_bridge_unsanitized(self):
    """
    Targeted check that individual unsanitized attributes will be detected.
    """

    unsanitized_attr = [
      {'router': 'Unnamed 75.45.227.253 9001 0 0'},
      {'contact': 'Damian'},
      {'or-address': '71.35.133.197:9001'},
      {'or-address': '[12ab:2e19:3bcf::02:9970]:9001'},
      {'onion-key': '\n-----BEGIN RSA PUBLIC KEY-----%s-----END RSA PUBLIC KEY-----' % CRYPTO_BLOB},
      {'signing-key': '\n-----BEGIN RSA PUBLIC KEY-----%s-----END RSA PUBLIC KEY-----' % CRYPTO_BLOB},
      {'router-signature': '\n-----BEGIN SIGNATURE-----%s-----END SIGNATURE-----' % CRYPTO_BLOB},
    ]

    for attr in unsanitized_attr:
      desc = get_bridge_server_descriptor(attr)
      self.assertFalse(desc.is_scrubbed())
Ejemplo n.º 18
0
  def test_bridge_unsanitized(self):
    """
    Targeted check that individual unsanitized attributes will be detected.
    """

    unsanitized_attr = [
      {"router": "Unnamed 75.45.227.253 9001 0 0"},
      {"contact": "Damian"},
      {"or-address": "71.35.133.197:9001"},
      {"or-address": "[12ab:2e19:3bcf::02:9970]:9001"},
      {"onion-key": "\n-----BEGIN RSA PUBLIC KEY-----%s-----END RSA PUBLIC KEY-----" % CRYPTO_BLOB},
      {"signing-key": "\n-----BEGIN RSA PUBLIC KEY-----%s-----END RSA PUBLIC KEY-----" % CRYPTO_BLOB},
      {"router-signature": "\n-----BEGIN SIGNATURE-----%s-----END SIGNATURE-----" % CRYPTO_BLOB},
    ]

    for attr in unsanitized_attr:
      desc = get_bridge_server_descriptor(attr)
      self.assertFalse(desc.is_scrubbed())
Ejemplo n.º 19
0
 def test_bridge_unsanitized(self):
   """
   Targeted check that individual unsanitized attributes will be detected.
   """
   
   unsanitized_attr = [
     {"router": "Unnamed 75.45.227.253 9001 0 0"},
     {"contact": "Damian"},
     {"or-address": "71.35.133.197:9001"},
     {"or-address": "[12ab:2e19:3bcf::02:9970]:9001"},
     {"onion-key": "\n-----BEGIN RSA PUBLIC KEY-----%s-----END RSA PUBLIC KEY-----" % CRYPTO_BLOB},
     {"signing-key": "\n-----BEGIN RSA PUBLIC KEY-----%s-----END RSA PUBLIC KEY-----" % CRYPTO_BLOB},
     {"router-signature": "\n-----BEGIN SIGNATURE-----%s-----END SIGNATURE-----" % CRYPTO_BLOB},
   ]
   
   for attr in unsanitized_attr:
     desc = get_bridge_server_descriptor(attr)
     self.assertFalse(desc.is_scrubbed())
Ejemplo n.º 20
0
    def test_bridge_unsanitized(self):
        """
    Targeted check that individual unsanitized attributes will be detected.
    """

        unsanitized_attr = [
            {
                'router': 'Unnamed 75.45.227.253 9001 0 0'
            },
            {
                'contact': 'Damian'
            },
            {
                'or-address': '71.35.133.197:9001'
            },
            {
                'or-address': '[12ab:2e19:3bcf::02:9970]:9001'
            },
            {
                'onion-key':
                '\n-----BEGIN RSA PUBLIC KEY-----%s-----END RSA PUBLIC KEY-----'
                % CRYPTO_BLOB
            },
            {
                'signing-key':
                '\n-----BEGIN RSA PUBLIC KEY-----%s-----END RSA PUBLIC KEY-----'
                % CRYPTO_BLOB
            },
            {
                'router-signature':
                '\n-----BEGIN SIGNATURE-----%s-----END SIGNATURE-----' %
                CRYPTO_BLOB
            },
        ]

        for attr in unsanitized_attr:
            desc = get_bridge_server_descriptor(attr)
            self.assertFalse(desc.is_scrubbed())