stash
is a command line program for storing text data in encrypted form.
All user data is encrypted using AES 256 cipher.
Data is hashed for indexing purposes using a good random salt + SHA512.
Table of Contents
All of us need to store sensitive information. At the very least, we need to keep passwords and keys to numerous online services we use. Storing them in plain-text is risky. So is not keeping backups in multiple locations.
stash
is an open-source tool to store text in encrypted form. The encrypted data can be stored in untrusted locations without compromising it,
granted the encryption-key is unguessable.
Install:
brew install rorokimdim/brew/stash
Upgrade:
brew upgrade stash
Uninstall:
brew uninstall stash
Binaries are available at releases.
No pre-built binaries available at this time. We will need to build from source using stack install
or cabal install
.
Install stack, clone this repository and run the following in repository directory.
stack install
Create a stash file.
stash create {path-to-stash-file}
Replace {path-to-stash-file}
with path to the stash file. For example ~/Dropbox/secret.stash
.
Stash will prompt for the encryption-key (password) to use for the file. The key is not saved anywhere, but a salted hash (good random salt + SHA512) of the key and the salt is saved.
When we run a stash command, we will be prompted for our encryption key. It is checked against the hash stored during
stash create
. For the duration of the command, the encryption key will be used for encrypting/decrypting data.
The salt stored during stash create
is also used for hashing any data for indexing purposes.
This feature does not currently work on windows.
stash browse {path-to-stash-file}
Shortcuts | Description |
---|---|
ESC (q) | Quit |
? | Show this help |
+ | Add a new key |
> | Add a child key to selected key |
- | Delete selected key |
, (r) | Rename selected key |
/ | Search and sort by pattern |
y | Copy value of selected key into system clipboard |
Enter | Set value of selected key |
H | See history of values of selected key |
Left arrow (h) | Move to parent of selected key |
Right arrow (l) | Move to child of selected key |
Up arrow (k, Ctrl-p) | Select above |
Down arrow (j, Ctrl-n) | Select below |
g, G | Move to top, Move to bottom |
Ctrl-u, Ctrl-d | Scroll keys half page up / down |
Ctrl-b, Ctrl-f | Scroll keys one page up / down |
stash browse -f org {path-to-stash-file}
Opens as Org text in default editor. Set EDITOR environment variable to your editor command. Defaults to vim.
stash browse -f markdown {path-to-stash-file}
Opens as markdown text in default editor. Set EDITOR environment variable to your editor command. Defaults to vim.
stash dump -f org {path-to-stash-file}
stash dump -f markdown {path-to-stash-file}
stash dump -f json {path-to-stash-file}
stash backup {path-to-stash-file}
Creates a timestamped copy of stash file in the same directory as the original file.
We can import org
and markdown
text into stash. This feature is only available in version 0.2.0+.
cat {path-to-text-file} | stash import {path-to-stash-file}
stash import
will assume text is in org
format by default, but markdown
is supported too:
cat {path-to-text-file} | stash import -f markdown {path-to-stash-file}
We can import from another stash file similarly:
stash dump {path-to-source-stash-file} | stash import {path-to-destination-stash-file}
We will need to first enter encryption-key for the source stash-file followed by encryption-key for the destination stash file.
stash
exposes a bencode interface using Babashka Pod Protocol.
If you are familiar with clojure or babashka, see clojure-example.
Common-lisp folks see common-lisp-example.
Python folks see python-example.
A few things in stash can be customized via environment variables.
Name | Description | Possible Values | Default |
---|---|---|---|
STASH_ENCRYPTION_KEY |
encryption key | - | prompt as needed |
STASH_WIPE_CLIPBOARD_AFTER_BROWSE |
wipe clipboard after browse | true, false | false |
STASH_LOG_LEVEL |
logging level | DEBUG, INFO, WARN, ERROR | INFO |
STASH_TUI_COLOR_SELECTED |
color of selected item | see below | cyan |
STASH_TUI_COLOR_CURRENT_PATH |
color of current path | see below | white |
STASH_TUI_COLOR_SORT_PATTERN |
color of sort/search text | see below | white |
BABASHKA_POD |
start as babashka-pod | true, false | false |
EDITOR |
command for editing text | - | vim |
Color values can be one of black
, red
, green
, yellow
, blue
, magenta
, cyan
,
white
, brightBlack
, brightRed
, brightGreen
, brightYellow
,
brightBlue
, brightMagenta
, brightCyan
and brightWhite
.
source
output from following command
stash --bash-completion-script `which stash`
Create a _stash
in your $FPATH (try ~/.zsh/_stash
) with contents from following command
stash --zsh-completion-script `which stash`
source
output from following command
stash --fish-completion-script `which stash`