crypt_keeper 2.0.0.rc1 → 2.0.0.rc2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 177d3771b01336174fdcc4db5f237335f8f206cd
4
- data.tar.gz: 5f0f53fd0e3fcae45bae65fa63276067e651682c
2
+ SHA256:
3
+ metadata.gz: 2d2c48e454fad3b2d938bbcabb028983954c991479524a7240acb772b46e37b1
4
+ data.tar.gz: 907dd02f441238eaa0a3a77c8be9dd5f936a615630bc96c6759930f74da99f06
5
5
  SHA512:
6
- metadata.gz: cbce4c1e8e9665441bc3660542eb83c34efb66894ed0be3888ab03860831067a6d275bef837df62636278056524c4aae2522ef26479502815f3a5313c42fa9d1
7
- data.tar.gz: 81429db29edfea6bdcfd6934926dec0c3f84e79268017d056c9351fcbeeaf00f2f29a5506f3100cd428321e438fda081c72d5ced47b88229d84a8ff860102999
6
+ metadata.gz: d9a292f9d37a60cf43a9f27c4981e6bfbfd7f603e5f53cbc08932103d9fd61c3c83c141ba56d67b26b7925a7f6d46b87885a9d595ce0b7eaa37ca7e846ee24ca
7
+ data.tar.gz: 61def2dfc5d5deadb6b9f667d2b8490cc357e4956059abf45fedc7adae856a95d5f90fe2364da402dbcd0d00b791205e1a9222ce53c190b42b6fa92d0c65bb91
data/.travis.yml CHANGED
@@ -9,6 +9,7 @@ gemfile:
9
9
  - gemfiles/activerecord_4_2.gemfile
10
10
  - gemfiles/activerecord_5_0.gemfile
11
11
  - gemfiles/activerecord_5_1.gemfile
12
+ - gemfiles/activerecord_5_2.gemfile
12
13
 
13
14
  addons:
14
15
  postgresql: 9.3
data/Appraisals CHANGED
@@ -12,3 +12,8 @@ appraise "activerecord_5_1" do
12
12
  gem "activerecord", "~> 5.1.0"
13
13
  gem "activesupport", "~> 5.1.0"
14
14
  end
15
+
16
+ appraise "activerecord_5_2" do
17
+ gem "activerecord", "~> 5.2.0"
18
+ gem "activesupport", "~> 5.2.0"
19
+ end
data/README.md CHANGED
@@ -47,6 +47,42 @@ expected behavior, and has its use cases. An example would be migrating from
47
47
  one type of encryption to another. Using `update_column` would allow you to
48
48
  update the content without going through the current encryptor.
49
49
 
50
+ ## Generating Keys/Salts
51
+
52
+ For encryptors requiring secret keys/salts, you can generate them via
53
+ `rails secret`:
54
+
55
+ ```
56
+ rails secret
57
+ ef209071bd76143a75eda57b99425da63ce6c2d44581d652aa4302a90dcd7d7e99cbc22091c01a19f93ea484f40b142612f9bf76de8eb2d51ff9b3eb02a7782c
58
+ ```
59
+
60
+ Or manually (this is the same implementation that Rails uses):
61
+
62
+ ```
63
+ ruby -e "require 'securerandom'; puts SecureRandom.hex(64)"
64
+ ```
65
+
66
+ These values should be stored outside of your application repository for added
67
+ security. For example, one could use [dotenv][] and reference them as `ENV`
68
+ variables.
69
+
70
+ ```
71
+ # .env
72
+ CRYPT_KEEPER_KEY=75d942f3d3b3492772e0330f717eaf5e689673ea8b983475ef8f6551f6e99d280cd89972706e46b48240cc01c4d0f7df5ffa3524566b789d147ed04cc4ea4eab
73
+ CRYPT_KEEPER_SALT=b16a153e99a5db616a861ea5a6febc64d8a758c4aef3b8c8fc6675ac9daf03f7965f16e8b4b2bdfd28ff65f5203afb8102b8f41c514c3667bb3512015b1e77e8
74
+ ```
75
+
76
+ Then in your model:
77
+
78
+ ```ruby
79
+ class MyModel < ActiveRecord::Base
80
+ crypt_keeper :field, :other_field, encryptor: :active_support, key: ENV["CRYPT_KEEPER_KEY"], salt: ENV["CRYPT_KEEPER_SALT"]
81
+ end
82
+ ```
83
+
84
+ [dotenv]: https://github.com/bkeepers/dotenv
85
+
50
86
  ## Encodings
