carrierwave_encrypter_decrypter 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzRiMGRjOWZkZjUyNzBiOTY2MTVlNjhkMDRlYWRmYjUzYmQ2M2ZmYQ==
4
+ ZDlkZGEyY2E0NTRhMjViMTIzMzRmODMzOGY3OWYyNDZjZmYzYmViNA==
5
5
  data.tar.gz: !binary |-
6
- NDJjZWYzYzM4ZDE4MGRjZGQ4YmNhNjQ1ODM4MDYxMGJkMTEzZDFhZg==
6
+ MDUyYTY1MGY3NzQ5ZjIyNzk3OGVjODViNDg0YjdiZDM4Yjg4NmE3Ng==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YzA0OTU4NGZiOWZlMzFjMGM2ZGE4NWQ2ODg1OWExNmRiODM1Mzg5M2M0YjI1
10
- YTQ1YWE1NWQ2YmRiZjNjMWIwNjRjZDhmYzVlODFhMjI3YjI4OWEwMzJiZmFk
11
- ZWE5MDUyNWQ3YjIwMDE2Y2U1NmIxNzNkMGNkMjA2YzFhNzNiN2I=
9
+ ODM0MmE3ODA3MWM2YjQyOGYyM2NjNGNhODc5NzkyMmJhZWI3YWIzMGU4ZDNj
10
+ NTZhYTE5YWQ1ZWI5MDdlMjQyNjc1NzU4NTE5ZGZjOWMzZDlkMzFlYTliNzZk
11
+ NzQxZTI3ZTQyZWVlOTJiZmIzYmQ1OTUzMGNiODk1MmMzYjcwNTI=
12
12
  data.tar.gz: !binary |-
13
- ODVkMWQ1OWViZWFhNDRkZjRhNTQ0YjI0NDZmYzczNTQ5NTJlMDE3OWQzMTRj
14
- M2IxMDNiMjM5NTYwZWUyMDZjNjA0NGExNjVlZmI4NDVhYjkzZDJhYzk3NzIw
15
- NGVkODk4ZDM5NTY3ZGY1MzJkN2RhY2FiZWY5Y2QwMjdjOGE2NTc=
13
+ NzAwYjg2ZmRjNzk4Njg0M2EyNzcyMDA2ZjkyYjI1MzQ4OGJkZGVjMGI4YjMy
14
+ ZGJiZGQzNDhkZjkyMGU4OWQ2NDhkY2YzZDE3NDBhZTczMWQ0NjAwMzExN2M5
15
+ YzE5OTFmOTJlOTI3NTA5YTgyNWEyMjViNjAyNzU3YzFhNzYxNTU=
data/Readme.md CHANGED
@@ -1,10 +1,15 @@
1
- **Note:** Gem Work in progress :pray: will be completed by 31st Dec 2013
2
-
3
1
  # Carrierwave Encrypter Decrypter
4
2
 
5
- A Rubygem to secure the file uploaded by encrypting the data and decryption on the fly. Completely secure and depends on Ruby 2.0.0 OpenSSL::Cipher and OpenSSL::PKCS5
3
+ A Rubygem to secure the file uploaded by encrypting the file later on decrypting when needed. Completely secure and depends on Ruby 2.0.0 OpenSSL::Cipher and OpenSSL::PKCS5
4
+
5
+
6
+ OpenSSL::Cipher
7
+
8
+ Provides symmetric algorithms for encryption and decryption.
6
9
 
10
+ OpenSSL::PKCS5
7
11
 
12
+ Provides password-based encryption functionality based on PKCS#5.
8
13
 
9
14
  ## Installation
10
15
 
@@ -25,6 +30,32 @@ This will create a initializer `carrierwave_encrypter_decrypter`
25
30
 
26
31
  create config/initializers/carrierwave_encrypter_decrypter.rb
27
32
 
