aboutsummaryrefslogtreecommitdiff
path: root/crates/tor-keymgr/src/mgr.rs
Commit message (Collapse)AuthorAgeFilesLines
* Remove now-unneeded allow(clippy::cognitive_complexity)Jim Newsome2026-07-151-2/+0
|
* 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.
* Merge branch 'patch-1' into 'main'David Goulet2026-05-281-0/+1
|\ | | | | | | | | feat: Make KeystoreEntry::new() public See merge request tpo/core/arti!3288
| * feat: Make KeystoreEntry::new() publicAaron Dewes2025-09-291-0/+1
| | | | | | | | | | | | | | | | | | | | | | Commit 6958b6c8 changed the way the `Keystore` trait works. The `list` method must now return a `KeystoreEntry`. Before this change, it was essentially impossible to implement keystores outside of `tor-keymgr`. For 3rd party users of the Arti API that want to implement a custom keystore, it became essentially impossible to do so. To make this work again, this commit makes KeystoreEntry::new() public, if the experimental-api feature is enabled.
* | keymgr: Remove a couple unused From<> implsGabriela Moldovan2026-05-181-10/+0
| | | | | | | | | | These are unused, and I don't think they're needed by our API users either, since `KeystoreEntryResult` is just a type alias for `Result`.
* | keymgr: Update tests to stop using RawKeystoreEntryGabriela Moldovan2026-05-181-11/+12
| | | | | | | | `RawKeystoreEntry` no longer exists, so these tests need to be updated.
* | keymgr: Remove RawKeystoreEntryGabriela Moldovan2026-05-181-8/+2
| | | | | | | | | | | | | | | | | | | | | | | | I think this adds unnecessary indirection, and it's a bit confusing to have two separate keystore entry types (we have `KeystoreEntry` too). This type exists just to server as a wrapper over the `RawEntryId` of an unrecognized keystore entry, and the `KeystoreId` of the keystore it was found in. This commit folds `RawKeystoreEntry` into `UnrecognizedEntry`, which was previously a thin wrapper over `RawKeystoreEntry`.
* | tor-cert: Ed25519CertBuilder: do builder fn renameIan Jackson2026-04-291-1/+1
| | | | | | | | | | | | Change all call sites. This completes the rename.
* | tor-keymgr: migrate to web-time-compat.Nick Mathewson2026-03-261-2/+2
| |
* | keymgr: Remove now-addressed XXXGabriela Moldovan2026-03-171-3/+0
| |
* | keymgr: Fix feature-gating in testsGabriela Moldovan2026-03-171-4/+3
| |
* | keymgr: Lower get() logic into get_from_store()Gabriela Moldovan2026-03-171-13/+15
| | | | | | | | | | | | | | | | | | This moves the logic for retrieving a public key from its corresponding keypair into `get_from_store()`. Fixes a bug which made it impossible to retrieve a public key using the key specifier of its keypair type with any function other than `KeyMgr::get()`.
* | keymgr: Add more tests to reveal the get_*() bug for public keysGabriela Moldovan2026-03-171-1/+65
| | | | | | | | This will be fixed in the next commit.
* | keymgr: Pass the item type to entry_descriptor() (fmt)Gabriela Moldovan2026-03-171-1/+5
| |
* | keymgr: Pass the item type to entry_descriptor()Gabriela Moldovan2026-03-171-4/+4
| | | | | | | | I am about to repurpose this test helper for other item types too.
* | keymgr: Preserve item metadata when converting to TestPublicKey (fmt)Gabriela Moldovan2026-03-171-1/+4
| |
* | keymgr: Preserve item metadata when converting to TestPublicKeyGabriela Moldovan2026-03-171-1/+3
| | | | | | | | This will enable us to test the provenance of public keys.
* | keymgr: Use the keypair specifier when generating keys.Gabriela Moldovan2026-03-171-1/+9
| | | | | | | | | | | | | | When generating a new keypair, we want to use the keypair specifier of the subject key. Fixes a bug where this code was incorrectly generating a keypair using the specifier of the public key type (the resulting generated key had a `kp_` prefix instead of `ks_`).
* | keymgr: Add test retrieving an expired certGabriela Moldovan2026-03-121-1/+77
| | | | | | | | | | This tests that the `KeyMgr` returns an error if you try to retrieve an invalid cert.
* | keymgr: Introduce a new TestCert typeGabriela Moldovan2026-03-121-4/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a bit of a hack, but we need it to make the tests pass. The issue is that our test keystore stores `TestItem`s, and all our other test used `TestItem` as their key types. Now that we have certs, we have this concept of a `ToEncodableCert::ParsedCert`, which is what the keymgr downcasts the retrieved certs to before validating them and returning the final cert result (which is usually going to be of a different type than `ParsedCert`). This wrapper ensures that the keystore returns the expected `ParsedCert` type, so that validation doesn't fail. Before this change, we were hackily returning `TestItem` in the tests, even for certificates, but that doesn't work anymore, because the `ItemType` impl of `TestItem` returns `KeyType::Ed25519Keypair`, which is obviously not a `CertType`. Using it resulted in an error because there is a mismatch between the cert `ItemType` (`Ed25519Keypair`) and the `ItemType` of the `KeystoreItem::Cert` entry (`Ed25519TorCert`). Normally this wouldn't happen, but the whole test keystore implementation is funky and inconsistent.
* | keymgr: Add tests for the new get_cert() APIGabriela Moldovan2026-03-121-1/+89
| |
* | keymgr: Generate test cert specifiers using d-dGabriela Moldovan2026-03-121-2/+3
| | | | | | | | | | | | This will enable us to test against other keymgr APIs (e.g. `list_matching()`), which require some extra trait impls that get generated for free by our new `CertSpecifier` macro.
* | keymgr: Make make_certificate() a top-level functionGabriela Moldovan2026-03-121-31/+32
| | | | | | | | This will soon be used by other tests too.
* | keymgr: Add new KeyMgr::get_cert_entry() APIGabriela Moldovan2026-03-121-1/+70
| | | | | | | | | | | | This will enable us to retrieve a cert given its `KeystoreEntry`. This is useful for retrieving certificates listed with `KeyMgr::list_matching()`.
* | keymgr: Abolish KeyCertificateSpecifier::signing_key_specifier()Gabriela Moldovan2026-03-121-11/+7
| | | | | | | | | | | | | | 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)
* | Merge branch 'cert-denotators2' into 'main'Ian Jackson2026-03-111-5/+2
|\ \ | | | | | | | | | | | | | | | | | | keymgr: Update cert ArtiPath building to use denotator sets Closes #2377 See merge request tpo/core/arti!3754
| * | keymgr: Implement KeySpecifier for KeyCertificateSpecifiersGabriela Moldovan2026-03-051-5/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | `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: Remove unnecessary TestItem building (fmt)Gabriela Moldovan2026-03-101-1/+4
| | |
* | | keymgr: Remove unnecessary TestItem buildingGabriela Moldovan2026-03-101-4/+1
| | |
* | | keymgr: Remove unnecessary parenthesesGabriela Moldovan2026-03-101-1/+1
| | | | | | | | | | | | Resolves a clippy warning.
* | | keymgr: Replace .find(...).is_some() with .any() (fmt)Gabriela Moldovan2026-03-101-9/+4
| | |
* | | keymgr: Replace .find(...).is_some() with .any()Gabriela Moldovan2026-03-101-3/+2
| | | | | | | | | | | | Resolves a clippy warning.
* | | keymgr: Replace Result<> with type alias (fmt)Gabriela Moldovan2026-03-101-5/+5
| | |
* | | keymgr: Replace match with if letGabriela Moldovan2026-03-101-4/+1
| | | | | | | | | | | | As suggested by clippy
* | | keymgr: Replace Result<> with type alias (fmt)Gabriela Moldovan2026-03-101-3/+5
| | |
* | | keymgr: Replace Result<> with type aliasGabriela Moldovan2026-03-101-1/+1
| | |
* | | keymgr: Remove unnecessary type annotationGabriela Moldovan2026-03-101-4/+1
| | |
* | | keymgr: Replace macro-generated Keystore impls with a single Keystore type (fmt)Gabriela Moldovan2026-03-101-162/+156
| | |
* | | keymgr: Replace macro-generated Keystore impls with a single Keystore typeGabriela Moldovan2026-03-101-33/+22
| | | | | | | | | | | | | | | | | | | | | | | | This doesn't really need to be macro-generated, because these impls only differ in the `KeystoreId`. The code is intentionally misindented to make reviewing the diff a bit easier. A future commit will reformat it all.
* | | keymgr: Move unrecognized entry building logic out of macro (fmt)Gabriela Moldovan2026-03-101-22/+14
| | |
* | | keymgr: Move unrecognized entry building logic out of macroGabriela Moldovan2026-03-101-29/+34
|/ / | | | | | | | | I am about to remove this macro altogether and simplify the keystore impls, so I am preemptively moving this into a separate function.
* | keymgr: Fix some recently broken doc linksGabriela Moldovan2026-01-061-2/+2
| |
* | keymgr: Resolve a handful of clippy warningsGabriela Moldovan2026-01-061-1/+1
| |
* | keymgr: Move Unrecognized errors out of KeyPathError (fmt)Gabriela Moldovan2026-01-061-3/+3
| |
* | keymgr: Move Unrecognized errors out of KeyPathErrorGabriela Moldovan2026-01-061-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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()`).
* | proto: Use describe() unconditionally in validate_entry_integrity()Gabriela Moldovan2026-01-061-12/+5
| | | | | | | | | | `KeyMgr::describe()` now works for `CTorPath`s too, so the key path validation can be the same as for `ArtiPath`s.
* | Remove unnecessary `doc(cfg(...))` attributesNeel Chauhan2025-12-041-1/+0
| | | | | | | | | | | | | | | | | | Fixes part of #2193. (Edits from nickm: I selected the cases here that I could verify were correct from immediate context.) Edited-by: Nick Mathewson <[email protected]>
* | Add `hsc key ctor-migrate` subcommandhjrgrn2025-11-241-0/+4
| |
* | Fix name of clippy lint to unchecked_time_subtraction (2)Ian Jackson2025-11-061-1/+1
|/ | | | Run maint/add_warning
* tor-keymgr: Fix `KeyMgr::list_keystores` descriptionhjrgrn2025-09-221-1/+1
|