README.md in sequel_vault-0.4 vs README.md in sequel_vault-0.5
- old
+ new
@@ -1,13 +1,108 @@
# Sequel-vault
-Use [fernet](https://github.com/fernet/fernet-rb) to encrypt columns values in your Sequel database
+Use [fernet](https://github.com/fernet/fernet-rb) to encrypt columns values in your Sequel database.
+## Installation
+
+Install it directly using gem:
+
+```
+gem install sequel_vault
+```
+
+Or adding it to your ``Gemfile``:
+
+```
+gem "sequel_vault"
+```
+
## Usage
+## Configure
+
+A straightforward example, passing keys and columns that will be encrypted
+transparently:
+
```ruby
-class AWSCreds < Sequel::Model
- # attrs :access_key_id, ::access_key_id_digest, :secret_access_key, :secret_access_key_digest :region, :name
- plugin :vault
- vault_attributes ['Fernet key','...'], :access_key_id, :secret_access_key
+class Credential < Sequel::Model
+ plugin :vault, ['9cLL4qVO+bkEqGQtcvQX4Cz4uJ1ni9Nb83ipU/9klsw='], :token
end
```
+
+Along with a typical migration for this setup:
+
+```ruby
+Sequel.migration do
+ change do
+ alter_table(:credentials) do
+ add_column(:token, :bytea)
+ add_column(:token_digest, :bytea)
+ add_column(:key_id, :smallint)
+ end
+ end
+end
+```
+
+### Keys
+
+Vault use [fernet](https://github.com/fernet/fernet-rb) behind the scene, the
+keys should be 32 bytes of random data, base64-encoded.
+
+To generate one you can use:
+
+```console
+$ dd if=/dev/urandom bs=32 count=1 2>/dev/null | openssl base64
+```
+
+You can specify more than one key to be used. The last keys of the array will
+be used as the default for encryption.
+
+### Keys migration
+
+If a ``key_id`` column is present, vault will set its value to the length of
+the keys array. You can check if a key is still in use using:
+
+```ruby
+Credential.where(key_id: 1).empty?
+```
+
+You should avoid removing a key when using ``key_id``, unless you proceed to
+migrate its value.
+
+Here is a migration example to add a ``key_id`` column:
+
+```ruby
+Sequel.migration do
+ change do
+ alter_table(:credentials) do
+ add_column(:key_id, :smallint)
+ end
+ end
+end
+```
+
+### Digest lookup
+
+To allow lookup by a know secret, vault allow an optional digest column for each
+encrypted attribute, using the ``_digest`` suffix:
+
+```ruby
+Sequel.migration do
+ change do
+ alter_table(:credentials) do
+ add_column(:token_digest, :bytea)
+ end
+ end
+end
+```
+
+You can then lookup using the provided dataset lookup:
+
+```ruby
+Credential.token_lookup('secret')
+```
+
+### Unencrypted data
+
+Vault will return plain-text data if none of the keys can successfully decrypt
+the stored value, effectively allowing encrypt on write migration.