Crates.io | dono |
lib.rs | dono |
version | 2.0.0 |
source | src |
created_at | 2016-08-21 10:28:56.133871 |
updated_at | 2016-10-05 21:36:34.187449 |
description | Rust crate for Dono Key Derivation Function |
homepage | https://github.com/dono-app/dono-crate |
repository | https://github.com/dono-app/dono-crate |
max_upload_size | |
id | 6049 |
size | 63,526 |
🚚 Rust crate for Dono Key Derivation Function
Dono is a password derivation tool which derives passwords from a master Key by using short descriptions of the destination service.
You can read more about the project in it's whitepaper repository or download the PDF.
To use this crate add the following to your Cargo.toml
file:
[dependencies]
dono = "2.0.0"
Then in your rust code:
extern crate dono;
This will give you access to the Dono
and DonoError
structs.
The Dono
struct provides the basic password hashing implementation.
A new instance of Dono
can be created with the new()
function. This gives
you access to the compute_password
function.
extern crate dono;
fn main() {
let dono = dono::Dono::new();
let key = "this_is_a_long_test_key".to_string();
let label = "test".to_string();
let password = dono.compute_password(&key, &label).unwrap();
println!("password: {}", password);
}
The Label
struct provides an easy-to-use way to index, create, update and
destroy labels from the store.
Labels have the following attributes:
title
- Holds the current title, represented as a Stringprevious_title
- Holds the last saved title, represented as a Stringpersisted
- Holds a bool value thet indicates if the Label is persisted in
the storeAbailable public methods are:
new(label: &String) -> Label
- creates a new Label with the given titlenew_saved(label: &String) -> Label
- same as new
but sets persisted
to
truechanged() -> bool
- returns true if the current and previous title are the
samesave() -> Result<&Label, DonoError>
- save the label to the storedestroy() -> Result<&Label, DonoError>
- destroys the label from the storeModule methods:
labels::all()
- returns a Vec with all prebuild Label structs from the
storeExample:
extern crate dono;
fn main() {
/* Initial state of the store:
* github
* facebook
* twitter
*/
// Return a Vec<Label> containing the github, facebook and twitter Labels
let mut labels = dono::labels::all();
// Get the twitter Label
let mut twitter_label = labels.last_mut().unwrap();
// Change the title from twitter to gitter
twitter_label.title = "gitter".to_string();
// Check if the value has changed
println!("Value has changed? {}", twitter_label.changed());
// Persist the changes
twitter_label.save().unwrap();
/* Current state of the store:
* github
* facebook
* gitter
*/
// Delete the gitter label
twitter_label.destroy();
/* Current state of the store:
* github
* facebook
*/
// Create a new label
let mut label = dono::labels::Label::new(&"test".to_string());
// Save the new label
label.save();
/* Current state of the store:
* github
* facebook
* test
*/
}
This library has a custom error called DonoError
that has the
following string fields in it:
field
- Indicates which parameter caused the errorcode
- A code associated with that errordescription
- Detailed description of what went wrong with possible solutionmessage
- Short description of what went wrongError codes:
CP001
- The key is too shortCP002
- Desired password length is too longSV001
- Could not open store fileSV002
- Could not write to store fileContributions are always welcome! Please note that new features and bugfixes
get added on the develop
branch first. So all pull requests should be made
from and to the develop
branch. Also, please check the issues and pull request
pages for simmilar issues and solutions before submitting your own.
When you submit a bug report always add a minimal working example and specify which version of the crate you are using.
Testing is important! Always test the code you submit in a pull request.
This project is licensed under the GPLv3. The full license text is available here.