aboutsummaryrefslogtreecommitdiff
path: root/crates/tor-keymgr/src/key_specifier.rs
Commit message (Collapse)AuthorAgeFilesLines
* maint: Run maint/add_warning to deny string slicesClara Engler2026-06-091-0/+1
| | | | | | | | | | | | 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.
* keymgr: Don't require ctor_path attr to be quotedGabriela Moldovan2026-04-161-1/+1
| | | | This updates a doc and the corresponding test.
* keymgr: Add test for the auto-generated cert patternsGabriela Moldovan2026-03-121-0/+34
|
* keymgr: Abolish KeyCertificateSpecifier::signing_key_specifier()Gabriela Moldovan2026-03-121-8/+0
| | | | | | | We need to be able to parse KeyPaths into KeyCertificateSpecifier, and we can't do that if the signing key is part of the cert specifier (because the signing key doesn't get encoded in the key path, unlike the subject key, which does)
* keymgr: Add a new trait for cert specifier patternsGabriela Moldovan2026-03-121-0/+28
| | | | | These are significantly different from `KeySpecifierPattern`s, so it's best to have a separate trait.
* keymgr: Implement KeySpecifier for KeyCertificateSpecifiersGabriela Moldovan2026-03-051-0/+37
| | | | | | | | | `KeyCertificateSpecifiers` have an `ArtiPath`, so it's only natural to retrieve it via this new `KeySpecifier` implementation. This replaces the old, ad-hoc `ArtiPath` building from the `KeyMgr` implementation: IMO, the `KeyMgr` impl is the wrong place to build these `ArtiPath`s (ideally they should remain opaque to the `KeyMgr`).
* keymgr: Add tests for the unhappy path of from_ctor_path()Gabriela Moldovan2026-01-061-2/+34
|
* keymgr: Derive PartialEq for CTorPathErrorGabriela Moldovan2026-01-061-1/+1
|
* keymgr: Update tests to use the new d-d macro annotation for CTorPaths (fmt)Gabriela Moldovan2026-01-061-1/+3
|
* keymgr: Update tests to use the new d-d macro annotation for CTorPathsGabriela Moldovan2026-01-061-28/+14
|
* keymgr: Add a CTorKeySpecifier traitGabriela Moldovan2026-01-061-0/+17
|
* keymgr: Make CTorPath more like the client/service specifiers (fmt)Gabriela Moldovan2026-01-061-1/+1
|
* keymgr: Make CTorPath more like the client/service specifiersGabriela Moldovan2026-01-061-33/+13
| | | | | | | | | | | | | This will make it easier to see the correspondence between CTorPaths and the HS client/service key specifiers. Initially, I was hoping this would make it easier to write a d-d macro that automatically derives a `CTorPath` variant (e.g. `HsClientDescEncKeypair`) from the KeySpecifier type name (`HsClientDescEncKeypairSpecifier`), but alas, I don't think d-d can "chop off" name suffixes ("Specifier", in this case). `from_ctor_path()`/`ctor_path()` implementations for converting `CTorPath`s to and from key specifiers.
* keymgr: Fix some recently broken doc linksGabriela Moldovan2026-01-061-2/+2
|
* keymgr: Push error handling into the from_ctor_path() functionsGabriela Moldovan2026-01-061-2/+2
|
* keymgr: Replace placeholder errors with CTorPathErrorGabriela Moldovan2026-01-061-0/+24
|
* keymgr: Remove redundant ArtiPath from error contextGabriela Moldovan2026-01-061-14/+3
| | | | | The `ArtiPath` is included in the `KeyPathError::Arti` outer error type, so there is no need to include it in `ArtiPathError` too.
* keymgr: Split out ArtiPathError from KeyPathErrorGabriela Moldovan2026-01-061-10/+21
| | | | | This makes the error handling around `KeyPath`s a bit more sensible, IMO, and it will make it easier to extend it for `CTorPath` errors.
* keymgr: Move Unrecognized errors out of KeyPathErrorGabriela Moldovan2026-01-061-8/+1
| | | | | | | | | | | | | | | | | | | | | Out of all the variants in `KeyPathError`, `Unrecognized` is the odd one out, because unlike the others, which are mainly just lower level parsing errors, `Unrecognized` is a higher level error constructed in `KeyMgr::describe()`. `KeyMgr::describe()` now returns an `Option`, because * the failure to describe a user provided `KeyPath` may or may not be an error * previously, `describe()` would only ever return `Ok` or `Err(KeyPathError::Unrecognized)`, which essentially a binary result. Also, `describe()` would never return any of the other `KeyPathError` kinds, which further suggests `Unrecognized` doesn't belong there The `Unrecognized` variant still exists, but is now part of `KeystoreCorruptionError`, (returned from `KeyMgr::validate_entry_integrity()`).
* keymgr: Update test d-d macro with new ctor_path functionsGabriela Moldovan2026-01-061-17/+24
|
* Fix name of clippy lint to unchecked_time_subtraction (2)Ian Jackson2025-11-061-1/+1
| | | | Run maint/add_warning
* Switch Cargo.toml files to edition 2024.Nick Mathewson2025-08-071-2/+2
| | | | | | | | | | | | | | First, run ``` git grep -l "^edition =" | xargs perl -i -pe 's/^edition *=.*/edition = "2024"/;' ``` Second, manually verify that all Cargo.toml files have changed, and nothing else has changed. Third, run cargo fmt again.
* Update code for Edition 2024Nick Mathewson2025-08-071-2/+2
| | | | | | | | | | | | | | | | | | 1. Run cargo fix --edition 2. Selectively revert the "if let"->"match" changes. These changes are meant to protect us from the lifetime changes for "if let" bindings in Rust 2024. But we're not actually relying on the old lifetime rules anywhere, and the match syntax here is quite ugly. 3. Automatically revert `$pat:expr_2021` to `$pat:expr`. (We don't actually want to restrict the expression syntax that our macros accept). Done with `git grep -l expr_2021 | xargs perl -i -pe 's/expr_2021/expr/g;'` 4. Run cargo fmt.
* Use new DisplayRedacted/DebugRedacted code for HsId.Nick Mathewson2025-07-311-3/+6
| | | | Closes #2012.
* tor-keymgr: BREAKING: Refactor API: Keystore::listhjrgrn2025-05-301-1/+1
| | | | | * Change return type `Result<Vec<(KeyPath, KeystoreItemType)>>` if favor of `Result<Vec<StdResult<(KeyPath, KeystoreItemType), UnrecognizedEntryError>>>`
* Merge branch '1889-resolve-some-todos' into 'main'gabi-2502025-03-141-185/+1
|\ | | | | | | | | | | | | tor-keymgr: Resolve TODOs from key_specifier::tests Closes #1889 See merge request tpo/core/arti!2849
| * tor-keymgr: Resolve TODOs from key_specifier::testshjrgrn2025-03-141-185/+1
| |
* | tor-hscrypto: Implement Display for TimePeriodhjrgrn2025-03-131-10/+1
|/
* Upgrade to derive_more 2Nick Mathewson2025-02-261-1/+1
| | | | | This took a little refactoring, since derive_more::Foo no longer re-exports std::ops::Foo.
* tor-keymgr: Add helper for building certificate ArtiPaths.Gabriela Moldovan2024-12-041-0/+11
| | | | This will be used for looking up certificates in the keystore.
* tor-keymgr: Add a KeyCertificateSpecifier trait.Gabriela Moldovan2024-12-041-0/+27
| | | | This will be used for defining key certificate specifiers.
* tor-keymgr: Rename KeyPathRange to ArtiPathRange.Gabriela Moldovan2024-10-081-2/+2
| | | | | This is only used for representing portions of `ArtiPath`s, so let's rename it accordingly.
* tor-keymgr: Implement KeyPath::matches for CTorPaths.Gabriela Moldovan2024-10-081-13/+36
| | | | | | | `KeyPath::matches` now returns a boolean (because we can't return a matching "range" for `CTorPaths`, because unlike ArtiPaths, they're not represented as `String`s, and do not have variable parts that need to be captured).
* tor-keymgr: Reimagine CTorPath as an enum.Gabriela Moldovan2024-10-081-11/+61
| | | | | | | | | | | | | | | | | | | | | | C Tor's client restricted discovery keys don't have the service hsid encoded in the filename (the hsid of the service each key is associated with is encoded in contents of the key file). This means that given a key specifier like `HsClientDescEncKeypairSpecifier` (which is a wrapper over an HsId), we can't actually compute the relative path of the key in its `KeySpecifier::ctor_path()` implementation. To do so we would need to access the keystore to figure out which path contains the requested HsId, which we can't (and shouldn't!) do from within the `KeySpecifier` impl. This suggests the String newtype (representing a relative path) we previously had is not a good abstraction for `CTorPath`s. Moreover, `CTorPath` are static (they don't have dynamic components like `ArtiPath`), so it makes more sense to model `CTorPath` as an enum. The new `CTorPath::ClientHsDescEncKey(HsId)` variant will be used to instruct the C Tor client keystore to find the file that contains the specified `HsId`, while the `Service` variant will be used for hidden service keys.
* tor-hsservice: Move HsNickname to tor-persist.Gabriela Moldovan2024-10-081-0/+3
| | | | | | | We are about to need this in `tor-keymgr`, where we're about to add a config for C Tor service keystores (the C Tor keystore config will have an associated `HsNickname` that specifies which of the arti hidden services it's supposed to be used with).
* Upgrade to derive_more version 1.0.0Nick Mathewson2024-09-251-3/+5
| | | | | | The `derive_more` crate broke backward compatibility with this version, so this change involved quite a few manual fixups. With luck, they'll keep compatibility for some while in the future.
* rename get_keypair_specifier() to keypair_specifier()Adam Joseph F0B74D717CDE8412A3E0D4D5F29AC8080DA8E1E02024-09-091-4/+4
| | | | https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2393#note_3073480
* tor_keymgr: add get_keypair_specifier() to KeySpecifier, and derive itAdam Joseph F0B74D717CDE8412A3E0D4D5F29AC8080DA8E1E02024-09-091-0/+16
| | | | | | | This commit adds a new method `get_keypair_specifier()` to `KeySpecifier`. This method is used to indicate when one KeySpecifier (e.g. `KP_hs_id`) is the public part of another keypair (e.g. `KS_hs_id`). It will return the containing keypair in this case, and `None` otherwise.
* Fix new "clippy::needless-maybe-sized" warning on nightlyNick Mathewson2024-07-281-1/+1
| | | | | This warning complains when we say `where T: SomeTrait + ?Sized` when `SomeTrait` is inherently Sized.
* tor-keymgr: Use collect_tuple in TimePeriod::from_slug (fmt).Gabriela Moldovan2024-07-081-1/+2
|
* tor-keymgr: Use collect_tuple in TimePeriod::from_slug.Gabriela Moldovan2024-07-081-5/+5
| | | | | | The previous approach was buggy: collecting the parts of the time period into an `ArrayVec` of length 3 would panic if the number of parts was greater than 3.
* tor-keymgr: Test that parsing a TimePeriod with too many parts doesn't panic.Gabriela Moldovan2024-07-081-0/+1
| | | | | | | | This test currently fails because we have a bug in `TimePeriod`'s `from_slug()` implementation. `TimePeriod::from_slug()` splits the slug by `_`, and attempts to collect the parts into an `ArrayVec` of length 3. This is wrong, because the `collect()` will panic if there are more than 3 parts.
* Switch to derive-deftlyIan Jackson2024-04-031-53/+53
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is the combination of a number of separate commits, many of which were generated by seddery, and then rebased and squashed. Cargo.toml perl -i~ -pe 's{^derive-adhoc}{derive-deftly = "0.10"}' crates/*/Cargo.toml (not regenerated during rebase) update Cargo.lock `cargo fetch` without --locked (regenerated during rebase) seddery git-ls-files | grep '\.rs$' | xargs perl -i~ -pe 's{^use derive_adhoc}{use derive_deftly}' git-ls-files | grep '\.rs$' | xargs perl -i~ -pe 's{\bdefine_derive_adhoc\b}{define_derive_deftly}g' git-ls-files | grep '\.rs$' | xargs perl -i~ -pe 's{\bAdhoc\b}{Deftly}g if m{derive}' git-ls-files | grep '\.rs$' | xargs perl -i~ -pe 's{\#\[derive_adhoc\b}{#[derive_deftly}g' git-ls-files | grep '\.rs$' | xargs perl -i~ -pe 's{use derive_adhoc}{use derive_deftly}' git-ls-files | grep '\.rs$' | xargs perl -i~ -pe 's{\bderive_adhoc\b}{derive_deftly_adhoc} if m{use.*deftly}' git-ls-files | grep '\.rs$' | xargs perl -i~ -pe 's{\bderive_adhoc!}{derive_deftly_adhoc!}' (not regenerated during rebase) Manually add `#[derive_deftly_adhoc]` where needed. seddery git-ls-files | grep '\.rs$' | xargs perl -i~ -pe 's{\#\[adhoc\b}{#[deftly}g' git-ls-files | grep '\.rs$' | xargs perl -i~ -pe 's{\bderive_adhoc_template}{derive_deftly_template}' (not regenerated during rebase) Manually fix up an import Manually update some builder attrs Manually fix up tor_rtmock::time_core This was missed in my seddery, due to me rebasing the branch and not redoing the seddery.
* Run maint/add_warning.Nick Mathewson2024-03-131-0/+1
|
* fix: fix typosDimitris Apostolou2024-03-091-3/+3
|
* tor-keymgr: Pick a better name for error variable.Ian Jackson2024-02-191-1/+1
|
* tor-keymgr: Add more context to errors returned from HsId::from_slug.Gabriela Moldovan2024-02-191-5/+4
| | | | | `InvalidKeyPathComponentValue::Slug` now has to wrap a `String`, because we can't get `HsIdParse` errors as static strings.
* tor-keymgr: Add more context to InvalidKeyPathComponentValue errors (fmt).Gabriela Moldovan2024-02-191-5/+11
|
* tor-keymgr: Add more context to InvalidKeyPathComponentValue errors.Gabriela Moldovan2024-02-191-9/+7
|
* tor-keymgr: Document what context to add to invalid slug errors.Gabriela Moldovan2024-02-191-0/+7
| | | | Prompted by https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/1960#note_2994317