51
87
 
52
88
  You can force an encoding on the plaintext before encryption and after decryption by using the `encoding` option. This is useful when dealing with multibyte strings:
data/crypt_keeper.gemspec CHANGED
@@ -18,9 +18,8 @@ Gem::Specification.new do |gem|
18
18
 
19
19
  gem.post_install_message = "WARNING: CryptKeeper 2.0 contains breaking changes and may require you to reencrypt your data! Please view the README at https://github.com/jmazzi/crypt_keeper for more information."
20
20
 
21
- gem.add_runtime_dependency 'activerecord', '>= 4.2', '< 5.2'
22
- gem.add_runtime_dependency 'activesupport', '>= 4.2', '< 5.2'
23
- gem.add_runtime_dependency 'armor', '~> 0.0.2'
21
+ gem.add_runtime_dependency 'activerecord', '>= 4.2', '< 5.3'
22
+ gem.add_runtime_dependency 'activesupport', '>= 4.2', '< 5.3'
24
23
 
25
24
  gem.add_development_dependency 'rspec', '~> 3.5.0'
26
25
  gem.add_development_dependency 'guard', '~> 2.6.1'
@@ -38,6 +37,6 @@ Gem::Specification.new do |gem|
38
37
  else
39
38
  gem.add_development_dependency 'sqlite3'
40
39
  gem.add_development_dependency 'pg', '~> 0.18.0'
41
- gem.add_development_dependency 'mysql2', '~> 0.3.11'
40
+ gem.add_development_dependency 'mysql2', '>= 0.3.13', '< 0.6.0'
42
41
  end
43
42
  end
@@ -4,5 +4,6 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 4.2.0"
6
6
  gem "activesupport", "~> 4.2.0"
7
+ gem "mysql2", ">= 0.3.13", "< 0.5"
7
8
 
8
9
  gemspec :path => "../"
@@ -4,5 +4,6 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 5.0.0"
6
6
  gem "activesupport", "~> 5.0.0"
7
+ gem "mysql2", ">= 0.3.18", "< 0.6.0"
7
8
 
8
9
  gemspec :path => "../"
@@ -4,5 +4,6 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 5.1.0"
6
6
  gem "activesupport", "~> 5.1.0"
7
+ gem "mysql2", ">= 0.3.18", "< 0.6.0"
7
8
 
8
9
  gemspec :path => "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 5.2.0"
6
+ gem "activesupport", "~> 5.2.0"
7
+ gem "mysql2", ">= 0.4.4", "< 0.6.0"
8
+
9
+ gemspec :path => "../"
@@ -39,11 +39,84 @@ module CryptKeeper
39
39
  end
40
40
 
41
41
  module DigestPassphrase
42
+ # Private: Hash algorithm to use when generating a PBKDF2 passphrase.
43
+ #
44
+ # Returns a String.
45
+ HASH_ALGORITHM = "sha512".freeze
46
+
47
+ # Private: Iterations to use when generating a PBKDF2 passphrase.
48
+ #
49
+ # Returns a String.
50
+ ITERATIONS = 5000
51
+
52
+ private_constant :HASH_ALGORITHM, :ITERATIONS
53
+
54
+ # Public: Iterations to use to generate digest passphrase.
55
+ #
56
+ # Returns a String.
57
+ mattr_accessor :iterations do
58
+ if iter = ENV["ARMOR_ITER"]
59
+ warn :ARMOR_ITER unless iter == ITERATIONS
60
+ Integer(iter)
61
+ else
62
+ ITERATIONS
63
+ end
64
+ end
65
+
66
+ # Public: Generates a hex passphrase using the given key and salt.
67
+ #
68
+ # key - Encryption key
69
+ # salt - Encryption salt
70
+ #
71
+ # Returns a String.
42
72
  def digest_passphrase(key, salt)
