[][src]Struct nitrokey::PasswordSafe

pub struct PasswordSafe<'a, 'b> { /* fields omitted */ }

A password safe on a Nitrokey device.

The password safe stores a tuple consisting of a name, a login and a password on a slot. The number of available slots is SLOT_COUNT. The slots are addressed starting with zero. To retrieve a password safe from a Nitrokey device, use the get_password_safe method from the GetPasswordSafe trait. Note that the device must live at least as long as the password safe.

Once the password safe has been unlocked, it can be accessed without a password. Therefore it is mandatory to call lock on the corresponding device after the password store is used. As this command may have side effects on the Nitrokey Storage, it cannot be called automatically once the password safe is destroyed.

Examples

Open a password safe and access a password:

use nitrokey::{Device, GetPasswordSafe, PasswordSafe};

fn use_password_safe(pws: &PasswordSafe) -> Result<(), Error> {
    let name = pws.get_slot_name(0)?;
    let login = pws.get_slot_login(0)?;
    let password = pws.get_slot_login(0)?;
    println!("Credentials for {}: login {}, password {}", name, login, password);
    Ok(())
}

let mut manager = nitrokey::take()?;
let mut device = manager.connect()?;
let pws = device.get_password_safe("123456")?;
use_password_safe(&pws);
drop(pws);
device.lock()?;

Methods

impl<'a, 'b> PasswordSafe<'a, 'b>[src]

pub fn get_slot_status(&self) -> Result<[bool; 16], Error>[src]

Returns the status of all password slots.

The status indicates whether a slot is programmed or not.

Example

use nitrokey::{GetPasswordSafe, SLOT_COUNT};

let mut manager = nitrokey::take()?;
let mut device = manager.connect()?;
let pws = device.get_password_safe("123456")?;
pws.get_slot_status()?.iter().enumerate().for_each(|(slot, programmed)| {
    let status = match *programmed {
        true => "programmed",
        false => "not programmed",
    };
    println!("Slot {}: {}", slot, status);
});

pub fn get_slot_name(&self, slot: u8) -> Result<String, Error>[src]

Returns the name of the given slot (if it is programmed).

This method also returns a SlotNotProgrammed error if the name is empty.

Errors

Example

use nitrokey::GetPasswordSafe;

let mut manager = nitrokey::take()?;
let mut device = manager.connect()?;
match device.get_password_safe("123456") {
    Ok(pws) => {
        let name = pws.get_slot_name(0)?;
        let login = pws.get_slot_login(0)?;
        let password = pws.get_slot_login(0)?;
        println!("Credentials for {}: login {}, password {}", name, login, password);
    },
    Err(err) => eprintln!("Could not open the password safe: {}", err),
};

pub fn get_slot_login(&self, slot: u8) -> Result<String, Error>[src]

Returns the login for the given slot (if it is programmed).

This method also returns a SlotNotProgrammed error if the login is empty.

Errors

Example

use nitrokey::GetPasswordSafe;

let mut manager = nitrokey::take()?;
let mut device = manager.connect()?;
let pws = device.get_password_safe("123456")?;
let name = pws.get_slot_name(0)?;
let login = pws.get_slot_login(0)?;
let password = pws.get_slot_login(0)?;
println!("Credentials for {}: login {}, password {}", name, login, password);

pub fn get_slot_password(&self, slot: u8) -> Result<String, Error>[src]

Returns the password for the given slot (if it is programmed).

This method also returns a SlotNotProgrammed error if the password is empty.

Errors

Example

use nitrokey::GetPasswordSafe;

let mut manager = nitrokey::take()?;
let mut device = manager.connect()?;
let pws = device.get_password_safe("123456")?;
let name = pws.get_slot_name(0)?;
let login = pws.get_slot_login(0)?;
let password = pws.get_slot_login(0)?;
println!("Credentials for {}: login {}, password {}", name, login, password);

pub fn write_slot(
    &mut self,
    slot: u8,
    name: &str,
    login: &str,
    password: &str
) -> Result<(), Error>
[src]

Writes the given slot with the given name, login and password.

Errors

Example

use nitrokey::GetPasswordSafe;

let mut manager = nitrokey::take()?;
let mut device = manager.connect()?;
let pws = device.get_password_safe("123456")?;
let name = pws.get_slot_name(0)?;
let login = pws.get_slot_login(0)?;
let password = pws.get_slot_login(0)?;
println!("Credentials for {}: login {}, password {}", name, login, password);

pub fn erase_slot(&mut self, slot: u8) -> Result<(), Error>[src]

Erases the given slot. Erasing clears the stored name, login and password (if the slot was programmed).

Errors

Example

use nitrokey::GetPasswordSafe;

let mut manager = nitrokey::take()?;
let mut device = manager.connect()?;
let mut pws = device.get_password_safe("123456")?;
match pws.erase_slot(0) {
    Ok(()) => println!("Erased slot 0."),
    Err(err) => eprintln!("Could not erase slot 0: {}", err),
};

Trait Implementations

impl<'a, 'b> Debug for PasswordSafe<'a, 'b>[src]

impl<'a, 'b> Drop for PasswordSafe<'a, 'b>[src]

Auto Trait Implementations

impl<'a, 'b> !RefUnwindSafe for PasswordSafe<'a, 'b>

impl<'a, 'b> !Send for PasswordSafe<'a, 'b>

impl<'a, 'b> !Sync for PasswordSafe<'a, 'b>

impl<'a, 'b> Unpin for PasswordSafe<'a, 'b> where
    'b: 'a, 

impl<'a, 'b> !UnwindSafe for PasswordSafe<'a, 'b>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.