Skip to content

v18.0.0

Compare
Choose a tag to compare
@meejah meejah released this 26 Jun 03:39
· 160 commits to master since this release
v18.0.0

I'm very pleased to announce txtorcon 18.0.0. This introduces a new
Onion services API (including v3 support) and a bunch of other changes
(including a new versioning scheme).

Starting now, versioning is more Twisted-like: the first number is the
year, the second is the "release in that year" and the minor number is
for bug-fixes. No backwards-incompatible changes will occur without
first being deprecated for at least one full release (this has been my
practice anyway, so using "SemVer" no longer made sense).

The documentation is updated with all the new Onion APIs, and a full
list of changes follows:

  • await_all_uploads= option when creating Onions

  • properly re-map progress percentages (including descriptor uploads)

  • properly wait for all event-listeners during startup

  • re-work how TorState.event_map works, hopefully reducing
    reproducible-builds issues

  • TorControlProtocol.add_event_listener and
    TorControlProtocol.remove_event_listener are now async methods
    returning Deferred -- they always should have been; new code can
    now be assured that the event-listener change is known to Tor by
    awaiting this Deferred.

  • TorControlProtocol.get_conf_single method added, which gets and returns
    (asynchronously) a single GETCONF key (instead of a dict)

  • also TorControlProtocol.get_info_single similar to above

  • if Tor disconnects while a command is in-progress or pending, the
    .errback() for the corresponding Deferred is now correctly fired
    (with a TorDisconnectError)

  • tired: get_global_tor() (now deprecated)
    wired: txtorcon.get_global_tor_instance

  • Adds a comprehensive set of Onion Services APIs (for all six
    variations). For non-authenticated services, instances of
    IOnionService represent services; for authenticated services,
    instances of IAuthenticatedOnionClients encapsulated named lists of
    clients (each client is an instance implementing IOnionService).

  • Version 3 ("Proposition 279") Onion service support (same APIs) as
    released in latest Tor

  • Four new methods to handle creating endpoints for Onion services
    (either ephemeral or not and authenticated or not):

    • Tor.create_authenticated_onion_endpoint
    • Tor.create_authenticated_filesystem_onion_endpoint
    • Tor.create_onion_endpoint
    • Tor.create_filesystem_onion_endpoint
  • see create_onion for information on how to choose an
    appropriate type of Onion Service.

  • Tor.create_onion_service to add a new ephemeral Onion service to
    Tor. This uses the ADD_ONION command under the hood and can be
    version 2 or version 3. Note that there is an endpoint-style API as
    well so you don't have to worry about mapping ports yourself (see
    below).

  • Tor.create_filesystem_onion_service to add a new Onion service to
    Tor with configuration (private keys) stored in a provided
    directory. These can be version 2 or version 3 services. Note that
    there is an endpoint-style API as well so you don't have to worry
    about mapping ports yourself (see below).

  • Additional APIs to make visiting authenticated Onion services as a
    client easier:

  • Tor.add_onion_authentication will add a client-side Onion service
    authentication token. If you add a token for a service which
    already has a token, it is an error if they don't match. This
    corresponds to HidServAuth lines in torrc.

  • Tor.remove_onion_authentication will remove a previously added
    client-side Onion service authentication token. Fires with True if
    such a token existed and was removed or False if no existing token
    was found.

  • Tor.onion_authentication (Python3 only) an async context-manager
    that adds and removes an Onion authentication token (i.e. adds in
    on aenter and removes it on aexit). Allows code like:

  • onion services support listening on Unix paths.

  • make sure README renders on Warehouse/PyPI

You can download the release from PyPI or GitHub (or of course "pip
install txtorcon"):

https://pypi.python.org/pypi/txtorcon/18.0.0
https://github.com/meejah/txtorcon/releases/tag/v18.0.0

Releases are also available from the hidden service:

http://timaq4ygg2iegci7.onion/txtorcon-18.0.0.tar.gz
http://timaq4ygg2iegci7.onion/txtorcon-18.0.0.tar.gz.asc

...and now also available via a "version 3" service:

http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-18.0.0.tar.gz
http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtorcon-18.0.0.tar.gz.asc

You can verify the sha256sum of both by running the following 4 lines
in a shell wherever you have the files downloaded:

cat <<EOF | sha256sum --check
818f6ec96a9d60cb4cb47d98f2c843c7a83004c25be07daafeb9eb9aaed74f7c dist/txtorcon-18.0.0.tar.gz
d2f91a3770d7fd8c46372e5573bb23ab65c1be33f12e9ff4ac4af24e6f5f6069 dist/txtorcon-18.0.0-py2.py3-none-any.whl
EOF

thanks,
meejah