Crate kpdb [] [src]

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.3.0"

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

Association

An auto-type association.

BinaryId

An identifier for binaries in the global binaries map.

BinaryKey

A key for binaries in entry's binaries map.

Color

A structure representing a color (RGB).

Comment

The binary comment header from the database file.

CompositeKey

Composition of the user's key data.

CustomIconUuid

The identifier for a custom icon.

Database

The KeePass database.

Entry

An entry in the database.

EntryUuid

The identifier for an entry.

Group

A group in the database.

GroupUuid

The identifier for a group.

KeyFile

A key file used for encrypting and decrypting the database.

TransformRounds

Number of times the composite key must be transformed.

Version

The database version.

Enums

BinaryValue

A value for entry's map with binaries.

ColorError

Error type for color conversion errors.

Compression

The compression algorithm.

DbType

The database type.

Error

Error type for database errors.

Icon

The icon of an entry or group.

IconError

Error type for icon conversion errors.

KeyFileType

The type of the key file.

MasterCipher

The encryption algorithm for the master data.

Obfuscation

The type of obfuscation to use.

ObfuscationError

Error type for obfuscation conversion errors.

StreamCipher

The encryption algorithm for the stream data (e.g. passwords).

StringKey

A key for the map with strings.

StringValue

A value for the map with strings.

Type Definitions

BinariesMap

A type alias for the global map with binaries.

CustomDataMap

A type alias for a map with custom data.

CustomIconsMap

A type alias for a map with custom icons.

Result

A specialized result type for database operations.

StringsMap

A type alias for the map with strings.