Crate psh

source ·
Expand description


For preamble to design philosophy of this crate see GitHub project page.

psh is a password generator and a password manager library which produces deterministic passwords for a set of user inputs. It can store previously used aliases and their password derivation settings in encrypted form in its internal database at $HOME/.psh.db.

There is a binary crate psh-cli – a CLI utility that leverages psh functionality. It can be installed using the following cargo command:

$ cargo install psh-cli

Below is an example of how to use psh in your code:

use psh::{Psh, ZeroizingString, store::PshMemDb};

let master_password = ZeroizingString::new(
let psh = Psh::new(
    ).expect("Error initializing Psh");
let alias = ZeroizingString::new(
let password = psh.derive_password(&alias, None, None);

For greater security it’s possible to supply a secret:

let secret = ZeroizingString::new(
let password = psh.derive_password(&alias, Some(secret), None);

The third argument to derive_password() is CharSet:

use psh::CharSet;
// This password should consist of [a-zA-Z0-9] characters only
let password = psh.derive_password(&alias, None, Some(CharSet::Reduced));

To store/remove alias and its settings to/from psh database:

let mut psh = Psh::new(
    ).expect("Error initializing Psh");
let use_secret = true;
let charset = CharSet::RequireAll;
// Store alias
psh.append_alias_to_db(&alias, Some(use_secret), Some(charset))
    .expect("Error storing alias");
// Remove alias
    .expect("Error removing alias");

Note that in the examples above in-memory PshMemDb is used as a database backend. There are other backends available: psh_db::PshDb which uses plain file and psh_webdb::PshWebDb which uses LocalStorage Web API.




  • psh interface
  • Safe String wrapper which employs zeroize crate to wipe memory of its content


  • Character set for a derived password