33
+ and a `carrierwave_encrypter_decrypter.yml`
34
+
35
+ create config/carrierwave_encrypter_decrypter.yml
36
+
37
+ the above will be used when you have the `encryption_type` as `pkcs5`.
38
+
39
+ ## Choosing encryption type?
40
+
41
+ The Gem support 2 ways **[OpenSSL::Cipher](http://ruby-doc.org/stdlib-2.0/libdoc/openssl/rdoc/OpenSSL/Cipher.html)** and **[OpenSSL::PKCS5](http://ruby-doc.org/stdlib-2.0/libdoc/openssl/rdoc/OpenSSL/PKCS5.html)**
42
+
43
+ if you want to go with standard encryption in your `config/initializers/carrierwave_encrypter_decrypter.rb` select
44
+
45
+ Carrierwave::EncrypterDecrypter.configure do |config|
46
+ config.encryption_type = :aes
47
+ config.key_size = 256
48
+ end
49
+
50
+ if you want to go with password based encrption (pkcs5) in your `config/initializers/carrierwave_encrypter_decrypter.rb` select
51
+
52
+ Carrierwave::EncrypterDecrypter.configure do |config|
53
+ config.encryption_type = :pkcs5
54
+ config.key_size = 256
55
+ end
56
+
57
+ **Note:** Make sure you have the password set in `config/carrierwave_encrypter_decrypter.yml`
58
+
28
59
 
29
60
  Now in your Uploader for eg `app/uploaders/avatar_uploader.rb` add the after store callback
30
61
 
@@ -1,4 +1,5 @@
1
1
  require 'carrierwave/encrypter_decrypter/openssl/aes'
2
+ require 'carrierwave/encrypter_decrypter/openssl/pkcs5'
2
3
 
3
4
  class Decryption
4
5
  def self.start!(obj,opts)
@@ -7,6 +8,8 @@ class Decryption
7
8
  case encryption_type
8
9
  when :aes
9
10
  Openssl::Aes.decrypt_for(obj,opts)
11
+ when :pkcs5
12
+ Openssl::Pkcs5.decrypt_for(obj,opts)
10
13
  end
11
14
  end
12
15
  end
@@ -1,4 +1,5 @@
1
1
  require 'carrierwave/encrypter_decrypter/openssl/aes'
2
+ require 'carrierwave/encrypter_decrypter/openssl/pkcs5'
2
3
 
3
4
  class Encryption
4
5
  def self.start!(obj)
@@ -7,6 +8,8 @@ class Encryption
7
8
  case encryption_type
8
9
  when :aes
9
10
  Openssl::Aes.encrypt_for(obj)
11
+ when :pkcs5
12
+ Openssl::Pkcs5.encrypt_for(obj)
10
13
  end
11
14
  end
12
15
  end
@@ -0,0 +1,89 @@
1
+ require 'yaml'
2
+ module Openssl
3
+ module Pkcs5
4
+ def self.encrypt_for(obj)
5
+ begin
6
+ config = YAML.load_file("#{Rails.root}/config/carrierwave_encrypter_decrypter.yml")[Rails.env]
7
+ model = obj.model
8
+ mounted_as = obj.mounted_as
9
+
10
+ cipher = OpenSSL::Cipher.new("AES-#{Carrierwave::EncrypterDecrypter.configuration.key_size}-CBC")
11
+ cipher.encrypt
12
+ iv = cipher.random_iv
13
+ model.iv = iv
14
+
15
+ pwd = config['pkcs5_password']
16
+
17
+ salt = OpenSSL::Random.random_bytes 16
18
+
19
+ model.key = salt
20
+
21
+ iter = 20000
22
+
23
+ key_len = cipher.key_len
24
+ digest = OpenSSL::Digest::SHA256.new
25
+
26
+ key = OpenSSL::PKCS5.pbkdf2_hmac(pwd, salt, iter, key_len, digest)
27
+ cipher.key = key
28
+
29
+ original_file_path = File.expand_path(obj.store_path, obj.root)
30
+ encrypted_file_path = File.expand_path(obj.store_path, obj.root) + ".enc"
31
+ model.save!
32
+
33
+
34
+ buf = ""
35
+ File.open(encrypted_file_path, "wb") do |outf|
36
+ File.open(model.send(mounted_as).path, "rb") do |inf|
37
+ while inf.read(4096, buf)
38
+ outf << cipher.update(buf)
39
+ end
40
+ outf << cipher.final
41
+ end
42
+ end
43
+ File.unlink(model.send(mounted_as).path)
44
+ rescue Exception => e
45
+ puts "****************************#{e.message}"
46
+ puts "****************************#{e.backtrace.inspect}"
47
+ end
48
+ end
49
+
50
+ def self.decrypt_for(obj,opts)
51
+ begin
52
+ config = YAML.load_file("#{Rails.root}/config/carrierwave_encrypter_decrypter.yml")[Rails.env]
53
+ model = obj
54
+ mounted_as = opts[:mounted_as]
55
+
56
+ cipher = OpenSSL::Cipher.new("AES-#{Carrierwave::EncrypterDecrypter.configuration.key_size}-CBC")
57
+ cipher.decrypt
58
+ cipher.iv = model.iv
59
+
60
+ pwd = config['pkcs5_password']
61
+
62
+ salt = model.key
63
+ iter = 20000
64
+ key_len = cipher.key_len
65
+ digest = OpenSSL::Digest::SHA256.new
66
+
67
+ key = OpenSSL::PKCS5.pbkdf2_hmac(pwd, salt, iter, key_len, digest)
68
+ cipher.key = key
69
+
70
+ original_file_path = obj.send(mounted_as).root + obj.send(mounted_as).url
71
+ encrypted_file_path = obj.send(mounted_as).root + obj.send(mounted_as).url + ".enc"
72
+
73
+ buf = ""
74
+
75
+ File.open(original_file_path, "wb") do |outf|
76
+ File.open(encrypted_file_path, "rb") do |inf|
77
+ while inf.read(4096, buf)
78
+ outf << cipher.update(buf)
79
+ end
80
+ outf << cipher.final
81
+ end
82
+ end
83
+ rescue Exception => e
84
+ puts "****************************#{e.message}"
85
+ puts "****************************#{e.backtrace.inspect}"
86
+ end
87
+ end
88
+ end
89
+ end
@@ -1,3 +1,3 @@
1
1
  module CarrierwaveEncrypterDecrypter
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -1,6 +1,7 @@
1
1
  module Ced
2
2
  module Generators
3
3
  class InstallGenerator < ::Rails::Generators::Base
4
+ source_root File.expand_path("../templates", __FILE__)
4
5
  desc "This generator creates an initializer file at config/initializers"
5
6
  def create_initializer_file
6
7
  create_file "config/initializers/carrierwave_encrypter_decrypter.rb" do
@@ -10,10 +11,18 @@ module Ced
10
11
  #Read more about it here http://ruby-doc.org/stdlib-2.0/libdoc/openssl/rdoc/OpenSSL.html#module-OpenSSL-label-Encryption
11
12
  config.encryption_type = :aes
12
13
  config.key_size = 256
14
+
15
+ #This strategy is applicable when you want to have the pkcs5 (Password based encryption)
16
+ config.encryption_type = :pkcs5
17
+ config.key_size = 256
13
18
  end
14
19
  "
15
20
  end
16
21
  end
22
+
23
+ def copy_pkcs5_yml
24
+ copy_file "carrierwave_encrypter_decrypter.yml","config/carrierwave_encrypter_decrypter.yml"
25
+ end
17
26
  end
18
27
  end
19
28
  end
@@ -0,0 +1,9 @@
1
+ #This file is required by carrierwave_encrypter_decrypter gem.
2
+ #The password that is set will be used if you have the encryption_type as pkcs5.
3
+ #This will enable the password based encryption.
4
+
5
+ development:
6
+ pkcs5_password: "Secret"
7
+
8
+ production:
9
+ pkcs5_password: "Secret"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carrierwave_encrypter_decrypter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ankit gupta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-30 00:00:00.000000000 Z
11
+ date: 2013-12-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logger
@@ -52,8 +52,8 @@ dependencies:
52
52
  - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- description: A library supporting Ruby OpenSSL::Cipher and OpenSSL::PKCS5 for the
56
- file encryption and decryption
55
+ description: A library for encrypting and decrypting uploaded files. Supports Ruby
56
+ OpenSSL::Cipher and OpenSSL::PKCS5 Strategies.
57
57
  email: ankit.gupta8898@gmail.com
58
58
  executables: []
59
59
  extensions: []
@@ -64,11 +64,13 @@ files:
64
64
  - lib/carrierwave/encrypter_decrypter/downloader.rb
65
65
  - lib/carrierwave/encrypter_decrypter/encryption.rb
66
66
  - lib/carrierwave/encrypter_decrypter/openssl/aes.rb
67
+ - lib/carrierwave/encrypter_decrypter/openssl/pkcs5.rb
67
68
  - lib/carrierwave/encrypter_decrypter/uploader.rb
68
69
  - lib/carrierwave/encrypter_decrypter/version.rb
69
70
  - lib/carrierwave_encrypter_decrypter.rb
70
71
  - lib/generators/ced.rb
71
72
  - lib/generators/ced/install/install_generator.rb
73
+ - lib/generators/ced/install/templates/carrierwave_encrypter_decrypter.yml
72
74
  - Readme.md
73
75
  homepage: https://github.com/ankit8898/carrierwave_encrypter_decrypter
74
76
  licenses: