vault-tree 0.1.0 → 0.3.3

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.
Files changed (97) hide show
  1. data/.gitignore +7 -3
  2. data/CHANGE_LOG.md +15 -0
  3. data/Gemfile.lock +15 -5
  4. data/README.md +12 -15
  5. data/Rakefile +19 -4
  6. data/features/.nav +11 -0
  7. data/features/contracts/asymmetric_vault.feature +23 -0
  8. data/features/contracts/block_chain_key_transfer.feature +34 -0
  9. data/features/contracts/one_two_three.feature +22 -0
  10. data/features/contracts/readme.md +111 -0
  11. data/features/contracts_and_vaults.md +134 -0
  12. data/features/contributing_to_vault_tree.md +42 -0
  13. data/features/decision_tree.md +16 -0
  14. data/features/enforcement_problem.md +20 -0
  15. data/features/exceptions.feature +56 -5
  16. data/features/install_and_usage.md +57 -0
  17. data/features/keywords/assembled_shamir_key.feature +57 -0
  18. data/features/keywords/contents.feature +24 -0
  19. data/features/keywords/decryption_key.feature +10 -0
  20. data/features/keywords/dh_key.feature +56 -0
  21. data/features/keywords/external_data.feature +11 -0
  22. data/features/keywords/generated_shamir_key.feature +55 -0
  23. data/features/keywords/key.feature +38 -0
  24. data/features/keywords/master_passphrase.feature +68 -0
  25. data/features/keywords/public_encryption_key.feature +14 -0
  26. data/features/keywords/random_number.feature +44 -0
  27. data/features/keywords/readme.md +3 -0
  28. data/features/keywords/split_key.feature +54 -0
  29. data/features/keywords/unlocked.feature +51 -0
  30. data/features/manipulating_contracts.md +84 -0
  31. data/features/readme.md +6 -0
  32. data/features/steps/asymmetric_vault.steps.rb +41 -0
  33. data/features/steps/block_chain_key_transfer.steps.rb +43 -0
  34. data/features/steps/core.steps.rb +57 -104
  35. data/features/steps/exceptions.steps.rb +45 -1
  36. data/features/steps/one_two_three.steps.rb +57 -0
  37. data/features/steps/secret_sharing.steps.rb +36 -0
  38. data/features/support/contract_fixtures/asymmetric_vault.0.1.0.json +69 -0
  39. data/{spec/support/fixtures → features/support/contract_fixtures}/blank_simple_test_contract.json +0 -0
  40. data/features/support/contract_fixtures/block_chain_key_transfer.0.1.0.json +59 -0
  41. data/{spec/support/fixtures → features/support/contract_fixtures}/broken_contract.json +0 -0
  42. data/features/support/contract_fixtures/one_two_three.0.7.0.json +108 -0
  43. data/{spec/support/fixtures → features/support/contract_fixtures}/simple_test_contract.json +0 -0
  44. data/features/support/contract_fixtures/template.json +33 -0
  45. data/features/what_is_vault_tree.md +18 -0
  46. data/lib/vault-tree.rb +23 -6
  47. data/lib/vault-tree/contract/close_validator.rb +0 -7
  48. data/lib/vault-tree/contract/contract.rb +13 -2
  49. data/lib/vault-tree/contract/doorman.rb +22 -21
  50. data/lib/vault-tree/contract/vault.rb +18 -2
  51. data/lib/vault-tree/exceptions/exception_template.erb +0 -0
  52. data/lib/vault-tree/exceptions/failed_unlock_attempt.rb +6 -0
  53. data/lib/vault-tree/exceptions/vault_tree_exception.rb +18 -0
  54. data/lib/vault-tree/keywords/assembled_shamir_key.rb +44 -0
  55. data/lib/vault-tree/keywords/{vault_contents.rb → contents.rb} +0 -0
  56. data/lib/vault-tree/keywords/decryption_key.rb +1 -6
  57. data/lib/vault-tree/keywords/{shared_key.rb → dh_key.rb} +2 -2
  58. data/lib/vault-tree/keywords/external_data.rb +19 -0
  59. data/lib/vault-tree/keywords/generated_shamir_key.rb +57 -0
  60. data/lib/vault-tree/keywords/key.rb +13 -0
  61. data/lib/vault-tree/keywords/keyword_interpreter.rb +6 -6
  62. data/lib/vault-tree/keywords/public_encryption_key.rb +1 -5
  63. data/lib/vault-tree/keywords/random_number.rb +1 -1
  64. data/lib/vault-tree/keywords/split_key.rb +19 -0
  65. data/lib/vault-tree/keywords/unlocked.rb +1 -1
  66. data/lib/vault-tree/lock_smith.rb +182 -0
  67. data/lib/vault-tree/lock_smith/assembled_shamir_key.rb +64 -0
  68. data/lib/vault-tree/lock_smith/dh_key_pair.rb +10 -0
  69. data/lib/vault-tree/lock_smith/generated_shamir_key.rb +65 -0
  70. data/lib/vault-tree/lock_smith/split_key.rb +23 -0
  71. data/lib/vault-tree/{config/path_helpers.rb → path_helpers.rb} +26 -2
  72. data/lib/vault-tree/util/json.rb +1 -0
  73. data/lib/vault-tree/{config → util}/string.rb +1 -5
  74. data/lib/vault-tree/version.rb +1 -1
  75. data/spec/assembled_shamir_key_spec.rb +79 -0
  76. data/spec/generated_shamir_key_spec.rb +52 -0
  77. data/spec/lock_smith_spec.rb +90 -0
  78. data/spec/secret_sharing_spec.rb +43 -0
  79. data/support/scripts/libsodium_ubuntu.sh +1 -1
  80. data/vault-tree.gemspec +3 -2
  81. metadata +123 -41
  82. data/features/core.feature +0 -44
  83. data/lib/vault-tree/config/dependencies.rb +0 -4
  84. data/lib/vault-tree/config/lib.rb +0 -2
  85. data/lib/vault-tree/lock_smith/asymmetric_cipher.rb +0 -31
  86. data/lib/vault-tree/lock_smith/crypto_hash.rb +0 -11
  87. data/lib/vault-tree/lock_smith/digital_signature.rb +0 -32
  88. data/lib/vault-tree/lock_smith/encryption_key_pair.rb +0 -25
  89. data/lib/vault-tree/lock_smith/random_number.rb +0 -11
  90. data/lib/vault-tree/lock_smith/shared_key_pair.rb +0 -12
  91. data/lib/vault-tree/lock_smith/signing_key_pair.rb +0 -25
  92. data/lib/vault-tree/lock_smith/symmetric_cipher.rb +0 -25
  93. data/spec/app/locksmith/asymmetric_cipher_spec.rb +0 -25
  94. data/spec/app/locksmith/signing_key_pair_spec.rb +0 -22
  95. data/spec/spec_helper.rb +0 -5
  96. data/spec/support/fixtures/one_two_three-0.5.0.EXP.json +0 -105
  97. data/spec/support/fixtures/reference_contract.1.0.0.json +0 -227
