vault-tree 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +26 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +43 -0
- data/LICENSE.txt +22 -0
- data/README.md +118 -0
- data/Rakefile +17 -0
- data/VagrantFile +30 -0
- data/features/core.feature +44 -0
- data/features/exceptions.feature +41 -0
- data/features/steps/core.steps.rb +168 -0
- data/features/steps/exceptions.steps.rb +103 -0
- data/features/support/env.rb +1 -0
- data/features/world.rb +3 -0
- data/lib/vault-tree.rb +7 -0
- data/lib/vault-tree/config/dependencies.rb +4 -0
- data/lib/vault-tree/config/lib.rb +2 -0
- data/lib/vault-tree/config/path_helpers.rb +49 -0
- data/lib/vault-tree/config/string.rb +25 -0
- data/lib/vault-tree/contract/close_validator.rb +35 -0
- data/lib/vault-tree/contract/contract.rb +85 -0
- data/lib/vault-tree/contract/contract_presenter.rb +27 -0
- data/lib/vault-tree/contract/doorman.rb +112 -0
- data/lib/vault-tree/contract/null_vault.rb +16 -0
- data/lib/vault-tree/contract/open_validator.rb +20 -0
- data/lib/vault-tree/contract/vault.rb +96 -0
- data/lib/vault-tree/exceptions/empty_vault.rb +8 -0
- data/lib/vault-tree/exceptions/fill_attempt_master_password.rb +6 -0
- data/lib/vault-tree/exceptions/invalid_signature.rb +0 -0
- data/lib/vault-tree/exceptions/malformed_json.rb +0 -0
- data/lib/vault-tree/exceptions/missing_external_data.rb +6 -0
- data/lib/vault-tree/exceptions/missing_partner_decryption_key.rb +6 -0
- data/lib/vault-tree/exceptions/missing_passphrase.rb +6 -0
- data/lib/vault-tree/exceptions/non_unique_vault_id.rb +0 -0
- data/lib/vault-tree/exceptions/unsupported_keyword.rb +6 -0
- data/lib/vault-tree/exceptions/vault_does_not_exist.rb +6 -0
- data/lib/vault-tree/exceptions/vault_tree_exception.rb +6 -0
- data/lib/vault-tree/keywords/decryption_key.rb +14 -0
- data/lib/vault-tree/keywords/external_data.rb +13 -0
- data/lib/vault-tree/keywords/keyword.rb +19 -0
- data/lib/vault-tree/keywords/keyword_interpreter.rb +45 -0
- data/lib/vault-tree/keywords/master_passphrase.rb +9 -0
- data/lib/vault-tree/keywords/public_encryption_key.rb +27 -0
- data/lib/vault-tree/keywords/random_number.rb +9 -0
- data/lib/vault-tree/keywords/shared_key.rb +24 -0
- data/lib/vault-tree/keywords/unlocked.rb +9 -0
- data/lib/vault-tree/keywords/vault_contents.rb +13 -0
- data/lib/vault-tree/lock_smith/asymmetric_cipher.rb +31 -0
- data/lib/vault-tree/lock_smith/crypto_hash.rb +11 -0
- data/lib/vault-tree/lock_smith/digital_signature.rb +32 -0
- data/lib/vault-tree/lock_smith/encryption_key_pair.rb +25 -0
- data/lib/vault-tree/lock_smith/null_vault.rb +4 -0
- data/lib/vault-tree/lock_smith/random_number.rb +11 -0
- data/lib/vault-tree/lock_smith/shared_key_pair.rb +12 -0
- data/lib/vault-tree/lock_smith/signing_key_pair.rb +25 -0
- data/lib/vault-tree/lock_smith/symmetric_cipher.rb +25 -0
- data/lib/vault-tree/util/json.rb +16 -0
- data/lib/vault-tree/version.rb +3 -0
- data/spec/app/locksmith/asymmetric_cipher_spec.rb +25 -0
- data/spec/app/locksmith/signing_key_pair_spec.rb +22 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/support/fixtures/blank_simple_test_contract.json +14 -0
- data/spec/support/fixtures/broken_contract.json +55 -0
- data/spec/support/fixtures/one_two_three-0.5.0.EXP.json +105 -0
- data/spec/support/fixtures/reference_contract.1.0.0.json +227 -0
- data/spec/support/fixtures/simple_test_contract.json +14 -0
- data/support/cookbooks/ark/.gitignore +12 -0
- data/support/cookbooks/ark/.kitchen.yml +34 -0
- data/support/cookbooks/ark/.travis.yml +6 -0
- data/support/cookbooks/ark/Berksfile +9 -0
- data/support/cookbooks/ark/CHANGELOG.md +87 -0
- data/support/cookbooks/ark/CONTRIBUTING.md +257 -0
- data/support/cookbooks/ark/README.md +301 -0
- data/support/cookbooks/ark/Rakefile +36 -0
- data/support/cookbooks/ark/TESTING.md +25 -0
- data/support/cookbooks/ark/Toftfile +15 -0
- data/support/cookbooks/ark/attributes/default.rb +6 -0
- data/support/cookbooks/ark/chefignore +96 -0
- data/support/cookbooks/ark/files/default/foo.tar.gz +0 -0
- data/support/cookbooks/ark/files/default/foo.tbz +0 -0
- data/support/cookbooks/ark/files/default/foo.tgz +0 -0
- data/support/cookbooks/ark/files/default/foo.zip +0 -0
- data/support/cookbooks/ark/files/default/tests/minitest/default_test.rb +0 -0
- data/support/cookbooks/ark/files/default/tests/minitest/support/helpers.rb +0 -0
- data/support/cookbooks/ark/files/default/tests/minitest/test_test.rb +94 -0
- data/support/cookbooks/ark/libraries/default.rb +167 -0
- data/support/cookbooks/ark/metadata.rb +13 -0
- data/support/cookbooks/ark/providers/default.rb +370 -0
- data/support/cookbooks/ark/recipes/default.rb +31 -0
- data/support/cookbooks/ark/recipes/test.rb +138 -0
- data/support/cookbooks/ark/resources/default.rb +54 -0
- data/support/cookbooks/ark/templates/default/add_to_path.sh.erb +1 -0
- data/support/cookbooks/ark/test/support/Gemfile +4 -0
- data/support/cookbooks/build-essential/README.md +24 -0
- data/support/cookbooks/build-essential/metadata.rb +10 -0
- data/support/cookbooks/build-essential/recipes/default.rb +45 -0
- data/support/cookbooks/chruby/.gitignore +15 -0
- data/support/cookbooks/chruby/.kitchen.yml +26 -0
- data/support/cookbooks/chruby/.ruby_version +1 -0
- data/support/cookbooks/chruby/Berksfile +3 -0
- data/support/cookbooks/chruby/Gemfile +7 -0
- data/support/cookbooks/chruby/LICENSE +14 -0
- data/support/cookbooks/chruby/README.md +92 -0
- data/support/cookbooks/chruby/Rakefile +7 -0
- data/support/cookbooks/chruby/Thorfile +6 -0
- data/support/cookbooks/chruby/Vagrantfile +86 -0
- data/support/cookbooks/chruby/attributes/default.rb +10 -0
- data/support/cookbooks/chruby/chefignore +96 -0
- data/support/cookbooks/chruby/metadata.rb +11 -0
- data/support/cookbooks/chruby/recipes/default.rb +43 -0
- data/support/cookbooks/chruby/recipes/system.rb +25 -0
- data/support/cookbooks/chruby/templates/default/chruby.sh.erb +22 -0
- data/support/cookbooks/chruby/test/integration/default/bash/embedded_test.sh +1 -0
- data/support/cookbooks/git/.gitignore +14 -0
- data/support/cookbooks/git/.kitchen.yml +46 -0
- data/support/cookbooks/git/Berksfile +8 -0
- data/support/cookbooks/git/CHANGELOG.md +87 -0
- data/support/cookbooks/git/CONTRIBUTING +29 -0
- data/support/cookbooks/git/Gemfile +3 -0
- data/support/cookbooks/git/LICENSE +201 -0
- data/support/cookbooks/git/README.md +115 -0
- data/support/cookbooks/git/TESTING.md +25 -0
- data/support/cookbooks/git/attributes/default.rb +40 -0
- data/support/cookbooks/git/metadata.rb +35 -0
- data/support/cookbooks/git/recipes/default.rb +53 -0
- data/support/cookbooks/git/recipes/server.rb +58 -0
- data/support/cookbooks/git/recipes/source.rb +49 -0
- data/support/cookbooks/git/recipes/windows.rb +37 -0
- data/support/cookbooks/git/templates/default/git-xinetd.d.erb +10 -0
- data/support/cookbooks/git/templates/default/sv-git-daemon-log-run.erb +2 -0
- data/support/cookbooks/git/templates/default/sv-git-daemon-run.erb +3 -0
- data/support/cookbooks/install_ruby/README.md +3 -0
- data/support/cookbooks/install_ruby/metadata.rb +10 -0
- data/support/cookbooks/install_ruby/recipes/default.rb +14 -0
- data/support/cookbooks/ruby_build/.gitignore +6 -0
- data/support/cookbooks/ruby_build/.kitchen.yml +31 -0
- data/support/cookbooks/ruby_build/.travis.yml +4 -0
- data/support/cookbooks/ruby_build/Berksfile +10 -0
- data/support/cookbooks/ruby_build/CHANGELOG.md +72 -0
- data/support/cookbooks/ruby_build/Gemfile +14 -0
- data/support/cookbooks/ruby_build/README.md +338 -0
- data/support/cookbooks/ruby_build/Rakefile +21 -0
- data/support/cookbooks/ruby_build/attributes/default.rb +67 -0
- data/support/cookbooks/ruby_build/chefignore +53 -0
- data/support/cookbooks/ruby_build/libraries/ruby_build_recipe_helpers.rb +40 -0
- data/support/cookbooks/ruby_build/metadata.rb +18 -0
- data/support/cookbooks/ruby_build/providers/ruby.rb +88 -0
- data/support/cookbooks/ruby_build/recipes/default.rb +69 -0
- data/support/cookbooks/ruby_build/resources/ruby.rb +33 -0
- data/support/cookbooks/ruby_build/test/cookbooks/alltherubies/metadata.rb +10 -0
- data/support/cookbooks/ruby_build/test/cookbooks/alltherubies/recipes/default.rb +59 -0
- data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/_verify_tests.bash +33 -0
- data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_1.8.7.bats +29 -0
- data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_1.9.2.bats +18 -0
- data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_1.9.3.bats +18 -0
- data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_2.0.0.bats +18 -0
- data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_jruby.bats +20 -0
- data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_rbx.bats +18 -0
- data/support/cookbooks/ruby_build/test/integration/alltherubies/bats/verify_ree.bats +19 -0
- data/support/cookbooks/ruby_build/test/integration/installation/bats/installation.bats +6 -0
- data/support/scripts/libsodium_ubuntu.sh +80 -0
- data/support/tasks/.gitkeep +0 -0
- data/support/tasks/libsodium_install.rb +57 -0
- data/vault-tree.gemspec +26 -0
- metadata +305 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module VaultTree
|
|
2
|
+
class OpenValidator
|
|
3
|
+
attr_reader :vault
|
|
4
|
+
|
|
5
|
+
def initialize(vault)
|
|
6
|
+
@vault = vault
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def validate!
|
|
10
|
+
confirm_vault_not_empty
|
|
11
|
+
true
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def confirm_vault_not_empty
|
|
17
|
+
raise Exceptions::EmptyVault if vault.empty?
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
module VaultTree
|
|
2
|
+
class Vault
|
|
3
|
+
attr_reader :id, :properties, :contract
|
|
4
|
+
|
|
5
|
+
def initialize(id, properties, contract)
|
|
6
|
+
@id = id
|
|
7
|
+
@properties = properties
|
|
8
|
+
@contract = contract
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def close
|
|
12
|
+
close_ancestors
|
|
13
|
+
close_self
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def retrieve_contents
|
|
17
|
+
unlocked_contents
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def fill_with
|
|
21
|
+
properties['fill_with']
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def lock_with
|
|
25
|
+
properties['lock_with']
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def unlock_with
|
|
29
|
+
properties['unlock_with']
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def contents
|
|
33
|
+
properties['contents']
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def empty?
|
|
37
|
+
contents.empty?
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def filler
|
|
41
|
+
KeywordInterpreter.new(fill_with, self).evaluate
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def locking_key
|
|
45
|
+
KeywordInterpreter.new(lock_with, self).evaluate
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def unlocking_key
|
|
49
|
+
KeywordInterpreter.new(unlock_with, self).evaluate
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
private
|
|
53
|
+
|
|
54
|
+
def close_ancestors
|
|
55
|
+
close_lock_ancestor
|
|
56
|
+
close_fill_ancestor
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def close_self
|
|
60
|
+
@properties['contents'] = locked_contents
|
|
61
|
+
self
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def unlocked_contents
|
|
65
|
+
Doorman.new(self).unlocked_contents
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def locked_contents
|
|
69
|
+
Doorman.new(self).locked_contents
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def close_lock_ancestor
|
|
73
|
+
contract.close_vault(lock_ancestor_id)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def close_fill_ancestor
|
|
77
|
+
contract.close_vault(fill_ancestor_id)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def has_lock_ancestor?
|
|
81
|
+
lock_with.include? 'CONTENTS'
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def has_fill_ancestor?
|
|
85
|
+
fill_with.include? 'CONTENTS'
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def lock_ancestor_id
|
|
89
|
+
lock_with.extract_ancestor_id if has_lock_ancestor?
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def fill_ancestor_id
|
|
93
|
+
fill_with.extract_ancestor_id if has_fill_ancestor?
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module VaultTree
|
|
2
|
+
class Keyword
|
|
3
|
+
attr_reader :vault, :arg_array
|
|
4
|
+
|
|
5
|
+
def initialize(vault, arg_array)
|
|
6
|
+
@vault = vault
|
|
7
|
+
@arg_array = arg_array
|
|
8
|
+
post_initialize(arg_array)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def contract
|
|
12
|
+
vault.contract
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def post_initialize(arg_array = [])
|
|
16
|
+
nil
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module VaultTree
|
|
2
|
+
class KeywordInterpreter
|
|
3
|
+
attr_reader :word, :vault
|
|
4
|
+
|
|
5
|
+
def initialize(word,vault)
|
|
6
|
+
@word = word
|
|
7
|
+
@vault = vault
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def evaluate # start here
|
|
11
|
+
begin
|
|
12
|
+
keyword_class_name.new(vault, arg_array).evaluate
|
|
13
|
+
rescue NameError
|
|
14
|
+
raise Exceptions::UnsupportedKeyword
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def keyword_class_name
|
|
21
|
+
instance_eval "VaultTree::#{word_base.downcase.camelize}"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def word_base
|
|
25
|
+
word.gsub(/(\[.*\])/,'').strip
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def arg_array
|
|
29
|
+
if has_args?
|
|
30
|
+
instance_eval arg_array_string
|
|
31
|
+
else
|
|
32
|
+
[]
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def arg_array_string
|
|
37
|
+
word.gsub(word_base,'').strip
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def has_args?
|
|
41
|
+
word.match(/\[/)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module VaultTree
|
|
2
|
+
class PublicEncryptionKey < Keyword
|
|
3
|
+
attr_reader :vault_id
|
|
4
|
+
|
|
5
|
+
def post_initialize(arg_array)
|
|
6
|
+
@vault_id = arg_array[0]
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def evaluate
|
|
10
|
+
key_pair.public_key(decryption_key)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def key_pair
|
|
16
|
+
LockSmith::EncryptionKeyPair.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def decryption_key
|
|
20
|
+
begin
|
|
21
|
+
contract.retrieve_contents(vault_id)
|
|
22
|
+
rescue Exceptions::EmptyVault
|
|
23
|
+
raise Exceptions::MissingPartnerDecryptionKey
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module VaultTree
|
|
2
|
+
class SharedKey < Keyword
|
|
3
|
+
attr_reader :public_key_vault_id, :secret_key_vault_id
|
|
4
|
+
|
|
5
|
+
def post_initialize(arg_array)
|
|
6
|
+
@public_key_vault_id = arg_array[0]
|
|
7
|
+
@secret_key_vault_id = arg_array[1]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def evaluate
|
|
11
|
+
LockSmith::SharedKeyPair.new(public_key: public_key_vault_contents, secret_key: secret_key_vault_contents)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def public_key_vault_contents
|
|
17
|
+
contract.retrieve_contents(public_key_vault_id)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def secret_key_vault_contents
|
|
21
|
+
contract.retrieve_contents(secret_key_vault_id)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module VaultTree
|
|
2
|
+
module LockSmith
|
|
3
|
+
class AsymmetricCipher
|
|
4
|
+
|
|
5
|
+
def encrypt(opts)
|
|
6
|
+
crypto_box(opts[:public_key],opts[:secret_key]).box(opts[:plain_text], :base64)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def decrypt(opts)
|
|
10
|
+
crypto_box(opts[:public_key],opts[:secret_key]).open(opts[:cipher_text], :base64)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def crypto_box(public_key,private_key)
|
|
16
|
+
pub = public_key_object(public_key)
|
|
17
|
+
pri = private_key_object(private_key)
|
|
18
|
+
box = Crypto::Box.new(pub,pri, :base64)
|
|
19
|
+
Crypto::RandomNonceBox.new(box)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def private_key_object(pri_key)
|
|
23
|
+
Crypto::PrivateKey.new(pri_key,:base64)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def public_key_object(pub_key)
|
|
27
|
+
Crypto::PublicKey.new(pub_key,:base64)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|