logins::encryption

Struct NSSKeyManager

Source
pub struct NSSKeyManager { /* private fields */ }
Expand description

Use the NSSKeyManager to use NSS for key management.

NSS stores keys in key4.db within the profile and wraps the key with a key derived from the primary password, if set. It defers to the provided PrimaryPasswordAuthenticator implementation to handle user authentication. Note that if no primary password is set, the wrapping key is deterministically derived from an empty string.

Make sure to initialize NSS using ensure_initialized_with_profile_dir before creating a NSSKeyManager.

§Examples

use std::sync::Arc;
use async_trait::async_trait;
use logins::{PrimaryPasswordAuthenticator, LoginsApiError, NSSKeyManager};
use logins::encryption::KeyManager;

struct MyPrimaryPasswordAuthenticator {}

#[async_trait]
impl PrimaryPasswordAuthenticator for MyPrimaryPasswordAuthenticator {
    async fn get_primary_password(&self) -> Result<String, LoginsApiError> {
        // Most likely, you would want to prompt for a password.
        // let password = prompt_string("primary password").unwrap_or_default();
        Ok("secret".to_string())
    }

    fn on_authentication_success(&self) {
        println!("success");
    }

    fn on_authentication_failure(&self) {
        println!("this did not work, please try again:");
    }
}
let key_manager = NSSKeyManager::new(Arc::new(MyPrimaryPasswordAuthenticator {}));
assert_eq!(key_manager.get_key().unwrap().len(), 63);

Implementations§

Source§

impl NSSKeyManager

Source

pub fn new( primary_password_authenticator: Arc<dyn PrimaryPasswordAuthenticator>, ) -> Self

Initialize new NSSKeyManager with a given PrimaryPasswordAuthenticator. There must be a previous initializiation of NSS before initializing NSSKeyManager, otherwise this panics.

Trait Implementations§

Source§

impl KeyManager for NSSKeyManager

Source§

impl<UT> LiftRef<UT> for NSSKeyManager

Source§

impl<UT> LowerError<UT> for NSSKeyManager

Source§

fn lower_error(obj: Self) -> RustBuffer

Lower this value for scaffolding function return Read more
Source§

impl<UT> LowerReturn<UT> for NSSKeyManager

Source§

type ReturnType = <Arc<NSSKeyManager> as LowerReturn<UniFfiTag>>::ReturnType

The type that should be returned by scaffolding functions for this type. Read more
Source§

fn lower_return(obj: Self) -> Result<Self::ReturnType, RustCallError>

Lower the return value from an scaffolding call Read more
§

fn handle_failed_lift( error: LiftArgsError, ) -> Result<Self::ReturnType, RustCallError>

Lower the return value for failed argument lifts Read more
Source§

impl<UT> TypeId<UT> for NSSKeyManager

Source§

const TYPE_ID_META: MetadataBuffer = _

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, UT> HandleAlloc<UT> for T
where T: Send + Sync,

§

fn new_handle(value: Arc<T>) -> Handle

Create a new handle for an Arc value Read more
§

unsafe fn clone_handle(handle: Handle) -> Handle

Clone a handle Read more
§

unsafe fn consume_handle(handle: Handle) -> Arc<T>

Consume a handle, getting back the initial Arc<> Read more
§

unsafe fn get_arc(handle: Handle) -> Arc<Self>

Get a clone of the Arc<> using a “borrowed” handle. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T