Expand description
§tor-keymgr
Code to fetch, store, and update keys.
§Overview
This crate is part of Arti, a project to implement Tor in Rust.
§Likely to change
The APIs exposed by this crate (even without the keymgr
feature)
are new and are likely to change rapidly.
We’ll therefore often be making semver-breaking changes
(and will update the crate version accordingly).
§Key stores
The KeyMgr
is an interface to one or more key stores. A key
store is a type that implements the Keystore
trait.
The following key store implementations are provided:
ArtiNativeKeystore
: an on-disk store that stores keys in OpenSSH format. It does not currently support keys that have a passphrase. Passphrase support will be added in the future (see #902).- (not yet implemented) C Tor key store: an on-disk store that is backwards-compatible with C Tor (new keys are stored in the format used by C Tor, and any existing keys are expected to be in this format too).
In the future we plan to also support HSM-based key stores.
§Key specifiers and key types
The Keystore
APIs identify a particular instance of a key using a
KeySpecifier
and a KeyType
.
This enables key stores to have multiple keys with the same role
(i.e. the same KeySpecifier::arti_path
), but different key types (i.e.
different KeyType::arti_extension
s).
A KeySpecifier
identifies a group of equivalent keys, each of a different
type (algorithm). In the ArtiNativeKeystore
, it is used to determine the
path of the key within the key store, minus the extension (the extension of
the key is derived from its KeyType
). KeySpecifier
implementers must
specify:
- the
ArtiPath
of the specifier: this serves as a unique identifier for a particular instance of a key, and is used byArtiNativeKeystore
to determine the path of a key on disk - the
CTorPath
of the key: the location of the key in the C Tor key store (optional).
KeyType
represents the type (“keypair”, “public key”) and
algorithm (“ed25519”, “x25519”) of a key
KeyType::arti_extension
specifies what file extension keys of that type are
expected to have when stored in an ArtiNativeKeystore
: ArtiNativeKeystore
s
join the KeySpecifier::arti_path
and KeyType::arti_extension
to form the
path of the key on disk (relative to the root directory of the key store).
§Feature flags
§Additive features
keymgr
– build with full key manager support. Disabling this feature causestor-keymgr
to export a no-op, placeholder implementation.
§Experimental and unstable features
Note that the APIs enabled by these features are NOT covered by semantic versioning1 guarantees: we might break them or remove them between patch versions.
- (None at present)
Remember, semantic versioning is what makes various
cargo
features work reliably. To be explicit: if you wantcargo update
to only make safe changes, then you cannot enable these features. ↩
Re-exports§
pub use ssh_key;
keymgr
Modules§
- config
- Configuration options for types implementing
Keystore
- test_
utils testing
- Test helpers.
Macros§
- derive_
deftly_ template_ KeySpecifier - A helper for implementing
KeySpecifier
s. - register_
key_ info_ extractor - Register a
KeyPathInfoExtractor
for use withKeyMgr
.
Structs§
- Arti
Ephemeral Keystore keymgr
andephemeral-keystore
- The Ephemeral Arti key store
- Arti
Native Keystore keymgr
- The Arti key store.
- Arti
Path - A unique identifier for a particular instance of a key.
- Arti
Path Range - A range specifying a substring of a
KeyPath
. - CTor
Client Keystore keymgr
andctor-keystore
- A read-only C Tor client keystore.
- CTor
Service Keystore keymgr
andctor-keystore
- A read-only C Tor service keystore.
- KeyMgr
keymgr
- A key manager that acts as a frontend to a primary
Keystore
and any number of secondaryKeystore
s. - KeyMgr
Builder keymgr
- Builder for
KeyMgr
. - KeyPath
Info - Information about a
KeyPath
. - KeyPath
Info Builder - Builder for
KeyPathInfo
. - Keystore
Entry keymgr
- A keystore entry descriptor.
- Keystore
Id - An identifier for a particular
Keystore
instance. - SshKey
Data - A public key or a keypair.
- Unknown
KeyType Error - An error that happens when we encounter an unknown key type.
Enums§
- Arti
Path Syntax Error - An error caused by a syntactically invalid
ArtiPath
. - Arti
Path Unavailable Error - An error returned by a
KeySpecifier
. - CTor
Path - The path of a key in the C Tor key store.
- CTor
Service Path - The relative path in a C Tor key store.
- Error
- An Error type for this crate.
- Invalid
KeyPath Component Value - Error to be returned by
KeySpecifierComponent::from_slug
implementations - KeyMgr
Builder Error keymgr
- Error type for KeyMgrBuilder
- KeyPath
- The identifier of a key.
- KeyPath
Error - An error while attempting to extract information about a key given its path
- KeyPath
Pattern - A pattern that can be used to match
ArtiPath
s orCTorPath
s. - KeyType
- A type of key stored in the key store.
- Keystore
Corruption Error - An error caused by keystore corruption.
- Keystore
Selector - Specifies which keystores a
KeyMgr
operation should apply to. - SshKey
Algorithm - SSH key algorithms.
Constants§
- DENOTATOR_
SEP - A separator for that marks the beginning of the keys denotators
within an
ArtiPath
.
Traits§
- Encodable
Item - A key that can be serialized to, and deserialized from.
- KeyCertificate
Specifier - The “specifier” of a key certificate, which identifies an instance of a cert, as well as its signing and subject keys.
- KeyPath
Info Extractor - A trait for extracting info out of a
KeyPath
s. - KeySpecifier
- The “specifier” of a key, which identifies an instance of a key.
- KeySpecifier
Component - A trait for serializing and deserializing specific types of
Slug
s. - KeySpecifier
Component ViaDisplay From Str - Implement
KeySpecifierComponent
in terms ofDisplay
andFromStr
(helper trait) - KeySpecifier
Pattern - A pattern specifying some or all of a kind of key
- Keygen
- A trait for generating fresh keys.
- Keygen
Rng - A random number generator for generating
EncodableItem
s. - Keystore
keymgr
- A generic key store.
- Keystore
Error - An error returned by a
Keystore
. - ToEncodable
Key - A key that can be converted to an
EncodableItem
.