Skip to content

secure rolodesk -- encrypted sticky notes, also useable as a password vault

Notifications You must be signed in to change notification settings

JeffAbrahamson/srd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This is the release branch of srd.

srd is a secure rolodesk, which is a bit of a retro name for an encrypted set of notes. In modern parlance, it might be called a password vault, but the idea is to be able to write and retrieve arbitrary bits of text.

I developed srd on an ubuntu linux system. There's no real reason to suspect it wouldn't work elsewhere, but that hasn't been tested.

There's a library if you want to use the code in another context with minimal hacking.

srd changed file format in May 2015. See below if this affects you. You will know it affects you because you can't read your srd files anymore.

Want to use it?

The code is stable, and I believe it works. There are reasonably extensive regtests that convince me of this. I use it and trust my secrets (bank passwords, online account info, etc.) to it. Send me mail with feedback. As always (see src/COPYING), you accept that it may not work for you. If it doesn't, I'd appreciate hearing of a reproducible case of the failure.

Why did I write this?

I wrote a short python script once upon a time to do something similar. I developed a bunch of features I wanted to add. It became a rewrite. As an exercise, I decided to see how much longer it would take to write it in C++ rather than python. (Answer: about five times longer.) And it amuses me. And it pushes me to look at some new libraries and language features that I don't get to use at work.

The other answer, since there's no shortage of password vaults out there, is that (1) I wanted something that lives nicely on the commandline, and (2) I wanted to understand the code so that I'm sure it's doing what I want. Those could probably both have been satisfied more easily without writing code, but would have left me less happy.

Here's the usage message:

srd <options> [key-match-pattern]

  Pattern matching options (-m, -D, -d) may be repeated.
    Multiple key patterns (-m) match as inclusive or.
    Multiple payload patterns (-d) match as and (but cf. -J).
    Multiple key-or-payload patterns (-D) match as inclusive or.
  Key-match-pattern, if present, is the same as specifying -m.
  To create a new record, use -e with no pattern.

Allowed options:

General options:
  -h [ --help ]         Produce help message
  -R [ --read-only ]    Read-only, do not persist data
  --database-dir arg    Name of directory to use for database instead of 
			default
  -v [ --verbose ]      Emit debugging information

Actions (if none, then match):
  -e [ --edit ]         Edit record
  -x [ --delete ]       Delete the results of an (exact) key match.  
			Conceptually -E -m arg, can be used with -mDd.
  -X [ --delete-all ]   Delete all matches.  Conceptually equivalent to -m arg,
			can be used with -mDd.  If more than one match, will 
			request confirmation.
  -p [ --passwd ]       Change password (no other options permitted)
  --create              Create database.  The database is identified by a hash 
			of the password, so --create distinguishes between 
			creating a new database and mistyping the password.
  --import arg          Import a text file.  The format is the same as that 
			output by -f:  each line must either be "[KEY]" for key
			KEY or else begin with two spaces of indent (which are 
			disgarded during the input) for data (payload) portion 
			associated with the most recent key line.
  -V [ --validate ]     Confirm that all records are loadable and consistent
  --checksum            Compute database checksum (keys and payload)
  --checksum-by-key     Compute database checksum by key, restrictable by 
			matching options

Matching options:
  -m [ --match-key ] arg         Restrict to records whose keys match
  -D [ --match-data-or-key ] arg Restrict to records whose key or data match
  -d [ --match-data ] arg        Restrict to records whose data match all 
				 patterns (cf. -J)
  -E [ --exact-match ]           Exact key match
  -i [ --ignore-case ]           Match without case.  (Does not affect 
				 -g,--grep.)
  -J [ --disjunction ]           When matching multiple patterns against 
				 payloads with -d, --match-data, use inclusive 
				 or (any hit is sufficient)

Display options:
  -k [ --keys-only ]     Display keys only (default true if multiple matches, 
			 false for single match)
  -f [ --full-display ]  Display full data (default true for single match, 
			 false for multiple matches)
  -g [ --grep ] arg      Output filter for data

Test options (don't use outside regression tests):
  -T [ --TEST ] arg     Test mode, use local data directory, specify password 
			on commandline

Known issues / bugs

The code may not be thread-safe. Indeed, it assumes a single event stream, where it is impossible, say, to edit two leaves at the same time. (The conflict here is at the level of the root, since each editor risks re-persisting the root differently.) There are some checks to avoid this happening, but no regtests rigorously confirm that this always works. Peer review and suggestions welcome. Cf. issues #26, #27 (both closed).

File format conversion

If you began using srd before 2 May 2015, you used a file format based on Boost serialization. For several reasons, this caused problems. As a result, srd switched to using Google protobufs.

In the unlikely event you began using srd before the file format change, you'll need to recover the conversion version of srd from github. It is on branch convert_to_protobuf. README.md on that branch explains how to convert. After conversion, it is best to switch back to the modern production version (branch master).

About

secure rolodesk -- encrypted sticky notes, also useable as a password vault

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published