@@ -1,4 +1,5 @@
1
1
  require 'json'
2
+
2
3
  module VaultTree
3
4
  module Support
4
5
  module JSON
@@ -4,7 +4,7 @@ class String
4
4
  end
5
5
 
6
6
  def extract_ancestor_id
7
- self.gsub(/(CONTENTS\[\')|(\'\])/,'').strip
7
+ self.gsub(/((CONTENTS|KEY)\[\')|(\'\])/,'').strip
8
8
  end
9
9
 
10
10
  def checksum
@@ -18,8 +18,4 @@ class String
18
18
  def camelize
19
19
  self.split("_").each {|s| s.capitalize! }.join("")
20
20
  end
21
-
22
- def has_ancestor?
23
- self.include? 'CONTENTS'
24
- end
25
21
  end
@@ -1,3 +1,3 @@
1
1
  module VaultTree
2
- VERSION = '0.1.0'
2
+ VERSION = '0.3.3'
3
3
  end
@@ -0,0 +1,79 @@
1
+ require 'rspec'
2
+ RSpec.configure{ |config| config.color_enabled = true }
3
+ require_relative '../lib/vault-tree/lock_smith/assembled_shamir_key'
4
+
5
+ module VaultTree
6
+ module Crypto
7
+ describe AssembledShamirKey do
8
+
9
+ describe '#assemble' do
10
+
11
+ context 'with 3 out of 5 secrets' do
12
+ before :each do
13
+ s = SecretSharing::Shamir.new(5,3)
14
+ s.create_random_secret
15
+ @established_secret = s.secret.to_s
16
+ @expected_digest = LockSmith.new(message: @established_secret).secure_hash
17
+ @key_shares = s.shares[0..2].map{|s| s.to_s}
18
+ @assembled_key = AssembledShamirKey.new(key_shares: @key_shares)
19
+ end
20
+
21
+ it 'recovers a hash of the shared secret' do
22
+ @assembled_key.assemble.should == @expected_digest
23
+ end
24
+ end
25
+
26
+ context 'with 5 out of 5 secrets' do
27
+ before :each do
28
+ s = SecretSharing::Shamir.new(5,5)
29
+ s.create_random_secret
30
+ @established_secret = s.secret.to_s
31
+ @expected_digest = LockSmith.new(message: @established_secret).secure_hash
32
+ @key_shares = s.shares[0..4].map{|s| s.to_s}
33
+ @assembled_key = AssembledShamirKey.new(key_shares: @key_shares)
34
+ end
35
+
36
+ it 'recovers a hash of the shared secret' do
37
+ @assembled_key.assemble.should == @expected_digest
38
+ end
39
+ end
40
+
41
+ context 'with 2 out of 2 secrets' do
42
+ before :each do
43
+ s = SecretSharing::Shamir.new(2,2)
44
+ s.create_random_secret
45
+ @established_secret = s.secret.to_s
46
+ @expected_digest = LockSmith.new(message: @established_secret).secure_hash
47
+ @key_shares = s.shares[0..1].map{|s| s.to_s}
48
+ @assembled_key = AssembledShamirKey.new(key_shares: @key_shares)
49
+ end
50
+
51
+ it 'recovers a hash of the shared secret' do
52
+ @assembled_key.assemble.should == @expected_digest
53
+ end
54
+ end
55
+
56
+ context 'in exceptional situations' do
57
+
58
+ it 'throws an exception on init if one of the shares is not a string' do
59
+ s = SecretSharing::Shamir.new(5,3)
60
+ s.create_random_secret
61
+ @established_secret = s.secret.to_s
62
+ @expected_digest = LockSmith.new(message: @established_secret).secure_hash
63
+ @key_shares = s.shares[0..2].map{|s| s.to_s}
64
+
65
+ # Replace the last string with just an object
66
+ @key_shares[2] = Object.new
67
+ expect{AssembledShamirKey.new(key_shares: @key_shares)}.to raise_error(TypeError)
68
+ end
69
+
70
+ it 'throws an exception if the key shares are nil' do
71
+ @key_shares = nil
72
+ expect{AssembledShamirKey.new(key_shares: @key_shares)}.to raise_error(TypeError)
73
+ end
74
+ end
75
+
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,52 @@
1
+ require 'rspec'
2
+ RSpec.configure{ |config| config.color_enabled = true }
3
+ require_relative '../lib/vault-tree/lock_smith/generated_shamir_key'
4
+
5
+ module VaultTree
6
+ module Crypto
7
+ describe GeneratedShamirKey do
8
+
9
+ describe '#generate | #assemble' do
10
+
11
+ context 'with 3 out of 5 secrets' do
12
+ it 'recovers a hash of the shared secret' do
13
+ generated_key = GeneratedShamirKey.new(outstanding_shares: 5, recovery_threshold: 3)
14
+ expected_digest = generated_key.key
15
+ key_shares = generated_key.shares
16
+ assembled_key = AssembledShamirKey.new(key_shares: key_shares)
17
+ assembled_key.assemble.should == expected_digest
18
+ end
19
+
20
+ it 'recovers a hash of the shared secret when the shares are requested before the key' do
21
+ generated_key = GeneratedShamirKey.new(outstanding_shares: 5, recovery_threshold: 3)
22
+ key_shares = generated_key.shares
23
+ expected_digest = generated_key.key
24
+ assembled_key = AssembledShamirKey.new(key_shares: key_shares)
25
+ assembled_key.assemble.should == expected_digest
26
+ end
27
+ end
28
+
29
+ context 'with 5 out of 5 secrets' do
30
+ it 'recovers a hash of the shared secret' do
31
+ generated_key = GeneratedShamirKey.new(outstanding_shares: 5, recovery_threshold: 5)
32
+ expected_digest = generated_key.key
33
+ key_shares = generated_key.shares
34
+ assembled_key = AssembledShamirKey.new(key_shares: key_shares)
35
+ assembled_key.assemble.should == expected_digest
36
+ end
37
+ end
38
+
39
+ context 'with 2 out of 2 secrets' do
40
+ it 'recovers a hash of the shared secret' do
41
+ generated_key = GeneratedShamirKey.new(outstanding_shares: 2, recovery_threshold: 2)
42
+ expected_digest = generated_key.key
43
+ key_shares = generated_key.shares
44
+ assembled_key = AssembledShamirKey.new(key_shares: key_shares)
45
+ assembled_key.assemble.should == expected_digest
46
+ end
47
+ end
48
+
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,90 @@
1
+ require 'rspec'
2
+ RSpec.configure{ |config| config.color_enabled = true }
3
+
4
+ require_relative '../lib/vault-tree/lock_smith'
5
+
6
+ module VaultTree
7
+ describe LockSmith do
8
+
9
+ describe '#symmetric_encrypt | #symmetric_decrypt' do
10
+ it 'encrypt and decrypt a simple message' do
11
+ secret_key = LockSmith.new(message: 'my_secret_key').secure_hash
12
+ cipher_text = LockSmith.new(message: 'Secret Message', secret_key: secret_key).symmetric_encrypt
13
+ recovered_msg = LockSmith.new(cipher_text: cipher_text, secret_key: secret_key).symmetric_decrypt
14
+ recovered_msg.should == 'Secret Message'
15
+ end
16
+ end
17
+
18
+ describe '#asymmetric_encrypt | #asymmetric_decrypt' do
19
+ it 'bob can encrypt with alice pub key and Alice can decrypt' do
20
+ alice_priv_key = LockSmith.new().generate_private_key
21
+ alice_pub_key = LockSmith.new(private_key: alice_priv_key).generate_public_key
22
+ alice_pub_key = LockSmith.new(private_key: alice_priv_key).generate_public_key
23
+ bob_priv_key = LockSmith.new().generate_private_key
24
+ bob_pub_key = LockSmith.new(private_key: bob_priv_key).generate_public_key
25
+ cipher_text = LockSmith.new(message: 'Secret Message', public_key: alice_pub_key, private_key: bob_priv_key).asymmetric_encrypt
26
+ bob_pub_key = LockSmith.new(private_key: bob_priv_key).generate_public_key
27
+ recovered_msg = LockSmith.new(cipher_text: cipher_text, public_key: bob_pub_key, private_key: alice_priv_key).asymmetric_decrypt
28
+ recovered_msg.should == 'Secret Message'
29
+ end
30
+ end
31
+
32
+ describe '#sign_message | #verify_message' do
33
+ it 'sign and verify a message' do
34
+ msg = 'My Message to Sign!'
35
+ sk = LockSmith.new().generate_signing_key
36
+ vk = LockSmith.new(signing_key: sk).generate_verify_key
37
+ sig = LockSmith.new(signing_key: sk, message: msg).sign_message
38
+ LockSmith.new(verify_key: vk, message: msg, signature: sig).verify_message.should be true
39
+ end
40
+ end
41
+
42
+ describe '#split_secret | #combine_secret_shares' do
43
+
44
+ context 'with 3 out of 5 secrets' do
45
+ it 'recovers the shared secret' do
46
+ pending
47
+ secret_key = LockSmith.new().generate_secret_key
48
+ secret_shares = LockSmith.new(message: secret_key, outstanding_secret_shares: 5, secret_recovery_threshold: 3).split_secret
49
+ combined_secret = LockSmith.new(message: secret_key, secret_shares: secret_shares).combine_secret_shares
50
+ combined_secret.should == secret_key
51
+ end
52
+ end
53
+
54
+ context 'with 5 out of 5 secrets' do
55
+ it 'recovers the shared secret' do
56
+ pending
57
+ end
58
+ end
59
+
60
+ context 'with 2 out of 2 secrets' do
61
+ it 'recovers the shared secret' do
62
+ pending
63
+ end
64
+ end
65
+
66
+ context 'in exceptional situations' do
67
+
68
+ it 'throws an exception on init if one of the shares is not a string' do
69
+ pending
70
+ s = SecretSharing::Shamir.new(5,3)
71
+ s.create_random_secret
72
+ @established_secret = s.secret.to_s
73
+ @expected_digest = LockSmith.new(message: @established_secret).secure_hash
74
+ @key_shares = s.shares[0..2].map{|s| s.to_s}
75
+
76
+ # Replace the last string with just an object
77
+ @key_shares[2] = Object.new
78
+ expect{AssembledShamirKey.new(key_shares: @key_shares)}.to raise_error(TypeError)
79
+ end
80
+
81
+ it 'throws an exception if the key shares are nil' do
82
+ pending
83
+ @key_shares = nil
84
+ expect{AssembledShamirKey.new(key_shares: @key_shares)}.to raise_error(TypeError)
85
+ end
86
+ end
87
+ end
88
+
89
+ end
90
+ end
@@ -0,0 +1,43 @@
1
+ require 'rspec'
2
+ RSpec.configure{ |config| config.color_enabled = true }
3
+ require 'secretsharing'
4
+
5
+ describe 'Secret Sharing Test Run' do
6
+ describe 'from the README' do
7
+
8
+ it 'demo the gem use' do
9
+
10
+ # create an object for 3 out of 5 secret sharing
11
+ s = SecretSharing::Shamir.new(5,3)
12
+
13
+ # create a random secret (returns the secret)
14
+ s.create_random_secret
15
+
16
+ # show secret
17
+ #puts s.secret
18
+ created_secret = s.secret
19
+
20
+ # show password representation of secret (Base64)
21
+ #puts s.secret_password
22
+
23
+ # show shares
24
+ #s.shares.each { |share| puts share }
25
+
26
+ # recover secret from shares
27
+ s2 = SecretSharing::Shamir.new(3)
28
+
29
+ # Accepts SecretSharing::Shamir::Share objects or
30
+ # string representations thereof
31
+
32
+ # In this case we are useing the string representation
33
+ s2 << s.shares[0].to_s
34
+ s2 << s.shares[2].to_s
35
+ s2 << s.shares[4].to_s
36
+ assembled_secret = s2.secret
37
+ #puts assembled_secret
38
+
39
+ #Compare assembled to created
40
+ assembled_secret.should == created_secret
41
+ end
42
+ end
43
+ end
@@ -19,7 +19,7 @@ sudo apt-get install devscripts debhelper build-essential
19
19
 
20
20
  # Build and Install libsodium
21
21
  export NAME=libsodium
22
- export VERSION=0.4.2
22
+ export VERSION=0.4.3
23
23
  export DEBVERSION=${VERSION}-1
24
24
  #Download and extract the archive
25
25
  if [ ! -f ${NAME}_${VERSION}.orig.tar.gz ]
@@ -18,9 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "rbnacl", "1.1.0"
22
- spec.add_dependency "require_all"
21
+ spec.add_dependency "rbnacl", "2.0.0"
22
+ spec.add_dependency "secretsharing", "0.3"
23
23
  spec.add_development_dependency "bundler", "~> 1.3"
24
24
  spec.add_development_dependency "rspec"
25
25
  spec.add_development_dependency "cucumber"
26
+ spec.add_development_dependency "relish"
26
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vault-tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-11 00:00:00.000000000 Z
12
+ date: 2014-02-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rbnacl
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 1.1.0
21
+ version: 2.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,23 +26,23 @@ dependencies:
26
26
  requirements:
27
27
  - - '='
28
28
  - !ruby/object:Gem::Version
29
- version: 1.1.0
29
+ version: 2.0.0
30
30
  - !ruby/object:Gem::Dependency
31
- name: require_all
31
+ name: secretsharing
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
- - - ! '>='
35
+ - - '='
36
36
  - !ruby/object:Gem::Version
37
- version: '0'
37
+ version: '0.3'
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ! '>='
43
+ - - '='
44
44
  - !ruby/object:Gem::Version
45
- version: '0'
45
+ version: '0.3'
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: bundler
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -91,6 +91,22 @@ dependencies:
91
91
  - - ! '>='
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: relish
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
94
110
  description: Vault Tree is a Ruby library for executing distributed cryptographic
95
111
  contracts.
96
112
  email:
@@ -100,23 +116,56 @@ extensions: []
100
116
  extra_rdoc_files: []
101
117
  files:
102
118
  - .gitignore
119
+ - CHANGE_LOG.md
103
120
  - Gemfile
104
121
  - Gemfile.lock
105
122
  - LICENSE.txt
106
123
  - README.md
107
124
  - Rakefile
108
125
  - VagrantFile
109
- - features/core.feature
126
+ - features/.nav
127
+ - features/contracts/asymmetric_vault.feature
128
+ - features/contracts/block_chain_key_transfer.feature
129
+ - features/contracts/one_two_three.feature
130
+ - features/contracts/readme.md
131
+ - features/contracts_and_vaults.md
132
+ - features/contributing_to_vault_tree.md
133
+ - features/decision_tree.md
134
+ - features/enforcement_problem.md
110
135
  - features/exceptions.feature
136
+ - features/install_and_usage.md
137
+ - features/keywords/assembled_shamir_key.feature
138
+ - features/keywords/contents.feature
139
+ - features/keywords/decryption_key.feature
140
+ - features/keywords/dh_key.feature
141
+ - features/keywords/external_data.feature
142
+ - features/keywords/generated_shamir_key.feature
143
+ - features/keywords/key.feature
144
+ - features/keywords/master_passphrase.feature
145
+ - features/keywords/public_encryption_key.feature
146
+ - features/keywords/random_number.feature
147
+ - features/keywords/readme.md
148
+ - features/keywords/split_key.feature
149
+ - features/keywords/unlocked.feature
150
+ - features/manipulating_contracts.md
151
+ - features/readme.md
152
+ - features/steps/asymmetric_vault.steps.rb
153
+ - features/steps/block_chain_key_transfer.steps.rb
111
154
  - features/steps/core.steps.rb
112
155
  - features/steps/exceptions.steps.rb
156
+ - features/steps/one_two_three.steps.rb
157
+ - features/steps/secret_sharing.steps.rb
158
+ - features/support/contract_fixtures/asymmetric_vault.0.1.0.json
159
+ - features/support/contract_fixtures/blank_simple_test_contract.json
160
+ - features/support/contract_fixtures/block_chain_key_transfer.0.1.0.json
161
+ - features/support/contract_fixtures/broken_contract.json
162
+ - features/support/contract_fixtures/one_two_three.0.7.0.json
163
+ - features/support/contract_fixtures/simple_test_contract.json
164
+ - features/support/contract_fixtures/template.json
113
165
  - features/support/env.rb
166
+ - features/what_is_vault_tree.md
114
167
  - features/world.rb
115
168
  - lib/vault-tree.rb
116
- - lib/vault-tree/config/dependencies.rb
117
- - lib/vault-tree/config/lib.rb
118
- - lib/vault-tree/config/path_helpers.rb
119
- - lib/vault-tree/config/string.rb
120
169
  - lib/vault-tree/contract/close_validator.rb
121
170
  - lib/vault-tree/contract/contract.rb
122
171
  - lib/vault-tree/contract/contract_presenter.rb
@@ -125,6 +174,8 @@ files:
125
174
  - lib/vault-tree/contract/open_validator.rb
126
175
  - lib/vault-tree/contract/vault.rb
127
176
  - lib/vault-tree/exceptions/empty_vault.rb
177
+ - lib/vault-tree/exceptions/exception_template.erb
178
+ - lib/vault-tree/exceptions/failed_unlock_attempt.rb
128
179
  - lib/vault-tree/exceptions/fill_attempt_master_password.rb
129
180
  - lib/vault-tree/exceptions/invalid_signature.rb
130
181
  - lib/vault-tree/exceptions/malformed_json.rb
@@ -135,35 +186,34 @@ files:
135
186
  - lib/vault-tree/exceptions/unsupported_keyword.rb
136
187
  - lib/vault-tree/exceptions/vault_does_not_exist.rb
137
188
  - lib/vault-tree/exceptions/vault_tree_exception.rb
189
+ - lib/vault-tree/keywords/assembled_shamir_key.rb
190
+ - lib/vault-tree/keywords/contents.rb
138
191
  - lib/vault-tree/keywords/decryption_key.rb
192
+ - lib/vault-tree/keywords/dh_key.rb
139
193
  - lib/vault-tree/keywords/external_data.rb
194
+ - lib/vault-tree/keywords/generated_shamir_key.rb
195
+ - lib/vault-tree/keywords/key.rb
140
196
  - lib/vault-tree/keywords/keyword.rb
141
197
  - lib/vault-tree/keywords/keyword_interpreter.rb
142
198
  - lib/vault-tree/keywords/master_passphrase.rb
143
199
  - lib/vault-tree/keywords/public_encryption_key.rb
144
200
  - lib/vault-tree/keywords/random_number.rb
145
- - lib/vault-tree/keywords/shared_key.rb
201
+ - lib/vault-tree/keywords/split_key.rb
146
202
  - lib/vault-tree/keywords/unlocked.rb
147
- - lib/vault-tree/keywords/vault_contents.rb
148
- - lib/vault-tree/lock_smith/asymmetric_cipher.rb
149
- - lib/vault-tree/lock_smith/crypto_hash.rb
150
- - lib/vault-tree/lock_smith/digital_signature.rb
151
- - lib/vault-tree/lock_smith/encryption_key_pair.rb
203
+ - lib/vault-tree/lock_smith.rb
204
+ - lib/vault-tree/lock_smith/assembled_shamir_key.rb
205
+ - lib/vault-tree/lock_smith/dh_key_pair.rb
206
+ - lib/vault-tree/lock_smith/generated_shamir_key.rb
152
207
  - lib/vault-tree/lock_smith/null_vault.rb
153
- - lib/vault-tree/lock_smith/random_number.rb
154
- - lib/vault-tree/lock_smith/shared_key_pair.rb
155
- - lib/vault-tree/lock_smith/signing_key_pair.rb
156
- - lib/vault-tree/lock_smith/symmetric_cipher.rb
208
+ - lib/vault-tree/lock_smith/split_key.rb
209
+ - lib/vault-tree/path_helpers.rb
157
210
  - lib/vault-tree/util/json.rb
211
+ - lib/vault-tree/util/string.rb
158
212
  - lib/vault-tree/version.rb
159
- - spec/app/locksmith/asymmetric_cipher_spec.rb
160
- - spec/app/locksmith/signing_key_pair_spec.rb
161
- - spec/spec_helper.rb
162
- - spec/support/fixtures/blank_simple_test_contract.json
163
- - spec/support/fixtures/broken_contract.json
164
- - spec/support/fixtures/one_two_three-0.5.0.EXP.json
165
- - spec/support/fixtures/reference_contract.1.0.0.json
166
- - spec/support/fixtures/simple_test_contract.json
213
+ - spec/assembled_shamir_key_spec.rb
214
+ - spec/generated_shamir_key_spec.rb
215
+ - spec/lock_smith_spec.rb
216
+ - spec/secret_sharing_spec.rb
167
217
  - support/cookbooks/ark/.gitignore
168
218
  - support/cookbooks/ark/.kitchen.yml
169
219
  - support/cookbooks/ark/.travis.yml
@@ -288,18 +338,50 @@ signing_key:
288
338
  specification_version: 3
289
339
  summary: The Self Enforcing Contract
290
340
  test_files:
291
- - features/core.feature
341
+ - features/.nav
342
+ - features/contracts/asymmetric_vault.feature
343
+ - features/contracts/block_chain_key_transfer.feature
344
+ - features/contracts/one_two_three.feature
345
+ - features/contracts/readme.md
346
+ - features/contracts_and_vaults.md
347
+ - features/contributing_to_vault_tree.md
348
+ - features/decision_tree.md
349
+ - features/enforcement_problem.md
292
350
  - features/exceptions.feature
351
+ - features/install_and_usage.md
352
+ - features/keywords/assembled_shamir_key.feature
353
+ - features/keywords/contents.feature
354
+ - features/keywords/decryption_key.feature
355
+ - features/keywords/dh_key.feature
356
+ - features/keywords/external_data.feature
357
+ - features/keywords/generated_shamir_key.feature
358
+ - features/keywords/key.feature
359
+ - features/keywords/master_passphrase.feature
360
+ - features/keywords/public_encryption_key.feature
361
+ - features/keywords/random_number.feature
362
+ - features/keywords/readme.md
363
+ - features/keywords/split_key.feature
364
+ - features/keywords/unlocked.feature
365
+ - features/manipulating_contracts.md
366
+ - features/readme.md
367
+ - features/steps/asymmetric_vault.steps.rb
368
+ - features/steps/block_chain_key_transfer.steps.rb
293
369
  - features/steps/core.steps.rb
294
370
  - features/steps/exceptions.steps.rb
371
+ - features/steps/one_two_three.steps.rb
372
+ - features/steps/secret_sharing.steps.rb
373
+ - features/support/contract_fixtures/asymmetric_vault.0.1.0.json
374
+ - features/support/contract_fixtures/blank_simple_test_contract.json
375
+ - features/support/contract_fixtures/block_chain_key_transfer.0.1.0.json
376
+ - features/support/contract_fixtures/broken_contract.json
377
+ - features/support/contract_fixtures/one_two_three.0.7.0.json
378
+ - features/support/contract_fixtures/simple_test_contract.json
379
+ - features/support/contract_fixtures/template.json
295
380
  - features/support/env.rb
381
+ - features/what_is_vault_tree.md
296
382
  - features/world.rb
297
- - spec/app/locksmith/asymmetric_cipher_spec.rb
298
- - spec/app/locksmith/signing_key_pair_spec.rb
299
- - spec/spec_helper.rb
300
- - spec/support/fixtures/blank_simple_test_contract.json
301
- - spec/support/fixtures/broken_contract.json
302
- - spec/support/fixtures/one_two_three-0.5.0.EXP.json
303
- - spec/support/fixtures/reference_contract.1.0.0.json
304
- - spec/support/fixtures/simple_test_contract.json
383
+ - spec/assembled_shamir_key_spec.rb
384
+ - spec/generated_shamir_key_spec.rb
385
+ - spec/lock_smith_spec.rb
386
+ - spec/secret_sharing_spec.rb
305
387
  has_rdoc: