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 +5 -5
- data/.travis.yml +1 -0
- data/Appraisals +5 -0
- data/README.md +36 -0
- data/crypt_keeper.gemspec +3 -4
- data/gemfiles/activerecord_4_2.gemfile +1 -0
- data/gemfiles/activerecord_5_0.gemfile +1 -0
- data/gemfiles/activerecord_5_1.gemfile +1 -0
- data/gemfiles/activerecord_5_2.gemfile +9 -0
- data/lib/crypt_keeper/helper.rb +76 -3
- data/lib/crypt_keeper/version.rb +1 -1
- data/spec/crypt_keeper/helper_spec.rb +94 -0
- data/spec/crypt_keeper/provider/mysql_aes_new_spec.rb +5 -3
- data/spec/spec_helper.rb +0 -1
- metadata +20 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2d2c48e454fad3b2d938bbcabb028983954c991479524a7240acb772b46e37b1
|
4
|
+
data.tar.gz: 907dd02f441238eaa0a3a77c8be9dd5f936a615630bc96c6759930f74da99f06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d9a292f9d37a60cf43a9f27c4981e6bfbfd7f603e5f53cbc08932103d9fd61c3c83c141ba56d67b26b7925a7f6d46b87885a9d595ce0b7eaa37ca7e846ee24ca
|
7
|
+
data.tar.gz: 61def2dfc5d5deadb6b9f667d2b8490cc357e4956059abf45fedc7adae856a95d5f90fe2364da402dbcd0d00b791205e1a9222ce53c190b42b6fa92d0c65bb91
|
data/.travis.yml
CHANGED
data/Appraisals
CHANGED
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.
|
22
|
-
gem.add_runtime_dependency 'activesupport', '>= 4.2', '< 5.
|
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', '
|
40
|
+
gem.add_development_dependency 'mysql2', '>= 0.3.13', '< 0.6.0'
|
42
41
|
end
|
43
42
|
end
|
data/lib/crypt_keeper/helper.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
data/lib/crypt_keeper/version.rb
CHANGED
@@ -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
|
-
"
|
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("
|
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
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.
|
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:
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|
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
|