# Crypt: A Password Manager A simple command-line password manager, written in Rust + SQLite. This tool allows you to manage accounts and generate random passwords containing ASCII letters, numbers, and punctuation or XKCD-like passphrases. Data is encrypted prior to being saved within the SQLite database using the [fernet](https://docs.rs/fernet/) crate. Encryption and decryption require the use of a randomly-generated key saved as `vault.key` but the key-file is saved in plaintext, which means that an attacker that can access the key-file can also decrypt the database. Further development may allow password-protection of the key-file; please open an issue or pull request if you want this feature! --- **NOTE:** This crate is not ready for use in production yet. There are many items still left to implement prior to a production-ready release - see the [TODO](#todo) section for more details. --- ## Table of Contents - [Installation](#installation) - [Usage](#usage) - [Arguments](#arguments) - [Examples](#examples) - [Contributing](#contributing) - [TODO](#todo) - [Development](#development) ## Installation [(Back to top)](#table-of-contents) To install the package from [Crates.io](https://crates.io), run the following command: ```bash cargo install crypt ``` [Visit the Crypt page](https://crates.io/crates/crypt/) for more information. ## Usage [(Back to top)](#table-of-contents) All arguments can be passed to the app with the following template: ```bash crypt ARGUMENT [VALUES] ``` ### Arguments #### Summary
Argument (Short) Argument (Long) Explanation
-h --help Print the welcome message
-n --new Create a new account
-l --list List all saved accounts
-e --edit [UUID] [FIELD_NAME] Edit a saved account
-d --delete [UUID] Delete a saved account
-p --purge Purge all accounts and delete the vault
### Examples ![crypt help](./examples/crypt-help.png) ## Contributing [(Back to top)](#table-of-contents) Any and all contributions are welcome. Feel free to fork the project, add features, and submit a pull request. ### TODO: - [x] Create an account in memory (as a `struct`) - [x] Allow random password generation - [x] Allow random passphrase generation - [x] Create an empty database or file, if not created yet - [x] Save new accounts to database or file - [x] Pretty-print all saved accounts - [ ] Allow editing of a saved account - [ ] Allow deletion of a saved account - [ ] Allow purging the database - [x] Allow user encryption of database or file - [x] Allow user-created keys to automatically encrypt/decrypt the database or file - [ ] Require password to encrypt/decrypt/hash/salt/etc. the key file. - [ ] Create test suite - [ ] Publish to crates.io when the package is in a minimally-usable state - [ ] Restructure and format code according to best practices (dead code, unused imports, etc.) ## Development ### Setup ```bash git clone https://github.com/christian-cleberg/crypt ``` ```bash cd crypt ``` #### Local Testing If you've made changes to the code and would like to test them, use the following commands. ```bash cargo build --release ``` ```bash ./target/release/crypt --help ``` #### Building & Publishing If you are ready to push your changes to crates.io, use the commands below. For beginners, note that you cannot publish changes to a crate you don't own (i.e. you must be added as a contributor on crates.io). ```bash cargo build --release ``` ```bash cargo login [API_TOKEN] ``` ```bash cargo publish --dry-run ``` ```bash cargo publish ```