powerhome-attr_encrypted 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.travis.yml +67 -0
  4. data/CHANGELOG.md +98 -0
  5. data/Gemfile +3 -0
  6. data/MIT-LICENSE +20 -0
  7. data/README.md +465 -0
  8. data/Rakefile +25 -0
  9. data/attr_encrypted.gemspec +63 -0
  10. data/certs/saghaulor.pem +21 -0
  11. data/checksum/attr_encrypted-3.0.0.gem.sha256 +1 -0
  12. data/checksum/attr_encrypted-3.0.0.gem.sha512 +1 -0
  13. data/checksum/attr_encrypted-3.0.1.gem.sha256 +1 -0
  14. data/checksum/attr_encrypted-3.0.1.gem.sha512 +1 -0
  15. data/checksum/attr_encrypted-3.0.2.gem.sha256 +1 -0
  16. data/checksum/attr_encrypted-3.0.2.gem.sha512 +1 -0
  17. data/checksum/attr_encrypted-3.0.3.gem.sha256 +1 -0
  18. data/checksum/attr_encrypted-3.0.3.gem.sha512 +1 -0
  19. data/checksum/attr_encrypted-3.1.0.gem.sha256 +1 -0
  20. data/checksum/attr_encrypted-3.1.0.gem.sha512 +1 -0
  21. data/lib/attr_encrypted.rb +473 -0
  22. data/lib/attr_encrypted/adapters/active_record.rb +157 -0
  23. data/lib/attr_encrypted/adapters/data_mapper.rb +24 -0
  24. data/lib/attr_encrypted/adapters/sequel.rb +16 -0
  25. data/lib/attr_encrypted/version.rb +19 -0
  26. data/test/active_record_test.rb +365 -0
  27. data/test/attr_encrypted_test.rb +490 -0
  28. data/test/compatibility_test.rb +109 -0
  29. data/test/data_mapper_test.rb +59 -0
  30. data/test/legacy_active_record_test.rb +120 -0
  31. data/test/legacy_attr_encrypted_test.rb +300 -0
  32. data/test/legacy_compatibility_test.rb +95 -0
  33. data/test/legacy_data_mapper_test.rb +57 -0
  34. data/test/legacy_sequel_test.rb +54 -0
  35. data/test/run.sh +12 -0
  36. data/test/sequel_test.rb +55 -0
  37. data/test/test_helper.rb +61 -0
  38. metadata +294 -0
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ # -*- encoding: utf-8 -*-
4
+ require_relative 'test_helper'
5
+
6
+ # Test to ensure that existing representations in database do not break on
7
+ # migrating to new versions of this gem. This ensures that future versions of
8
+ # this gem will retain backwards compatibility with data generated by earlier
9
+ # versions.
10
+ class LegacyCompatibilityTest < Minitest::Test
11
+ class LegacyNonmarshallingPet < ActiveRecord::Base
12
+ PET_NICKNAME_SALT = Digest::SHA256.hexdigest('my-really-really-secret-pet-nickname-salt')
13
+ PET_NICKNAME_KEY = 'my-really-really-secret-pet-nickname-key'
14
+ PET_BIRTHDATE_SALT = Digest::SHA256.hexdigest('my-really-really-secret-pet-birthdate-salt')
15
+ PET_BIRTHDATE_KEY = 'my-really-really-secret-pet-birthdate-key'
16
+
17
+ self.attr_encrypted_options[:insecure_mode] = true
18
+ self.attr_encrypted_options[:algorithm] = 'aes-256-cbc'
19
+ self.attr_encrypted_options[:mode] = :single_iv_and_salt
20
+
21
+ attr_encrypted :nickname,
22
+ :key => proc { Encryptor.encrypt(:value => PET_NICKNAME_SALT, :key => PET_NICKNAME_KEY, insecure_mode: true, algorithm: 'aes-256-cbc') }
23
+ attr_encrypted :birthdate,
24
+ :key => proc { Encryptor.encrypt(:value => PET_BIRTHDATE_SALT, :key => PET_BIRTHDATE_KEY, insecure_mode: true, algorithm: 'aes-256-cbc') }
25
+ end
26
+
27
+ class LegacyMarshallingPet < ActiveRecord::Base
28
+ PET_NICKNAME_SALT = Digest::SHA256.hexdigest('my-really-really-secret-pet-nickname-salt')
29
+ PET_NICKNAME_KEY = 'my-really-really-secret-pet-nickname-key'
30
+ PET_BIRTHDATE_SALT = Digest::SHA256.hexdigest('my-really-really-secret-pet-birthdate-salt')
31
+ PET_BIRTHDATE_KEY = 'my-really-really-secret-pet-birthdate-key'
32
+
33
+ self.attr_encrypted_options[:insecure_mode] = true
34
+ self.attr_encrypted_options[:algorithm] = 'aes-256-cbc'
35
+ self.attr_encrypted_options[:mode] = :single_iv_and_salt
36
+
37
+ attr_encrypted :nickname,
38
+ :key => proc { Encryptor.encrypt(:value => PET_NICKNAME_SALT, :key => PET_NICKNAME_KEY, insecure_mode: true, algorithm: 'aes-256-cbc') },
39
+ :marshal => true
40
+ attr_encrypted :birthdate,
41
+ :key => proc { Encryptor.encrypt(:value => PET_BIRTHDATE_SALT, :key => PET_BIRTHDATE_KEY, insecure_mode: true, algorithm: 'aes-256-cbc') },
42
+ :marshal => true
43
+ end
44
+
45
+ def setup
46
+ drop_all_tables
47
+ create_tables
48
+ end
49
+
50
+ def test_nonmarshalling_backwards_compatibility
51
+ pet = LegacyNonmarshallingPet.create!(
52
+ :name => 'Fido',
53
+ :encrypted_nickname => 'uSUB6KGzta87yxesyVc3DA==',
54
+ :encrypted_birthdate => 'I3d691B2PtFXLx15kO067g=='
55
+ )
56
+
57
+ assert_equal 'Fido', pet.name
58
+ assert_equal 'Fido the Dog', pet.nickname
59
+ assert_equal '2011-07-09', pet.birthdate
60
+ end
61
+
62
+ def test_marshalling_backwards_compatibility
63
+ pet = LegacyMarshallingPet.create!(
64
+ :name => 'Fido',
65
+ :encrypted_nickname => '7RwoT64in4H+fGVBPYtRcN0K4RtriIy1EP4nDojUa8g=',
66
+ :encrypted_birthdate => 'bSp9sJhXQSp2QlNZHiujtcK4lRVBE8HQhn1y7moQ63bGJR20hvRSZ73ePAmm+wc5'
67
+ )
68
+
69
+ assert_equal 'Fido', pet.name
70
+ assert_equal 'Mummy\'s little helper', pet.nickname
71
+
72
+ assert_equal Date.new(2011, 7, 9), pet.birthdate
73
+ end
74
+
75
+ private
76
+
77
+ def create_tables
78
+ ActiveRecord::Schema.define(:version => 1) do
79
+ create_table :legacy_nonmarshalling_pets do |t|
80
+ t.string :name
81
+ t.string :encrypted_nickname
82
+ t.string :encrypted_birthdate
83
+ t.string :salt
84
+ end
85
+ create_table :legacy_marshalling_pets do |t|
86
+ t.string :name
87
+ t.string :encrypted_nickname
88
+ t.string :encrypted_birthdate
89
+ t.string :salt
90
+ end
91
+ end
92
+ end
93
+ end
94
+
95
+ ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:'
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'test_helper'
4
+
5
+ DataMapper.setup(:default, 'sqlite3::memory:')
6
+
7
+ class LegacyClient
8
+ include DataMapper::Resource
9
+ self.attr_encrypted_options[:insecure_mode] = true
10
+ self.attr_encrypted_options[:algorithm] = 'aes-256-cbc'
11
+ self.attr_encrypted_options[:mode] = :single_iv_and_salt
12
+
13
+ property :id, Serial
14
+ property :encrypted_email, String
15
+ property :encrypted_credentials, Text
16
+ property :salt, String
17
+
18
+ attr_encrypted :email, :key => 'a secret key', mode: :single_iv_and_salt
19
+ attr_encrypted :credentials, :key => Proc.new { |client| Encryptor.encrypt(:value => client.salt, :key => 'some private key', insecure_mode: true, algorithm: 'aes-256-cbc') }, :marshal => true, mode: :single_iv_and_salt
20
+
21
+ def initialize(attrs = {})
22
+ super attrs
23
+ self.salt ||= Digest::SHA1.hexdigest((Time.now.to_i * rand(5)).to_s)
24
+ self.credentials ||= { :username => 'example', :password => 'test' }
25
+ end
26
+ end
27
+
28
+ DataMapper.auto_migrate!
29
+
30
+ class LegacyDataMapperTest < Minitest::Test
31
+
32
+ def setup
33
+ LegacyClient.all.each(&:destroy)
34
+ end
35
+
36
+ def test_should_encrypt_email
37
+ @client = LegacyClient.new :email => 'test@example.com'
38
+ assert @client.save
39
+ refute_nil @client.encrypted_email
40
+ refute_equal @client.email, @client.encrypted_email
41
+ assert_equal @client.email, LegacyClient.first.email
42
+ end
43
+
44
+ def test_should_marshal_and_encrypt_credentials
45
+ @client = LegacyClient.new
46
+ assert @client.save
47
+ refute_nil @client.encrypted_credentials
48
+ refute_equal @client.credentials, @client.encrypted_credentials
49
+ assert_equal @client.credentials, LegacyClient.first.credentials
50
+ assert LegacyClient.first.credentials.is_a?(Hash)
51
+ end
52
+
53
+ def test_should_encode_by_default
54
+ assert LegacyClient.attr_encrypted_options[:encode]
55
+ end
56
+
57
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'test_helper'
4
+
5
+ DB.create_table :legacy_humans do
6
+ primary_key :id
7
+ column :encrypted_email, :string
8
+ column :password, :string
9
+ column :encrypted_credentials, :string
10
+ column :salt, :string
11
+ end
12
+
13
+ class LegacyHuman < Sequel::Model(:legacy_humans)
14
+ self.attr_encrypted_options[:insecure_mode] = true
15
+ self.attr_encrypted_options[:algorithm] = 'aes-256-cbc'
16
+ self.attr_encrypted_options[:mode] = :single_iv_and_salt
17
+
18
+ attr_encrypted :email, :key => 'a secret key', mode: :single_iv_and_salt
19
+ attr_encrypted :credentials, :key => Proc.new { |human| Encryptor.encrypt(:value => human.salt, :key => 'some private key', insecure_mode: true, algorithm: 'aes-256-cbc') }, :marshal => true, mode: :single_iv_and_salt
20
+
21
+ def after_initialize(attrs = {})
22
+ self.salt ||= Digest::SHA1.hexdigest((Time.now.to_i * rand(5)).to_s)
23
+ self.credentials ||= { :username => 'example', :password => 'test' }
24
+ end
25
+ end
26
+
27
+ class LegacySequelTest < Minitest::Test
28
+
29
+ def setup
30
+ LegacyHuman.all.each(&:destroy)
31
+ end
32
+
33
+ def test_should_encrypt_email
34
+ @human = LegacyHuman.new :email => 'test@example.com'
35
+ assert @human.save
36
+ refute_nil @human.encrypted_email
37
+ refute_equal @human.email, @human.encrypted_email
38
+ assert_equal @human.email, LegacyHuman.first.email
39
+ end
40
+
41
+ def test_should_marshal_and_encrypt_credentials
42
+ @human = LegacyHuman.new
43
+ assert @human.save
44
+ refute_nil @human.encrypted_credentials
45
+ refute_equal @human.credentials, @human.encrypted_credentials
46
+ assert_equal @human.credentials, LegacyHuman.first.credentials
47
+ assert LegacyHuman.first.credentials.is_a?(Hash)
48
+ end
49
+
50
+ def test_should_encode_by_default
51
+ assert LegacyHuman.attr_encrypted_options[:encode]
52
+ end
53
+
54
+ end
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env sh -e
2
+
3
+ for RUBY in 1.9.3 2.0.0 2.1 2.2
4
+ do
5
+ for RAILS in 2.3.8 3.0.0 3.1.0 3.2.0 4.0.0 4.1.0 4.2.0
6
+ do
7
+ if [[ $RUBY -gt 1.9.3 && $RAILS -lt 4.0.0 ]]; then
8
+ continue
9
+ fi
10
+ RBENV_VERSION=$RUBY ACTIVERECORD=$RAILS bundle && bundle exec rake
11
+ done
12
+ done
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'test_helper'
4
+
5
+ DB.create_table :humans do
6
+ primary_key :id
7
+ column :encrypted_email, :string
8
+ column :encrypted_email_salt, String
9
+ column :encrypted_email_iv, :string
10
+ column :password, :string
11
+ column :encrypted_credentials, :string
12
+ column :encrypted_credentials_iv, :string
13
+ column :encrypted_credentials_salt, String
14
+ end
15
+
16
+ class Human < Sequel::Model(:humans)
17
+ self.attr_encrypted_options[:mode] = :per_attribute_iv_and_salt
18
+
19
+ attr_encrypted :email, :key => SECRET_KEY
20
+ attr_encrypted :credentials, :key => SECRET_KEY, :marshal => true
21
+
22
+ def after_initialize(attrs = {})
23
+ self.credentials ||= { :username => 'example', :password => 'test' }
24
+ end
25
+ end
26
+
27
+ class SequelTest < Minitest::Test
28
+
29
+ def setup
30
+ Human.all.each(&:destroy)
31
+ end
32
+
33
+ def test_should_encrypt_email
34
+ @human = Human.new :email => 'test@example.com'
35
+ assert @human.save
36
+ refute_nil @human.encrypted_email
37
+ refute_equal @human.email, @human.encrypted_email
38
+ assert_equal @human.email, Human.first.email
39
+ end
40
+
41
+ def test_should_marshal_and_encrypt_credentials
42
+
43
+ @human = Human.new :credentials => { :username => 'example', :password => 'test' }
44
+ assert @human.save
45
+ refute_nil @human.encrypted_credentials
46
+ refute_equal @human.credentials, @human.encrypted_credentials
47
+ assert_equal @human.credentials, Human.first.credentials
48
+ assert Human.first.credentials.is_a?(Hash)
49
+ end
50
+
51
+ def test_should_encode_by_default
52
+ assert Human.attr_encrypted_options[:encode]
53
+ end
54
+
55
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'simplecov'
4
+ require 'simplecov-rcov'
5
+ require 'codeclimate-test-reporter'
6
+ require 'pry-byebug'
7
+
8
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
9
+ [
10
+ SimpleCov::Formatter::HTMLFormatter,
11
+ SimpleCov::Formatter::RcovFormatter,
12
+ CodeClimate::TestReporter::Formatter
13
+ ]
14
+ )
15
+
16
+ SimpleCov.start do
17
+ add_filter 'test'
18
+ end
19
+
20
+ CodeClimate::TestReporter.start
21
+
22
+ require 'minitest/autorun'
23
+
24
+ # Rails 4.0.x pins to an old minitest
25
+ unless defined?(MiniTest::Test)
26
+ MiniTest::Test = MiniTest::Unit::TestCase
27
+ end
28
+
29
+ require 'active_record'
30
+ require 'data_mapper'
31
+ require 'digest/sha2'
32
+ require 'sequel'
33
+ ActiveSupport::Deprecation.behavior = :raise
34
+
35
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
36
+ $:.unshift(File.dirname(__FILE__))
37
+ require 'attr_encrypted'
38
+
39
+ DB = if defined?(RUBY_ENGINE) && RUBY_ENGINE.to_sym == :jruby
40
+ Sequel.jdbc('jdbc:sqlite::memory:')
41
+ else
42
+ Sequel.sqlite
43
+ end
44
+
45
+ # The :after_initialize hook was removed in Sequel 4.0
46
+ # and had been deprecated for a while before that:
47
+ # http://sequel.rubyforge.org/rdoc-plugins/classes/Sequel/Plugins/AfterInitialize.html
48
+ # This plugin re-enables it.
49
+ Sequel::Model.plugin :after_initialize
50
+
51
+ SECRET_KEY = SecureRandom.random_bytes(32)
52
+
53
+ def base64_encoding_regex
54
+ /^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=|[A-Za-z0-9+\/]{4})$/
55
+ end
56
+
57
+ def drop_all_tables
58
+ connection = ActiveRecord::Base.connection
59
+ tables = (ActiveRecord::VERSION::MAJOR >= 5 ? connection.data_sources : connection.tables)
60
+ tables.each { |table| ActiveRecord::Base.connection.drop_table(table) }
61
+ end
metadata ADDED
@@ -0,0 +1,294 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: powerhome-attr_encrypted
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Wade Winningham
8
+ - Ben Langfeld
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2020-06-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: encryptor
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 3.0.0
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: 3.0.0
28
+ - !ruby/object:Gem::Dependency
29
+ name: activerecord
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 2.0.0
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 2.0.0
42
+ - !ruby/object:Gem::Dependency
43
+ name: actionpack
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 2.0.0
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 2.0.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: datamapper
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rake
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: minitest
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: sequel
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: pry-byebug
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: sqlite3
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: 1.3.0
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: 1.3.6
136
+ type: :development
137
+ prerelease: false
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: 1.3.0
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: 1.3.6
146
+ - !ruby/object:Gem::Dependency
147
+ name: dm-sqlite-adapter
148
+ requirement: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ type: :development
154
+ prerelease: false
155
+ version_requirements: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ - !ruby/object:Gem::Dependency
161
+ name: simplecov
162
+ requirement: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ type: :development
168
+ prerelease: false
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ - !ruby/object:Gem::Dependency
175
+ name: simplecov-rcov
176
+ requirement: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ type: :development
182
+ prerelease: false
183
+ version_requirements: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ - !ruby/object:Gem::Dependency
189
+ name: codeclimate-test-reporter
190
+ requirement: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "<="
193
+ - !ruby/object:Gem::Version
194
+ version: 0.6.0
195
+ type: :development
196
+ prerelease: false
197
+ version_requirements: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "<="
200
+ - !ruby/object:Gem::Version
201
+ version: 0.6.0
202
+ description: Generates attr_accessors that encrypt and decrypt attributes transparently
203
+ email:
204
+ - wwinningham@powerhrg.com
205
+ - ben@langfeld.me
206
+ executables: []
207
+ extensions: []
208
+ extra_rdoc_files: []
209
+ files:
210
+ - ".gitignore"
211
+ - ".travis.yml"
212
+ - CHANGELOG.md
213
+ - Gemfile
214
+ - MIT-LICENSE
215
+ - README.md
216
+ - Rakefile
217
+ - attr_encrypted.gemspec
218
+ - certs/saghaulor.pem
219
+ - checksum/attr_encrypted-3.0.0.gem.sha256
220
+ - checksum/attr_encrypted-3.0.0.gem.sha512
221
+ - checksum/attr_encrypted-3.0.1.gem.sha256
222
+ - checksum/attr_encrypted-3.0.1.gem.sha512
223
+ - checksum/attr_encrypted-3.0.2.gem.sha256
224
+ - checksum/attr_encrypted-3.0.2.gem.sha512
225
+ - checksum/attr_encrypted-3.0.3.gem.sha256
226
+ - checksum/attr_encrypted-3.0.3.gem.sha512
227
+ - checksum/attr_encrypted-3.1.0.gem.sha256
228
+ - checksum/attr_encrypted-3.1.0.gem.sha512
229
+ - lib/attr_encrypted.rb
230
+ - lib/attr_encrypted/adapters/active_record.rb
231
+ - lib/attr_encrypted/adapters/data_mapper.rb
232
+ - lib/attr_encrypted/adapters/sequel.rb
233
+ - lib/attr_encrypted/version.rb
234
+ - test/active_record_test.rb
235
+ - test/attr_encrypted_test.rb
236
+ - test/compatibility_test.rb
237
+ - test/data_mapper_test.rb
238
+ - test/legacy_active_record_test.rb
239
+ - test/legacy_attr_encrypted_test.rb
240
+ - test/legacy_compatibility_test.rb
241
+ - test/legacy_data_mapper_test.rb
242
+ - test/legacy_sequel_test.rb
243
+ - test/run.sh
244
+ - test/sequel_test.rb
245
+ - test/test_helper.rb
246
+ homepage: https://github.com/powerhome/attr_encrypted
247
+ licenses:
248
+ - MIT
249
+ metadata: {}
250
+ post_install_message: |2+
251
+
252
+
253
+
254
+ WARNING: Several insecure default options and features were deprecated in attr_encrypted v2.0.0.
255
+
256
+ Additionally, there was a bug in Encryptor v2.0.0 that insecurely encrypted data when using an AES-*-GCM algorithm.
257
+
258
+ This bug was fixed but introduced breaking changes between v2.x and v3.x.
259
+
260
+ Please see the README for more information regarding upgrading to attr_encrypted v3.0.0.
261
+
262
+
263
+ rdoc_options: []
264
+ require_paths:
265
+ - lib
266
+ required_ruby_version: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - ">="
269
+ - !ruby/object:Gem::Version
270
+ version: 2.0.0
271
+ required_rubygems_version: !ruby/object:Gem::Requirement
272
+ requirements:
273
+ - - ">="
274
+ - !ruby/object:Gem::Version
275
+ version: '0'
276
+ requirements: []
277
+ rubygems_version: 3.1.2
278
+ signing_key:
279
+ specification_version: 4
280
+ summary: Power's version of the attr_encrypted gem
281
+ test_files:
282
+ - test/active_record_test.rb
283
+ - test/attr_encrypted_test.rb
284
+ - test/compatibility_test.rb
285
+ - test/data_mapper_test.rb
286
+ - test/legacy_active_record_test.rb
287
+ - test/legacy_attr_encrypted_test.rb
288
+ - test/legacy_compatibility_test.rb
289
+ - test/legacy_data_mapper_test.rb
290
+ - test/legacy_sequel_test.rb
291
+ - test/run.sh
292
+ - test/sequel_test.rb
293
+ - test/test_helper.rb
294
+ ...