43
- require "armor"
44
- raise ArgumentError.new("Missing :key") if key.blank?
73
+ raise ArgumentError.new("Missing :key") if key.blank?
45
74
  raise ArgumentError.new("Missing :salt") if salt.blank?
46
- ::Armor.digest(key, salt)
75
+
76
+ require "openssl"
77
+
78
+ digest = OpenSSL::Digest.new(hash_algorithm)
79
+
80
+ hmac = OpenSSL::PKCS5.pbkdf2_hmac(
81
+ key,
82
+ salt,
83
+ iterations,
84
+ digest.digest_length,
85
+ digest
86
+ )
87
+
88
+ hmac.unpack("H*").first
89
+ end
90
+
91
+ private
92
+
93
+ # Private: Hash algorithm to use for digest passphrase.
94
+ #
95
+ # Returns a String.
96
+ def hash_algorithm
97
+ if hash = ENV["ARMOR_HASH"]
98
+ warn :ARMOR_HASH unless hash == HASH_ALGORITHM
99
+ hash
100
+ else
101
+ HASH_ALGORITHM
102
+ end
103
+ end
104
+
105
+ # Private: Warns about the deprecated ENV vars used with the Armor gem.
106
+ #
107
+ # key - The ENV variable name
108
+ #
109
+ # Returns a String.
110
+ def warn(key)
111
+ require "active_support/deprecation"
112
+
113
+ ActiveSupport::Deprecation.warn <<-MSG.squish
114
+ CryptKeeper no longer uses the Armor gem to generate passphrases for
115
+ MySQL AES encryption. Your installation is using a non-standard
116
+ value for `ENV["#{key}"]` which affects the way passphrases are
117
+ generated. You will need to re-encrypt your data with this variable
118
+ removed prior to CryptKeeper v3.0.0.
119
+ MSG
47
120
  end
48
121
  end
49
122
  end
@@ -1,3 +1,3 @@
1
1
  module CryptKeeper
2
- VERSION = "2.0.0.rc1"
2
+ VERSION = "2.0.0.rc2"
3
3
  end
