Struct tor_keymgr::KeyMgr
source · pub struct KeyMgr { /* private fields */ }keymgr only.Expand description
Implementations§
source§impl KeyMgr
impl KeyMgr
sourcepub fn get<K: ToEncodableKey>(
&self,
key_spec: &dyn KeySpecifier
) -> Result<Option<K>>
pub fn get<K: ToEncodableKey>( &self, key_spec: &dyn KeySpecifier ) -> Result<Option<K>>
Read a key from one of the key stores, and try to deserialize it as K::Key.
The key returned is retrieved from the first key store that contains an entry for the given specifier.
Returns Ok(None) if none of the key stores have the requested key.
sourcepub fn get_with_type<K: ToEncodableKey>(
&self,
key_spec: &dyn KeySpecifier,
key_type: &KeyType
) -> Result<Option<K>>
pub fn get_with_type<K: ToEncodableKey>( &self, key_spec: &dyn KeySpecifier, key_type: &KeyType ) -> Result<Option<K>>
Read a key from one of the key stores, and try to deserialize it as K::Key.
The key returned is retrieved from the first key store that contains an entry for the given specifier.
Returns Ok(None) if none of the key stores have the requested key.
Returns an error if the specified key_type does not match K::Key::key_type().
sourcepub fn get_or_generate_with_derived<K: ToEncodableKey>(
&self,
key_spec: &dyn KeySpecifier,
selector: KeystoreSelector<'_>,
derive: impl FnOnce() -> Result<K>
) -> Result<K>
pub fn get_or_generate_with_derived<K: ToEncodableKey>( &self, key_spec: &dyn KeySpecifier, selector: KeystoreSelector<'_>, derive: impl FnOnce() -> Result<K> ) -> Result<K>
Read the key identified by key_spec.
The key returned is retrieved from the first key store that contains an entry for the given specifier.
If the requested key does not exist in any of the key stores, this generates a new key of
type K computed using the provided derive function and inserts it into the specified
keystore, returning the newly inserted value.
sourcepub fn get_or_generate<K>(
&self,
key_spec: &dyn KeySpecifier,
selector: KeystoreSelector<'_>,
rng: &mut dyn KeygenRng
) -> Result<K>where
K: ToEncodableKey,
K::Key: Keygen,
pub fn get_or_generate<K>( &self, key_spec: &dyn KeySpecifier, selector: KeystoreSelector<'_>, rng: &mut dyn KeygenRng ) -> Result<K>where K: ToEncodableKey, K::Key: Keygen,
Read the key identified by key_spec.
The key returned is retrieved from the first key store that contains an entry for the given specifier.
If the requested key does not exist in any of the key stores, this generates a new key of
type K from the key created using using K::Key’s Keygen implementation, and inserts
it into the specified keystore, returning the newly inserted value.
sourcepub fn generate<K>(
&self,
key_spec: &dyn KeySpecifier,
selector: KeystoreSelector<'_>,
rng: &mut dyn KeygenRng,
overwrite: bool
) -> Result<Option<()>>where
K: ToEncodableKey,
K::Key: Keygen,
pub fn generate<K>( &self, key_spec: &dyn KeySpecifier, selector: KeystoreSelector<'_>, rng: &mut dyn KeygenRng, overwrite: bool ) -> Result<Option<()>>where K: ToEncodableKey, K::Key: Keygen,
Generate a new key of type K, and insert it into the key store specified by selector.
If the key already exists in the specified key store, the overwrite flag is used to
decide whether to overwrite it with a newly generated key.
Returns Ok(Some(()) if a new key was created, and Ok(None) otherwise.
IMPORTANT: using this function concurrently with any other KeyMgr operation that
mutates the key store state is not recommended, as it can yield surprising results! The
outcome of KeyMgr::generate depends on whether the selected key store
contains the specified key, and thus suffers from a a TOCTOU race.
sourcepub fn generate_with_derived<SK, PK>(
&self,
keypair_key_spec: &dyn KeySpecifier,
public_key_spec: &dyn KeySpecifier,
selector: KeystoreSelector<'_>,
derive_pub: impl FnMut(&SK::Key) -> PK,
rng: &mut dyn KeygenRng,
overwrite: bool
) -> Result<Option<()>>where
SK: ToEncodableKey,
SK::Key: Keygen,
PK: EncodableKey + PartialEq,
pub fn generate_with_derived<SK, PK>( &self, keypair_key_spec: &dyn KeySpecifier, public_key_spec: &dyn KeySpecifier, selector: KeystoreSelector<'_>, derive_pub: impl FnMut(&SK::Key) -> PK, rng: &mut dyn KeygenRng, overwrite: bool ) -> Result<Option<()>>where SK: ToEncodableKey, SK::Key: Keygen, PK: EncodableKey + PartialEq,
Generate a new keypair of type SK and the corresponding public key of type PK, and
insert them into the key store specified by selector.
If the keypair already exists in the specified key store, the overwrite flag is used to
decide whether to overwrite it with a newly generated key.
If overwrite is false and the keypair already exists in the keystore, but the
corresponding public key does not, ththe public key will be derived from the existing
keypair and inserted into the keystore.
If overwrite is false and the keypair does not exist in the keystore, but its
corresponding public key does, this will not generate a fresh keypair.
Returns Ok(Some(()) if a new keypair was created, and Ok(None) otherwise.
NOTE: If the keypair and its corresponding public key already exist in the keystore, this function checks if they match. If they do not, it returns an error.
IMPORTANT: using this function concurrently with any other KeyMgr operation that
mutates the key store state is not recommended, as it can yield surprising results! The
outcome of KeyMgr::generate_with_derived depends on whether the selected key store
contains the specified keypair, and thus suffers from a a TOCTOU race.
sourcepub fn insert<K: ToEncodableKey>(
&self,
key: K,
key_spec: &dyn KeySpecifier,
selector: KeystoreSelector<'_>
) -> Result<()>
pub fn insert<K: ToEncodableKey>( &self, key: K, key_spec: &dyn KeySpecifier, selector: KeystoreSelector<'_> ) -> Result<()>
Insert key into the Keystore specified by selector.
If the key already exists, it is overwritten.
sourcepub fn remove<K: ToEncodableKey>(
&self,
key_spec: &dyn KeySpecifier,
selector: KeystoreSelector<'_>
) -> Result<Option<()>>
pub fn remove<K: ToEncodableKey>( &self, key_spec: &dyn KeySpecifier, selector: KeystoreSelector<'_> ) -> Result<Option<()>>
Remove the key identified by key_spec from the Keystore specified by selector.
Returns Ok(None) if the key does not exist in the requested keystore.
Returns Ok(Some(()) if the key was successfully removed.
Returns Err if an error occurred while trying to remove the key.
sourcepub fn list_matching<M>(
&self,
pat: &KeyPathPatternSet,
derive_meta: impl Fn(&KeyPath, &[KeyPathRange]) -> Result<M>
) -> Result<Vec<(KeyPath, KeyType, M)>>
pub fn list_matching<M>( &self, pat: &KeyPathPatternSet, derive_meta: impl Fn(&KeyPath, &[KeyPathRange]) -> Result<M> ) -> Result<Vec<(KeyPath, KeyType, M)>>
Return the keys matching the specified KeyPathPatternSet.
NOTE: This searches for matching keys in all keystores.
Auto Trait Implementations§
impl !RefUnwindSafe for KeyMgr
impl Send for KeyMgr
impl Sync for KeyMgr
impl Unpin for KeyMgr
impl !UnwindSafe for KeyMgr
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.