summaryrefslogtreecommitdiff
path: root/CHANGELOG.md
diff options
context:
space:
mode:
Diffstat (limited to 'CHANGELOG.md')
-rw-r--r--CHANGELOG.md290
1 files changed, 288 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7fe53c532..e2f003129 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,9 +3,295 @@
This file describes changes in Arti through the current release. Once Arti
is more mature, we may switch to using a separate changelog for each crate.
-# Arti 2.1.0 — 2 March 2026
+# Arti 2.2.0 — 31 March 2026
+
+DONE up through 7a7401b0ddb159bcbc949b2d873ad5c931edd12d
+
+Arti 2.2.0 continues our work on relay development,
+and brings us even closer to a working middle relay.
+
+This release also adds some useful client-side features,
+and includes various bugfixes and cleanups,
+all listed below.
+
+### Breaking changes
+
+<!-- Breaking changes to `arti` or `arti-client` -->
+
+### Security fixes
+
+- Fixed a low-severity issue where,
+ if an application embedding arti also included the `weak-table` crate,
+ and that application built `weak-table` with `ahash` enabled,
+ the application would be somewhat less DoS-resistant
+ when running on applications without hardware AES support.
+ ([#2412], [!3801], [TROVE-2026-005])
+
+### Major features
+
+- The `http-connect` feature, which enables arti to run as an HTTP CONNECT
+ proxy, is now stable. ([#2409], [!3811])
+- Clients now support outbound HTTP CONNECT proxies.
+ (Previously, they only supported outbound SOCKS proxies.) ([!3789])
+
+### Breaking changes in lower-level crates
+
+- Removed `IoErrorExt` and `BinaryHeapExt` from `tor-basic-utils`.
+ Both of these traits implemented functionality that is now available
+ in the standard library. ([074072ad66bf35e1])
+- In `tor-netdoc`, renamed some `*Signed` types to `*Unverified`,
+ to avoid ambiguity. ([9018c73d34ca60c5])
+- In `tor-dirclient`, renamed `DirResponse::from_body` to
+ `from_get_body`. ([04e8874058966f45])
+- In `tor-keymgr`, replace `KeySpecifier::has_certificate`
+ with usage of the new `CertSpecifier` macro. ([efa1e2540f9c23c5])
+- Throughout all crates,
+ all APIs that used to accept or return an `Instant`
+ now accept or return a `web_time::Instant`
+ when built on the `wasm32-unknown-unknown` target.
+ ([!3820])
+
+### Relay development
+
+- Continued development on channel authentication handshakes.
+ Relays can now successfully accept incoming TLS connections,
+ and authenticate to clients and other relays.
+ ([#2388], [!3732], [!3736], [!3745], [!3773], [!3791], [!3795])
+- Relay channels now do a better job tracking the actual addresses
+ of their peers. ([#2375], [!3722])
+- Continued development on improved directory object parsing and
+ verification, with a focus on signature handling and generation.
+ ([!3742], [!3765])
+- Continued development on directory cache operation, including
+ migration to a less complex backend,
+ and database improvements.
+ ([!3664])
+- Changed TLS certificate to use RSA2048 subject keys, to work around
+ [a bug in the C tor implementation][tor#41226]. ([#2403], [!3769])
+- Improved and refactored key-manager operations for better handling of
+ relay certificates and related keys.
+ ([#2376], [#2377], [!3770], [!3754], [!3785])
+- Use our key manager to manage relay certificates. ([#2404], [!3782])
+- Switched to a [forked version of `ssh-key`] with workarounds and bugfixes
+ needed to support some legacy key types. ([#2398], [!3783])
+- The directory client logic now supports requesting "extra-info" documents.
+ ([!3764])
+- Maintain a list of unauthenticated channels from clients and bridges.
+ ([!3790])
+- Extended circuit logic to accommodate differences between relays' and
+ clients' views of half-open streams and timeout estimation.
+ ([#2410], [!3794])
+- Improved the ergonomics for various relay-visible logs. ([!3776], [!3803],
+ [!3806], [!3807])
+- API preparation for handling CREATE2 and CREATE_FAST
+ cells. ([!3809])
+- Backend logic for consensus diff generation, based on the [`imara-diff`]
+ crate. ([!3712], [!3815])
+- Forward outbound RELAY_EARLY cells correctly. ([#2417], [!3810])
+- Use correct memory quota buckets when extending circuits. ([!3821])
+
+### RPC development
+
+- The RPC client library (`arti-rpc-client-core`)
+ now supports non-blocking requests,
+ and integration with application event loops.
+ As with the rest of the RPC client library,
+ this code has APIs wrappers in Rust, C, and Python,
+ and Python integration tests.
+ ([#1856], [!3652], [!3762], [!3771], [!3774])
+- The RPC system now supports "superuser" capabilities,
+ which applications can use to change and observe parts of Arti
+ that affect the entire system
+ (and not only the application's own traffic).
+ ([#2285], [!3743])
+
+### Testing
+
+- Python tests are now more robust to [`mypy` issue 20962]. ([!3744])
+- Our chutney-based test scripts have been converted to Python,
+ for better integration with the rest of [chutney]. ([!3735], [!3756])
+- Fixed a bug in our chutney benchmark tests where we would use the wrong
+ binary. ([!3758])
+- Revised testing infrastructure for `keymgr` code. ([!3761])
+- Clarifications, cleanups, and renamings in the sub-command
+ integration test suite. ([!3827])
+
+### Documentation
-<!-- up to date with ba4163ed943a67cd8a55f7291797fb22a788f950 -->
+- Removed or softened various warnings about the security limitations of
+ earlier versions of Arti. ([#2000], [#2063], [!3748], [!3812])
+- Removed an obsolete version of our roadmap. ([a3bb97e945addd2e])
+- Improved internal documentation concerning what it means for a
+ directory request to be "anonymized". ([!3767])
+- Our consensus flag documentation now links to the specs.
+ ([!3768])
+- Describe the correct configuration file path on Windows.
+ ([#2422], [!3808])
+
+### Infrastructure
+
+- Report better results from failing shadow CI runs. ([!3766])
+- Enabled more features in our CI testing builds. This will help us
+ test more experimental features before they stabilize. ([!3772], [!3759])
+
+### Cleanups, minor features, and bugfixes
+
+- Added an internal `MaybeSensitive` for wrapper for objects that are
+ _conditionally_ risky log. ([501ba52b79814425])
+- Allow use of now-deprecated `UnboundedReceiver::try_next()` in tests.
+ ([800a47ea1203d87e])
+- Increased required versions of various dependencies. ([!3746])
+- Arti now builds with a broader range of versions of `libsqlite3-sys`.
+ This should make it easier to embed Arti in environments that
+ require specific versions. ([#1740], [!3706])
+- Empty directory responsees are now treated as an error. ([!3650])
+- Upgrade to the latest [`polyval`] crate, to improve [CGO] performance.
+ ([#2390], [!3747])
+- Added a `RelayDetails::is_flaged_exit()` method to help applications
+ tell whether a relay has the `Exit` flag. ([!3752])
+- Improved cross compilation on systems without a C compiler.
+ ([#2366], [!3778])
+- Fix compilation warnings on Windows. ([!3780])
+- Various typo and grammar fixes. ([!3781], [!3792])
+- Fix a bug in certificate expiry time calculation,
+ which would make our unit tests fail if run
+ during the first second of an hour. ([#2407], [!3787])
+- Update to the latest GeoIP database. ([!3813])
+- Refactored retry_error logic. ([!3784])
+- Simplified some of the feature-gating in tor-proto. ([!3796])
+- Fixed unusable duration formatting in tor-guardmgr's log
+ messages. ([!3804])
+- Arti now builds with fewer warnings and errors
+ on the wasm32-unknown-unknown platform.
+ (This is meant to help people who would like
+ to experiment with wasm ports.) ([!3814], [!3816], [!3818], [!3819])
+- Include a compatibility layer for using web_time on
+ the wasm32-unknown-unknown platform.
+ ([#2356], [!3820])
+
+
+### Acknowledgments
+
+Thanks to everybody who's contributed to this release, including
+hjrgrn, HydroxideUnlaced, Nihal, and Tobias Stoeckmann.
+Also, our deep thanks to
+the [Bureau of Democracy, Human Rights, and Labor],
+and our [other sponsors]
+for funding the development of Arti!
+
+<!-- links go here -->
+
+[!3650]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3650
+[!3652]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3652
+[!3664]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3664
+[!3706]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3706
+[!3712]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3712
+[!3722]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3722
+[!3732]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3732
+[!3735]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3735
+[!3736]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3736
+[!3742]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3742
+[!3743]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3743
+[!3744]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3744
+[!3745]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3745
+[!3746]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3746
+[!3747]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3747
+[!3748]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3748
+[!3752]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3752
+[!3754]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3754
+[!3756]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3756
+[!3758]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3758
+[!3759]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3759
+[!3761]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3761
+[!3762]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3762
+[!3764]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3764
+[!3765]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3765
+[!3766]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3766
+[!3767]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3767
+[!3768]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3768
+[!3769]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3769
+[!3770]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3770
+[!3771]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3771
+[!3772]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3772
+[!3773]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3773
+[!3774]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3774
+[!3776]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3776
+[!3778]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3778
+[!3780]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3780
+[!3781]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3781
+[!3782]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3782
+[!3783]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3783
+[!3784]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3784
+[!3785]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3785
+[!3787]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3787
+[!3789]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3789
+[!3790]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3790
+[!3791]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3791
+[!3792]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3792
+[!3794]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3794
+[!3795]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3795
+[!3796]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3796
+[!3801]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3801
+[!3803]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3803
+[!3804]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3804
+[!3806]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3806
+[!3807]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3807
+[!3808]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3808
+[!3809]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3809
+[!3810]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3810
+[!3811]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3811
+[!3812]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3812
+[!3813]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3813
+[!3814]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3814
+[!3815]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3815
+[!3816]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3816
+[!3818]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3818
+[!3819]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3819
+[!3820]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3820
+[!3821]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3821
+[!3827]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3827
+[#1740]: https://gitlab.torproject.org/tpo/core/arti/-/issues/1740
+[#1856]: https://gitlab.torproject.org/tpo/core/arti/-/issues/1856
+[#2000]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2000
+[#2063]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2063
+[#2285]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2285
+[#2356]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2356
+[#2366]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2366
+[#2375]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2375
+[#2376]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2376
+[#2377]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2377
+[#2388]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2388
+[#2390]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2390
+[#2398]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2398
+[#2403]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2403
+[#2404]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2404
+[#2407]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2407
+[#2409]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2409
+[#2410]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2410
+[#2412]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2412
+[#2417]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2417
+[#2422]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2422
+[04e8874058966f45]: https://gitlab.torproject.org/tpo/core/arti/-/commit/04e8874058966f45a08558dc78b941ab7edc9b6b
+[074072ad66bf35e1]: https://gitlab.torproject.org/tpo/core/arti/-/commit/074072ad66bf35e170bd3ce467aad6a6097e24be
+[501ba52b79814425]: https://gitlab.torproject.org/tpo/core/arti/-/commit/501ba52b79814425958176948610f863df3ee0e0
+[800a47ea1203d87e]: https://gitlab.torproject.org/tpo/core/arti/-/commit/800a47ea1203d87e739b99b4a786ca9bee5f53a3
+[9018c73d34ca60c5]: https://gitlab.torproject.org/tpo/core/arti/-/commit/9018c73d34ca60c5f671eeafc540446864998941
+[Bureau of Democracy, Human Rights, and Labor]: https://www.state.gov/bureaus-offices/under-secretary-for-civilian-security-democracy-and-human-rights/bureau-of-democracy-human-rights-and-labor/
+[CGO]: https://blog.torproject.org/introducing-cgo/
+[TROVE-2026-005]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2418
+[`imara-diff`]: https://crates.io/crates/imara-diff
+[`mypy` issue 20962]: https://github.com/python/mypy/issues/20962
+[`polyval`]: https://crates.io/crates/polyval
+[a3bb97e945addd2e]: https://gitlab.torproject.org/tpo/core/arti/-/commit/a3bb97e945addd2e4451e248b3b838e6c5af085c
+[chutney]: https://gitlab.torproject.org/tpo/core/chutney
+[efa1e2540f9c23c5]: https://gitlab.torproject.org/tpo/core/arti/-/commit/efa1e2540f9c23c587816a163d478b1bf4172b48
+[forked version of `ssh-key`]: https://crates.io/crates/ssh-key-fork-arti
+[other sponsors]: https://www.torproject.org/about/sponsors/
+[tor#41226]: https://gitlab.torproject.org/tpo/core/tor/-/issues/41226
+
+
+
+# Arti 2.1.0 — 2 March 2026
Arti 2.1.0 continues work on relay development,
and introduces a new RPC backend with non-blocking IO