mongoid-encryptor 0.0.1

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.
data/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ Changelog
2
+ =========
3
+
4
+ 0.0.1
5
+ -----
6
+
7
+ * first release.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Junya Ogura
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,145 @@
1
+ mongoid-encryptor
2
+ =================
3
+
4
+ mongoid-encryptor encrypts and decrypts one or more fields in a Mongoid model.
5
+
6
+
7
+ Install
8
+ -------
9
+
10
+ Put this line in your Gemfile:
11
+
12
+ gem 'mongoid-encryptor'
13
+
14
+ Then bundle:
15
+
16
+ $ bundle
17
+
18
+
19
+ Quick Start
20
+ -----------
21
+
22
+ Add mongoid-encryptor to your Gemfile.
23
+
24
+ gem 'mongoid-encryptor', :require => 'mongoid/encryptor'
25
+
26
+ Set up SHA encrypted field in models like this:
27
+
28
+ class Credential
29
+ include Mongoid::Document
30
+ include Mongoid::Encryptor
31
+ field :password
32
+ encrypts :password
33
+ end
34
+
35
+ >> c = Credential.new
36
+ => #<Credential _id: 4d6383aeb2de3cbea1000001, password: nil>
37
+ >> c.password = 'this is a secret'
38
+ => "this is a secret"
39
+ >> c.password.encrypted?
40
+ => false
41
+ >> c.save
42
+ => true
43
+
44
+ >> c.password
45
+ => "70a202166f0a78defe464d810f30b50b767cb89a"
46
+ >> c.password.encrypted?
47
+ => true
48
+ >> c.password.cipher.salt
49
+ => "salt"
50
+ >> c.password == 'this is a secret'
51
+ => true
52
+
53
+
54
+ Symmetric encryption
55
+ --------------------
56
+
57
+ Set up Symmetric encrypted field in models like this:
58
+
59
+ class Credential
60
+ include Mongoid::Document
61
+ include Mongoid::Encryptor
62
+ field :password
63
+ encrypts :password, :mode => :symmetric, :password => 'key'
64
+ end
65
+
66
+ >> c = Credential.new
67
+ => #<Credential _id: 4d638b6db2de3cc2ca000001, password: nil>
68
+ >> c.password = 'this is a secret'
69
+ => "this is a secret"
70
+ >> c.password.encrypted?
71
+ => false
72
+ >> c.save
73
+ => true
74
+
75
+ >> c.password
76
+ => "y3HnNrU0HviAl3aw2sWH1KttBLsCLYP1\n"
77
+ >> c.password.encrypted?
78
+ => true
79
+ >> c.password.cipher
80
+ => #<EncryptedStrings::SymmetricCipher:0x000001016b1c08 @algorithm="DES-EDE3-CBC", @password="key">
81
+ >> c.password.cipher.password
82
+ => "key"
83
+ >> c.password == 'this is a secret'
84
+ => true
85
+
86
+
87
+ Asymmetric encryption
88
+ ---------------------
89
+
90
+ Set up Asymmetric encrypted field in models like this:
91
+
92
+ class Credential
93
+ include Mongoid::Document
94
+ include Mongoid::Encryptor
95
+ field :password
96
+ encrypts :password, :mode => :asymmetric,
97
+ :private_key_file => '/path/to/private_key',
98
+ :public_key_file => '/path/to/public_key'
99
+ end
100
+
101
+ >> c = Credential.new
102
+ => #<Credential _id: 4d638ceab2de3cc3c1000001, password: nil>
103
+ >> c.password = 'this is a secret'
104
+ => "this is a secret"
105
+ >> c.password.encrypted?
106
+ => false
107
+ >> c.save
108
+ => true
109
+
110
+ >> c.password
111
+ => "ha/2EacZTmvAIHOSjFEshM+9UHUItB/wGKJ5ftClQDllA9SOBJJazTlsMS9m\nPd5W3goZbY9V2dDdNo4NgQ0e8VsG0dpcvOIrua/ye+jX3e+0ocevcnOH9PL9\n8C5P8caOD/sKlKLTI0Dr1v/6d/f0Q4UuPQyTh3d4aEWyagypWyQ=\n"
112
+ >> c.password.encrypted?
113
+ => true
114
+ >> c.password == 'this is a secret'
115
+ => true
116
+
117
+ You can generate keypair like this:
118
+
119
+ $ openssl genrsa -des3 -out private 1024 # generate private key
120
+ $ openssl rsa -in private -pubout -out public # generate public key
121
+ $ mv private private.bak
122
+ $ openssl rsa -in private.bak -out private # remove passphrase from private key
123
+ $ ls -l
124
+ -rw-r--r-- 1 juno staff 887 2 22 19:20 private
125
+ -rw-r--r-- 1 juno staff 963 2 22 19:19 private.bak
126
+ -rw-r--r-- 1 juno staff 272 2 22 19:19 public
127
+
128
+
129
+ Questions, Feedback
130
+ -------------------
131
+
132
+ [github/juno](http://github.com/juno/) or [@junya](http://twitter.com/junya).
133
+
134
+
135
+ References
136
+ ----------
137
+
138
+ * [pluginaweek/encrypted_strings](https://github.com/pluginaweek/encrypted_strings)
139
+ * [pluginaweek/encrypted_attributes](https://github.com/pluginaweek/encrypted_attributes)
140
+
141
+
142
+ Copyright
143
+ ---------
144
+
145
+ (c) 2011 Junya Ogura. See LICENSE.txt for further details.
@@ -0,0 +1,7 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module Mongoid #:nodoc:
4
+ module Encryptor
5
+ VERSION = '0.0.1'
6
+ end
7
+ end
@@ -0,0 +1,72 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'encrypted_strings'
3
+
4
+ module Mongoid #:nodoc:
5
+
6
+ # mongoid-encryptor encrypts and decrypts one or more fields in a Mongoid model.
7
+ module Encryptor
8
+ extend ActiveSupport::Concern
9
+
10
+ module ClassMethods #:nodoc:
11
+ # @param [Hash] attrs
12
+ def encrypts(*attrs)
13
+ base_options = attrs.last.is_a?(Hash) ? attrs.pop : {}
14
+
15
+ attrs.each do |attr_name|
16
+ options = base_options.dup
17
+ attr_name = attr_name.to_s
18
+
19
+ mode = options.delete(:mode) || :sha
20
+ cipher_class = EncryptedStrings.const_get("#{mode.to_s.classify}Cipher")
21
+
22
+ send(:before_validation) do |doc|
23
+ doc.send(:write_encrypted_attribute, attr_name, cipher_class, options)
24
+ true
25
+ end
26
+
27
+ define_method(attr_name) do
28
+ read_encrypted_attribute(attr_name, cipher_class, options)
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ module InstanceMethods #:nodoc:
35
+ private
36
+
37
+ # @param [String] attr_name
38
+ # @param [Class] cipher_class
39
+ # @param [Hash] options
40
+ def write_encrypted_attribute(attr_name, cipher_class, options)
41
+ value = read_attribute(attr_name.to_sym)
42
+ return if value.blank? or value.encrypted?
43
+
44
+ cipher = instantiate_cipher(cipher_class, options)
45
+ value = cipher.encrypt(value)
46
+ value.cipher = cipher
47
+ send("#{attr_name}=", value)
48
+ end
49
+
50
+ # @param [String] attr_name
51
+ # @param [Class] cipher_class
52
+ # @param [Hash] options
53
+ def read_encrypted_attribute(attr_name, cipher_class, options)
54
+ value = read_attribute(attr_name)
55
+
56
+ unless value.blank? || value.encrypted? || attribute_changed?(attr_name) || new_record?
57
+ value.cipher = instantiate_cipher(cipher_class, options)
58
+ end
59
+
60
+ value
61
+ end
62
+
63
+ # @param [Class] cipher_class
64
+ # @param [Hash] options
65
+ # @return [EncryptedStrings::Cipher]
66
+ def instantiate_cipher(cipher_class, options)
67
+ cipher_class.new(options.dup)
68
+ end
69
+ end
70
+ end
71
+
72
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe 'Asymmetric encryption' do
5
+ let(:credential) { AsymmetricCredential.create(:email => 'john.smith@example.com', :password => 'this is a secret') }
6
+
7
+ context "#to_s" do
8
+ subject { "#{credential.password}" }
9
+ it { should_not eq('this is a secret') }
10
+ end
11
+
12
+ context "'this is a secret'" do
13
+ subject { credential.password }
14
+ it { should be_encrypted }
15
+ it { should eq('this is a secret') }
16
+ end
17
+
18
+ context "attribute length" do
19
+ subject { credential.password.length }
20
+ it { should eq(175) }
21
+ end
22
+
23
+ context "cipher" do
24
+ subject { credential.password.cipher }
25
+ it { should be_an_instance_of(EncryptedStrings::AsymmetricCipher) }
26
+ end
27
+ end
@@ -0,0 +1,11 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe 'Encrypted attributes' do
5
+ context "Not encryption" do
6
+ let(:credential) { Credential.create(:email => 'john.smith@example.com') }
7
+ before { credential.password = 'this is not a secret' }
8
+ subject { credential.password }
9
+ it { should eq('this is not a secret') }
10
+ end
11
+ end
data/spec/keys/private ADDED
@@ -0,0 +1,15 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIICXQIBAAKBgQDYVF73yp10OGVKO0UYrVwFO4bKJv4i4V1Et7KeHfdCFVU7/oxA
3
+ tISjKvlh/KdBE+dlqCAgxemThANkAspQRr6BSe5jqgDHea2Qd6qvq4JgkxCLr3Io
4
+ irxQ79zKw2rvhPsWMAyFNdRHlGBCyIP/If0htPccX0HbGk0lVBGN9cFWLwIDAQAB
5
+ AoGBAJtpcZh+vUNDSLFdhzRFRviTXTBZdvXEBedaOT4StRGKleM16biKd0dpliNp
6
+ CRddnz2O3RXuWPGbQ3xT7NhjGnQhYsSKbPXQRpp+BdaiR/B36R9L/DYVxquOqpeQ
7
+ fR2Q2tRXANAw8fPvI3rANq1oNZFKTma8dP2D+cyf7/YTrndBAkEA77+DIjE+Iy5c
8
+ BNEiOYCLkSEo239vl0Qy1EwVovdzDiPnhjEj6q1weVtMOplJ1uoACUTikMuny2EO
9
+ s773h4yunwJBAOb+dquUgfKAlO+aGGwybUDeb9Etgqo2p+dmFqqcGknAi6+lmTOQ
10
+ V120tXXdf184W7AGpp/X9rARs1TRF5+KfnECQQDYbGCbSCqYpavpqUSk9faHn5B7
11
+ fPGmcqkT3k8V2x0g4aaKC+gpXEIROyp4J5JxkLFRrL5+CWpCfS5Bcp2O3p9vAkBI
12
+ Hv8SR0XjXz4hKS2i6oOuE0U6PEllt7boyrkc/6w9hr6WUs/oh5KfkUJu0H9qTYBj
13
+ D1CK67T7+CrTuozzpRwhAkB80NeUiQNpQqlCRmeoo+XjHXFsoIRZO9sMs86nBkJ+
14
+ p4HVUKhDgMSTGA8V0P/h9zDFo8iPtarcAA/WlEm6mLwV
15
+ -----END RSA PRIVATE KEY-----
data/spec/keys/public ADDED
@@ -0,0 +1,6 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYVF73yp10OGVKO0UYrVwFO4bK
3
+ Jv4i4V1Et7KeHfdCFVU7/oxAtISjKvlh/KdBE+dlqCAgxemThANkAspQRr6BSe5j
4
+ qgDHea2Qd6qvq4JgkxCLr3IoirxQ79zKw2rvhPsWMAyFNdRHlGBCyIP/If0htPcc
5
+ X0HbGk0lVBGN9cFWLwIDAQAB
6
+ -----END PUBLIC KEY-----
@@ -0,0 +1,13 @@
1
+ class AsymmetricCredential
2
+ include Mongoid::Document
3
+ include Mongoid::Encryptor
4
+
5
+ field :email
6
+ field :password
7
+
8
+ validates_presence_of :email, :password
9
+
10
+ encrypts :password, :mode => :asymmetric,
11
+ :private_key_file => File.dirname(__FILE__) + '/../keys/private',
12
+ :public_key_file => File.dirname(__FILE__) + '/../keys/public'
13
+ end
@@ -0,0 +1,9 @@
1
+ class Credential
2
+ include Mongoid::Document
3
+ include Mongoid::Encryptor
4
+
5
+ field :email
6
+ field :password
7
+
8
+ validates_presence_of :email, :password
9
+ end
@@ -0,0 +1,11 @@
1
+ class ShaCredential
2
+ include Mongoid::Document
3
+ include Mongoid::Encryptor
4
+
5
+ field :email
6
+ field :password
7
+
8
+ validates_presence_of :email, :password
9
+
10
+ encrypts :password, :mode => :sha,
11
+ end
@@ -0,0 +1,11 @@
1
+ class ShaWithSaltCredential
2
+ include Mongoid::Document
3
+ include Mongoid::Encryptor
4
+
5
+ field :email
6
+ field :password
7
+
8
+ validates_presence_of :email, :password
9
+
10
+ encrypts :password, :mode => :sha, :salt => 'admin'
11
+ end
@@ -0,0 +1,11 @@
1
+ class SymmetricCredential
2
+ include Mongoid::Document
3
+ include Mongoid::Encryptor
4
+
5
+ field :email
6
+ field :password
7
+
8
+ validates_presence_of :email, :password
9
+
10
+ encrypts :password, :mode => :symmetric, :password => 'key'
11
+ end
@@ -0,0 +1,57 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe 'SHA encryption' do
5
+ let(:credential) { ShaCredential.create(:email => 'john.smith@example.com', :password => 'this is a secret') }
6
+
7
+ context "#to_s" do
8
+ subject { "#{credential.password}" }
9
+ it { should eq("70a202166f0a78defe464d810f30b50b767cb89a") }
10
+ end
11
+
12
+ context "'this is a secret'" do
13
+ subject { credential.password }
14
+ it { should be_encrypted }
15
+ it { should eq('this is a secret') }
16
+ end
17
+
18
+ context "cipher" do
19
+ subject { credential.password.cipher }
20
+ it { should be_an_instance_of(EncryptedStrings::ShaCipher) }
21
+ end
22
+
23
+ context "use default salt" do
24
+ subject { credential.password.cipher.salt }
25
+ it { should eq('salt') }
26
+ end
27
+
28
+ context "load from database" do
29
+ subject { ShaCredential.find(credential.id).password }
30
+ it { should be_encrypted }
31
+ it { should eq('this is a secret') }
32
+
33
+ context "#to_s" do
34
+ subject { "#{ShaCredential.find(credential.id).password}" }
35
+ it { should eq("70a202166f0a78defe464d810f30b50b767cb89a") }
36
+ end
37
+ end
38
+
39
+ context "with mass assignment" do
40
+ let(:credential) { ShaCredential.new(:email => 'john.smith@example.com', :password => 'this is a secret') }
41
+ subject { credential.password }
42
+ it { should eq('this is a secret') }
43
+ it { should_not be_encrypted }
44
+
45
+ context "after save" do
46
+ before { credential.save! }
47
+ subject { credential.password }
48
+ it { should be_encrypted }
49
+ it { should eq('this is a secret') }
50
+
51
+ context "#to_s" do
52
+ subject { "#{credential.password}" }
53
+ it { should eq('70a202166f0a78defe464d810f30b50b767cb89a') }
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe 'SHA with salt encryption' do
5
+ let(:credential) { ShaWithSaltCredential.create(:email => 'john.smith@example.com', :password => 'this is a secret') }
6
+
7
+ context "#to_s" do
8
+ subject { "#{credential.password}" }
9
+ it { should eq("f218935d0c4b9a5e6d5faae7bc6b6bd35f319cbe") }
10
+ end
11
+
12
+ context "'this is a secret'" do
13
+ subject { credential.password }
14
+ it { should be_encrypted }
15
+ it { should eq('this is a secret') }
16
+ end
17
+
18
+ context "cipher" do
19
+ subject { credential.password.cipher }
20
+ it { should be_an_instance_of(EncryptedStrings::ShaCipher) }
21
+ end
22
+
23
+ context "use custom salt" do
24
+ subject { credential.password.cipher.salt }
25
+ it { should eq('admin') }
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'database_cleaner'
5
+ require 'mongoid'
6
+ require 'rspec'
7
+
8
+ Mongoid.configure do |config|
9
+ name = 'mongoid_encryptor_test'
10
+ config.master = Mongo::Connection.new.db(name)
11
+ end
12
+
13
+ require File.expand_path("../../lib/mongoid/encryptor", __FILE__)
14
+
15
+ Dir["#{File.dirname(__FILE__)}/models/*.rb"].each {|f| require f}
16
+
17
+ RSpec.configure do |config|
18
+ config.before(:all) { DatabaseCleaner.strategy = :truncation }
19
+ config.before(:each) { DatabaseCleaner.clean }
20
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe "Symmetric encryption" do
5
+ let(:credential) { SymmetricCredential.create(:email => 'john.smith@example.com', :password => 'this is a secret') }
6
+
7
+ context "'this is a secret'" do
8
+ subject { credential.password }
9
+ it { should eq("y3HnNrU0HviAl3aw2sWH1KttBLsCLYP1\n") }
10
+ it { should be_encrypted }
11
+ it { should eq('this is a secret') }
12
+ end
13
+
14
+ context 'cipher' do
15
+ subject { credential.password.cipher }
16
+ it { should be_an_instance_of(EncryptedStrings::SymmetricCipher) }
17
+ end
18
+
19
+ context 'cipher password' do
20
+ subject { credential.password.cipher.password }
21
+ it { should eq('key') }
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,151 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mongoid-encryptor
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Junya Ogura
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-02-22 00:00:00 +09:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: mongoid
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: 2.0.0.rc.7
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: encrypted_strings
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: 0.3.3
36
+ type: :runtime
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: bson_ext
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 1.2.0
47
+ type: :development
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: database_cleaner
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: 0.6.0
58
+ type: :development
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: rspec
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 2.4.0
69
+ type: :development
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: ruby-debug19
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: 0.11.0
80
+ type: :development
81
+ version_requirements: *id006
82
+ description: mongoid-encryptor encrypts and decrypts one or more fields in a Mongoid model.
83
+ email:
84
+ - junyaogura@gmail.com
85
+ executables: []
86
+
87
+ extensions: []
88
+
89
+ extra_rdoc_files: []
90
+
91
+ files:
92
+ - lib/mongoid/encryptor/version.rb
93
+ - lib/mongoid/encryptor.rb
94
+ - CHANGELOG.md
95
+ - LICENSE
96
+ - README.md
97
+ - spec/asymmetric_encryption_spec.rb
98
+ - spec/encrypted_attributes_spec.rb
99
+ - spec/keys/private
100
+ - spec/keys/public
101
+ - spec/models/asymmetric_credential.rb
102
+ - spec/models/credential.rb
103
+ - spec/models/sha_credential.rb
104
+ - spec/models/sha_with_salt_credential.rb
105
+ - spec/models/symmetric_credential.rb
106
+ - spec/sha_encryption_spec.rb
107
+ - spec/sha_with_salt_encryption_spec.rb
108
+ - spec/spec_helper.rb
109
+ - spec/symmetric_encryption_spec.rb
110
+ has_rdoc: true
111
+ homepage: http://github.com/juno/mongoid-encryptor
112
+ licenses: []
113
+
114
+ post_install_message:
115
+ rdoc_options: []
116
+
117
+ require_paths:
118
+ - lib
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: "0"
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ none: false
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: "0"
131
+ requirements: []
132
+
133
+ rubyforge_project: mongoid-encryptor
134
+ rubygems_version: 1.5.0
135
+ signing_key:
136
+ specification_version: 3
137
+ summary: Encrypt a Mongoid model fields
138
+ test_files:
139
+ - spec/asymmetric_encryption_spec.rb
140
+ - spec/encrypted_attributes_spec.rb
141
+ - spec/keys/private
142
+ - spec/keys/public
143
+ - spec/models/asymmetric_credential.rb
144
+ - spec/models/credential.rb
145
+ - spec/models/sha_credential.rb
146
+ - spec/models/sha_with_salt_credential.rb
147
+ - spec/models/symmetric_credential.rb
148
+ - spec/sha_encryption_spec.rb
149
+ - spec/sha_with_salt_encryption_spec.rb
150
+ - spec/spec_helper.rb
151
+ - spec/symmetric_encryption_spec.rb