Struct nitrokey::PasswordSafe

source ·
pub struct PasswordSafe<'a> { /* private fields */ }
Expand description

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<(), CommandError> {
    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 device = nitrokey::connect()?;
let pws = device.get_password_safe("123456")?;
use_password_safe(&pws);
device.lock()?;

Implementations

Returns the status of all password slots.

The status indicates whether a slot is programmed or not.

Example
use nitrokey::{GetPasswordSafe, SLOT_COUNT};

let device = nitrokey::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);
});

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

Errors
Example
use nitrokey::GetPasswordSafe;

let device = nitrokey::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) => println!("Could not open the password safe: {}", err),
};

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

Errors
Example
use nitrokey::GetPasswordSafe;

let device = nitrokey::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);

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

Errors
Example
use nitrokey::GetPasswordSafe;

let device = nitrokey::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);

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

Errors
Example
use nitrokey::GetPasswordSafe;

let device = nitrokey::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);

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

Errors
Example
use nitrokey::GetPasswordSafe;

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

Trait Implementations

Executes the destructor for this type. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.