puppet-decrypt 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 248058bd4e4965701c01ff8037984487ea5db344
4
- data.tar.gz: bfd65eec21ba36b8c3d8081e3f442c4f1adc980c
3
+ metadata.gz: 4c098cca8fcd1228c7d2e82d7b8615f7189e77e8
4
+ data.tar.gz: b2ddb9f7aaa99af9d68812a7d86a95c7d04da32e
5
5
  SHA512:
6
- metadata.gz: e9b7548c7c93147d6aa8a81f4a9a1cf1374ed5cdb18fc4a0ad50530fa956ed316cba19cad58fb0f7e84609a9d04b1cefb262a549a807761cffb4a47a46e25a11
7
- data.tar.gz: c2d3f32d32879c01aba7ca764280ec2422e81d3c69841bc256f0333ff90dfa3c7e6ef37341f8f6e593819cf4f5aa27b078bd643c1078be0afca10aae4dcbc699
6
+ metadata.gz: b19f454ff00dd36f2f83848c1a4be5df1ec6065b6dcd487364da4c981cce7350c6789862092df40681bcefaa2363e46ee8d4735cb751abec3b6e7400d4a6b0c2
7
+ data.tar.gz: 45b6964e742c45152804e4d6eac02324702515dcefc49ce87cf7a0eeb0268b744229ae2aec6f99b0a84ac5146de98da15519d6edb31e94c282b4af7c162f4be7
data/.travis.yml CHANGED
@@ -1,10 +1,21 @@
1
1
  language: ruby
2
+ bundler_args: --without debugging
2
3
  rvm:
4
+ - 1.8.7
3
5
  - 1.9.3
4
- - 1.9.2
5
6
  - jruby-19mode
6
7
  - 2.0.0
8
+ - 2.1.0
7
9
  gemfile:
8
10
  - Gemfile
9
11
  - bundles/puppet_3_0.gemfile
10
12
  - bundles/puppet_2_7.gemfile
13
+ - bundles/puppet_edge.gemfile
14
+ matrix:
15
+ exclude:
16
+ - rvm: 1.8.7
17
+ gemfile: bundles/puppet_edge.gemfile
18
+ - rvm: 2.1.0
19
+ gemfile: bundles/puppet_3_0.gemfile
20
+ - rvm: 2.1.0
21
+ gemfile: bundles/puppet_2_7.gemfile
data/ChangeLog.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 0.1.1 (Jan 24, 2014)
2
+
3
+ Enhancements:
4
+ - Salting to protect against dictionary and rainbow table attacks.
5
+
6
+ Bugfixes:
7
+ - Fix Ruby 1.8.7 support.
8
+
1
9
  ## 0.1.0 (July 10, 2013)
2
10
 
3
11
  Features:
data/Gemfile CHANGED
@@ -1,5 +1,16 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in puppet-decrypt.gemspec
4
- gem 'puppet'
5
4
  gemspec
5
+
6
+ # Not in the gemspec because we're testing multiple versions with appraisal.
7
+ gem 'puppet'
8
+
9
+ # Things we don't want on Travis
10
+ group :debugging do
11
+ # just for pushing documentation, requires ruby 1.9+
12
+ gem 'relish'
13
+ gem 'pry'
14
+ gem 'pry-nav'
15
+ end
16
+
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in puppet-decrypt.gemspec
4
+ gem 'puppet', :git => 'https://github.com/puppetlabs/puppet'
5
+ gemspec(:path => '../')
@@ -1,6 +1,6 @@
1
1
  Feature: Puppet works
2
2
 
3
- Scenario: Default test
3
+ Scenario: Unsalted (legacy) key
4
4
  Given I have the following hiera data:
5
5
  """
6
6
  ---
@@ -13,11 +13,24 @@ Feature: Puppet works
13
13
  """
14
14
  Then the output should include "Decrypted: max"
15
15
 
16
+ Scenario: Default test
17
+ Given I have the following hiera data:
18
+ """
19
+ ---
20
+ db_password: ENC[HOz0/aHCjJTAUlEbM/pqMQ==:QZy2oTvQNhwFMmOARn+Jlw==:aUY1NjBqamp6RWs1UkYvVjVULzNvdz09]
21
+ """
22
+ When I execute this puppet manifest:
23
+ """
24
+ $password = decrypt(hiera('db_password'))
25
+ notice("Decrypted: $password")
26
+ """
27
+ Then the output should include "Decrypted: max"
28
+
16
29
  Scenario: Overriden key (string)