@@ -0,0 +1,94 @@
1
+ require "spec_helper"
2
+
3
+ describe CryptKeeper::Helper::DigestPassphrase do
4
+ # gem "armor"
5
+ # require "armor"
6
+ #
7
+ # 10.times.with_index(1).map do |_, i|
8
+ # hash = { key: SecureRandom.hex(64), salt: SecureRandom.hex(64) }
9
+ # hash[:armor] = Armor.digest(h[:key], h[:salt])
10
+ # hash
11
+ # end
12
+ let :armor_passphrases do
13
+ [
14
+ {
15
+ key: "c458da1abe465b15563e0f72e567594ca760214f2d11c668c6c0b923c8b5cc972b167410da6290feef3cc652a03d46f9ead9ce6da4cd197b4f66dd40f234aabc",
16
+ salt: "978279087fe82fd33b295df2ca38ae719d93c73d154110f9cd9e6c1859cd1525af1a9f9c25768b4bd7cfe6ce6fcd473d5f702c67fb5552369aeb7b5ab9c0573c",
17
+ armor: "2493abd50731ffbd80129bd9f2b77bcbffbb42a44f0e263668f9cf5f3d1804e1f9a56a9c85856be87b21b72a8b09aa21e111a646edae4a14b651019a73074066"
18
+ },
19
+ {
20
+ key: "3d4dd8193cf4c0ecaac0f3a1502a1e21a9bad969c97ace34399a4829a3457b56aa598b60a3031b6a10961e1558c7147d3895ec522eba0283a962bd82c6f558ef",
21
+ salt: "f5e7225b5add4a81e93773d543246ba2f7052e65f5adb651f8f47ba129e71053e04839db2ffb5b491223f589b2c74d4440b2c07d41e064df940aa433591a37b1",
22
+ armor: "1e9386895b6d33fed5caf24c6db598df888354ad2605679181d7e2b7c4b59611579d2b1a4e72b834f230848dd715a0b7e37280f2304a2fc78c6f5037a0ef3e9c"
23
+ },
24
+ {
25
+ key: "2d19e58724b7bb62d6129e2af692854919daeb6cf477c1e5dd5f8c846dbae3768baaaa8ba79d39c765b88b68d510f3b2fb59389af5f99c68c2e77620fe610393",
26
+ salt: "a96bfc08af98c063e0f9b3e6498d90a33cf279d12d38d6f5aabd6b7691d5ed25346bc2e9cfee1c98b8cea243b7e79ad69e281800207ea022007dc42e2f49dce3",
27
+ armor: "e86340f12e833d8cc722249f7190184562d4b7b27755ca3ece1950cf9158629536b16609406f230902f6f15c15afa652c35c0b0239c90167efd438b1e1233fd1"
28
+ },
29
+ {
30
+ key: "e78715a772f930027b0e6353e3be578ebc8fd5631401be9e723f747e03f3bed90cb051fa25024e8179e8fc3c65072d74eee92a636e5c2fa89f61f3f1dc2d043b",
31
+ salt: "536d128ba1f2453040d31eaddb87d1b1d2ac157f2ec7f6d2ef530a5ae01f19afea43cae3ca5783440c90decc9cedf78ec6aad474b2e67637abd640dc9d8b1665",
32
+ armor: "96c617786de65bda0d287851a189d50b56a14f3fccc72886943609e0644a593c4d51221d93f10287a79becb3f8f26322413c5c4e65a1e6564b4da55d1f175402"
33
+ },
34
+ {
35
+ key: "941e93a03156121bf565d62d9fadfc5f56ec5ecfc274a5ad1298d358419b8e18b5e4c4b17426ae031676e11633f875a5e3e39e50a4b08685427a72ab6289e465",
36
+ salt: "114b89e478b19e5e0d4df10b1914892a7434fdd0857bbb236bb21d9d8fae03b5401b1a53d64390ffa18fc74bc80139a8f216eb6a0c79155bcd89955a36be0322",
37
+ armor: "ead4be935420a772cc2c2637229431ee093ebcadb1f432d394eeca45515c4b74b732eec76c6d8aff33f0aafd33cab7e2d967796a271d3e8a10be5655d1025708"
38
+ },
39
+ {
40
+ key: "c7c7dbd592beb79178cdbbd45f91654a40c44fd632de0d89398dc1f0c8b241210b8db538a3cb3699796323fc1c54877c3df959e94bf5765fafd03c05fb4d4d7f",
41
+ salt: "1cd67ceaf2c1635eda3d1bbea60f228fd95d59c59a34624b4abf6846a2ae774f359a48695e6a9df5aef34f42dcfa69ad6dbd5be1e7190b050e0c58f5a0ff0cce",
42
+ armor: "387c92c591510bf56677a4de231065d271c6553c8b75a1a1710bb4a7c1404a527e5cbd9f0b812eedc162e5bd5dae4e11e9b5f3782eb4fd4616e2725fa98093e4"
43
+ },
44
+ {
45
+ key: "6fa240131e1aaf2214dc4a5f52709721c078ef8cb4aba1ab926650b202cfeb8db90acaebb0109667613768be3e0af1decf739c108861aa5ac55248bd307e8cbe",
46
+ salt: "de1d28b96bf570bcc8c26949d1d9f4c03b30f4d2e7799df3d4f981384b731f15b5494095cb6bd8d71f374d1bde10b6f9048bb6eb6a763af74af6b70a8320e651",
47
+ armor: "e9b72ed9330477421c63d38a3dfe056fa5ee5d2097af6f024b4452df6010e2563daca906b7ec49c04071973c49cc010f41b5c4503e691d2bc2066a5ff9766be5"
48
+ },
49
+ {
50
+ key: "2accf78dc18db506512c5aa36b6d50950ec98473873fe75a2fd6322883346a02d77f014f9fd5e02d1d3ab34e4c46e93bb17b5d2436f76ec13fade56cdb97ce04",
51
+ salt: "e1ee82d540543beda0a6f8c362e2890665a5b6cdfcb115bf4af3808ac49e43e7ca286d7fc4921f6ad5344a1b082db2e47913cd4616b23e0299f45c09487c65dc",
52
+ armor: "ad84346e9bec6885902390f7a45d674e48b53481400d7008b45780c2677f3a93635c6000b2760ccee184839edb2bd2b34914dc70f322005e58216e013d73cdeb"
53
+ },
54
+ {
55
+ key: "05e3508b0f4a1116fadbbd04a6c4c0a38c29724c76d7c406313813300cefbf9dbe426c28f65ca7297927707abaa4788572b1b9835a421d8699f29096055bc156",
56
+ salt: "371380fde21244493ec04928154c6af685d16e4a7feeb79b5916b484d485f3137eb30ebffdd0bebd77f86a2f092155e798acc0dac91b1704244614b0940da88e",
57
+ armor: "d573f9bb1ed0f7dac9a4f087abe7400cb366cda2877ed8c1660bd6dd2b96533f1210883079921a35fa09339d5f84fbe8b4977a6621e783ee5c3ac85e80b3685c"
58
+ },
59
+ {
60
+ key: "9dd15dc718b7ae4a87652e51b64aa545b6b6f26726e76fb0c45ec256be9359318d68e94858b0d782ba8505201c1b7a604492ba831ad0e93185fc5ccffbc7007d",
61
+ salt: "971bc4fada6fdc5ba3484d7a2ef34a4a2c9f7cc7e8c67d00fc2c774b2db2ef3a4f81c4bc4977055248256fe68f1525fa2f8673d56b41a5e15aae45b68d7f6fc6",
62
+ armor: "3d9d44881595a083efae99e710bd1fe68321152ac61e2d225974d5e2c2d4ae24849cc7b0f7f9af325fb4aa20524d12565e9e4c36cad91f9165df3af2f4692a07"
63
+ }
64
+ ]
65
+ end
66
+
67
+ let :example_key do
68
+ "ff17f8eeeb25e8647cda72fc577b1e9f3f68f6f18997efcdb043f171ad93949b39150b886d4866230add5a0ef6285b37c20bca5194a4dc76ae8845ed88ccb2db"
69
+ end
70
+
71
+ let :example_salt do
72
+ "8f273e1ffae67cf5582dd5fcec9d7f99e996861a985e502aa1283088a27d9fdda63869007474ef689381f10ea4f8f5e9e72255a9e47304cd80fbfafd414d77a7"
73
+ end
74
+
75
+ let :example_passphrase do
76
+ "01096fb7199ac8051d24a350204df61a0ab5b7c6bc393a3325d5dc686de39df7084d7cab12065eb06f2e09f4bc5b6a3851ce459e7eca47088fd9d1bf1d9f35b5"
77
+ end
78
+
79
+ let :encryptor do
80
+ Class.new do
81
+ include CryptKeeper::Helper::DigestPassphrase
82
+ end.new
83
+ end
84
+
85
+ it "returns passphrases that are backwards compatible with Armor" do
86
+ armor_passphrases.each do |ex|
87
+ expect(encryptor.digest_passphrase(ex[:key], ex[:salt])).to eq(ex[:armor])
88
+ end
89
+ end
90
+
91
+ it "generates a passphrase from key/salt" do
92
+ expect(encryptor.digest_passphrase(example_key, example_salt)).to eq(example_passphrase)
93
+ end
94
+ end
@@ -7,14 +7,16 @@ describe CryptKeeper::Provider::MysqlAesNew do
7
7
 
