| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
Give a tx to the descriptor task so it can request the keys when
building a new descriptor.
Implement the crypto task handling of that command channel.
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
| |
The crypto task can now signal the descriptor task that the keys have
changed related to the relay descriptor (signing key and ntor keys) so
a new descriptor can be built and uploaded.
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
| |
Config reload is not fully supported just yet but when that comes, we'll
need to make a task command for new targets.
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
This is the basics, with many TODO(relay), for a relay descriptor upload
task which uses tor-dirpublish::Publisher.
Future commits will implement the several todo!().
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
| |
We never used this, it was just needed because we used to convert to a
`CircParameters` which required this.
|
| | |
|
| |
|
|
| |
Fixes a TODO.
|
| |
|
|
| |
Now it can be used with `KeyMgr` and `&KeyMgr`, not only `Arc<KeyMgr>`.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This commit executes maint/add_warning with the just added change to
deny string slices except in tests.
I recommend auditing this by checking out the previous commit followed
by running the script yourself and then verifying that the diff is
identical to this commit.
This commit makes cargo clippy fail. We will add exceptions in the next
commit.
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
Remove the _no_lock() since no more locks now.
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
| |
Now, the FullKeyView is officially only seen by the crypto task.
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
| |
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]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
| |
This effectively removes KeyChange and use the returned set of key types
that were rotated.
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
| |
This also remove unused code from this change.
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
|
|
|
|
|
| |
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]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
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]>
|