encrypto 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +23 -0
- data/.rspec +2 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +53 -0
- data/README.md +7 -0
- data/encrypto.gemspec +23 -0
- data/lib/encrypto.rb +5 -0
- data/lib/encrypto/box.rb +30 -0
- data/lib/encrypto/database/attr_encrypted.rb +17 -0
- data/lib/encrypto/database/encryptor.rb +17 -0
- data/lib/encrypto/encrypto.rb +40 -0
- data/lib/encrypto/keys.rb +14 -0
- data/lib/encrypto/random.rb +9 -0
- data/lib/encrypto/version.rb +3 -0
- data/script/bundler +10 -0
- data/script/ci +22 -0
- data/script/install_libsodium +10 -0
- data/spec/encrypto/box_spec.rb +72 -0
- data/spec/encrypto/database/encryptor_spec.rb +49 -0
- data/spec/encrypto/encrypto_spec.rb +109 -0
- data/spec/encrypto/keys_spec.rb +16 -0
- data/spec/encrypto/random_spec.rb +14 -0
- data/spec/spec_helper.rb +4 -0
- metadata +129 -0
data/.gitignore
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# See http://help.github.com/ignore-files/ for more about ignoring files.
|
2
|
+
#
|
3
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
+
# or operating system, you probably want to add a global ignore instead:
|
5
|
+
# git config --global core.excludesfile ~/.gitignore_global
|
6
|
+
|
7
|
+
# Ignore bundler config
|
8
|
+
/.bundle
|
9
|
+
/.jbundler
|
10
|
+
|
11
|
+
# Ignore the default SQLite database.
|
12
|
+
/db/*.sqlite3
|
13
|
+
|
14
|
+
# Ignore all logfiles and tempfiles.
|
15
|
+
/log/*.log
|
16
|
+
/tmp
|
17
|
+
|
18
|
+
rspec.html
|
19
|
+
cucumber.html
|
20
|
+
**/.DS_Store
|
21
|
+
|
22
|
+
/coverage/
|
23
|
+
.vagrant
|
data/.rspec
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
encrypto (0.0.1)
|
5
|
+
attr_encrypted (~> 1.3.0)
|
6
|
+
rbnacl (~> 1.1.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
attr_encrypted (1.3.0)
|
12
|
+
encryptor (>= 1.3.0)
|
13
|
+
coderay (1.1.0)
|
14
|
+
diff-lcs (1.2.5)
|
15
|
+
docile (1.1.1)
|
16
|
+
encryptor (1.3.0)
|
17
|
+
ffi (1.9.3)
|
18
|
+
method_source (0.8.2)
|
19
|
+
multi_json (1.8.2)
|
20
|
+
pry (0.9.12.4)
|
21
|
+
coderay (~> 1.0)
|
22
|
+
method_source (~> 0.8)
|
23
|
+
slop (~> 3.4)
|
24
|
+
pry-nav (0.2.3)
|
25
|
+
pry (~> 0.9.10)
|
26
|
+
rbnacl (1.1.0)
|
27
|
+
ffi
|
28
|
+
rspec (2.14.1)
|
29
|
+
rspec-core (~> 2.14.0)
|
30
|
+
rspec-expectations (~> 2.14.0)
|
31
|
+
rspec-mocks (~> 2.14.0)
|
32
|
+
rspec-core (2.14.7)
|
33
|
+
rspec-expectations (2.14.4)
|
34
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
35
|
+
rspec-mocks (2.14.4)
|
36
|
+
simplecov (0.8.2)
|
37
|
+
docile (~> 1.1.0)
|
38
|
+
multi_json
|
39
|
+
simplecov-html (~> 0.8.0)
|
40
|
+
simplecov-html (0.8.0)
|
41
|
+
slop (3.4.7)
|
42
|
+
spec_coverage (0.0.5)
|
43
|
+
rspec (~> 2.0)
|
44
|
+
simplecov
|
45
|
+
|
46
|
+
PLATFORMS
|
47
|
+
ruby
|
48
|
+
|
49
|
+
DEPENDENCIES
|
50
|
+
encrypto!
|
51
|
+
pry-nav (~> 0.2.3)
|
52
|
+
rspec (~> 2.14.1)
|
53
|
+
spec_coverage (~> 0.0.5)
|
data/README.md
ADDED
data/encrypto.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/encrypto/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = 'encrypto'
|
6
|
+
gem.version = Encrypto::VERSION
|
7
|
+
gem.date = '2013-12-04'
|
8
|
+
gem.summary = "A gem that supports encrypting personal data by using rbnacl and attr_encrypted"
|
9
|
+
gem.description = "A gem that supports encrypting personal data by using rbnacl and attr_encrypted"
|
10
|
+
gem.authors = ["Ruben", "Arne"]
|
11
|
+
gem.email = 'service@finalist.nl'
|
12
|
+
gem.files = `git ls-files`.split($\)
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.require_paths = ["lib"]
|
15
|
+
gem.homepage = 'http://github.com/finalist/encrypto'
|
16
|
+
|
17
|
+
gem.add_dependency "rbnacl", "~> 1.1.0"
|
18
|
+
gem.add_dependency "attr_encrypted", "~> 1.3.0"
|
19
|
+
|
20
|
+
gem.add_development_dependency "pry-nav", "~> 0.2.3"
|
21
|
+
gem.add_development_dependency "rspec", "~> 2.14.1"
|
22
|
+
gem.add_development_dependency "spec_coverage", "~> 0.0.5"
|
23
|
+
end
|
data/lib/encrypto.rb
ADDED
data/lib/encrypto/box.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module Encrypto
|
2
|
+
|
3
|
+
class Box
|
4
|
+
def initialize(nacl_box)
|
5
|
+
@nacl_box = nacl_box
|
6
|
+
end
|
7
|
+
|
8
|
+
def box(value)
|
9
|
+
@nacl_box.box(value, :hex)
|
10
|
+
end
|
11
|
+
|
12
|
+
def open(cipher_text)
|
13
|
+
@nacl_box.open(cipher_text, :hex)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.from_passphrase(passphrase)
|
17
|
+
passphrase_sha = Crypto::Hash.sha256(passphrase)
|
18
|
+
from_secret_key(passphrase_sha)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.from_secret_key(secret_key)
|
22
|
+
new(Crypto::RandomNonceBox.from_secret_key(secret_key))
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.from_keypair(public_key, private_key)
|
26
|
+
new(Crypto::RandomNonceBox.from_keypair(public_key, private_key))
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Encrypto
|
2
|
+
module Database
|
3
|
+
module AttrEncrypted
|
4
|
+
|
5
|
+
def self.included(model)
|
6
|
+
model.class_eval do
|
7
|
+
attr_encrypted_options.merge!(
|
8
|
+
:encryptor => ::Encrypto::Database::Encryptor,
|
9
|
+
:key => :encryption_key,
|
10
|
+
:encode => false
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Encrypto
|
2
|
+
module Database
|
3
|
+
|
4
|
+
class Encryptor
|
5
|
+
def self.encrypt(options)
|
6
|
+
box = Box.from_secret_key(options[:key])
|
7
|
+
box.box(options[:value])
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.decrypt(options)
|
11
|
+
box = Box.from_secret_key(options[:key])
|
12
|
+
box.open(options[:value])
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Encrypto
|
2
|
+
|
3
|
+
def self.generate_keypair
|
4
|
+
Keys.generate_keypair
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.generate_random_key
|
8
|
+
Random.bytes
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.encrypt_with_passphrase(value, passphrase)
|
12
|
+
passphrase_box(passphrase).box(value)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.decrypt_with_passphrase(cipher_text, passphrase)
|
16
|
+
passphrase_box(passphrase).open(cipher_text)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.encrypt_with_keypair(value, public_key, signing_private_key)
|
20
|
+
hex_public_key = Keys.hex_public_key(public_key)
|
21
|
+
keypair_box(hex_public_key, signing_private_key).box(value)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.decrypt_with_keypair(cipher_text, hex_public_key, private_key)
|
25
|
+
public_key = Keys.hex_public_key(hex_public_key)
|
26
|
+
box = Box.from_keypair(public_key, private_key)
|
27
|
+
box.open(cipher_text)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def self.keypair_box(public_key, private_key)
|
33
|
+
Box.from_keypair(public_key, private_key)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.passphrase_box(passphrase)
|
37
|
+
Box.from_passphrase(passphrase)
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Encrypto
|
2
|
+
module Keys
|
3
|
+
|
4
|
+
def self.generate_keypair
|
5
|
+
private_key = Crypto::PrivateKey.generate
|
6
|
+
[private_key.public_key.to_s(:hex), private_key]
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.hex_public_key(value)
|
10
|
+
Crypto::PublicKey.new(value, :hex)
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
data/script/bundler
ADDED
data/script/ci
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
run() {
|
2
|
+
time bundle exec $*
|
3
|
+
}
|
4
|
+
|
5
|
+
echo "--- Starting continuous integration build"
|
6
|
+
|
7
|
+
./script/bundler
|
8
|
+
|
9
|
+
if [[ -d coverage ]]; then
|
10
|
+
echo "Removing old coverage report"
|
11
|
+
rm -r coverage
|
12
|
+
fi
|
13
|
+
|
14
|
+
echo "--- Running RSpec"
|
15
|
+
|
16
|
+
run rspec --color spec --format SpecCoverage --format progress --format html --out rspec.html
|
17
|
+
rspec=$?
|
18
|
+
|
19
|
+
if [[ $rspec -ne 0 ]]; then
|
20
|
+
echo "--- Some tests have failed."
|
21
|
+
exit 1
|
22
|
+
fi
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
if [ ! -f /usr/local/lib/libsodium.a ];
|
3
|
+
then
|
4
|
+
curl -o /tmp/sodium.tar.gz https://download.libsodium.org/libsodium/releases/old/libsodium-0.2.tar.gz
|
5
|
+
cd /tmp
|
6
|
+
tar vfzx sodium.tar.gz
|
7
|
+
cd libsodium-0.2
|
8
|
+
./configure
|
9
|
+
make && make check && make install
|
10
|
+
fi
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Encrypto
|
4
|
+
describe Box do
|
5
|
+
|
6
|
+
describe '.from_passphrase' do
|
7
|
+
let(:passphrase) { 'password' }
|
8
|
+
|
9
|
+
it 'hashes the secret key' do
|
10
|
+
Crypto::Hash.should_receive(:sha256).with(passphrase)
|
11
|
+
Crypto::RandomNonceBox.stub(:from_secret_key)
|
12
|
+
Encrypto::Box.from_passphrase(passphrase)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'creates a random nonce box based on the hashed secret key' do
|
16
|
+
Crypto::Hash.stub(:sha256 => "sha")
|
17
|
+
Crypto::RandomNonceBox.should_receive(:from_secret_key).with("sha")
|
18
|
+
Encrypto::Box.from_passphrase(passphrase)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'initializes with a random nonce box' do
|
22
|
+
box = double("box")
|
23
|
+
Crypto::Hash.stub(:sha256 => "sha")
|
24
|
+
Crypto::RandomNonceBox.stub(:from_secret_key => box)
|
25
|
+
Encrypto::Box.should_receive(:new).with(box)
|
26
|
+
Encrypto::Box.from_passphrase(passphrase)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe ".from_keypair" do
|
31
|
+
let(:public_key) { double("public key") }
|
32
|
+
let(:private_key) { double("private key") }
|
33
|
+
|
34
|
+
it "creates a random nonce box based on the keypair" do
|
35
|
+
Crypto::RandomNonceBox.should_receive(:from_keypair).with(public_key, private_key)
|
36
|
+
Encrypto::Box.from_keypair(public_key, private_key)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "initializes with a random nonce box" do
|
40
|
+
box = double("box")
|
41
|
+
Crypto::RandomNonceBox.stub(:from_keypair => box)
|
42
|
+
Encrypto::Box.should_receive(:new).with(box)
|
43
|
+
Encrypto::Box.from_keypair(public_key, private_key)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#box' do
|
48
|
+
it 'boxes the value' do
|
49
|
+
value = double("value")
|
50
|
+
|
51
|
+
some_box = double("box")
|
52
|
+
some_box.should_receive(:box).with(value, :hex)
|
53
|
+
|
54
|
+
box = Encrypto::Box.new(some_box)
|
55
|
+
box.box(value)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "#open" do
|
60
|
+
it "opens the cipher text" do
|
61
|
+
cipher_text = double("cipher text")
|
62
|
+
|
63
|
+
some_box = double("box")
|
64
|
+
some_box.should_receive(:open).with(cipher_text, :hex)
|
65
|
+
|
66
|
+
box = Encrypto::Box.new(some_box)
|
67
|
+
box.open(cipher_text)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Encrypto
|
4
|
+
module Database
|
5
|
+
|
6
|
+
describe Encryptor do
|
7
|
+
|
8
|
+
describe ".encrypt" do
|
9
|
+
|
10
|
+
it "creates a symmetric box based on the key" do
|
11
|
+
box = double("box").as_null_object
|
12
|
+
Box.should_receive(:from_secret_key).with("key").and_return(box)
|
13
|
+
|
14
|
+
Encryptor.encrypt({:value => "value", :key => "key"})
|
15
|
+
end
|
16
|
+
|
17
|
+
it "boxes the value" do
|
18
|
+
box = double("box")
|
19
|
+
Box.stub(:from_secret_key).and_return(box)
|
20
|
+
|
21
|
+
box.should_receive(:box).with("value")
|
22
|
+
|
23
|
+
Encryptor.encrypt({:value => "value", :key => "key"})
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
describe ".decrypt" do
|
29
|
+
|
30
|
+
it "creates a symmetric box based on the key" do
|
31
|
+
box = double("box").as_null_object
|
32
|
+
Box.should_receive(:from_secret_key).with("key").and_return(box)
|
33
|
+
|
34
|
+
Encryptor.decrypt({:value => "value", :key => "key"})
|
35
|
+
end
|
36
|
+
|
37
|
+
it "opens the value" do
|
38
|
+
box = double("box")
|
39
|
+
Box.stub(:from_secret_key).and_return(box)
|
40
|
+
|
41
|
+
box.should_receive(:open).with("value")
|
42
|
+
|
43
|
+
Encryptor.decrypt({:value => "value", :key => "key"})
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Encrypto
|
4
|
+
describe Encrypto do
|
5
|
+
|
6
|
+
describe ".generate_keypair" do
|
7
|
+
it "delegates to Keys" do
|
8
|
+
Encrypto::Keys.should_receive(:generate_keypair)
|
9
|
+
subject.generate_keypair
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe ".generate_random_key" do
|
14
|
+
it "delegates to Random" do
|
15
|
+
Encrypto::Random.should_receive(:bytes)
|
16
|
+
subject.generate_random_key
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.encrypt_with_passphrase' do
|
21
|
+
it 'boxes the value in a passphrase box' do
|
22
|
+
value = double("value")
|
23
|
+
passphrase = double("passphrase")
|
24
|
+
box = double("box")
|
25
|
+
|
26
|
+
Encrypto::Box.should_receive(:from_passphrase).
|
27
|
+
with(passphrase).
|
28
|
+
and_return(box)
|
29
|
+
|
30
|
+
box.should_receive(:box).
|
31
|
+
with(value)
|
32
|
+
|
33
|
+
subject.encrypt_with_passphrase(value, passphrase)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe ".decrypt_with_passphrase" do
|
38
|
+
it "opens the ciphertext with from passphrase box" do
|
39
|
+
passphrase = double("passphrase")
|
40
|
+
box = double("box")
|
41
|
+
cipher_text = double("cipher text")
|
42
|
+
|
43
|
+
Encrypto::Box.should_receive(:from_passphrase)
|
44
|
+
.with(passphrase)
|
45
|
+
.and_return(box)
|
46
|
+
|
47
|
+
box.should_receive(:open).
|
48
|
+
with(cipher_text)
|
49
|
+
|
50
|
+
subject.decrypt_with_passphrase(cipher_text, passphrase)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '.encrypt_with_keypair' do
|
55
|
+
it 'boxes the value in a keypair box' do
|
56
|
+
value = double("value")
|
57
|
+
public_key = double("public")
|
58
|
+
hex_public_key = double("hex_public_key")
|
59
|
+
signing_private_key = double("signing_private_key")
|
60
|
+
box = double("box")
|
61
|
+
|
62
|
+
Encrypto::Keys.should_receive(:hex_public_key).
|
63
|
+
with(public_key).
|
64
|
+
and_return(hex_public_key)
|
65
|
+
|
66
|
+
Encrypto::Box.should_receive(:from_keypair).
|
67
|
+
with(hex_public_key, signing_private_key).
|
68
|
+
and_return(box)
|
69
|
+
|
70
|
+
box.should_receive(:box).
|
71
|
+
with(value)
|
72
|
+
|
73
|
+
subject.encrypt_with_keypair(value, public_key, signing_private_key)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe ".decrypt_with_keypair" do
|
78
|
+
let(:cipher_text) { double("cipher text") }
|
79
|
+
let(:hex_public_key) { double("hex public key") }
|
80
|
+
let(:public_key) { double("public key") }
|
81
|
+
let(:private_key) { double("private key") }
|
82
|
+
|
83
|
+
it "creates a public key" do
|
84
|
+
Encrypto::Keys.should_receive(:hex_public_key).with(hex_public_key)
|
85
|
+
Encrypto::Box.stub(from_keypair: double(open: nil))
|
86
|
+
|
87
|
+
subject.decrypt_with_keypair(cipher_text, hex_public_key, private_key)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "decrypts the cipher text with the keypair" do
|
91
|
+
box = double
|
92
|
+
|
93
|
+
Encrypto::Keys.stub(hex_public_key: public_key)
|
94
|
+
Encrypto::Box.should_receive(:from_keypair).with(public_key, private_key).and_return(box)
|
95
|
+
box.should_receive(:open).with(cipher_text)
|
96
|
+
|
97
|
+
subject.decrypt_with_keypair(cipher_text, hex_public_key, private_key)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "returns the decrypted cipher text" do
|
101
|
+
box = double(open: "decrypted value")
|
102
|
+
Encrypto::Keys.stub(hex_public_key: public_key)
|
103
|
+
Encrypto::Box.stub(from_keypair: box)
|
104
|
+
|
105
|
+
subject.decrypt_with_keypair(cipher_text, hex_public_key, private_key).should eql "decrypted value"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Encrypto
|
4
|
+
describe Keys do
|
5
|
+
|
6
|
+
describe ".generate_keypair" do
|
7
|
+
it "generates a keypair" do
|
8
|
+
public_key = double("public_key", :to_s => "hex public key")
|
9
|
+
private_key = double("private key", :public_key => public_key)
|
10
|
+
Crypto::PrivateKey.should_receive(:generate).and_return(private_key)
|
11
|
+
Encrypto::Keys.generate_keypair.should eql ["hex public key", private_key]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Encrypto
|
4
|
+
describe Random
|
5
|
+
|
6
|
+
describe ".bytes" do
|
7
|
+
it "creates a random byte sequence" do
|
8
|
+
random_bytes = "asf2020fasd"
|
9
|
+
Crypto::Random.should_receive(:random_bytes).and_return(random_bytes)
|
10
|
+
Encrypto::Random.bytes.should eql random_bytes
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: encrypto
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Ruben
|
9
|
+
- Arne
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2013-12-04 00:00:00.000000000Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rbnacl
|
17
|
+
requirement: &70128989961020 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.1.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *70128989961020
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: attr_encrypted
|
28
|
+
requirement: &70128989960500 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.3.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *70128989960500
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: pry-nav
|
39
|
+
requirement: &70128989959820 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 0.2.3
|
45
|
+
type: :development
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *70128989959820
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rspec
|
50
|
+
requirement: &70128989959120 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 2.14.1
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *70128989959120
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: spec_coverage
|
61
|
+
requirement: &70128989958440 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ~>
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.0.5
|
67
|
+
type: :development
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: *70128989958440
|
70
|
+
description: A gem that supports encrypting personal data by using rbnacl and attr_encrypted
|
71
|
+
email: service@finalist.nl
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- .rspec
|
78
|
+
- Gemfile
|
79
|
+
- Gemfile.lock
|
80
|
+
- README.md
|
81
|
+
- encrypto.gemspec
|
82
|
+
- lib/encrypto.rb
|
83
|
+
- lib/encrypto/box.rb
|
84
|
+
- lib/encrypto/database/attr_encrypted.rb
|
85
|
+
- lib/encrypto/database/encryptor.rb
|
86
|
+
- lib/encrypto/encrypto.rb
|
87
|
+
- lib/encrypto/keys.rb
|
88
|
+
- lib/encrypto/random.rb
|
89
|
+
- lib/encrypto/version.rb
|
90
|
+
- script/bundler
|
91
|
+
- script/ci
|
92
|
+
- script/install_libsodium
|
93
|
+
- spec/encrypto/box_spec.rb
|
94
|
+
- spec/encrypto/database/encryptor_spec.rb
|
95
|
+
- spec/encrypto/encrypto_spec.rb
|
96
|
+
- spec/encrypto/keys_spec.rb
|
97
|
+
- spec/encrypto/random_spec.rb
|
98
|
+
- spec/spec_helper.rb
|
99
|
+
homepage: http://github.com/finalist/encrypto
|
100
|
+
licenses: []
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
require_paths:
|
104
|
+
- lib
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
none: false
|
113
|
+
requirements:
|
114
|
+
- - ! '>='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
requirements: []
|
118
|
+
rubyforge_project:
|
119
|
+
rubygems_version: 1.8.10
|
120
|
+
signing_key:
|
121
|
+
specification_version: 3
|
122
|
+
summary: A gem that supports encrypting personal data by using rbnacl and attr_encrypted
|
123
|
+
test_files:
|
124
|
+
- spec/encrypto/box_spec.rb
|
125
|
+
- spec/encrypto/database/encryptor_spec.rb
|
126
|
+
- spec/encrypto/encrypto_spec.rb
|
127
|
+
- spec/encrypto/keys_spec.rb
|
128
|
+
- spec/encrypto/random_spec.rb
|
129
|
+
- spec/spec_helper.rb
|