8
8
  # MySQL stores AES encrypted strings in binary which you can't paste
9
9
  # into a spec :). This is a Base64 encoded string of 'test' AES encrypted
10
- # by AES_ENCRYPT()
10
+ # by AES_ENCRYPT():
11
+ #
12
+ # SELECT TO_BASE64(AES_ENCRYPT('test', 'cd9c9275c80ccaec820f988edafd92bd0403d2055aed2b7094f569bc5314b88720c155f7f377addc35eff90c8bd11c34d5daaab5051c3435d2f5ad0c09d4b43e'));
11
13
  let(:cipher_text) do
12
- "fBN8i7bx/DGAA4NJ4EWi0A=="
14
+ "qlwlvp6+otN1qnchZ48zNQ=="
13
15
  end
14
16
 
15
17
  subject { described_class.new key: ENCRYPTION_PASSWORD, salt: 'salt' }
16
18
 
17
- specify { expect(subject.key).to eq("825e8c5e8ca394818b307b22b8cb7d3df2735e9c1e5838b476e7719135a4f499f2133022c1a0e8597c9ac1507b0f0c44328a40049f9704fab3598c5dec120724") }
19
+ specify { expect(subject.key).to eq("cd9c9275c80ccaec820f988edafd92bd0403d2055aed2b7094f569bc5314b88720c155f7f377addc35eff90c8bd11c34d5daaab5051c3435d2f5ad0c09d4b43e") }
18
20
 