17
30
  Given I have the following hiera data:
18
31
  """
19
32
  ---
20
- db_password: ENC:alt_key[c4S4hMCDv1b7FkZgOBRTOA==]
33
+ db_password: ENC:alt_key[KgLJnDVF9VeTGGU/vG2KjQ==:NiLhgUn4JL07DI9trGSK8g==:YlVhZDhDSEZsSDV6RnBOdm1FMmVtQT09]
21
34
  """
22
35
  When I execute this puppet manifest:
23
36
  """
@@ -31,7 +44,7 @@ Feature: Puppet works
31
44
  """
32
45
  ---
33
46
  db_password:
34
- value: 'ENC[G6MjBDDFcapYLaKBFJvPSg==]'
47
+ value: 'ENC[AVdi08NXUveKStMSAH4kMQ==:EAHeMe3TvK33gjnDDHV5rQ==:cndoVVBhMWdXQW5HVSsxWDN4OUtRZz09]'
35
48
  secretkey: 'features/fixtures/other_secretkeys/secondary_key'
36
49
  """
37
50
  When I execute this puppet manifest:
@@ -40,4 +53,4 @@ Feature: Puppet works
40
53
  $password = decrypt(hiera_hash('db_password'))
41
54
  notice("Decrypted: $password")
42
55
  """
43
- Then the output should include "Decrypted: overridden"
56
+ Then the output should include "Decrypted: overridden"
@@ -12,7 +12,7 @@ When /^I execute this puppet manifest:$/ do |manifest|
12
12
  begin
13
13
  file.write(manifest)
14
14
  file.close
15
- ENV['FACTER_HIERA_FILE'] = File.basename(hierafile, '.yaml')
15
+ ENV['FACTER_HIERA_FILE'] = File.basename(hierafile.path, '.yaml')
16
16
  ENV['PUPPET_DECRYPT_KEYDIR'] = 'features/fixtures/secretkeys'
17
17
  puppet_version = `bundle exec puppet --version`
18
18
  puppet_command = "bundle exec puppet apply --noop #{file.path}"
@@ -1,9 +1,13 @@
1
1
  require 'puppet-decrypt/version'
2
+ require 'puppet-decrypt/key_loader'
2
3
  require 'puppet-decrypt/decryptor'
3
4
  require 'encryptor'
4
5
  require 'base64'
5
6
 
6
7
  module Puppet
7
8
  module Decrypt
9
+ def self.key_loader
10
+ @key_loader ||= Puppet::Decrypt::KeyLoader.new
11
+ end
8
12
  end
9
13
  end
@@ -2,7 +2,7 @@ module Puppet
2
2
  module Decrypt
3
3
 
4
4
  class Decryptor
5
- ENCRYPTED_PATTERN = /^ENC:?(?<key>\w*)\[(?<value>.*)\]$/
5
+ ENCRYPTED_PATTERN = /^ENC:?(\w*)\[(.*)\]$/
6
6
  KEY_DIR = ENV['PUPPET_DECRYPT_KEYDIR'] || '/etc/puppet-decrypt'
7
7
  DEFAULT_KEY = 'encryptor_secret_key'
8
8
  DEFAULT_FILE = File.join(KEY_DIR, DEFAULT_KEY)
@@ -24,31 +24,40 @@ module Puppet
24
24
  else
25
25
  match = value.match(ENCRYPTED_PATTERN)
26
26
  if match
27
- value = match[:value]
27
+ value = match[2]
28
28
  end
29
29
  end
30
30
  if match
31
- value = strict_decode64(value)
32
- value = value.decrypt(:key => secret_key_digest)
31
+ value, iv, salt = value.split(':').map{|s| strict_decode64 s }
32
+ if iv && salt
33
+ value = value.decrypt(:key => secret_key_digest, :iv => iv, :salt => salt)
34
+ else
35
+ $stderr.puts "Warning: re-encrypt with puppet-crypt to use salted passwords"
36
+ value = value.decrypt(:key => secret_key_digest)
37
+ end
33
38
  end
34
39
  value
35
40
  end
36
41
 
37
- def encrypt(value, secret_key_file = nil)
42
+ def encrypt(value, secret_key_file, salt, iv)
38
43
  secret_key_file ||= secret_key_for value
39
44
  secret_key_digest = digest_from secret_key_file
