crypt_keeper 2.0.0.rc1 → 2.0.0.rc2

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
- 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