19
21
  describe "#initialize" do
20
22
  specify { expect { described_class.new }.to raise_error(ArgumentError, "Missing :key") }
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,3 @@
1
- ENV['ARMOR_ITER'] ||= "10"
2
1
  ENV['CRYPT_KEEPER_IGNORE_LEGACY_DEPRECATION'] = "true"
3
2
  require 'coveralls'
4
3
  Coveralls.wear!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crypt_keeper
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.rc1
4
+ version: 2.0.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Mazzi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-14 00:00:00.000000000 Z
11
+ date: 2018-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '4.2'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '5.2'
22
+ version: '5.3'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '4.2'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '5.2'
32
+ version: '5.3'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: activesupport
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: '4.2'
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: '5.2'
42
+ version: '5.3'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,21 +49,7 @@ dependencies:
49
49
  version: '4.2'
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: '5.2'
53
- - !ruby/object:Gem::Dependency
54
- name: armor
55
- requirement: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: 0.0.2
60
- type: :runtime
61
- prerelease: false
62
- version_requirements: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - "~>"
65
- - !ruby/object:Gem::Version
66
- version: 0.0.2
52
+ version: '5.3'
67
53
  - !ruby/object:Gem::Dependency
68
54
  name: rspec
69
55
  requirement: !ruby/object:Gem::Requirement
@@ -194,16 +180,22 @@ dependencies:
194
180
  name: mysql2
195
181
  requirement: !ruby/object:Gem::Requirement
196
182
  requirements:
197
- - - "~>"
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: 0.3.13
186
+ - - "<"
198
187
  - !ruby/object:Gem::Version
199
- version: 0.3.11
188
+ version: 0.6.0
200
189
  type: :development
201
190
  prerelease: false
202
191
  version_requirements: !ruby/object:Gem::Requirement
203
192
  requirements:
204
- - - "~>"
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: 0.3.13
196
+ - - "<"
205
197
  - !ruby/object:Gem::Version
206
- version: 0.3.11
198
+ version: 0.6.0
207
199
  description: Transparent ActiveRecord encryption
208
200
  email:
209
201
  - jmazzi@gmail.com
@@ -224,6 +216,7 @@ files:
224
216
  - gemfiles/activerecord_4_2.gemfile
225
217
  - gemfiles/activerecord_5_0.gemfile
226
218
  - gemfiles/activerecord_5_1.gemfile
219
+ - gemfiles/activerecord_5_2.gemfile
227
220
  - lib/crypt_keeper.rb
228
221
  - lib/crypt_keeper/helper.rb
229
222
  - lib/crypt_keeper/log_subscriber/mysql_aes.rb
@@ -236,6 +229,7 @@ files:
236
229
  - lib/crypt_keeper/provider/postgres_pgp.rb
237
230
  - lib/crypt_keeper/provider/postgres_pgp_public_key.rb
238
231
  - lib/crypt_keeper/version.rb
232
+ - spec/crypt_keeper/helper_spec.rb
239
233
  - spec/crypt_keeper/log_subscriber/mysql_aes_spec.rb
240
234
  - spec/crypt_keeper/log_subscriber/postgres_pgp_spec.rb
241
235
  - spec/crypt_keeper/model_spec.rb
@@ -272,11 +266,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
272
266
  version: 1.3.1
273
267
  requirements: []
274
268
  rubyforge_project:
275
- rubygems_version: 2.6.11
269
+ rubygems_version: 2.7.6
276
270
  signing_key:
277
271
  specification_version: 4
278
272
  summary: Transparent ActiveRecord encryption
279
273
  test_files:
274
+ - spec/crypt_keeper/helper_spec.rb
280
275
  - spec/crypt_keeper/log_subscriber/mysql_aes_spec.rb
281
276
  - spec/crypt_keeper/log_subscriber/postgres_pgp_spec.rb
282
277
  - spec/crypt_keeper/model_spec.rb