40
- result = value.encrypt(:key => secret_key_digest)
41
- encrypted_value = strict_encode64(result).strip
45
+ result = value.encrypt(:key => secret_key_digest, :iv => iv, :salt => salt)
46
+ encrypted_value = [result, iv, salt].map{|v| strict_encode64(v).strip }.join ':'
42
47
  encrypted_value = "ENC[#{encrypted_value}]" unless @raw
43
- raise "Value can't be encrypted properly" unless decrypt(encrypted_value, secret_key_file) == value
48
+ raise "Value can't be encrypted properly with salt #{salt}" unless decrypt(encrypted_value, secret_key_file) == value
44
49
  encrypted_value
45
50
  end
46
51
 
47
52
  private
53
+ def load_key(secret_key_file)
54
+ Puppet::Decrypt.key_loader.load_key secret_key_file
55
+ end
56
+
48
57
  def secret_key_for(value)
49
58
  match = value.match(ENCRYPTED_PATTERN)
50
59
  if match
51
- key = match[:key]
60
+ key = match[1]
52
61
  key = DEFAULT_KEY if key.empty?
53
62
  end
54
63
  key ||= DEFAULT_KEY
@@ -56,8 +65,7 @@ module Puppet
56
65
  end
57
66
 
58
67
  def digest_from(secret_key_file)
59
- raise "Secret key file: #{secret_key_file} is not readable!" unless File.readable?(secret_key_file)
60
- secret_key = File.open(secret_key_file, &:readline).chomp
68
+ secret_key = load_key secret_key_file
61
69
  Digest::SHA256.hexdigest(secret_key)
62
70
  end
63
71
 
@@ -0,0 +1,10 @@
1
+ module Puppet
2
+ module Decrypt
3
+ class KeyLoader
4
+ def load_key(secret_key_file)
5
+ raise "Secret key file: #{secret_key_file} is not readable!" unless File.readable?(secret_key_file)
6
+ secret_key = File.open(secret_key_file, &:readline).chomp
7
+ end
8
+ end
9
+ end
10
+ end
@@ -1,5 +1,5 @@
1
1
  module Puppet
2
2
  module Decrypt
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
@@ -23,6 +23,14 @@ Puppet::Face.define(:crypt, Puppet::Decrypt::VERSION) do
23
23
  summary "The path to the secret key file (default: #{Puppet::Decrypt::Decryptor::DEFAULT_FILE}"
24
24
  end
25
25
 
26
+ option "--iv IV" do
27
+ summary "The initialization vector to use during encryption (default is random)"
28
+ end
29
+
30
+ option "--salt SALT" do
31
+ summary "The salt to use during encryption (default is random)"
32
+ end
33
+
26
34
  action :encrypt do
27
35
  summary 'Encrypt a secret value.'
28
36
  arguments "<plaintext_secret>"
@@ -30,8 +38,10 @@ Puppet::Face.define(:crypt, Puppet::Decrypt::VERSION) do
30
38
  This action encrypts a value using the secret key.
31
39
  EOT
32
40
  when_invoked do |plaintext_secret, options|
41
+ iv = options.delete(:iv) || OpenSSL::Cipher::Cipher.new('aes-256-cbc').random_iv
42
+ salt = options.delete(:salt) || SecureRandom.base64
33
43
  secretkey = options[:secretkey]
34
- Puppet::Decrypt::Decryptor.new(options).encrypt(plaintext_secret, secretkey)
44
+ Puppet::Decrypt::Decryptor.new(options).encrypt(plaintext_secret, secretkey, salt, iv)
35
45
  end
36
46
  end
37
47
 
@@ -27,13 +27,10 @@ This was done to more easily support multiple keys. If you are upgrading from a
27
27
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
28
28
  gem.require_paths = ["lib"]
29
29
 
30
- gem.add_dependency('encryptor')
30
+ gem.add_dependency('encryptor', '~> 1.3')
31
31
  gem.add_development_dependency('rake')
32
32
  gem.add_development_dependency('cucumber')
33
- gem.add_development_dependency('relish')
34
33
  gem.add_development_dependency('rspec')
35
34
  gem.add_development_dependency('rspec-puppet')
36
35
  gem.add_development_dependency('puppetlabs_spec_helper')
37
- gem.add_development_dependency('pry')
38
- gem.add_development_dependency('pry-nav')
39
36
  end
@@ -2,24 +2,48 @@
2
2
  require 'spec_helper'
