meejah
2018-06-26 03:41:50 UTC
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
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