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