3
3
  require 'puppet/face'
4
4
 
5
+ MINIMUM_IV_LENGTH = 20
5
6
  describe Puppet::Face[:crypt, :current] do
7
+ let(:insecure_opts) do
8
+ { :salt => '1234567890', :iv => '5'*20 }
9
+ end
10
+ # Values above, encoded
11
+ let(:base64_salt) { 'MTIzNDU2Nzg5MA==' }
12
+ let(:base64_iv) { 'NTU1NTU1NTU1NTU1NTU1NTU1NTU=' }
6
13
  before :all do
7
14
  mock_secret_key(Puppet::Decrypt::Decryptor::DEFAULT_FILE, 'masterkey')
8
15
  end
9
16
 
10
17
  describe 'encrypt' do
11
18
  describe 'should encrypt a value' do
19
+ it 'is decryptable with minimum args' do
20
+ encrypted = subject.encrypt('flabberghaster')
21
+ subject.decrypt(encrypted).should == 'flabberghaster'
22
+ end
23
+ it 'is decryptable with minimum args with a salt' do
24
+ salt = SecureRandom.base64
25
+ encrypted = subject.encrypt('flabberghaster', {:salt => salt})
26
+ subject.decrypt(encrypted).should == 'flabberghaster'
27
+ end
28
+ it 'is decryptable with problematic salt (regexp chars)' do
29
+ salt = 'R8STny+9cq03ujQGiKDd9w=='
30
+ encrypted = subject.encrypt('flabberghaster', {:salt => salt})
31
+ subject.decrypt(encrypted).should == 'flabberghaster'
32
+ end
12
33
  it 'with ENC[...]' do
13
- subject.encrypt('flabberghaster').should == 'ENC[3xzy8fiXlaJqv3m+aXIJNA==]'
34
+ expected_value = "ENC[7u523Z+PpqSm58+BeiN4qw==:#{base64_iv}:#{base64_salt}]"
35
+ subject.encrypt('flabberghaster', insecure_opts).should == expected_value
14
36
  end
15
37
 
16
38
  it 'with --raw' do
17
- subject.encrypt('flabberghaster', {:raw => true}).should == '3xzy8fiXlaJqv3m+aXIJNA=='
39
+ expected_value = "7u523Z+PpqSm58+BeiN4qw==:#{base64_iv}:#{base64_salt}"
40
+ subject.encrypt('flabberghaster', {:raw => true}.merge(insecure_opts)).should == expected_value
18
41
  end
19
42
 
20
43
  it 'with --secretkey' do
21
44
  mock_secret_key('/etc/another_key', 'anotherkey')
22
- subject.encrypt('flabberghaster', {:secretkey => '/etc/another_key'}).should == 'ENC[8MaZYHPdj9IpnzcuBLlMdg==]'
45
+ expected_value = "ENC[81crlXmuzSnld3+4YUkQYg==:#{base64_iv}:#{base64_salt}]"
46
+ subject.encrypt('flabberghaster', {:secretkey => '/etc/another_key'}.merge(insecure_opts)).should == expected_value
23
47
  end
24
48
  end
25
49
  end
@@ -0,0 +1,24 @@
1
+ module Puppet
2
+ module Decrypt
3
+ def self.key_loader=(key_loader)
4
+ @key_loader = key_loader
5
+ end
6
+
7
+ class FakeKeyLoader
8
+ def initialize
9
+ @secrets = {}
10
+ end
11
+
12
+ def add_secret(secret_key_file, secret_key)
13
+ @secrets[secret_key_file] = secret_key
14
+ end
15
+
16
+ def load_key(secret_key_file)
17
+ raise "Secret key file: #{secret_key_file} is not readable!" unless @secrets.has_key? secret_key_file
18
+ secret_key = @secrets[secret_key_file]
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ Puppet::Decrypt.key_loader = Puppet::Decrypt::FakeKeyLoader.new
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,14 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  require 'rspec-puppet'
3
+ require 'puppet-decrypt/fake_key_loader'
3
4
  require 'puppet-decrypt'
4
5
  require 'rspec/mocks'
5
6
 
7
+ Puppet::Decrypt.key_loader = Puppet::Decrypt::FakeKeyLoader.new
8
+
6
9
  module SecretKeyHelper
7
10
  def mock_secret_key(filename, secret)
