encryption_accessor 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest CHANGED
@@ -1,6 +1,8 @@
1
- README
1
+ Manifest
2
+ README.rdoc
2
3
  Rakefile
3
- lib/aes_crypt.rb
4
+ encryption_accessor.gemspec
4
5
  lib/encryption_accessor.rb
6
+ lib/encryption_accessor/accessor_methods.rb
7
+ lib/encryption_accessor/aes_crypt.rb
5
8
  tasks/encryption_accessor.rake
6
- Manifest
File without changes
data/Rakefile CHANGED
@@ -3,7 +3,7 @@ require 'echoe'
3
3
 
4
4
  # PACKAGING ============================================================
5
5
 
6
- Echoe.new('encryption_accessor', '0.0.1') do |p|
6
+ Echoe.new('encryption_accessor', '0.0.2') do |p|
7
7
  p.description = "Accessor's to encrypt/decrypt fields when data is stored encrypted on DB"
8
8
  p.url = 'https://github.com/marklazz/encryption_accessor'
9
9
  p.author = 'Marcelo Giorgi'
@@ -2,17 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{encryption_accessor}
5
- s.version = "0.0.1"
5
+ s.version = "0.0.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Marcelo Giorgi"]
9
9
  s.date = %q{2011-02-18}
10
10
  s.description = %q{Accessor's to encrypt/decrypt fields when data is stored encrypted on DB}
11
11
  s.email = %q{marklazz.uy@gmail.com}
12
- s.extra_rdoc_files = ["README", "lib/aes_crypt.rb", "lib/encryption_accessor.rb", "tasks/encryption_accessor.rake"]
13
- s.files = ["README", "Rakefile", "lib/aes_crypt.rb", "lib/encryption_accessor.rb", "tasks/encryption_accessor.rake", "Manifest", "encryption_accessor.gemspec"]
12
+ s.extra_rdoc_files = ["README.rdoc", "lib/encryption_accessor.rb", "lib/encryption_accessor/accessor_methods.rb", "lib/encryption_accessor/aes_crypt.rb", "tasks/encryption_accessor.rake"]
13
+ s.files = ["Manifest", "README.rdoc", "Rakefile", "encryption_accessor.gemspec", "lib/encryption_accessor.rb", "lib/encryption_accessor/accessor_methods.rb", "lib/encryption_accessor/aes_crypt.rb", "tasks/encryption_accessor.rake"]
14
14
  s.homepage = %q{https://github.com/marklazz/encryption_accessor}
15
- s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Encryption_accessor", "--main", "README"]
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Encryption_accessor", "--main", "README.rdoc"]
16
16
  s.require_paths = ["lib"]
17
17
  s.rubyforge_project = %q{encryption_accessor}
18
18
  s.rubygems_version = %q{1.3.7}
@@ -1,61 +1,8 @@
1
+ require 'rubygems'
2
+ require File.join(File.dirname(__FILE__), 'encryption_accessor', 'accessor_methods')
3
+ require File.join(File.dirname(__FILE__), 'encryption_accessor', 'aes_crypt')
4
+
1
5
  module EncryptionAccessor
2
6
 
3
7
  VERSION = '0.0.1'
4
-
5
- def self.included(base)
6
- base.extend ClassMethods
7
- end
8
-
9
- module ClassMethods
10
-
11
- def encryption_accessor(*fields)
12
- fields.each do |field|
13
- force_implement_field_setter!(field)
14
-
15
- define_method(:"#{field}_with_encryption=") do |value|
16
- self.send(:"#{field}_without_encryption=", value)
17
- write_attribute(:"#{field}", AESCrypt.encrypt(read_attribute(:"#{field}"))) unless value.nil?
18
- end
19
-
20
- self.send :alias_method_chain, :"#{field}=", :encryption
21
-
22
- define_method(:"#{field}_decrypt") do
23
- blob_value = self.read_attribute(:"#{field}")
24
- return if blob_value.nil?
25
- AESCrypt.decrypt(blob_value)
26
- end
27
-
28
- define_method(:"#{field}") do
29
- self.send(:"#{field}_decrypt")
30
- end
31
-
32
- define_method(:"#{field}_encrypted") do
33
- self.attributes["#{field}"]
34
- end
35
- define_method(:"#{field}") do
36
- self.send(:"#{field}_decrypt")
37
- end
38
- define_method(:"#{field}_encrypt!") do
39
- self.send(:"#{field}_with_encryption=", self.attributes["#{field}"])
40
- end
41
- define_method(:"#{field}_decrypt!") do
42
- self.send(:"#{field}=", self.send(:"#{field}_decrypt"))
43
- end
44
- end
45
- end
46
-
47
- private
48
-
49
- def force_implement_field_setter!(field)
50
- new.send("#{field}=", nil)
51
- end
52
- end
53
- end
54
-
55
- module ActiveRecord
56
- class Base
57
- class << self
58
- include EncryptionAccessor
59
- end
60
- end
61
8
  end
@@ -0,0 +1,55 @@
1
+ module EncryptionAccessor
2
+
3
+ module AccessorMethods
4
+
5
+ def encryption_accessor(*fields)
6
+ fields.each do |field|
7
+ force_implement_field_setter!(field)
8
+
9
+ define_method(:"#{field}_with_encryption=") do |value|
10
+ self.send(:"#{field}_without_encryption=", value)
11
+ write_attribute(:"#{field}", AESCrypt.encrypt(read_attribute(:"#{field}"))) unless value.nil?
12
+ end
13
+
14
+ self.send :alias_method_chain, :"#{field}=", :encryption
15
+
16
+ define_method(:"#{field}_decrypt") do
17
+ blob_value = self.read_attribute(:"#{field}")
18
+ return if blob_value.nil?
19
+ AESCrypt.decrypt(blob_value)
20
+ end
21
+
22
+ define_method(:"#{field}") do
23
+ self.send(:"#{field}_decrypt")
24
+ end
25
+
26
+ define_method(:"#{field}_encrypted") do
27
+ self.attributes["#{field}"]
28
+ end
29
+ define_method(:"#{field}") do
30
+ self.send(:"#{field}_decrypt")
31
+ end
32
+ define_method(:"#{field}_encrypt!") do
33
+ self.send(:"#{field}_with_encryption=", self.attributes["#{field}"])
34
+ end
35
+ define_method(:"#{field}_decrypt!") do
36
+ self.send(:"#{field}=", self.send(:"#{field}_decrypt"))
37
+ end
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def force_implement_field_setter!(field)
44
+ new.send("#{field}=", nil)
45
+ end
46
+ end
47
+ end
48
+
49
+ module ActiveRecord
50
+ class Base
51
+ class << self
52
+ include EncryptionAccessor::AccessorMethods
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: UTF-8
2
+ require 'openssl'
3
+ require 'digest/sha1'
4
+
5
+ module EncryptionAccessor
6
+
7
+ module AESCrypt
8
+ extend self
9
+
10
+ ALGORITHM = "AES-256-CBC"
11
+ SECRET = "add-your-way-eliasonmedia-02-10-2011"
12
+ ENCODE_DIRECTIVE = 'H*'
13
+
14
+ # ALGORITHM = "AES-256-ECB"
15
+ # Decrypts a block of data (encrypted_data) given an encryption key
16
+ # and an initialization vector (iv). Keys, iv's, and the data
17
+ # returned are all binary strings. Cipher_type should be
18
+ # "AES-256-CBC", "AES-256-ECB", or any of the cipher types
19
+ # supported by OpenSSL. Pass nil for the iv if the encryption type
20
+ # doesn't use iv's (like ECB).
21
+ #:return: => String
22
+ #:arg: encrypted_data => String
23
+ #:arg: key => String
24
+ #:arg: iv => String
25
+ #:arg: cipher_type => String
26
+ def decrypt(encrypted_data, key = SECRET, iv = nil, cipher_type = ALGORITHM)
27
+ aes = OpenSSL::Cipher::Cipher.new(cipher_type)
28
+ aes.decrypt
29
+ aes.key = key
30
+ aes.iv = iv if iv != nil
31
+ aes.update([encrypted_data].pack(ENCODE_DIRECTIVE)) + aes.final
32
+ end
33
+
34
+ # Encrypts a block of data given an encryption key and an
35
+ # initialization vector (iv). Keys, iv's, and the data returned
36
+ # are all binary strings. Cipher_type should be "AES-256-CBC",
37
+ # "AES-256-ECB", or any of the cipher types supported by OpenSSL.
38
+ # Pass nil for the iv if the encryption type doesn't use iv's (like
39
+ # ECB).
40
+ #:return: => String
41
+ #:arg: data => String
42
+ #:arg: key => String
43
+ #:arg: iv => String
44
+ #:arg: cipher_type => String
45
+ def encrypt(data, key = SECRET, iv = nil, cipher_type = ALGORITHM)
46
+ aes = OpenSSL::Cipher::Cipher.new(cipher_type)
47
+ aes.encrypt
48
+ aes.key = key
49
+ aes.iv = iv if iv != nil
50
+ (aes.update(data) + aes.final).unpack(ENCODE_DIRECTIVE)[0]
51
+ end
52
+ end
53
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: encryption_accessor
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Marcelo Giorgi
@@ -39,18 +39,20 @@ executables: []
39
39
  extensions: []
40
40
 
41
41
  extra_rdoc_files:
42
- - README
43
- - lib/aes_crypt.rb
42
+ - README.rdoc
44
43
  - lib/encryption_accessor.rb
44
+ - lib/encryption_accessor/accessor_methods.rb
45
+ - lib/encryption_accessor/aes_crypt.rb
45
46
  - tasks/encryption_accessor.rake
46
47
  files:
47
- - README
48
+ - Manifest
49
+ - README.rdoc
48
50
  - Rakefile
49
- - lib/aes_crypt.rb
51
+ - encryption_accessor.gemspec
50
52
  - lib/encryption_accessor.rb
53
+ - lib/encryption_accessor/accessor_methods.rb
54
+ - lib/encryption_accessor/aes_crypt.rb
51
55
  - tasks/encryption_accessor.rake
52
- - Manifest
53
- - encryption_accessor.gemspec
54
56
  has_rdoc: true
55
57
  homepage: https://github.com/marklazz/encryption_accessor
56
58
  licenses: []
@@ -62,7 +64,7 @@ rdoc_options:
62
64
  - --title
63
65
  - Encryption_accessor
64
66
  - --main
65
- - README
67
+ - README.rdoc
66
68
  require_paths:
67
69
  - lib
68
70
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -1,51 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require 'openssl'
4
- require 'digest/sha1'
5
-
6
- module AESCrypt
7
- extend self
8
-
9
- ALGORITHM = "AES-256-CBC"
10
- SECRET = "add-your-way-eliasonmedia-02-10-2011"
11
- ENCODE_DIRECTIVE = 'H*'
12
-
13
- # ALGORITHM = "AES-256-ECB"
14
- # Decrypts a block of data (encrypted_data) given an encryption key
15
- # and an initialization vector (iv). Keys, iv's, and the data
16
- # returned are all binary strings. Cipher_type should be
17
- # "AES-256-CBC", "AES-256-ECB", or any of the cipher types
18
- # supported by OpenSSL. Pass nil for the iv if the encryption type
19
- # doesn't use iv's (like ECB).
20
- #:return: => String
21
- #:arg: encrypted_data => String
22
- #:arg: key => String
23
- #:arg: iv => String
24
- #:arg: cipher_type => String
25
- def decrypt(encrypted_data, key = SECRET, iv = nil, cipher_type = ALGORITHM)
26
- aes = OpenSSL::Cipher::Cipher.new(cipher_type)
27
- aes.decrypt
28
- aes.key = key
29
- aes.iv = iv if iv != nil
30
- aes.update([encrypted_data].pack(ENCODE_DIRECTIVE)) + aes.final
31
- end
32
-
33
- # Encrypts a block of data given an encryption key and an
34
- # initialization vector (iv). Keys, iv's, and the data returned
35
- # are all binary strings. Cipher_type should be "AES-256-CBC",
36
- # "AES-256-ECB", or any of the cipher types supported by OpenSSL.
37
- # Pass nil for the iv if the encryption type doesn't use iv's (like
38
- # ECB).
39
- #:return: => String
40
- #:arg: data => String
41
- #:arg: key => String
42
- #:arg: iv => String
43
- #:arg: cipher_type => String
44
- def encrypt(data, key = SECRET, iv = nil, cipher_type = ALGORITHM)
45
- aes = OpenSSL::Cipher::Cipher.new(cipher_type)
46
- aes.encrypt
47
- aes.key = key
48
- aes.iv = iv if iv != nil
49
- (aes.update(data) + aes.final).unpack(ENCODE_DIRECTIVE)[0]
50
- end
51
- end