crypt_keeper 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -15,7 +15,7 @@ is a simple class that does 3 things.
15
15
  Note: Any options defined using `crypt_keeper` will be passed to `new` as a
16
16
  hash.
17
17
 
18
- You can see an AES example [here](/jmazzi/crypt_keeper/blob/master/lib/crypt_keeper/provider/aes.rb).
18
+ You can see an AES example [here](https://github.com/jmazzi/crypt_keeper/blob/master/lib/crypt_keeper/provider/aes.rb).
19
19
 
20
20
  ## Why?
21
21
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /home/justin/work/ruby/crypt_keeper
3
3
  specs:
4
- crypt_keeper (0.4.2)
4
+ crypt_keeper (0.5.0)
5
5
  activerecord (>= 3.0)
6
6
  activesupport (>= 3.0)
7
7
  appraisal (~> 0.4.1)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /home/justin/work/ruby/crypt_keeper
3
3
  specs:
4
- crypt_keeper (0.4.2)
4
+ crypt_keeper (0.5.0)
5
5
  activerecord (>= 3.0)
6
6
  activesupport (>= 3.0)
7
7
  appraisal (~> 0.4.1)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /home/justin/work/ruby/crypt_keeper
3
3
  specs:
4
- crypt_keeper (0.4.2)
4
+ crypt_keeper (0.5.0)
5
5
  activerecord (>= 3.0)
6
6
  activesupport (>= 3.0)
7
7
  appraisal (~> 0.4.1)
@@ -2,14 +2,10 @@ require 'active_record'
2
2
 
3
3
  require 'crypt_keeper/version'
4
4
  require 'crypt_keeper/model'
5
-
5
+ require 'crypt_keeper/helper'
6
6
  require 'crypt_keeper/provider/aes'
7
7
  require 'crypt_keeper/provider/mysql_aes'
8
8
  require 'crypt_keeper/provider/postgres_pgp'
9
9
 
10
10
  module CryptKeeper
11
11
  end
12
-
13
- ActiveSupport.on_load :active_record do
14
- include CryptKeeper::Model
15
- end
@@ -0,0 +1,13 @@
1
+ module CryptKeeper
2
+ module Helper
3
+ module SQL
4
+ private
5
+
6
+ # Private: Sanitize an sql query and then execute it
7
+ def escape_and_execute_sql(query)
8
+ query = ::ActiveRecord::Base.send :sanitize_sql_array, query
9
+ ::ActiveRecord::Base.connection.execute(query).first
10
+ end
11
+ end
12
+ end
13
+ end
@@ -102,3 +102,7 @@ module CryptKeeper
102
102
  end
103
103
  end
104
104
  end
105
+
106
+ ActiveSupport.on_load :active_record do
107
+ include CryptKeeper::Model
108
+ end
@@ -3,6 +3,8 @@ require 'crypt_keeper/log_subscriber/mysql_aes'
3
3
  module CryptKeeper
4
4
  module Provider
5
5
  class MysqlAes
6
+ include CryptKeeper::Helper::SQL
7
+
6
8
  attr_accessor :key
7
9
 
8
10
  # Public: Initializes the encryptor
@@ -18,22 +20,16 @@ module CryptKeeper
18
20
  #
19
21
  # Returns an encrypted string
20
22
  def encrypt(value)
21
- escape_and_execute_sql(["SELECT AES_ENCRYPT(?, ?)", value, key]).first
23
+ Base64.encode64 escape_and_execute_sql(
24
+ ["SELECT AES_ENCRYPT(?, ?)", value, key]).first
22
25
  end
23
26
 
24
27
  # Public: Decrypts a string
25
28
  #
26
29
  # Returns a plaintext string
27
30
  def decrypt(value)
28
- escape_and_execute_sql(["SELECT AES_DECRYPT(?, ?)", value, key]).first
29
- end
30
-
31
- private
32
-
33
- # Private: Sanitize an sql query and then execute it
34
- def escape_and_execute_sql(query)
35
- query = ::ActiveRecord::Base.send :sanitize_sql_array, query
36
- ::ActiveRecord::Base.connection.execute(query).first
31
+ escape_and_execute_sql(
32
+ ["SELECT AES_DECRYPT(?, ?)", Base64.decode64(value), key]).first
37
33
  end
38
34
  end
39
35
  end
@@ -3,6 +3,7 @@ require 'crypt_keeper/log_subscriber/postgres_pgp'
3
3
  module CryptKeeper
4
4
  module Provider
5
5
  class PostgresPgp
6
+ include CryptKeeper::Helper::SQL
6
7
  attr_accessor :key
7
8
 
8
9
  # Public: Initializes the encryptor
@@ -18,7 +19,7 @@ module CryptKeeper
18
19
  #
19
20
  # Returns an encrypted string
20
21
  def encrypt(value)
21
- escape_and_execute_sql(["SELECT pgp_sym_encrypt(?, ?)", value, key])['pgp_sym_encrypt']
22
+ escape_and_execute_sql(["SELECT pgp_sym_encrypt(?, ?)", value.to_s, key])['pgp_sym_encrypt']
22
23
  end
23
24
 
24
25
  # Public: Decrypts a string
@@ -27,14 +28,6 @@ module CryptKeeper
27
28
  def decrypt(value)
28
29
  escape_and_execute_sql(["SELECT pgp_sym_decrypt(?, ?)", value, key])['pgp_sym_decrypt']
29
30
  end
30
-
31
- private
32
-
33
- # Private: Sanitize an sql query and then execute it
34
- def escape_and_execute_sql(query)
35
- query = ::ActiveRecord::Base.send :sanitize_sql_array, query
36
- ::ActiveRecord::Base.connection.execute(query).first
37
- end
38
31
  end
39
32
  end
40
33
  end
@@ -1,3 +1,3 @@
1
1
  module CryptKeeper
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- module CryptKeeperProviders
4
- describe MysqlAesLogSubscriber do
3
+ module CryptKeeper::LogSubscriber
4
+ describe MysqlAes do
5
5
  use_postgres
6
6
 
7
7
  subject { ::ActiveRecord::LogSubscriber.new }
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- module CryptKeeperProviders
4
- describe PostgresPgpLogSubscriber do
3
+ module CryptKeeper::LogSubscriber
4
+ describe PostgresPgp do
5
5
  use_postgres
6
6
 
7
7
  subject { ::ActiveRecord::LogSubscriber.new }
@@ -11,7 +11,7 @@ module CryptKeeper
11
11
  # into a spec :). This is a Base64 encoded string of 'test' AES encrypted
12
12
  # by AES_ENCRYPT()
13
13
  let(:cipher_text) do
14
- Base64.decode64 "nbKOoWn8kvAw9k/C2Mex6Q==\n"
14
+ "nbKOoWn8kvAw9k/C2Mex6Q==\n"
15
15
  end
16
16
 
17
17
  subject { MysqlAes.new key: 'candy' }
@@ -6,7 +6,10 @@ module CryptKeeper
6
6
  use_postgres
7
7
 
8
8
  let(:cipher_text) { '\\xc30d0407030283b15f71b6a7d0296cd23501bd2c8fe3c7a56005ff4619527c4291509a78c77a6758cddd2a14acbde589fa10b3e0686865182d3beadaf237b9f928e7ba1810b8' }
9
- let(:plain_text) { 'test' }
9
+ let(:plain_text) { 'test' }
10
+
11
+ let(:integer_cipher_text) { '\xc30d040703028c65c58c0e9d015360d2320125112fc38f094e57cce1c0313f3eea4a7fc3e95c048bc319e25003ab6f29ceabe3609089d12094508c1eb79a2d70f95233' }
12
+ let(:integer_plain_text) { 1 }
10
13
 
11
14
  subject { PostgresPgp.new key: 'candy' }
12
15
 
@@ -23,6 +26,11 @@ module CryptKeeper
23
26
  subject.encrypt(plain_text).should_not == plain_text
24
27
  subject.encrypt(plain_text).should_not be_empty
25
28
  end
29
+
30
+ it "encrypts integers" do
31
+ subject.encrypt(integer_plain_text).should_not == integer_plain_text
32
+ subject.encrypt(integer_plain_text).should_not be_empty
33
+ end
26
34
  end
27
35
 
28
36
  describe "#decrypt" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crypt_keeper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-03 00:00:00.000000000 Z
12
+ date: 2012-10-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -195,6 +195,7 @@ files:
195
195
  - gemfiles/activerecord_3_2.gemfile
196
196
  - gemfiles/activerecord_3_2.gemfile.lock
197
197
  - lib/crypt_keeper.rb
198
+ - lib/crypt_keeper/helper.rb
198
199
  - lib/crypt_keeper/log_subscriber/mysql_aes.rb
199
200
  - lib/crypt_keeper/log_subscriber/postgres_pgp.rb
200
201
  - lib/crypt_keeper/model.rb
@@ -203,8 +204,8 @@ files:
203
204
  - lib/crypt_keeper/provider/postgres_pgp.rb
204
205
  - lib/crypt_keeper/version.rb
205
206
  - spec/default.database.yml
206
- - spec/log_subscriber/mysql_aes.rb
207
- - spec/log_subscriber/postgres_pgp.rb
207
+ - spec/log_subscriber/mysql_aes_spec.rb
208
+ - spec/log_subscriber/postgres_pgp_spec.rb
208
209
  - spec/model_spec.rb
209
210
  - spec/provider/aes_spec.rb
210
211
  - spec/provider/mysql_aes_spec.rb
@@ -226,7 +227,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
226
227
  version: '0'
227
228
  segments:
228
229
  - 0
229
- hash: 777875145635862709
230
+ hash: 4508045864759288754
230
231
  required_rubygems_version: !ruby/object:Gem::Requirement
231
232
  none: false
232
233
  requirements:
@@ -235,7 +236,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
235
236
  version: '0'
236
237
  segments:
237
238
  - 0
238
- hash: 777875145635862709
239
+ hash: 4508045864759288754
239
240
  requirements: []
240
241
  rubyforge_project:
241
242
  rubygems_version: 1.8.23
@@ -244,8 +245,8 @@ specification_version: 3
244
245
  summary: Transparent encryption for ActiveRecord that isn't over-engineered
245
246
  test_files:
246
247
  - spec/default.database.yml
247
- - spec/log_subscriber/mysql_aes.rb
248
- - spec/log_subscriber/postgres_pgp.rb
248
+ - spec/log_subscriber/mysql_aes_spec.rb
249
+ - spec/log_subscriber/postgres_pgp_spec.rb
249
250
  - spec/model_spec.rb
250
251
  - spec/provider/aes_spec.rb
251
252
  - spec/provider/mysql_aes_spec.rb