Crate kpdb

source · []
Expand description

Library for reading and writing KeePass 2 and KeePassX databases.

Usage

To use this crate, add the following to your Cargo.toml:

[dependencies]
rust-kpdb = "0.5"

And the following to your crate root:

extern crate kpdb;

Examples

Create a new database adding two groups and two entries:

use kpdb::{CompositeKey, Database, Entry, Group};

// Create a new database.
let key = CompositeKey::from_password("password");
let mut db = Database::new(&key);

// Create a new group named Email.
let mut email_group = Group::new("Email");
let email_group_uuid = email_group.uuid;

// Create an entry for ProtonMail and add it to the Email group.
let mut protonmail = Entry::new();
let protonmail_uuid = protonmail.uuid;
protonmail.set_title("ProtonMail");
protonmail.set_username("mailuser");
protonmail.set_password("mailpass");
protonmail.set_url("https://mail.protonmail.com");
email_group.add_entry(protonmail);

// Create a new group named VPN.
let mut vpn_group = Group::new("VPN");

// Create an entry for ProtonVPN and add it to the VPN group.
let mut protonvpn = Entry::new();
protonvpn.set_title("ProtonVPN");
protonvpn.set_username("vpnuser");
protonvpn.set_password("vpnpass");
protonvpn.set_url("https://prontvpn.com");
vpn_group.add_entry(protonvpn);

// Add the Email and VPN groups to the Root group.
db.root_group.add_group(email_group);
db.root_group.add_group(vpn_group);

// Find groups matching "email".
let groups = db.find_groups("email");
assert_eq!(groups.len(), 1);

// Find entries matching "proton".
let entries = db.find_entries("proton");
assert_eq!(entries.len(), 2);

// Retrieve a group by its UUID.
let group = db.get_group(email_group_uuid).unwrap();
assert_eq!(group.name, "Email");

// Retrieve an entry by its UUID.
let entry = db.get_entry(protonmail_uuid).unwrap();
assert_eq!(entry.title(), Some("ProtonMail"));
assert_eq!(entry.username(), Some("mailuser"));
assert_eq!(entry.password(), Some("mailpass"));
assert_eq!(entry.url(), Some("https://mail.protonmail.com"));
assert_eq!(entry.notes(), None);

Open the existing KeePass database passwords.kdbx using the password “password”, print it and save it to new.kdbx:

use kpdb::{CompositeKey, Database};
use std::fs::File;

let mut file = File::open("passwords.kdbx").unwrap();
let key = CompositeKey::from_password("password");
let db = Database::open(&mut file, &key).unwrap();

println!("{:?}", db);

let mut file = File::create("new.kdbx").unwrap();
db.save(&mut file).unwrap();

Open the existing KeePass database passwords.kdbx using both the password “password” and the key file passwords.key, print it and save it to new.kdbx:

use kpdb::{CompositeKey, Database, KeyFile};
use std::fs::File;

let mut file = File::open("passwords.key").unwrap();
let key_file = KeyFile::open(&mut file).unwrap();
let key = CompositeKey::from_both("password", key_file);

let mut file = File::open("passwords.kdbx").unwrap();
let db = Database::open(&mut file, &key).unwrap();

println!("{:?}", db);

let mut file = File::create("new.kdbx").unwrap();
db.save(&mut file).unwrap();

Not Implemented

The following features are currently not implemented:

  • KeePass 1 databases.

Structs

An auto-type association.
An identifier for binaries in the global binaries map.
A key for binaries in entry’s binaries map.
A structure representing a color (RGB).
The binary comment header from the database file.
Composition of the user’s key data.
The identifier for a custom icon.
The KeePass database.
An entry in the database.
The identifier for an entry.
A group in the database.
The identifier for a group.
A key file used for encrypting and decrypting the database.
Number of times the composite key must be transformed.
The database version.

Enums

A value for entry’s map with binaries.
Error type for color conversion errors.
The compression algorithm.
The database type.
Error type for database errors.
The icon of an entry or group.
Error type for icon conversion errors.
The type of the key file.
The encryption algorithm for the master data.
The type of obfuscation to use.
Error type for obfuscation conversion errors.
The encryption algorithm for the stream data (e.g. passwords).
A key for the map with strings.
A value for the map with strings.

Traits

Trait for getting and setting of time related data.

Type Definitions

A type alias for the global map with binaries.
A type alias for a map with custom data.
A type alias for a map with custom icons.
A specialized result type for database operations.
A type alias for the map with strings.