portunus 0.3.0
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 +7 -0
- data/.gitignore +3 -0
- data/.nvmrc +1 -0
- data/.travis.yml +27 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +189 -0
- data/LICENSE.txt +21 -0
- data/README.md +289 -0
- data/Rakefile +2 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/Rakefile +4 -0
- data/lib/generators/install_generator.rb +26 -0
- data/lib/generators/templates/create_portunus.rb.erb +28 -0
- data/lib/portunus/configuration.rb +49 -0
- data/lib/portunus/data_encryption_key.rb +25 -0
- data/lib/portunus/data_key_generator.rb +55 -0
- data/lib/portunus/encryptable.rb +42 -0
- data/lib/portunus/encrypters/open_ssl_aes.rb +58 -0
- data/lib/portunus/encrypters/time.rb +1 -0
- data/lib/portunus/field_configurer.rb +157 -0
- data/lib/portunus/hasher.rb +9 -0
- data/lib/portunus/master_key.rb +15 -0
- data/lib/portunus/railtie.rb +14 -0
- data/lib/portunus/rotators/dek.rb +69 -0
- data/lib/portunus/rotators/kek.rb +51 -0
- data/lib/portunus/storage_adaptors/credentials.rb +48 -0
- data/lib/portunus/storage_adaptors/environment.rb +67 -0
- data/lib/portunus/tasks/generate_keys.rake +36 -0
- data/lib/portunus/tasks/rotate_keys.rake +36 -0
- data/lib/portunus/type_caster.rb +37 -0
- data/lib/portunus/type_casters/boolean.rb +39 -0
- data/lib/portunus/type_casters/date.rb +29 -0
- data/lib/portunus/type_casters/date_time.rb +29 -0
- data/lib/portunus/type_casters/float.rb +29 -0
- data/lib/portunus/type_casters/integer.rb +29 -0
- data/lib/portunus/type_casters/string.rb +29 -0
- data/lib/portunus/version.rb +3 -0
- data/lib/portunus.rb +39 -0
- data/portunus.gemspec +51 -0
- data/tmp/log/development.log +0 -0
- metadata +255 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
namespace :portunus do
|
2
|
+
desc "Output master keys for use with Portunus"
|
3
|
+
task generate_master_keys: :environment do
|
4
|
+
adaptor_name = Portunus.configuration.storage_adaptor.to_s
|
5
|
+
puts "Generating keys for adaptor: #{adaptor_name}"
|
6
|
+
|
7
|
+
keys = (0..5).to_a.map do
|
8
|
+
{
|
9
|
+
"key": ::Portunus.configuration.encrypter.generate_key,
|
10
|
+
"enabled": true,
|
11
|
+
"created_at": DateTime.now.rfc3339
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
if adaptor_name == "Portunus::StorageAdaptors::Credentials"
|
16
|
+
key_hash = keys.inject({}) do |hash, key|
|
17
|
+
hash[SecureRandom.hex(16).to_s] = key
|
18
|
+
hash
|
19
|
+
end
|
20
|
+
|
21
|
+
puts({ portunus: key_hash }.to_yaml)
|
22
|
+
elsif adaptor_name == "Portunus::StorageAdaptors::Environment"
|
23
|
+
output = ""
|
24
|
+
keys.map do |portunus_key|
|
25
|
+
key_name = SecureRandom.hex(10)
|
26
|
+
output += "export PORTUNUS_#{key_name}_KEY=#{portunus_key[:key]}\n"
|
27
|
+
output += "export PORTUNUS_#{key_name}_ENABLED=true\n"
|
28
|
+
output += "export PORTUNUS_#{key_name}_CREATED_AT=#{portunus_key[:created_at]}\n"
|
29
|
+
end
|
30
|
+
|
31
|
+
puts output
|
32
|
+
else
|
33
|
+
raise ::Portunus::Error.new("Adaptor does not support key generation")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
namespace :portunus do
|
2
|
+
desc "Rotate KEK keys, reencrypt the deks"
|
3
|
+
task rotate_keks: :environment do
|
4
|
+
scope = ::Portunus::DataEncryptionKey.
|
5
|
+
where(
|
6
|
+
"last_kek_rotation < ? or (created_at < ? and last_kek_rotation is null",
|
7
|
+
::Portunus.configuration.max_key_duration,
|
8
|
+
::Portunus.configuration.max_key_duration
|
9
|
+
)
|
10
|
+
|
11
|
+
scope.in_batches do |relation|
|
12
|
+
relation.map do |encryption_key|
|
13
|
+
::Portunus::Rotators::Kek.for(encryption_key)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "Rotate DEK keys, reencrypt the data"
|
19
|
+
task rotate_deks: :environment do
|
20
|
+
if ENV["FORCE"] == "true"
|
21
|
+
scope = ::Portunus::DataEncryptionKey.all
|
22
|
+
else
|
23
|
+
scope = ::Portunus::DataEncryptionKey.
|
24
|
+
where(
|
25
|
+
"last_dek_rotation < ? or (created_at < ? and last_dek_rotation is null",
|
26
|
+
::Portunus.configuration.max_key_duration,
|
27
|
+
::Portunus.configuration.max_key_duration
|
28
|
+
)
|
29
|
+
end
|
30
|
+
scope.in_batches do |relation|
|
31
|
+
relation.map do |encryption_key|
|
32
|
+
::Portunus::Rotators::Dek.for(encryption_key)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Portunus
|
2
|
+
class TypeCaster
|
3
|
+
TYPE_MAP = {
|
4
|
+
string: ::Portunus::TypeCasters::String,
|
5
|
+
integer: ::Portunus::TypeCasters::Integer,
|
6
|
+
float: ::Portunus::TypeCasters::Float,
|
7
|
+
date: ::Portunus::TypeCasters::Date,
|
8
|
+
datetime: ::Portunus::TypeCasters::DateTime,
|
9
|
+
boolean: ::Portunus::TypeCasters::Boolean
|
10
|
+
}
|
11
|
+
|
12
|
+
def self.cast(value:, type: nil)
|
13
|
+
new(value: value, type: type).cast
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.uncast(value:, type: nil)
|
17
|
+
new(value: value, type: type).uncast
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize(value:, type: :string)
|
21
|
+
@value = value
|
22
|
+
@type = type
|
23
|
+
end
|
24
|
+
|
25
|
+
def cast
|
26
|
+
TYPE_MAP[type.to_sym].cast(value: value)
|
27
|
+
end
|
28
|
+
|
29
|
+
def uncast
|
30
|
+
TYPE_MAP[type.to_sym].uncast(value: value)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
attr_reader :type, :value
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Portunus
|
2
|
+
module TypeCasters
|
3
|
+
class Boolean
|
4
|
+
def self.cast(value:)
|
5
|
+
new(value: value).cast
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.uncast(value:)
|
9
|
+
new(value: value).uncast
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(value:)
|
13
|
+
@value = value
|
14
|
+
end
|
15
|
+
|
16
|
+
def cast
|
17
|
+
if [false, nil, "false", 0].include?(value)
|
18
|
+
"false"
|
19
|
+
else
|
20
|
+
"true"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def uncast
|
25
|
+
if value == "true"
|
26
|
+
true
|
27
|
+
elsif value == "false"
|
28
|
+
false
|
29
|
+
else
|
30
|
+
raise ::Portunus::Error.new("Invalid boolean value")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
attr_reader :value
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Portunus
|
2
|
+
module TypeCasters
|
3
|
+
class Date
|
4
|
+
def self.cast(value:)
|
5
|
+
new(value: value).cast
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.uncast(value:)
|
9
|
+
new(value: value).uncast
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(value:)
|
13
|
+
@value = value
|
14
|
+
end
|
15
|
+
|
16
|
+
def cast
|
17
|
+
value.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
def uncast
|
21
|
+
::Date.parse(value)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_reader :value
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Portunus
|
2
|
+
module TypeCasters
|
3
|
+
class DateTime
|
4
|
+
def self.cast(value:)
|
5
|
+
new(value: value).cast
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.uncast(value:)
|
9
|
+
new(value: value).uncast
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(value:)
|
13
|
+
@value = value
|
14
|
+
end
|
15
|
+
|
16
|
+
def cast
|
17
|
+
value.rfc3339
|
18
|
+
end
|
19
|
+
|
20
|
+
def uncast
|
21
|
+
::DateTime.rfc3339(value)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_reader :value
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Portunus
|
2
|
+
module TypeCasters
|
3
|
+
class Float
|
4
|
+
def self.cast(value:)
|
5
|
+
new(value: value).cast
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.uncast(value:)
|
9
|
+
new(value: value).uncast
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(value:)
|
13
|
+
@value = value
|
14
|
+
end
|
15
|
+
|
16
|
+
def cast
|
17
|
+
value.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
def uncast
|
21
|
+
value.to_f
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_reader :value
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Portunus
|
2
|
+
module TypeCasters
|
3
|
+
class Integer
|
4
|
+
def self.cast(value:)
|
5
|
+
new(value: value).cast
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.uncast(value:)
|
9
|
+
new(value: value).uncast
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(value:)
|
13
|
+
@value = value
|
14
|
+
end
|
15
|
+
|
16
|
+
def cast
|
17
|
+
value.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
def uncast
|
21
|
+
value.to_i
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_reader :value
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Portunus
|
2
|
+
module TypeCasters
|
3
|
+
class String
|
4
|
+
def self.cast(value:)
|
5
|
+
new(value: value).cast
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.uncast(value:)
|
9
|
+
new(value: value).uncast
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(value:)
|
13
|
+
@value = value
|
14
|
+
end
|
15
|
+
|
16
|
+
def cast
|
17
|
+
value.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
def uncast
|
21
|
+
value
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_reader :value
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/portunus.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require "portunus/version"
|
2
|
+
require "generators/install_generator.rb"
|
3
|
+
require "portunus/configuration"
|
4
|
+
require "portunus/data_encryption_key"
|
5
|
+
require "portunus/encryptable"
|
6
|
+
require "portunus/data_key_generator"
|
7
|
+
require "portunus/field_configurer"
|
8
|
+
require "portunus/hasher"
|
9
|
+
require "portunus/master_key"
|
10
|
+
require "portunus/rotators/dek"
|
11
|
+
require "portunus/rotators/kek"
|
12
|
+
require "portunus/storage_adaptors/credentials"
|
13
|
+
require "portunus/storage_adaptors/environment"
|
14
|
+
require "portunus/encrypters/open_ssl_aes"
|
15
|
+
require "portunus/type_casters/boolean"
|
16
|
+
require "portunus/type_casters/date"
|
17
|
+
require "portunus/type_casters/date_time"
|
18
|
+
require "portunus/type_casters/integer"
|
19
|
+
require "portunus/type_casters/float"
|
20
|
+
require "portunus/type_casters/string"
|
21
|
+
require "portunus/type_caster"
|
22
|
+
|
23
|
+
module Portunus
|
24
|
+
require "portunus/railtie" if defined?(Rails)
|
25
|
+
class Error < StandardError; end
|
26
|
+
# Your code goes here...
|
27
|
+
def self.configure
|
28
|
+
@@configuration ||= ::Portunus::Configuration.new
|
29
|
+
|
30
|
+
yield(@@configuration)
|
31
|
+
end
|
32
|
+
def self.configuration
|
33
|
+
@@configuration ||= ::Portunus::Configuration.new
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.table_name_prefix
|
37
|
+
"portunus_"
|
38
|
+
end
|
39
|
+
end
|
data/portunus.gemspec
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require "portunus/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "portunus"
|
7
|
+
spec.version = Portunus::VERSION
|
8
|
+
spec.authors = ["Colin Petruno"]
|
9
|
+
spec.email = ["colinpetruno@gmail.com"]
|
10
|
+
|
11
|
+
spec.summary = %q{DEK and KEK Encryption for Rails}
|
12
|
+
spec.description = %q{Easily encrypt all your sensitive data.}
|
13
|
+
spec.homepage = "https://www.github.com/colinpetruno/portunus"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
17
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
18
|
+
if spec.respond_to?(:metadata)
|
19
|
+
# spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
20
|
+
|
21
|
+
spec.metadata["homepage_uri"] = "https://www.github.com/colinpetruno/portunus"
|
22
|
+
spec.metadata["source_code_uri"] = "https://www.github.com/colinpetruno/portunus"
|
23
|
+
spec.metadata["changelog_uri"] = "https://www.github.com/colinpetruno/portunus/CHANGELOG.md"
|
24
|
+
else
|
25
|
+
raise "RubyGems 2.0 or newer is required to protect against " \
|
26
|
+
"public gem pushes."
|
27
|
+
end
|
28
|
+
|
29
|
+
# Specify which files should be added to the gem when it is released.
|
30
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
31
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
32
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
33
|
+
end
|
34
|
+
spec.require_paths = ["lib"]
|
35
|
+
|
36
|
+
spec.add_runtime_dependency "rails", ">= 5.0.0"
|
37
|
+
spec.add_runtime_dependency "aes"
|
38
|
+
spec.add_runtime_dependency "openssl", ">= 2.1.0"
|
39
|
+
|
40
|
+
spec.add_development_dependency "bundler", "> 1.17"
|
41
|
+
spec.add_development_dependency "rails", ">= 5.0.0"
|
42
|
+
spec.add_development_dependency "rake", "> 12.3.3"
|
43
|
+
spec.add_development_dependency "rspec"
|
44
|
+
spec.add_development_dependency "sqlite3"
|
45
|
+
spec.add_development_dependency "pry-rails"
|
46
|
+
spec.add_development_dependency "pry-stack_explorer"
|
47
|
+
# simplecov 18 is incompatible with test reporter
|
48
|
+
# https://github.com/codeclimate/test-reporter/issues/413
|
49
|
+
spec.add_development_dependency "simplecov", "~> 0.17.1"
|
50
|
+
spec.add_development_dependency "codeclimate-test-reporter"
|
51
|
+
end
|
File without changes
|
metadata
ADDED
@@ -0,0 +1,255 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: portunus
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Colin Petruno
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-03-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 5.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 5.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: aes
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: openssl
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.1.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.1.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.17'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.17'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rails
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 5.0.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 5.0.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 12.3.3
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 12.3.3
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: sqlite3
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pry-rails
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: pry-stack_explorer
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: simplecov
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 0.17.1
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 0.17.1
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: codeclimate-test-reporter
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
description: Easily encrypt all your sensitive data.
|
182
|
+
email:
|
183
|
+
- colinpetruno@gmail.com
|
184
|
+
executables: []
|
185
|
+
extensions: []
|
186
|
+
extra_rdoc_files: []
|
187
|
+
files:
|
188
|
+
- ".gitignore"
|
189
|
+
- ".nvmrc"
|
190
|
+
- ".travis.yml"
|
191
|
+
- CODE_OF_CONDUCT.md
|
192
|
+
- Gemfile
|
193
|
+
- Gemfile.lock
|
194
|
+
- LICENSE.txt
|
195
|
+
- README.md
|
196
|
+
- Rakefile
|
197
|
+
- bin/console
|
198
|
+
- bin/setup
|
199
|
+
- lib/Rakefile
|
200
|
+
- lib/generators/install_generator.rb
|
201
|
+
- lib/generators/templates/create_portunus.rb.erb
|
202
|
+
- lib/portunus.rb
|
203
|
+
- lib/portunus/configuration.rb
|
204
|
+
- lib/portunus/data_encryption_key.rb
|
205
|
+
- lib/portunus/data_key_generator.rb
|
206
|
+
- lib/portunus/encryptable.rb
|
207
|
+
- lib/portunus/encrypters/open_ssl_aes.rb
|
208
|
+
- lib/portunus/encrypters/time.rb
|
209
|
+
- lib/portunus/field_configurer.rb
|
210
|
+
- lib/portunus/hasher.rb
|
211
|
+
- lib/portunus/master_key.rb
|
212
|
+
- lib/portunus/railtie.rb
|
213
|
+
- lib/portunus/rotators/dek.rb
|
214
|
+
- lib/portunus/rotators/kek.rb
|
215
|
+
- lib/portunus/storage_adaptors/credentials.rb
|
216
|
+
- lib/portunus/storage_adaptors/environment.rb
|
217
|
+
- lib/portunus/tasks/generate_keys.rake
|
218
|
+
- lib/portunus/tasks/rotate_keys.rake
|
219
|
+
- lib/portunus/type_caster.rb
|
220
|
+
- lib/portunus/type_casters/boolean.rb
|
221
|
+
- lib/portunus/type_casters/date.rb
|
222
|
+
- lib/portunus/type_casters/date_time.rb
|
223
|
+
- lib/portunus/type_casters/float.rb
|
224
|
+
- lib/portunus/type_casters/integer.rb
|
225
|
+
- lib/portunus/type_casters/string.rb
|
226
|
+
- lib/portunus/version.rb
|
227
|
+
- portunus.gemspec
|
228
|
+
- tmp/log/development.log
|
229
|
+
homepage: https://www.github.com/colinpetruno/portunus
|
230
|
+
licenses:
|
231
|
+
- MIT
|
232
|
+
metadata:
|
233
|
+
homepage_uri: https://www.github.com/colinpetruno/portunus
|
234
|
+
source_code_uri: https://www.github.com/colinpetruno/portunus
|
235
|
+
changelog_uri: https://www.github.com/colinpetruno/portunus/CHANGELOG.md
|
236
|
+
post_install_message:
|
237
|
+
rdoc_options: []
|
238
|
+
require_paths:
|
239
|
+
- lib
|
240
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
241
|
+
requirements:
|
242
|
+
- - ">="
|
243
|
+
- !ruby/object:Gem::Version
|
244
|
+
version: '0'
|
245
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
246
|
+
requirements:
|
247
|
+
- - ">="
|
248
|
+
- !ruby/object:Gem::Version
|
249
|
+
version: '0'
|
250
|
+
requirements: []
|
251
|
+
rubygems_version: 3.0.3
|
252
|
+
signing_key:
|
253
|
+
specification_version: 4
|
254
|
+
summary: DEK and KEK Encryption for Rails
|
255
|
+
test_files: []
|