summaryrefslogtreecommitdiff
path: root/crates/arti-relay/src
Commit message (Collapse)AuthorAgeFilesLines
* relay: Remove docs type link that are outside scopeDavid Goulet2026-05-281-5/+5
| | | | Signed-off-by: David Goulet <[email protected]>
* relay: Recompute valid_until cache in view constructorDavid Goulet2026-05-283-15/+17
| | | | | | | | | | | | | The recompute of the valid_until cache is done now in the constructor of FullKeyView so the view is directly usable once built. Else, the caller always need to call the recompute function which is error prone especially when used as a throwaway view. Also, without this change, building the view and then attempting to log the public keys would fail. Signed-off-by: David Goulet <[email protected]>
* relay: Introduce src/task/crypto/keys.rsDavid Goulet2026-05-283-694/+745
| | | | | | | | | | | Move all key related action function to keys.rs in order to alleviate crypto.rs. The Reactor will get more functionnalities soon so cleanup. No behavior change, just code movement. Related to #2548
* relay: Rename try_rotate_keys_no_lock()David Goulet2026-05-281-11/+14
| | | | | | Remove the _no_lock() since no more locks now. Signed-off-by: David Goulet <[email protected]>
* relay: Make FullKeyView pub(super)David Goulet2026-05-282-13/+10
| | | | | | Now, the FullKeyView is officially only seen by the crypto task. Signed-off-by: David Goulet <[email protected]>
* relay: Remove locking of FullKeyViewDavid Goulet2026-05-282-114/+60
| | | | | | | | | | | | | | | | No need for the valid_until cache locking that used to ensure coherent view accross tasks. As we move towards having the FullKeyView be solely owned by the crypto task, no need for locking. Future commit will introduce a control command channel which will be used to get keys for other tasks. The valid_until cache is kept though because it helps with key lookups to avoid walking all keys each time. Signed-off-by: David Goulet <[email protected]>
* relay: Rename try_generate_keys()David Goulet2026-05-282-7/+7
| | | | | | | | | | Rename it to init_keys() so it capture the semantic of initialization especially that now it returns a InitKeyMaterial. This is so we don't use this function outside initialization in the future. Signed-off-by: David Goulet <[email protected]>
* relay: Make FullKewView solely owned by the crypto taskDavid Goulet2026-05-283-61/+71
| | | | | | | | | | | | | | | | | | | This moves commit makes it that FullKewView is not visible outside the crypto task. For this, we need to keep the KeyMgr in the inert tor relay struct until it is passed to the crypto task. The public keys logging is moved to the run() function of the crypto task and the try_generate_keys() now returns an InitKeyMaterial struct which contains the channel authentication key material (for ChanMgr) and the Ntor keys for the CREATE2 handler. This way, we cut the need of the FullKeyView in the main thread. Related to #2548 Signed-off-by: David Goulet <[email protected]>
* arti-relay: fix `unused_variables` warningSteven Engler2026-05-271-0/+1
|
* relay: Use futures::select instead of tokioDavid Goulet2026-05-261-4/+4
| | | | Signed-off-by: David Goulet <[email protected]>
* relay: Avoid using super::super:: and instead importDavid Goulet2026-05-261-14/+14
| | | | Signed-off-by: David Goulet <[email protected]>
* relay: Use a struct for key valid_until cacheDavid Goulet2026-05-262-88/+83
| | | | | | | | | Instead of a HashMap, use a struct that contains explicit valid_until value per key type as those won't change anytime soon. This is to have a smaller memory footprint and simpler design. Signed-off-by: David Goulet <[email protected]>
* relay: Rename crypto task reconcile() to recompute_valid_until()David Goulet2026-05-262-9/+9
| | | | Signed-off-by: David Goulet <[email protected]>
* relay: .expect() on mutex lock failureDavid Goulet2026-05-262-26/+20
| | | | | | | This change made it that we don't need Result<> to be returned for two functions therefore affecting the callsites. Signed-off-by: David Goulet <[email protected]>
* relay: Small move of imports (fmt)David Goulet2026-05-261-5/+5
| | | | Signed-off-by: David Goulet <[email protected]>
* relay: Crypto task now listens for new consensusDavid Goulet2026-05-262-42/+99
| | | | Signed-off-by: David Goulet <[email protected]>
* relay: Add unit test for key view reconcile()David Goulet2026-05-262-1/+152
| | | | Signed-off-by: David Goulet <[email protected]>
* relay: Fix unit tests after crypto task rewriteDavid Goulet2026-05-261-56/+21
| | | | Signed-off-by: David Goulet <[email protected]>
* relay: Crypto task removal of get_ntor_keys()David Goulet2026-05-262-48/+2
| | | | | | | | | | This is the last piece that needed to be removed since we can use the view to get those keys. This also allows us to remove the temporary FullKeyView::keymgr() function and instead keep the keymgr access strictly to the view guard. Signed-off-by: David Goulet <[email protected]>
* relay: Set the FullKeyView in InerTorRelayDavid Goulet2026-05-264-105/+37
| | | | | | | | | | | | | This is so we early set the FullKeyView and we use it accross the code from initialization. The try_generate_keys() now takes a view and locks it to make its changes. And we also make build_proto_relay_auth_material() use a view to simplify its code and also stop relying on the KeyMgr for key accessors. Signed-off-by: David Goulet <[email protected]>
* relay: Crypto task uses the key view reconcile()David Goulet2026-05-261-38/+28
| | | | | | | This effectively removes KeyChange and use the returned set of key types that were rotated. Signed-off-by: David Goulet <[email protected]>
* relay: Add key view reconcile() for the valid_until cacheDavid Goulet2026-05-261-4/+72
| | | | | | | | | Rebuild the valid_until cache from the key manager and return which key has changed. Function is not used in this commit. Signed-off-by: David Goulet <[email protected]>
* relay: Unify crypto task try_rotate_keys()David Goulet2026-05-261-32/+20
| | | | | | | | | | | | | Rename the try_rotate_keys() to be explicit about no locking and use it in the Reactor. We need this try_rotate_keys() independent function so our first generate all keys can call it which is done before the reactor starts. Because we need crypto material in order to initialize the ChanMgr, we have to generate keys before spawning the task. Signed-off-by: David Goulet <[email protected]>
* relay: Spawn new crypto reactorDavid Goulet2026-05-262-59/+24
| | | | | | This also remove unused code from this change. Signed-off-by: David Goulet <[email protected]>
* relay: Crypto task try_generate_all is simplifiedDavid Goulet2026-05-261-28/+20
| | | | | | | | | | Like previous commit, we only care now if a generate has been done. It is enough of a signal to rebuild our channel auth material and set ntor keys. Part of the refactoring into phases. Signed-off-by: David Goulet <[email protected]>
* relay: Simplify the remove expired keys processDavid Goulet2026-05-261-37/+16
| | | | | | | | | | | | | | | | | The crypto task remove_expired_keys() only returns the next minimum expiry time of all keys it looked at if any remains. This is part of a broad refactoring of the task so we get to have three phases at each run that is: 1. Expire, 2. Rotate, 3. Reconcille With that design, we only need to know if a rotation happened and if so, we can signal other task that we did and rebuild the channel auth key material and ntor keys. The reconcille phase will be in charge of rebuilding the valid_until task of the view. Signed-off-by: David Goulet <[email protected]>
* relay: Fix race between key view and keymgr updateDavid Goulet2026-05-261-1/+10
| | | | | | | | | | The race will appear once we start using the FullKeyView accross the code in the next commit(s). This is also neat because it will enforce that the keymgr is only accessed with the write lock held. Signed-off-by: David Goulet <[email protected]>
* relay: Copy try_rotate_keys() into crypto reactorDavid Goulet2026-05-261-1/+25
| | | | | | | | | | This is a full copy without change (except the keymgr access) so that function becomes a Reactor function. Future commit will cleanup the original copy when the crypto reactor replaces the current task. Signed-off-by: David Goulet <[email protected]>
* relay: Implement new crypto reactor run_once()David Goulet2026-05-262-13/+60
| | | | | | | | | This basically copies the code from rotate_keys_task() and puts it in the run_once(). Cleanup will follow in the next commits to lock step changes. Signed-off-by: David Goulet <[email protected]>
* relay: Crypto new reactor scaffoldingDavid Goulet2026-05-261-0/+34
| | | | Signed-off-by: David Goulet <[email protected]>
* relay: Add FullKeyView in the crypto task moduleDavid Goulet2026-05-262-0/+191
| | | | | | | | | | | | | | This object wraps the `KeyMgr` and provide getters for all specific relay key types. That view is meant to access all keys a relay has. Upcoming restricted views will wrap that object to offer a limited view that is more domain specific. A valid_until cache is kept for all expirable keys so all get() of those keys always return the same one. Signed-off-by: David Goulet <[email protected]>
* relay: Don't error when metrics is configured but disabled.Wesley Aptekar-Cassels2026-05-261-4/+2
| | | | | This is not likely to cause any major problem, so just warning should be fine.
* arti-relay: Add metrics exporter.Wesley Aptekar-Cassels2026-05-262-1/+34
| | | | | | | | | This currently does not actually export any metrics, but puts the infrastructure in place to do so. This adds the `experimental`, `__is_experimental`, etc features to arti-relay. I presume we want to do that in the long term, but I'm not 100% sure on that.
* tor-rtcompat+misc: add `NetStreamProvider::ListenOptions`Steven Engler2026-05-071-1/+4
| | | | | | | | | This adds the trait type `ListenOptions` to `NetStreamProvider` and adds this `ListenOptions` as an argument to `NetStreamProvider::listen()`. You probably want to look at the changes in tor-rtcompat first, then the rest of this commit is updating the various places we use `NetStreamProvider`.
* relay: Modify RelayNtorKeys to use a constructorDavid Goulet2026-04-211-10/+23
| | | | | | | | | | | | Because of the sorting requirement and the fact that a `KeyMgr` can have multiple Ntor keys, the caller now explicitly extract the two Ntor keys it wants from the `KeyMgr` and then creates a `RelayNtorKeys` object with them. Future changes (#2495) will move this into a view and warn if there are more than 2 keys. Signed-off-by: David Goulet <[email protected]>
* proto: Make the CreateRequestHandler::new() take the ntor keysDavid Goulet2026-04-211-2/+8
| | | | Signed-off-by: David Goulet <[email protected]>
* relay: Use the new RelayNtorKeys for the create handlerDavid Goulet2026-04-211-28/+27
| | | | Signed-off-by: David Goulet <[email protected]>
* relay: Sort Ntor keys by valid_untilDavid Goulet2026-04-211-1/+15
| | | | | | | | | This is when we get them from the keystore so we can have a concept of ordering in the SmallVec. Future commit will transform this into a struct handling both keys. Signed-off-by: David Goulet <[email protected]>
* arti-relay: Use unquoted type in keypair_specifier attrGabriela Moldovan2026-04-161-2/+2
|
* arti-relay: improve ntor key loggingSteven Engler2026-04-141-5/+8
| | | | We only need the max, not the entire sorted list.
* arti-relay: log the public ntor keySteven Engler2026-04-141-3/+32
| | | | This is useful for testing.
* arti-relay: move key logging (part 3)Steven Engler2026-04-131-3/+0
| | | | Small cleanup.
* arti-relay: move key logging (part 2)Steven Engler2026-04-131-21/+21
| | | | Code movement only.
* arti-relay: move key logging (part 1)Steven Engler2026-04-131-0/+11
| | | | Set up function placeholder.
* arti-relay: Use a SmallVec for the ntor keysGabriela Moldovan2026-04-091-2/+4
| | | | Usually, there will only be two of these.
* proto: Add method for installing ntor keys in the create handlerGabriela Moldovan2026-04-091-1/+1
| | | | | This also updates the key rotation task to call the setter whenever the ntor keys get updated.
* arti-relays: Pass a CreateRequestHandler to the crypto task (fmt)Gabriela Moldovan2026-04-091-3/+8
|
* arti-relays: Pass a CreateRequestHandler to the crypto taskGabriela Moldovan2026-04-092-1/+4
| | | | This will need to be updated each time the ntor keys change.
* arti-relay: Add tests for the ntor key rotationGabriela Moldovan2026-04-091-0/+53
|
* arti-relay: Test that 1 ntor key gets generated on first runGabriela Moldovan2026-04-091-0/+7
|