Example #1
0
def _parse_platform_line(descriptor: 'stem.descriptor.Descriptor',
                         entries: ENTRY_TYPE) -> None:
    # "platform" string

    _parse_bytes_line('platform', 'platform')(descriptor, entries)

    # The platform attribute was set earlier. This line can contain any
    # arbitrary data, but tor seems to report its version followed by the
    # os like the following...
    #
    #   platform Tor 0.2.2.35 (git-73ff13ab3cc9570d) on Linux x86_64
    #
    # There's no guarantee that we'll be able to pick these out the
    # version, but might as well try to save our caller the effort.

    value = _value('platform', entries)
    platform_match = re.match('^(?:node-)?Tor (\\S*).* on (.*)$', value)

    if platform_match:
        version_str, descriptor.operating_system = platform_match.groups()

        try:
            descriptor.tor_version = stem.version._get_version(version_str)
        except ValueError:
            pass
Example #2
0
def _parse_platform_line(descriptor, entries):
  # "platform" string

  _parse_bytes_line('platform', 'platform')(descriptor, entries)

  # The platform attribute was set earlier. This line can contain any
  # arbitrary data, but tor seems to report its version followed by the
  # os like the following...
  #
  #   platform Tor 0.2.2.35 (git-73ff13ab3cc9570d) on Linux x86_64
  #
  # There's no guarantee that we'll be able to pick these out the
  # version, but might as well try to save our caller the effort.

  value = _value('platform', entries)
  platform_match = re.match('^(?:node-)?Tor (\S*).* on (.*)$', value)

  if platform_match:
    version_str, descriptor.operating_system = platform_match.groups()

    try:
      descriptor.tor_version = stem.version._get_version(version_str)
    except ValueError:
      pass
Example #3
0
            descriptor.exit_policy = REJECT_ALL_POLICY
        else:
            descriptor.exit_policy = stem.exit_policy.ExitPolicy(
                *descriptor._unparsed_exit_policy)

        del descriptor._unparsed_exit_policy


_parse_identity_ed25519_line = _parse_key_block('identity-ed25519',
                                                'ed25519_certificate',
                                                'ED25519 CERT')
_parse_master_key_ed25519_line = _parse_simple_line('master-key-ed25519',
                                                    'ed25519_master_key')
_parse_master_key_ed25519_for_hash_line = _parse_simple_line(
    'master-key-ed25519', 'ed25519_certificate_hash')
_parse_contact_line = _parse_bytes_line('contact', 'contact')
_parse_published_line = _parse_timestamp_line('published', 'published')
_parse_read_history_line = functools.partial(_parse_history_line,
                                             'read-history',
                                             'read_history_end',
                                             'read_history_interval',
                                             'read_history_values')
_parse_write_history_line = functools.partial(_parse_history_line,
                                              'write-history',
                                              'write_history_end',
                                              'write_history_interval',
                                              'write_history_values')
_parse_ipv6_policy_line = _parse_simple_line(
    'ipv6-policy',
    'exit_policy_v6',
    func=lambda v: stem.exit_policy.MicroExitPolicy(v))
Example #4
0

def _parse_exit_policy(descriptor, entries):
  if hasattr(descriptor, '_unparsed_exit_policy'):
    if descriptor._unparsed_exit_policy == [str_type('reject *:*')]:
      descriptor.exit_policy = REJECT_ALL_POLICY
    else:
      descriptor.exit_policy = stem.exit_policy.ExitPolicy(*descriptor._unparsed_exit_policy)

    del descriptor._unparsed_exit_policy


_parse_identity_ed25519_line = _parse_key_block('identity-ed25519', 'ed25519_certificate', 'ED25519 CERT')
_parse_master_key_ed25519_line = _parse_simple_line('master-key-ed25519', 'ed25519_master_key')
_parse_master_key_ed25519_for_hash_line = _parse_simple_line('master-key-ed25519', 'ed25519_certificate_hash')
_parse_contact_line = _parse_bytes_line('contact', 'contact')
_parse_published_line = _parse_timestamp_line('published', 'published')
_parse_read_history_line = functools.partial(_parse_history_line, 'read-history', 'read_history_end', 'read_history_interval', 'read_history_values')
_parse_write_history_line = functools.partial(_parse_history_line, 'write-history', 'write_history_end', 'write_history_interval', 'write_history_values')
_parse_ipv6_policy_line = _parse_simple_line('ipv6-policy', 'exit_policy_v6', func = lambda v: stem.exit_policy.MicroExitPolicy(v))
_parse_allow_single_hop_exits_line = _parse_if_present('allow-single-hop-exits', 'allow_single_hop_exits')
_parse_caches_extra_info_line = _parse_if_present('caches-extra-info', 'extra_info_cache')
_parse_family_line = _parse_simple_line('family', 'family', func = lambda v: set(v.split(' ')))
_parse_eventdns_line = _parse_simple_line('eventdns', 'eventdns', func = lambda v: v == '1')
_parse_onion_key_line = _parse_key_block('onion-key', 'onion_key', 'RSA PUBLIC KEY')
_parse_onion_key_crosscert_line = _parse_key_block('onion-key-crosscert', 'onion_key_crosscert', 'CROSSCERT')
_parse_signing_key_line = _parse_key_block('signing-key', 'signing_key', 'RSA PUBLIC KEY')
_parse_router_signature_line = _parse_key_block('router-signature', 'signature', 'SIGNATURE')
_parse_ntor_onion_key_line = _parse_simple_line('ntor-onion-key', 'ntor_onion_key')
_parse_ntor_onion_key_crosscert_line = _parse_key_block('ntor-onion-key-crosscert', 'ntor_onion_key_crosscert', 'ED25519 CERT', 'ntor_onion_key_crosscert_sign')
_parse_router_sig_ed25519_line = _parse_simple_line('router-sig-ed25519', 'ed25519_signature')