8
- File.should_receive(:readable?).with(filename).and_return(true)
9
- File.should_receive(:open).with(filename).and_return(secret)
11
+ Puppet::Decrypt.key_loader.add_secret(filename, secret)
10
12
  end
11
13
  end
12
14
 
metadata CHANGED
@@ -1,139 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-decrypt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - mlincoln
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-12 00:00:00.000000000 Z
11
+ date: 2014-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: encryptor
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '1.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: cucumber
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: relish
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - '>='
45
+ - - ">="
60
46
  - !ruby/object:Gem::Version
61
47
  version: '0'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - '>='
52
+ - - ">="
67
53
  - !ruby/object:Gem::Version
68
54
  version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - '>='
59
+ - - ">="
74
60
  - !ruby/object:Gem::Version
75
61
  version: '0'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - '>='
66
+ - - ">="
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: rspec-puppet
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - '>='
73
+ - - ">="
88
74
  - !ruby/object:Gem::Version
89
75
  version: '0'
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - '>='
80
+ - - ">="
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: puppetlabs_spec_helper
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - '>='
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - '>='
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: pry
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - '>='
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: pry-nav
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - '>='
87
+ - - ">="
130
88
  - !ruby/object:Gem::Version
131
89
  version: '0'
132
90
  type: :development
133
91
  prerelease: false
134
92
  version_requirements: !ruby/object:Gem::Requirement
135
93
  requirements:
136
- - - '>='
94
+ - - ">="
137
95
  - !ruby/object:Gem::Version
138
96
  version: '0'
139
97
  description: A gem for encrypting/decrypting secret values for use with Puppet
@@ -143,10 +101,10 @@ executables: []
143
101
  extensions: []
144
102
  extra_rdoc_files: []
145
103
  files:
146
- - .gitignore
147
- - .rspec
148
- - .rvmrc
149
- - .travis.yml
104
+ - ".gitignore"
105
+ - ".rspec"
106
+ - ".rvmrc"
107
+ - ".travis.yml"
150
108
  - ChangeLog.md
151
109
  - Gemfile
152
110
  - LICENSE.txt
@@ -155,6 +113,7 @@ files:
155
113
  - Rakefile
156
114
  - bundles/puppet_2_7.gemfile
157
115
  - bundles/puppet_3_0.gemfile
116
+ - bundles/puppet_edge.gemfile
158
117
  - features/fixtures/data/overridden_secret_key.yaml
159
118
  - features/fixtures/data/simple.yaml
160
119
  - features/fixtures/hiera.yaml
@@ -168,6 +127,7 @@ files:
168
127
  - features/support/env.rb
169
128
  - lib/puppet-decrypt.rb
170
129
  - lib/puppet-decrypt/decryptor.rb
130
+ - lib/puppet-decrypt/key_loader.rb
171
131
  - lib/puppet-decrypt/version.rb
172
132
  - lib/puppet/application/crypt.rb
173
133
  - lib/puppet/face/crypt.rb
@@ -175,6 +135,7 @@ files:
175
135
  - puppet-decrypt.gemspec
176
136
  - spec/faces/crypt_spec.rb
177
137
  - spec/functions/decrypt_spec.rb
138
+ - spec/puppet-decrypt/fake_key_loader.rb
178
139
  - spec/spec_helper.rb
179
140
  homepage: https://github.com/maxlinc/puppet-decrypt
180
141
  licenses: []
@@ -192,17 +153,17 @@ require_paths:
192
153
  - lib
193
154
  required_ruby_version: !ruby/object:Gem::Requirement
194
155
  requirements:
195
- - - '>='
156
+ - - ">="
196
157
  - !ruby/object:Gem::Version
197
158
  version: 1.9.0
198
159
  required_rubygems_version: !ruby/object:Gem::Requirement
199
160
  requirements:
200
- - - '>='
161
+ - - ">="
201
162
  - !ruby/object:Gem::Version
202
163
  version: '0'
203
164
  requirements: []
204
165
  rubyforge_project:
205
- rubygems_version: 2.0.4
166
+ rubygems_version: 2.2.0
206
167
  signing_key:
207
168
  specification_version: 4
208
169
  summary: A shared secret strategy that works with any data source
@@ -220,4 +181,5 @@ test_files:
220
181
  - features/support/env.rb
221
182
  - spec/faces/crypt_spec.rb
222
183
  - spec/functions/decrypt_spec.rb
184
+ - spec/puppet-decrypt/fake_key_loader.rb
223
185
  - spec/spec_helper.rb