reencryptor 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 68209d2a879dfaa7698a60b881e22f60e5920fac
4
+ data.tar.gz: 7286ed8b1737fd899c5b091ba6251d0765533ea6
5
+ SHA512:
6
+ metadata.gz: 6acf64ad9cdc407dd19816ff6bcd10966adeacb3966e810447d76afe035271f59f22cc4c5dc1fbcaabafe4eb914db3b491dcff91b381fce24c301dfd8aedc2e5
7
+ data.tar.gz: 1b30618bd3d0fe9519aa98084f2ba19d555debfb06ed96f5524434def7089b4835bdba38bea9b839b0e0176fa09c7d964f06898505f8f70b2a4c681124881ac4
@@ -0,0 +1,5 @@
1
+ module Reencryptor
2
+
3
+ end
4
+
5
+ require 'reencryptor/global_to_per_attribute_iv_salt/migrator.rb'
@@ -0,0 +1,40 @@
1
+ require 'active_support/inflector'
2
+
3
+ class Reencryptor::GlobalToPerAttributeIVSalt::GlobalToPerAttributeEncryption
4
+ attr_accessor :classes
5
+
6
+ def initialize(classes_hash: {})
7
+ self.classes = classes_hash
8
+ end
9
+
10
+ def update_class_fields(klass_name, fields)
11
+ klass = klass_name.camelize.constantize
12
+ puts "Starting #{klass.to_s}"
13
+ ActiveRecord::Base.transaction do
14
+ klass.all.each do | instance |
15
+ fields.each do |f|
16
+ self.update_encrypted_field(instance, f)
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ def update_encrypted_field(instance, field)
23
+ instance.send("#{field}=", instance.send("#{field}_old"))
24
+ instance.update_column("encrypted_#{field}", instance.send("encrypted_#{field}"))
25
+ instance.update_column("encrypted_#{field}_iv", instance.send("encrypted_#{field}_iv"))
26
+ instance.update_column("encrypted_#{field}_salt", instance.send("encrypted_#{field}_salt"))
27
+ end
28
+
29
+ def update_encrypted_object(instance)
30
+ fields = self.classes[instance.class.name.to_sym]
31
+ fields.each {|f| self.update_encrypted_field(instance, f)}
32
+ end
33
+
34
+ def perform
35
+ self.classes.each do |klass, fields|
36
+ load "#{klass.to_s.underscore}.rb"
37
+ self.update_class_fields(klass.to_s, fields)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,43 @@
1
+ require 'active_support/inflector'
2
+
3
+ module Reencryptor::GlobalToPerAttributeIVSalt
4
+ class Migrator
5
+ attr_accessor :classes
6
+
7
+ def initialize (classes_hash: nil)
8
+ self.classes = classes_hash
9
+ end
10
+
11
+ def generate
12
+ puts "Add the following lines to a new migration:"
13
+ self.classes.each do |klass, fields|
14
+ klass_name = klass.to_s.underscore.pluralize.to_sym
15
+ fields.each do |f|
16
+ field = f.to_s.underscore.to_sym
17
+ field_old = fieldname_old(field)
18
+ puts "rename_column :#{klass_name}, :#{fieldname(field)}, :#{field_old}"
19
+ puts "add_column :#{klass_name}, :#{fieldname(field)}, :string"
20
+ puts "add_column :#{klass_name}, :#{fieldname_iv(field)}, :string"
21
+ puts "add_column :#{klass_name}, :#{fieldname_salt(field)}, :string"
22
+ end
23
+ end
24
+ puts "#----- End of Migration -----#"
25
+ end
26
+
27
+ def fieldname(field)
28
+ "encrypted_#{field.to_s.downcase}".to_sym
29
+ end
30
+
31
+ def fieldname_old(field)
32
+ "encrypted_#{field.to_s.downcase}_old".to_sym
33
+ end
34
+
35
+ def fieldname_iv(field)
36
+ "encrypted_#{field.to_s.downcase}_iv".to_sym
37
+ end
38
+
39
+ def fieldname_salt(field)
40
+ "encrypted_#{field.to_s.downcase}_salt".to_sym
41
+ end
42
+ end
43
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: reencryptor
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Nathaniel Rowe
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.5
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 4.2.5
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: 4.2.5
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 4.2.5
33
+ description: Reencrytpor for legacy schemes
34
+ email: nrowegt@gmail.com
35
+ executables: []
36
+ extensions: []
37
+ extra_rdoc_files: []
38
+ files:
39
+ - lib/reencryptor.rb
40
+ - lib/reencryptor/global_to_per_attribute_iv_salt/global_to_per_attribute_encryption.rb
41
+ - lib/reencryptor/global_to_per_attribute_iv_salt/migrator.rb
42
+ homepage: http://rubygems.org/gems/reencryptor
43
+ licenses:
44
+ - MIT
45
+ metadata: {}
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ requirements: []
61
+ rubyforge_project:
62
+ rubygems_version: 2.5.1
63
+ signing_key:
64
+ specification_version: 4
65
+ summary: Reencryption schemes to transition from legacy encryptions
66
+ test_files: []