diff options
| -rw-r--r-- | CHANGELOG.md | 298 |
1 files changed, 298 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 80dbb0114..603c33662 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,304 @@ 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.4.0 — 1 June 2026 + +Arti 2.4.0 continues our work on relay and directory authority development, +and brings us even closer to a working middle relay. + +This release also includes a number of important +bug fixes in our onion service client implementation, +and a number of breaking changes in the `arti-client` APIs. + +As usual, there are also many small changes and improvements which are detailed below. + +### Breaking changes + +- In `arti-client`, all `TorClient` constructors now return `Arc<TorClient>`, + `TorClient` no longer implements `Clone`, + `set_stream_prefs` has been removed, and + `clone_with_prefs` has been renamed to `with_prefs`. + ([!3990]) +- In `arti-client`, the `use_obsolete_software` option has been removed. ([!3995]) +- In `arti-client`, several `experimental-api` methods are now fallible. ([!4011]) + +### Major features +- The `flowctl-cc` feature is now marked as stable. ([#2419], [!4014]) + +### Major bugfixes + +- Numerous fixes to the onion service client timeout calculations. + ([#2482], [!3940]) +- Fixed a bug where window-based flow control was wrongly being applied + to XON/XOFF flow control half-streams. ([#2195], [#2505], [!3941]) +- Fixed a bug causing onion service clients to fail to refetch the service + descriptor after introduction failure ([#966], [!3925]). + +### Breaking changes in lower-level crates + +- Removed `flatten()` from `tor-basic-utils`. + `Result::flatten()` provides the same functionality, + and has been available in the standard library since Rust 1.89. + ([be10d98832cb5ff1]) +- In `tor-netdoc`, `RouterDesc` has been reworked, + and several of its functions have been renamed, + and now have a different signature. + ([!3966], [!3978], [!3976], [!4010], [!4007], [!4003]) +- In `tor-netdoc`, `netstatus::Preamble*` now contain new `SharedRandStatuses`, + not individual fields, and `DigestName` `Ord` implementation was corrected + to always sort by string representation. ([!3948]) +- In `tor-netdoc`, `Footer` is renamed to `ConsensusFooterFields`, + `Footer.weights` is renamed to `ConsensusFooterFields.bandwidth_weights`, + `SignatureGroup` contains `DirectorySignaturesHashesAccu` instead of hash fields, + `RouterStatus.weight` contains the new `RelayWeightsItem`. ([!3985], [!3991]) +- In `tor-netdoc`, many undocumented features were removed, and various public APIs + have been reworked or removed. +- In `tor-chanmgr`, the Error type has been refactored; the `ChannelBuild` + variant has been renamed to `Connect`, its members have changed, + and `Proxy` has been removed. ([!3932]) +- In `tor-config`, `resolve_return_results` now takes a `ConfigResolveOptions`. + ([!4001]) +- In `tor-dirclient`, our methods take `RequestBody` instead of `String. ([!3924]) +- In `tor-keymgr`, `KeystoreEntryResult` was removed. ([!3997]) +- In `tor-proto`, `CIRCUIT_BUFFER_SIZE` is no longer public. ([!4009]) +- In `tor-rtcompat`, the `NetStreamProvider` trait has a new `ListenOptions` associated type, + the `NetStreamProvider::listen()` trait method requires an additional argument, + and the `Runtime` trait requirements has changed. ([!3957]) +- In `tor-key-forge`, `KeygenRng` now has `Rng` as a supertrait. +- In `tor-config`, `ResolutionResults` is no longer `UnwindSafe` or + `RefUnwindSafe`. +- In `tor-ptmgr`, `PtMgr::new` and `PtMgr::reconfigure` APIs have changed. + + +### Relay development + +- New `tor-dirpublish` crate for documents that need to be uploaded + to multiple places. ([#2499], [!3924]) +- Fixed a bug causing Arti to miscalculate SRV lifetimes in test networks + configured to use a voting interval != 1h. ([#2458], [#2522], [!2458]) +- Added a bare-bones metrics exporter and related configuration. ([!3980]) +- Reworked the key management task to function as a reactor, + and to read the ntor key lifetime and grace period from the consensus. + ([#2548], [!3919], [!4028]) +- Added logging and tests for DESTROY and TRUNCATE cell handling. + ([!4008]) +- Updated the spec to reflect the changes we are making + to DESTROY and TRUNCATE handling. ([torspec!490]) + +### Directory authority development + +- Added a note on how votes are computed. ([!3963]) +- In `tor-netdoc`, the `encode` feature is now deprecated; + the functionality is now available without enabling a cargo feature. + Various empty, undocumented features have been removed. ([#2942], [!3972]) +- Added a new implementation for parsing signature items, + and improved the document hashing logic. ([!3937]) +- Completed the vote preamble and authority section enough + for consensus calculations. ([!3948]) +- Updated docs and derived various traits for many `tor-netdoc` types, + in preparation for implementing router descriptor parsing. + ([!3959]) +- Added new elliptic curve certificates types that can be encoded + in router descriptors. ([!3939]) +- Implemented encoding for referenced doc digest in rs entries. + ([!3989]) +- Added new `bandwidth`, `family_cert`, `master_key_ed25519` fields + to `RouterDesc`. ([!4005], [!4007], [!4002]) +- Implemented most of the remaining structural parts of `NetworkStatus`. + ([!3985]) +- `CertifiedKey` and `UnrecognizedKey` now derive `Eq` and `PartialEq`. + ([!4021]) +- Added support for encoding the `w` line in routerstatus. ([!3991]) +- Added support for encoding votes' `m` items. ([!3998]) + +### RPC development + +- Assigned appropriate `ClientErrorAction`s to a number of new `std::io::ErrorKind`s. + ([!3945]) +- The `TorClient` constructors now return `Arc<TorClient>`, + which will enable our RPC implementation to hold weak references to it. + ([#2469], [!3990]) +- Configuration refactoring, in preparation for future RPC-related + configuration changes. ([#2533], [!3979], [!4001]) + +### Documentation + +- Clarified documentation for the `raw_entry_id()` API in `tor-keymgr`. ([f60f19db]) +- Removed outdated references to the old `RawCellStream` API. ([!4036]) + +### Infrastructure + +- Updated our `build-repro` CI job to use Rust 1.95. ([!3968]) +- Temporarily disabled the (currently broken) `cargo-fuzz` test in CI. ([!3984]) +- Enabled `RUST_BACKTRACE` for all CI jobs. ([!3999]) + +### Cleanups, minor features, and bugfixes + +- Resolved various internal TODOs that were previously blocked + on updating our MSRV. ([!3943]) +- Updated a TODO comment to mention the MSRV required to fix it. + ([59c89908866e6b55]) +- Updated dependencies. ([!3960]) +- Updated to the latest list of Tor fallback directories. ([!3964]) +- Updated `fslock-guard` to use the `File::lock` API introduced in Rust 1.89, + and migrated all our crates to use it instead of `fslock`. ([#2106], [!3954]) +- Deduplicated the hex encoding logic of two of our byte-array types. ([!3947]) +- Set the optimization level for `num-bigint-dig` to 2 for our `dev` builds, + speeding up our former slowest test case by a factor of 20. ([!3973]) +- Internal error handling refactoring in the `BeginStream` implementation + of the circuit reactor. ([!3975]) +- Upgraded our [`rand`] dependency to 0.10. ([!3969], [!3987]) +- Worked around a clippy bug wrongly reporting some functions as unreachable. + ([!3982]) +- Connection failures are no longer all reported as proxy errors. + ([#2459], [!3932]) +- Replaced a clippy expectation with an `allow`, to resolve a warning. ([!3983]) +- In `tor-netdoc`, the `Constructor` macro now enforces non-exhaustiveness. + ([!3986]) +- Upgraded our [`metrics`] dependency to 0.24.6. ([!3992]) +- Fixed bug causing the `fs-mistrust` tests to fail on systems with musl libc. + ([!3996]) +- Upgraded our [`enumset`] dependency to 1.1.13. ([!4004]) +- Removed several unused raw key entry APIs from `tor-keymgr`. ([!3997]) +- Fixed a bug where arti failed to check for clock stalls/jumps before + performing congestion window updates. ([#2504], [!3967]) +- In `tor-proto`, we now determine the stream inbound message queue capacity + at runtime, based on what type of flow control we negotiated. + ([#2536], [!3981], [!4009]) +- Added support for setting socket buffer sizes (`SO_SNDBUF` and `SO_RCVBUF`), + and updated `arti` to use 128 KB socket buffers for its proxy sockets. + ([#2500], [!3957]) +- Removed support for running without the protocol support required + by the consensus. ([#1960], [!3995]) +- Fixed cancellation safety issue in `get_or_launch(). ([#1716], [!3946]) +- When launching a managed PT proxy, we now include the setting + for `outbound_proxy` in its environment. ([!4017]) +- Fixed a couple of clippy warnings. ([!4019]) +- Refactored `TorClient` into a typestate, which will make it easier to + verify that we aren't connecting to the network when we aren't bootstrapping, + that bootstrap-only functionality is not accidentally allowed + on an unboostrapped client, and will enable us to reconfigure + additional options on not-yet-running clients. ([!4011]) +- We no longer use `futures_codec` as an alias for `asynchronous_codec`. + ([#1690], [!4026]) +- `fslock-guard` now uses the `windows-sys` crate instead of `winapi`, + which is unmaintained. ([!3974]) +- `KeystoreEntry::new()` is now available as an experimental api + in `tor-keymgr`. ([!3288]) +- `fslock-guard` now has custom code for handling file locking on Android, + to work around it not being supported yet by the standard library APIs. + ([#2544], [!4030]) + +### Acknowledgments + +Thanks to everybody who's contributed to this release, including +Aaron Dewes, Andrew Kloet, Boris Nagaev, Neel Chauhan, Nihal, syphyr. + +Also, our deep thanks to +the [Bureau of Democracy, Human Rights, and Labor], +and our [other sponsors] +for funding the development of Arti! + +[!2458]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2458 +[!3288]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3288 +[!3919]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3919 +[!3924]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3924 +[!3925]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3925 +[!3932]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3932 +[!3937]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3937 +[!3939]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3939 +[!3940]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3940 +[!3941]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3941 +[!3943]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3943 +[!3945]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3945 +[!3946]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3946 +[!3947]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3947 +[!3948]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3948 +[!3954]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3954 +[!3957]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3957 +[!3959]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3959 +[!3960]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3960 +[!3963]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3963 +[!3964]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3964 +[!3966]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3966 +[!3967]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3967 +[!3968]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3968 +[!3969]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3969 +[!3972]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3972 +[!3973]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3973 +[!3974]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3974 +[!3975]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3975 +[!3976]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3976 +[!3978]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3978 +[!3979]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3979 +[!3980]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3980 +[!3981]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3981 +[!3982]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3982 +[!3983]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3983 +[!3984]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3984 +[!3985]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3985 +[!3986]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3986 +[!3987]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3987 +[!3989]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3989 +[!3990]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3990 +[!3991]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3991 +[!3992]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3992 +[!3995]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3995 +[!3996]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3996 +[!3997]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3997 +[!3998]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3998 +[!3999]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3999 +[!4001]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4001 +[!4002]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4002 +[!4003]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4003 +[!4004]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4004 +[!4005]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4005 +[!4007]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4007 +[!4008]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4008 +[!4009]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4009 +[!4010]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4010 +[!4011]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4011 +[!4014]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4014 +[!4017]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4017 +[!4019]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4019 +[!4021]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4021 +[!4026]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4026 +[!4028]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4028 +[!4030]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4030 +[!4036]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4036 +[#1690]: https://gitlab.torproject.org/tpo/core/arti/-/issues/1690 +[#1716]: https://gitlab.torproject.org/tpo/core/arti/-/issues/1716 +[#1960]: https://gitlab.torproject.org/tpo/core/arti/-/issues/1960 +[#2106]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2106 +[#2195]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2195 +[#2419]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2419 +[#2458]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2458 +[#2459]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2459 +[#2469]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2469 +[#2482]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2482 +[#2499]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2499 +[#2500]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2500 +[#2504]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2504 +[#2505]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2505 +[#2522]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2522 +[#2533]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2533 +[#2536]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2536 +[#2544]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2544 +[#2548]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2548 +[#2942]: https://gitlab.torproject.org/tpo/core/arti/-/issues/2942 +[#966]: https://gitlab.torproject.org/tpo/core/arti/-/issues/966 +[59c89908866e6b55]: https://gitlab.torproject.org/tpo/core/arti/-/commit/59c89908866e6b55eea158aeae05493a3ee424d6 +[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/ +[`enumset`]: https://crates.io/crates/enumset +[`metrics`]: https://crates.io/crates/metrics +[`rand`]: https://crates.io/crates/rand +[be10d98832cb5ff1]: https://gitlab.torproject.org/tpo/core/arti/-/commit/be10d98832cb5ff160fddd1c4e9533c102dc0a4c +[f60f19db]: https://gitlab.torproject.org/tpo/core/arti/-/commit/f60f19dbb928b74b70fd6b1c6fe8f63d580db4f6 +[other sponsors]: https://www.torproject.org/about/sponsors/ +[torspec!490]: https://gitlab.torproject.org/tpo/core/torspec/-/merge_requests/490 + + + # Arti 2.3.0 — 7 May 2026 Arti 2.3.0 continues development on relay, directory authority, and RPC functionality. |
