powerhome-attr_encrypted 1.0.1

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 (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
+ ...