sentry 0.3.1 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,77 +3,100 @@ module ActiveRecord # :nodoc:
3
3
  def self.included(base) # :nodoc:
4
4
  base.extend ClassMethods
5
5
  end
6
-
6
+
7
7
  module ClassMethods
8
8
  def generates_crypted(attr_name, options = {})
9
- mode = options[:mode] || :sha
9
+ mode = options[:mode] || :asymmetric
10
10
  case mode
11
- when :sha
12
- generates_crypted_hash_of(attr_name)
11
+ #when :sha
12
+ # generates_crypted_hash_of(attr_name)
13
13
  when :asymmetric, :asymmetrical
14
14
  asymmetrically_encrypts(attr_name)
15
- when :symmetric, :symmetrical
16
- symmetrically_encrypts(attr_name)
15
+ #when :symmetric, :symmetrical
16
+ # symmetrically_encrypts(attr_name)
17
17
  end
18
- end
19
-
20
- def generates_crypted_hash_of(attribute)
21
- before_validation ::Sentry::ShaSentry.new(attribute)
22
- attr_accessor attribute
23
18
  end
24
19
 
25
- def asymmetrically_encrypts(attr_name)
26
- temp_sentry = ::Sentry::AsymmetricSentryCallback.new(attr_name)
27
- before_validation temp_sentry
28
- after_save temp_sentry
29
-
30
- define_method(attr_name) do |*optional|
31
- send("#{attr_name}!", *optional) rescue nil
32
- end
33
-
34
- define_method("#{attr_name}!") do |*optional|
35
- return decrypted_values[attr_name] unless decrypted_values[attr_name].nil?
36
- return nil if send("crypted_#{attr_name}").nil?
37
- key = optional.shift
38
- ::Sentry::AsymmetricSentry.decrypt_from_base64(send("crypted_#{attr_name}"), key)
39
- end
40
-
41
- define_method("#{attr_name}=") do |value|
42
- decrypted_values[attr_name] = value
43
- nil
44
- end
45
-
46
- private
47
- define_method(:decrypted_values) do
48
- @decrypted_values ||= {}
49
- end
50
- end
20
+ #def generates_crypted_hash_of(attribute)
21
+ # before_validation ::Sentry::ShaSentry.new(attribute)
22
+ # attr_accessor attribute
23
+ #end
51
24
 
52
- def symmetrically_encrypts(attr_name)
53
- temp_sentry = ::Sentry::SymmetricSentryCallback.new(attr_name)
54
- before_validation temp_sentry
55
- after_save temp_sentry
25
+ def asymmetrically_encrypts(attr_name, options = {})
26
+ #temp_sentry = ::Sentry::AsymmetricSentryCallback.new(attr_name)
27
+ #before_validation temp_sentry
28
+ #after_save temp_sentry
29
+ unless instance_methods.include?("#{attr_name}_with_decryption")
30
+ define_read_methods
56
31
 
57
- define_method(attr_name) do
58
- send("#{attr_name}!") rescue nil
59
- end
32
+ define_method("#{attr_name}_with_decryption") do |*optional|
33
+ begin
34
+ crypted_value = self.send("#{attr_name}_without_decryption")
35
+ #puts "crypted value: #{crypted_value}"
36
+ return nil if crypted_value.nil?
37
+ key = optional.shift || (options[:key].is_a?(Proc) ? options[:key].call : options[:key]) || ::Sentry.default_key
38
+ decrypted_value = ::Sentry::AsymmetricSentry.decrypt_large_from_base64(crypted_value, key)
39
+ return decrypted_value
40
+ rescue Exception => e
41
+ nil
42
+ end
43
+ end
60
44
 
61
- define_method("#{attr_name}!") do
62
- return decrypted_values[attr_name] unless decrypted_values[attr_name].nil?
63
- return nil if send("crypted_#{attr_name}").nil?
64
- ::Sentry::SymmetricSentry.decrypt_from_base64(send("crypted_#{attr_name}"))
65
- end
66
-
67
- define_method("#{attr_name}=") do |value|
68
- decrypted_values[attr_name] = value
69
- nil
70
- end
71
-
72
- private
73
- define_method(:decrypted_values) do
74
- @decrypted_values ||= {}
45
+ alias_method_chain attr_name, :decryption
46
+ alias_method "crypted_#{attr_name}", "#{attr_name}_without_decryption"
47
+ alias_method "#{attr_name}_before_type_cast", "#{attr_name}_with_decryption"
48
+
49
+ define_method("#{attr_name}_with_encryption=") do |value|
50
+ encrypted_value = self.class.encrypt_for_sentry(value)
51
+ self.send("#{attr_name}_without_encryption=", encrypted_value)
52
+ nil
53
+ end
54
+
55
+ alias_method_chain "#{attr_name}=", :encryption
75
56
  end
57
+
76
58
  end
59
+
60
+ def encrypt_for_sentry(string)
61
+ return nil if string.nil?
62
+ return ::Sentry::AsymmetricSentry.encrypt_large_to_base64(string)
63
+ end
64
+
65
+ private
66
+
67
+ #def symmetrically_encrypts(attr_name)
68
+ # temp_sentry = ::Sentry::SymmetricSentryCallback.new(attr_name)
69
+ # before_validation temp_sentry
70
+ # after_save temp_sentry
71
+ #
72
+ # define_method(attr_name) do
73
+ # send("#{attr_name}!") rescue nil
74
+ # end
75
+ #
76
+ # define_method("#{attr_name}!") do
77
+ # return decrypted_values[attr_name] unless decrypted_values[attr_name].nil?
78
+ # return nil if send("crypted_#{attr_name}").nil?
79
+ # ::Sentry::SymmetricSentry.decrypt_from_base64(send("crypted_#{attr_name}"))
80
+ # end
81
+ #
82
+ # define_method("#{attr_name}=") do |value|
83
+ # decrypted_values[attr_name] = value
84
+ # nil
85
+ # end
86
+ #
87
+ # private
88
+ # define_method(:decrypted_values) do
89
+ # @decrypted_values ||= {}
90
+ # end
91
+ #end
92
+ end
93
+
94
+ @@CHARS = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
95
+
96
+ def self.rand_string(length=8)
97
+ s=''
98
+ length.times{ s << @@CHARS[rand(@@CHARS.length)] }
99
+ s
77
100
  end
78
101
  end
79
102
  end
@@ -34,6 +34,7 @@ module Sentry
34
34
  end
35
35
  class NoPrivateKeyError < StandardError
36
36
  end
37
+ mattr_accessor :default_key
37
38
  end
38
39
 
39
40
  begin
@@ -43,4 +44,28 @@ begin
43
44
  end
44
45
  rescue NameError
45
46
  nil
46
- end
47
+ end
48
+
49
+ class OpenSSL::PKey::RSA
50
+ def max_encryptable_length
51
+ @max_encryption_length ||= calc_max_encrypted_length
52
+ end
53
+
54
+ private
55
+
56
+ def calc_max_encrypted_length
57
+ upper_bound = 4*1024
58
+ test_length = upper_bound / 2
59
+ while test_length != (upper_bound - 1)
60
+ probe = "a" * test_length
61
+ begin
62
+ self.public_encrypt(probe)
63
+ test_length = test_length + ((upper_bound - test_length) / 2)
64
+ rescue Exception => e
65
+ upper_bound = test_length
66
+ test_length = test_length / 2
67
+ end
68
+ end
69
+ return test_length
70
+ end
71
+ end
@@ -13,14 +13,52 @@ module Sentry
13
13
  # * <tt>:symmetric_algorithm</tt> - algorithm to use for SymmetricSentry
14
14
  def initialize(options = {})
15
15
  @public_key = @private_key = nil
16
- private_key_file = options[:private_key_file]
17
- public_key_file = options[:public_key_file] || @@default_public_key_file
16
+ self.private_key_file = options[:private_key_file]
17
+ self.public_key_file = options[:public_key_file] || @@default_public_key_file
18
18
  @symmetric_algorithm = options[:symmetric_algorithm] || @@default_symmetric_algorithm
19
19
  end
20
20
 
21
21
  def encrypt(data)
22
22
  raise NoPublicKeyError unless public?
23
- public_rsa.public_encrypt(data)
23
+ rsa = public_rsa
24
+ return rsa.public_encrypt(data)
25
+ end
26
+
27
+ def decrypt_large_from_base64(data, key=nil)
28
+ raise NoPrivateKeyError unless private?
29
+ chunk_length = public_rsa.max_encryptable_length + 11 # 11 is magic padding for RSA encoding
30
+ b64_decoded = Base64.decode64(data)
31
+ padding_length = b64_decoded[0]
32
+ data = b64_decoded[1, data.length]
33
+ return (0...data.length).step(chunk_length).inject("") { |accum, idx| accum + decrypt_with_padding(data.slice(idx, chunk_length), padding_length, key)}
34
+ end
35
+
36
+ def chunk_size(padding_length)
37
+ return public_rsa.max_encryptable_length - padding_length
38
+ end
39
+
40
+ def encrypt_large_to_base64(data)
41
+ raise NoPublicKeyError unless public?
42
+ padding_length = 8
43
+ chunk_length = chunk_size(padding_length)
44
+ return Base64.encode64(padding_length.chr + (0...data.length).step(chunk_length).inject("") {|accum, idx| accum + encrypt_with_padding( data.slice(idx, chunk_length), padding_length)} )
45
+ end
46
+
47
+ def decrypt_with_padding(data, padding_length, key=nil)
48
+ decrypted = decrypt(data, key)
49
+ return decrypted[0, decrypted.length - padding_length]
50
+ end
51
+
52
+ def encrypt_with_padding(data, padding_length)
53
+ encrypt(data + rand_string(padding_length))
54
+ end
55
+
56
+ @@CHARS = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
57
+
58
+ def rand_string(length=8)
59
+ s=''
60
+ length.times{ s << @@CHARS[rand(@@CHARS.length)] }
61
+ s
24
62
  end
25
63
 
26
64
  def encrypt_to_base64(data)
@@ -29,7 +67,8 @@ module Sentry
29
67
 
30
68
  def decrypt(data, key = nil)
31
69
  raise NoPrivateKeyError unless private?
32
- private_rsa(key).private_decrypt(data)
70
+ rsa = private_rsa(key)
71
+ return rsa.private_decrypt(data)
33
72
  end
34
73
 
35
74
  def decrypt_from_base64(data, key = nil)
@@ -74,11 +113,19 @@ module Sentry
74
113
  def encrypt_to_base64(data)
75
114
  self.new.encrypt_to_base64(data)
76
115
  end
116
+
117
+ def encrypt_large_to_base64(data)
118
+ self.new.encrypt_large_to_base64(data)
119
+ end
77
120
 
78
121
  def decrypt(data, key = nil)
79
122
  self.new.decrypt(data, key)
80
123
  end
81
124
 
125
+ def decrypt_large_from_base64(data, key = nil)
126
+ self.new.decrypt_large_from_base64(data, key)
127
+ end
128
+
82
129
  def decrypt_from_base64(data, key = nil)
83
130
  self.new.decrypt_from_base64(data, key)
84
131
  end
@@ -120,6 +167,7 @@ module Sentry
120
167
  if @private_key_file and File.file?(@private_key_file)
121
168
  @private_key = File.open(@private_key_file) { |f| f.read }
122
169
  end
170
+ return @private_key
123
171
  end
124
172
 
125
173
  def load_public_key
@@ -141,4 +189,4 @@ module Sentry
141
189
  @public_rsa ||= OpenSSL::PKey::RSA.new(@public_key)
142
190
  end
143
191
  end
144
- end
192
+ end
@@ -5,13 +5,13 @@ module Sentry
5
5
  end
6
6
 
7
7
  # Performs encryption on before_validation Active Record callback
8
- def before_validation(model)
9
- return if model.send(@attr_name).blank?
10
- model.send("crypted_#{@attr_name}=", AsymmetricSentry.encrypt_to_base64(model.send(@attr_name)))
11
- end
8
+ #def before_validation(model)
9
+ # return if model.send(@attr_name).blank?
10
+ # model.send("crypted_#{@attr_name}=", AsymmetricSentry.encrypt_to_base64(model.send(@attr_name)))
11
+ #end
12
12
 
13
- def after_save(model)
14
- model.send("#{@attr_name}=", nil)
15
- end
13
+ #def after_save(model)
14
+ # model.send("#{@attr_name}=", nil)
15
+ #end
16
16
  end
17
17
  end
@@ -4,14 +4,14 @@ module Sentry
4
4
  @attr_name = attr_name
5
5
  end
6
6
 
7
- # Performs encryption on before_validation Active Record callback
8
- def before_validation(model)
9
- return if model.send(@attr_name).blank?
10
- model.send("crypted_#{@attr_name}=", SymmetricSentry.encrypt_to_base64(model.send(@attr_name)))
11
- end
7
+ ## Performs encryption on before_validation Active Record callback
8
+ #def before_validation(model)
9
+ # return if model.send(@attr_name).blank?
10
+ # model.send("crypted_#{@attr_name}=", SymmetricSentry.encrypt_to_base64(model.send(@attr_name)))
11
+ #end
12
12
 
13
- def after_save(model)
14
- model.send("#{@attr_name}=", nil)
15
- end
13
+ #def after_save(model)
14
+ # #model.send("#{@attr_name}=", nil)
15
+ #end
16
16
  end
17
17
  end
@@ -4,30 +4,41 @@ require 'rubygems'
4
4
  require 'test/unit'
5
5
  require 'active_record'
6
6
  require 'active_record/fixtures'
7
- require 'active_support/binding_of_caller'
8
- require 'active_support/breakpoint'
7
+ require 'active_support/test_case'
8
+ #require 'active_support/binding_of_caller'
9
+ #require 'active_support/breakpoint'
9
10
  require "#{File.dirname(__FILE__)}/../lib/sentry"
10
11
 
11
12
  config_location = File.dirname(__FILE__) + '/database.yml'
12
13
 
13
14
  config = YAML::load(IO.read(config_location))
14
15
  ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
15
- ActiveRecord::Base.establish_connection(config[ENV['DB'] || 'sqlite'])
16
+ ActiveRecord::Base.establish_connection(config[ENV['DB'] || 'mysql'])
17
+ ActiveRecord::Base.configurations["test"] = "lolcatz"
16
18
 
17
19
  load(File.dirname(__FILE__) + "/schema.rb")
18
20
 
19
- Test::Unit::TestCase.fixture_path = File.dirname(__FILE__) + "/fixtures/"
20
- Test::Unit::TestCase.use_instantiated_fixtures = false
21
- Test::Unit::TestCase.use_transactional_fixtures = (ENV['AR_TX_FIXTURES'] == "yes")
22
- $LOAD_PATH.unshift(Test::Unit::TestCase.fixture_path)
23
-
24
- class Test::Unit::TestCase #:nodoc:
25
- def create_fixtures(*table_names)
26
- if block_given?
27
- Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names) { yield }
28
- else
29
- Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names)
30
- end
31
- end
21
+ class ActiveSupport::TestCase #:nodoc:
22
+ include ActiveRecord::TestFixtures
23
+ #def create_fixtures(*table_names)
24
+ # if block_given?
25
+ # Fixtures.create_fixtures(ActiveSupport::TestCase.fixture_path, table_names) { yield }
26
+ # else
27
+ # Fixtures.create_fixtures(ActiveSupport::TestCase.fixture_path, table_names)
28
+ # end
29
+ #end
30
+
31
+ self.use_instantiated_fixtures = false
32
+ self.use_transactional_fixtures = true
33
+ end
34
+
35
+ def create_fixtures(*table_names, &block)
36
+ Fixtures.create_fixtures(ActiveSupport::TestCase.fixture_path, table_names, {}, &block)
32
37
  end
33
38
 
39
+
40
+
41
+ ActiveSupport::TestCase.fixture_path = File.dirname(__FILE__) + "/fixtures/"
42
+ ActiveSupport::TestCase.use_instantiated_fixtures = true
43
+ ActiveSupport::TestCase.use_transactional_fixtures = (ENV['AR_TX_FIXTURES'] == "yes")
44
+ $LOAD_PATH.unshift(ActiveSupport::TestCase.fixture_path)
@@ -1,22 +1,70 @@
1
1
  require 'abstract_unit'
2
2
  require 'fixtures/user'
3
3
 
4
- class AsymmetricSentryCallbackTest < Test::Unit::TestCase
4
+ class AsymmetricSentryCallbackTest < ActiveSupport::TestCase
5
5
  fixtures :users
6
6
 
7
7
  def setup
8
+ super
8
9
  @str = 'sentry'
9
10
  @key = 'secret'
10
11
  @public_key_file = File.dirname(__FILE__) + '/keys/public'
11
12
  @private_key_file = File.dirname(__FILE__) + '/keys/private'
12
13
  @encrypted_public_key_file = File.dirname(__FILE__) + '/keys/encrypted_public'
13
14
  @encrypted_private_key_file = File.dirname(__FILE__) + '/keys/encrypted_private'
14
-
15
+
15
16
  @orig = 'sentry'
16
17
  Sentry::AsymmetricSentry.default_public_key_file = @public_key_file
17
18
  Sentry::AsymmetricSentry.default_private_key_file = @private_key_file
19
+ Sentry::SymmetricSentry.default_key = @key
20
+ end
21
+
22
+ def teardown
23
+ super
24
+ Sentry.default_key = nil
25
+ end
26
+
27
+ def test_encryption_should_use_default_key_when_present
28
+ use_encrypted_keys
29
+
30
+ assert_nil users(:user_2).creditcard
31
+ Sentry.default_key = @key
32
+
33
+ assert_equal @orig, users(:user_2).creditcard
34
+ end
35
+
36
+ def test_encrypt_for_sentry
37
+ assert_not_nil User.encrypt_for_sentry("hello")
38
+ end
39
+
40
+ def test_encryption_with_random_padding
41
+ # system works with unsaved record
42
+ u = User.new :login => 'jones'
43
+ u.creditcard = @orig
44
+ assert_equal @orig, u.creditcard
45
+ u.save!
46
+
47
+ # reload after save and check the decrypt works
48
+ u = User.find(u.id)
49
+ assert_equal @orig, u.creditcard
50
+ original_crypttext = u.crypted_creditcard
51
+
52
+ # set to same plaintext
53
+ u.creditcard = @orig
54
+ u.save!
55
+
56
+ # expect different crypttext (due to random padding)
57
+ assert_not_equal original_crypttext, u.crypted_creditcard
58
+ end
59
+
60
+ def test_should_handle_nils
61
+ u = User.create :login => 'john'
62
+ u.creditcard = nil
63
+ assert u.save
64
+ assert u.crypted_creditcard.nil?
65
+ assert u.creditcard.nil?
18
66
  end
19
-
67
+
20
68
  def test_should_encrypt_creditcard
21
69
  u = User.create :login => 'jones'
22
70
  u.creditcard = @orig
@@ -24,6 +72,15 @@ class AsymmetricSentryCallbackTest < Test::Unit::TestCase
24
72
  assert !u.crypted_creditcard.empty?
25
73
  end
26
74
 
75
+ def test_should_deal_with_before_typecast
76
+ u = User.create :login => 'jones'
77
+ u.creditcard = "123123"
78
+ assert_equal "123123", u.creditcard_before_type_cast
79
+ assert u.save
80
+ u.reload
81
+ assert_equal "123123", u.creditcard_before_type_cast
82
+ end
83
+
27
84
  def test_should_decrypt_creditcard
28
85
  assert_equal @orig, users(:user_1).creditcard
29
86
  end
@@ -40,7 +97,11 @@ class AsymmetricSentryCallbackTest < Test::Unit::TestCase
40
97
  assert_nil users(:user_2).creditcard
41
98
  assert_nil users(:user_2).creditcard('other secret')
42
99
  end
43
-
100
+
101
+ def test_do_encryption
102
+ use_encrypted_keys
103
+ end
104
+
44
105
  def test_should_encrypt_encrypted_creditcard
45
106
  use_encrypted_keys
46
107
  u = User.create :login => 'jones'
@@ -53,7 +114,7 @@ class AsymmetricSentryCallbackTest < Test::Unit::TestCase
53
114
  use_encrypted_keys
54
115
  assert_equal @orig, users(:user_2).creditcard(@key)
55
116
  end
56
-
117
+
57
118
  def use_encrypted_keys
58
119
  Sentry::AsymmetricSentry.default_public_key_file = @encrypted_public_key_file
59
120
  Sentry::AsymmetricSentry.default_private_key_file = @encrypted_private_key_file
@@ -2,6 +2,8 @@ require 'abstract_unit'
2
2
 
3
3
  class AsymmetricSentryTest < Test::Unit::TestCase
4
4
  def setup
5
+ Sentry::AsymmetricSentry.default_public_key_file = nil
6
+ Sentry::AsymmetricSentry.default_private_key_file = nil
5
7
  @str = 'sentry'
6
8
  @key = 'secret'
7
9
  @public_key_file = File.dirname(__FILE__) + '/keys/public'
@@ -9,19 +11,17 @@ class AsymmetricSentryTest < Test::Unit::TestCase
9
11
  @encrypted_public_key_file = File.dirname(__FILE__) + '/keys/encrypted_public'
10
12
  @encrypted_private_key_file = File.dirname(__FILE__) + '/keys/encrypted_private'
11
13
  @sentry = Sentry::AsymmetricSentry.new
12
-
14
+
13
15
  @orig = 'sentry'
14
16
  @data = "vYfMxtVB8ezXmQKSNqTC9sPgi8TbsYRxWd7DVbpprzyuEdZ7gftJ/0IXsbXm\nXCU08bTAl0uEFm7dau+eJMXEJg==\n"
15
17
  @encrypted_data = "q2obYAITmK93ylzVS01mJx1jSlnmylMX15nFpb4uKesVgnqvtzBRHZ/SK+Nm\nEzceIoAcJc3DHosVa4VUE/aK/A==\n"
16
- Sentry::AsymmetricSentry.default_public_key_file = nil
17
- Sentry::AsymmetricSentry.default_private_key_file = nil
18
18
  end
19
-
19
+
20
20
  def test_should_decrypt_files
21
21
  set_key_files @public_key_file, @private_key_file
22
22
  assert_equal @orig, @sentry.decrypt_from_base64(@data)
23
23
  end
24
-
24
+
25
25
  def test_should_decrypt_files_with_encrypted_key
26
26
  set_key_files @encrypted_public_key_file, @encrypted_private_key_file
27
27
  assert_equal @orig, @sentry.decrypt_from_base64(@encrypted_data, @key)
@@ -32,7 +32,7 @@ class AsymmetricSentryTest < Test::Unit::TestCase
32
32
  assert !@sentry.private?
33
33
  set_key_files @public_key_file, @private_key_file
34
34
  end
35
-
35
+
36
36
  def test_should_read_encrypted_key_files
37
37
  assert !@sentry.public?
38
38
  assert !@sentry.private?
@@ -43,17 +43,25 @@ class AsymmetricSentryTest < Test::Unit::TestCase
43
43
  set_default_key_files @public_key_file, @private_key_file
44
44
  assert_equal @orig, @sentry.decrypt_from_base64(@data)
45
45
  end
46
-
46
+
47
47
  def test_should_decrypt_files_with_default_encrypted_key
48
48
  set_default_key_files @encrypted_public_key_file, @encrypted_private_key_file
49
49
  assert_equal @orig, @sentry.decrypt_from_base64(@encrypted_data, @key)
50
50
  end
51
51
 
52
+ def test_should_decrypt_block_by_block_for_large_data
53
+ set_default_key_files @encrypted_public_key_file, @encrypted_private_key_file
54
+ large_data = "asdf" * 2048
55
+ encrypted = @sentry.encrypt_large_to_base64(large_data)
56
+ assert_not_equal large_data, encrypted
57
+ assert_equal large_data, @sentry.decrypt_large_from_base64(encrypted, @key)
58
+ end
59
+
52
60
  def test_should_decrypt_files_with_default_key_using_class_method
53
61
  set_default_key_files @public_key_file, @private_key_file
54
62
  assert_equal @orig, Sentry::AsymmetricSentry.decrypt_from_base64(@data)
55
63
  end
56
-
64
+
57
65
  def test_should_decrypt_files_with_default_encrypted_key_using_class_method
58
66
  set_default_key_files @encrypted_public_key_file, @encrypted_private_key_file
59
67
  assert_equal @orig, Sentry::AsymmetricSentry.decrypt_from_base64(@encrypted_data, @key)
@@ -64,25 +72,26 @@ class AsymmetricSentryTest < Test::Unit::TestCase
64
72
  assert !@sentry.private?
65
73
  set_default_key_files @public_key_file, @private_key_file
66
74
  end
67
-
75
+
68
76
  def test_should_read_encrypted_key_files_with_default_key
69
77
  assert !@sentry.public?
70
78
  assert !@sentry.private?
71
79
  set_default_key_files @encrypted_public_key_file, @encrypted_private_key_file
72
80
  end
73
81
 
74
- private
82
+ private
83
+
75
84
  def set_key_files(public_key, private_key)
76
85
  @sentry.public_key_file = public_key
77
86
  @sentry.private_key_file = private_key
78
87
  assert @sentry.private?
79
88
  assert @sentry.public?
80
89
  end
81
-
90
+
82
91
  def set_default_key_files(public_key, private_key)
83
92
  Sentry::AsymmetricSentry.default_public_key_file = public_key
84
93
  Sentry::AsymmetricSentry.default_private_key_file = private_key
85
94
  assert @sentry.private?
86
95
  assert @sentry.public?
87
96
  end
88
- end
97
+ end
@@ -13,6 +13,6 @@ postgresql:
13
13
  mysql:
14
14
  :adapter: mysql
15
15
  :host: localhost
16
- :username: rails
17
- :password:
16
+ :username: root
17
+ :password: password
18
18
  :database: sentry_plugin_test
@@ -1,31 +1,180 @@
1
- # Logfile created on Sat Jan 07 09:03:58 CST 2006 by logger.rb/1.5.2.4
2
- SQL (0.000000) SQLite::Exceptions::SQLException: no such table: users: DROP TABLE users
3
- SQL (0.005221) CREATE TABLE users ("id" INTEGER PRIMARY KEY NOT NULL, "crypted_password" varchar(255), "crypted_creditcard" varchar(255), "login" varchar(50), "type" varchar(20)) 
4
- SQL (0.003576) CREATE TABLE schema_info (version integer)
5
- SQL (0.003704) INSERT INTO schema_info (version) VALUES(0)
6
- SQL (0.000756) PRAGMA table_info(schema_info)
7
- SQL (0.004727) UPDATE schema_info SET version = 1
8
- User Load (0.001346) SELECT * FROM users WHERE (users.id = 1) LIMIT 1
9
- SQL (0.001764) PRAGMA table_info(users)
10
- User Load (0.001193) SELECT * FROM users WHERE (users.id = 2) LIMIT 1
11
- SQL (0.001241) PRAGMA table_info(users)
12
- SQL (0.000575) INSERT INTO users ("crypted_password", "type", "crypted_creditcard", "login") VALUES(NULL, NULL, NULL, 'jones')
13
- User Update (0.001793) UPDATE users SET "login" = 'jones', "crypted_creditcard" = 'koPtQtUa82ByXY5MOyILWpi9lu7extty7kx+VSCxwx67uGehx3na7XyH5pmN
14
- KUkWiAOHvLFULQBJdEdN3zBYkQ==
15
- ', "crypted_password" = NULL, "type" = NULL WHERE id = 3
16
- SQL (0.000548) INSERT INTO users ("crypted_password", "type", "crypted_creditcard", "login") VALUES(NULL, NULL, NULL, 'jones')
17
- User Update (0.001880) UPDATE users SET "login" = 'jones', "crypted_creditcard" = 'iZFsOBetA9wFupzgdoMi7/XBfT6S2zUJupoCPRHFKcJSRKJWaEpfeFEHPYKn
18
- X5n8RbAL9c6YnYUtpjT/9//Ujg==
19
- ', "crypted_password" = NULL, "type" = NULL WHERE id = 3
20
- User Load (0.001154) SELECT * FROM users WHERE (users.id = 2) LIMIT 1
21
- User Load (0.003403) SELECT * FROM users WHERE (users.id = 2) LIMIT 1
22
- User Load (0.002220) SELECT * FROM users WHERE (users.id = 1) LIMIT 1
23
- SQL (0.001528) PRAGMA table_info(users)
24
- SQL (0.000545) INSERT INTO users ("crypted_password", "type", "crypted_creditcard", "login") VALUES('f438229716cab43569496f3a3630b3727524b81b', 'ShaUser', NULL, 'bob')
25
- SQL (0.002788) PRAGMA table_info(users)
26
- SQL (0.002787) INSERT INTO users ("crypted_password", "type", "crypted_creditcard", "login") VALUES('f438229716cab43569496f3a3630b3727524b81b', 'DangerousUser', NULL, 'bob')
27
- User Load (0.001110) SELECT * FROM users WHERE (users.id = 1) LIMIT 1
28
- SQL (0.000535) INSERT INTO users ("crypted_password", "type", "crypted_creditcard", "login") VALUES('0XlmUuNpE2k=
29
- ', 'SymmetricUser', NULL, 'bob')
30
- User Load (0.001276) SELECT * FROM users WHERE (users.id = 1) LIMIT 1
31
- User Load (0.001209) SELECT * FROM users WHERE (users.id = 1) LIMIT 1
1
+ # Logfile created on Mon Nov 02 22:25:53 -0800 2009 by logger.rb/22283
2
+ SQL (0.1ms) SET SQL_AUTO_IS_NULL=0
3
+ SQL (0.2ms) SHOW TABLES
4
+ SQL (13.0ms) CREATE TABLE `users` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `password` varchar(255), `creditcard` varchar(255), `login` varchar(50), `type` varchar(20)) ENGINE=InnoDB
5
+ SQL (0.2ms) SHOW TABLES
6
+ SQL (15.9ms) CREATE TABLE `schema_migrations` (`version` varchar(255) NOT NULL) ENGINE=InnoDB
7
+ SQL (9.7ms) CREATE UNIQUE INDEX `unique_schema_migrations` ON `schema_migrations` (`version`)
8
+ SQL (0.4ms) SHOW TABLES
9
+ SQL (0.4ms) SELECT version FROM `schema_migrations`
10
+ SQL (0.3ms) INSERT INTO `schema_migrations` (version) VALUES ('1')
11
+ User Columns (50.0ms) SHOW FIELDS FROM `users`
12
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
13
+ SQL (0.1ms) BEGIN
14
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES('CAv8EHo5dvX6XoE1V7lsAZbnpTtrFCbJPGwg5vRaVGkHzUrbUnaJYW/xaOZk\n6fGb9aB+yGQTbGfzhtdK8NavDqY=\n', NULL, NULL, 'jones')
15
+ SQL (12.5ms) COMMIT
16
+ User Load (0.2ms) SELECT * FROM `users` WHERE (`users`.`id` = 3) 
17
+ SQL (0.1ms) BEGIN
18
+ User Update (0.2ms) UPDATE `users` SET `creditcard` = 'CJgmQYPJL/JW3Y9soOooOFTS9DhkEou61CV9+7OQSbbWpbuYvO3S34KU7C46\n/47DGIJx7c0EQ/sJUUYfa+cTasE=\n' WHERE `id` = 3
19
+ SQL (3.7ms) COMMIT
20
+ SQL (0.1ms) BEGIN
21
+ User Create (0.2ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'jones')
22
+ SQL (3.2ms) COMMIT
23
+ SQL (0.1ms) BEGIN
24
+ User Update (0.3ms) UPDATE `users` SET `creditcard` = 'CGtcyD/BXpdGeLHOP0TDYOUVDOsuxRMM3lxxwZdUkA/cIQHepNHXF9404fuO\ntDzgobBIVY/fJtC9Oxb7GgoG/+0=\n' WHERE `id` = 4
25
+ SQL (4.2ms) COMMIT
26
+ User Load (0.2ms) SELECT * FROM `users` WHERE (`users`.`id` = 4) 
27
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 1) 
28
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
29
+ SQL (0.1ms) BEGIN
30
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'jones')
31
+ SQL (0.3ms) COMMIT
32
+ SQL (0.1ms) BEGIN
33
+ User Update (0.1ms) UPDATE `users` SET `creditcard` = 'CDvJtbBuujAsuqJdmwQLnW5LAj+pNXiOdm79iD3DZE7ckQP2F4oLR6UuGLZK\n8752nplZqMMx5ngNsSe7yTWmuxE=\n' WHERE `id` = 5
34
+ SQL (0.4ms) COMMIT
35
+ SQL (0.1ms) BEGIN
36
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'jones')
37
+ SQL (0.3ms) COMMIT
38
+ SQL (0.1ms) BEGIN
39
+ User Update (0.5ms) UPDATE `users` SET `creditcard` = 'CHEkm4TYxx3bl+lQ0ipw+qbeHOslQbyf3qvEGg90IRdLcJvBDpPt8g0CfnhI\nAWMviXbrYquAM7BLdytb5jr5n2Q=\n' WHERE `id` = 6
40
+ SQL (4.0ms) COMMIT
41
+ SQL (0.1ms) BEGIN
42
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'john')
43
+ SQL (0.3ms) COMMIT
44
+ SQL (0.1ms) BEGIN
45
+ SQL (0.1ms) COMMIT
46
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
47
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
48
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 1) 
49
+ SQL (0.1ms) SET SQL_AUTO_IS_NULL=0
50
+ SQL (0.2ms) SHOW TABLES
51
+ SQL (1.0ms) DROP TABLE `users`
52
+ SQL (13.8ms) CREATE TABLE `users` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `password` varchar(255), `creditcard` varchar(255), `login` varchar(50), `type` varchar(20)) ENGINE=InnoDB
53
+ SQL (0.2ms) SHOW TABLES
54
+ SQL (0.1ms) SELECT version FROM `schema_migrations`
55
+ User Columns (1.1ms) SHOW FIELDS FROM `users`
56
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
57
+ SQL (0.1ms) BEGIN
58
+ User Create (0.2ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES('CFwibEgT2ZiukiGmrrzWfobM1JY7tvpIx1C9C1pMiJLVOFeeZjCCl2yOWK1x\nkDrhD9dIGMP9KUCzt+tD3eLkd0s=\n', NULL, NULL, 'jones')
59
+ SQL (2.0ms) COMMIT
60
+ User Load (0.2ms) SELECT * FROM `users` WHERE (`users`.`id` = 3) 
61
+ SQL (0.1ms) BEGIN
62
+ User Update (0.2ms) UPDATE `users` SET `creditcard` = 'CE1gz6XCWrmFybA6+rfMKBsoZBI0wYCkyzF0gTY4Ezvui4eD+BlJpzHRc4r8\nFoso0a+kCji4YlIYjlHzgq91diM=\n' WHERE `id` = 3
63
+ SQL (0.3ms) COMMIT
64
+ SQL (0.1ms) BEGIN
65
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'jones')
66
+ SQL (0.3ms) COMMIT
67
+ SQL (0.1ms) BEGIN
68
+ User Update (0.1ms) UPDATE `users` SET `creditcard` = 'CHdTf8FCscyUXvzsVeT6PsRitL2S9C1J04HXkHJPX8rg85SDP2D0st+6oO4E\n1DiWbR6S01TSEHsbGMld29lA/60=\n' WHERE `id` = 4
69
+ SQL (26.0ms) COMMIT
70
+ User Load (0.2ms) SELECT * FROM `users` WHERE (`users`.`id` = 4) 
71
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 1) 
72
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
73
+ SQL (0.1ms) BEGIN
74
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'jones')
75
+ SQL (0.4ms) COMMIT
76
+ SQL (0.1ms) BEGIN
77
+ User Update (0.2ms) UPDATE `users` SET `creditcard` = 'CIC0NJ/fXURRYVa0VAoeYsMTXRV9eB6gFI84jWIdk6RFyQPoLF779EZ1FICI\ny4+7abuWMpdYI/wN6ySL7rMcb9w=\n' WHERE `id` = 5
78
+ SQL (3.8ms) COMMIT
79
+ SQL (0.1ms) BEGIN
80
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'jones')
81
+ SQL (3.5ms) COMMIT
82
+ SQL (0.1ms) BEGIN
83
+ User Update (0.2ms) UPDATE `users` SET `creditcard` = 'CDlCzHCRQpVrhSHmqJJ9/l2s3/GM4lsWWNLN9sMKZlZs5u+3Ljndl4JL5GIA\n95pr3jCHIJULyG+OmFEB/TtHnPE=\n' WHERE `id` = 6
84
+ SQL (0.5ms) COMMIT
85
+ SQL (0.0ms) BEGIN
86
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'john')
87
+ SQL (1.1ms) COMMIT
88
+ SQL (0.0ms) BEGIN
89
+ SQL (0.0ms) COMMIT
90
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
91
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
92
+ User Load (0.2ms) SELECT * FROM `users` WHERE (`users`.`id` = 1) 
93
+ SQL (0.1ms) SET SQL_AUTO_IS_NULL=0
94
+ SQL (0.2ms) SHOW TABLES
95
+ SQL (1.1ms) DROP TABLE `users`
96
+ SQL (1.2ms) CREATE TABLE `users` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `password` varchar(255), `creditcard` varchar(255), `login` varchar(50), `type` varchar(20)) ENGINE=InnoDB
97
+ SQL (0.2ms) SHOW TABLES
98
+ SQL (0.2ms) SELECT version FROM `schema_migrations`
99
+ User Columns (1.0ms) SHOW FIELDS FROM `users`
100
+ User Load (0.2ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
101
+ SQL (0.1ms) BEGIN
102
+ User Create (0.2ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES('CBH52Y1v8ftBqQbAmiw+ZN7QT/3/qzAG6jMvk47buwvy3fP07e+U1kVKp7pe\n/1mOY7L6V5zp7518tliO+QdH5F8=\n', NULL, NULL, 'jones')
103
+ SQL (20.3ms) COMMIT
104
+ User Load (0.3ms) SELECT * FROM `users` WHERE (`users`.`id` = 3) 
105
+ SQL (0.1ms) BEGIN
106
+ User Update (0.2ms) UPDATE `users` SET `creditcard` = 'CHmkOdRkoQ8GuXzGusK+KtOT8WXgmwIje6lpKJCa+lu7s13QqUDIHGF0DUaU\njT5T5+qJarHI1UMeExWSHnCidHU=\n' WHERE `id` = 3
107
+ SQL (4.2ms) COMMIT
108
+ SQL (0.1ms) BEGIN
109
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'jones')
110
+ SQL (3.6ms) COMMIT
111
+ SQL (0.1ms) BEGIN
112
+ User Update (0.2ms) UPDATE `users` SET `creditcard` = 'CBlTqEXFGU9LsAHf/tqd4QoHXD/JAJMflrdPJ7SQFnChy/2n4TlgCutLDiKg\n+bmBwuRJJLnWwUuAz2V1StdlahM=\n' WHERE `id` = 4
113
+ SQL (0.4ms) COMMIT
114
+ User Load (0.2ms) SELECT * FROM `users` WHERE (`users`.`id` = 4) 
115
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 1) 
116
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
117
+ SQL (0.0ms) BEGIN
118
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'jones')
119
+ SQL (0.3ms) COMMIT
120
+ SQL (0.1ms) BEGIN
121
+ User Update (0.1ms) UPDATE `users` SET `creditcard` = 'CJrq1AN1IcB/ySMbQXZup1RpnVlTu9t5RzITZ8tUsqdLQUuUAxXaXmvSMQ/W\nkg6p50EZrDRqgNy3Wwhs6VVDhfw=\n' WHERE `id` = 5
122
+ SQL (0.3ms) COMMIT
123
+ SQL (0.1ms) BEGIN
124
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'jones')
125
+ SQL (0.3ms) COMMIT
126
+ SQL (0.1ms) BEGIN
127
+ User Update (0.1ms) UPDATE `users` SET `creditcard` = 'CKSt80/PI5nTJqxZXt9B70uIHTQDzE3Fu8rugIRXOdty0gRhMD6uddRCPnir\n5w0HjFN7H/jCIeHfjupxFTlaESw=\n' WHERE `id` = 6
128
+ SQL (21.8ms) COMMIT
129
+ SQL (0.1ms) BEGIN
130
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'john')
131
+ SQL (3.1ms) COMMIT
132
+ SQL (0.1ms) BEGIN
133
+ SQL (0.1ms) COMMIT
134
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
135
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
136
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 1) 
137
+ SQL (0.1ms) SET SQL_AUTO_IS_NULL=0
138
+ SQL (0.2ms) SHOW TABLES
139
+ SQL (1.1ms) DROP TABLE `users`
140
+ SQL (1.2ms) CREATE TABLE `users` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `password` varchar(255), `creditcard` varchar(255), `login` varchar(50), `type` varchar(20)) ENGINE=InnoDB
141
+ SQL (0.2ms) SHOW TABLES
142
+ SQL (0.1ms) SELECT version FROM `schema_migrations`
143
+ User Columns (1.0ms) SHOW FIELDS FROM `users`
144
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
145
+ SQL (0.1ms) BEGIN
146
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES('CHBD75M18kRhqolpWIH74E4RqwrUSb70NC8AN+XlrnpY1+W8b1SmiF01tCvk\npwIVB4YmN5I465+0d9g056QoKPc=\n', NULL, NULL, 'jones')
147
+ SQL (3.1ms) COMMIT
148
+ User Load (3.9ms) SELECT * FROM `users` WHERE (`users`.`id` = 3) 
149
+ SQL (1.2ms) BEGIN
150
+ User Update (0.2ms) UPDATE `users` SET `creditcard` = 'CCvaVOholnuq41FcvUB2dkndppJ3hYxs6iycERN89tTC4FinoUFqoiM/3w72\njODz066XLTjxJ8rAxWYo5O9k42U=\n' WHERE `id` = 3
151
+ SQL (0.4ms) COMMIT
152
+ SQL (0.1ms) BEGIN
153
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'jones')
154
+ SQL (0.3ms) COMMIT
155
+ SQL (0.1ms) BEGIN
156
+ User Update (0.1ms) UPDATE `users` SET `creditcard` = 'CFgvuQFPEQiMPVkTiysEpSrNJt9KLIAIQdN4FPHP1nMG5WXFLYmHLu6AdJg3\nb/MKH98D3IDJfc6Ci9l8V8wtaV8=\n' WHERE `id` = 4
157
+ SQL (32.3ms) COMMIT
158
+ User Load (0.2ms) SELECT * FROM `users` WHERE (`users`.`id` = 4) 
159
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 1) 
160
+ User Load (0.2ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
161
+ SQL (0.1ms) BEGIN
162
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'jones')
163
+ SQL (0.3ms) COMMIT
164
+ SQL (0.1ms) BEGIN
165
+ User Update (0.2ms) UPDATE `users` SET `creditcard` = 'CAtFGYw+FomeApMi+INaAlpQ2BIKCFUkkfMIUhdfFkohQYhYTaa/nd1/Mqi+\nGLPc1+LJQfbyCHMXoxwa4leHjjw=\n' WHERE `id` = 5
166
+ SQL (0.7ms) COMMIT
167
+ SQL (0.1ms) BEGIN
168
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'jones')
169
+ SQL (7.3ms) COMMIT
170
+ SQL (0.1ms) BEGIN
171
+ User Update (0.3ms) UPDATE `users` SET `creditcard` = 'CK8GBBiDr2HHhbIK4yFfCzAGFkzRrwBcX3iOf1XMh+jEFSWvd78JzN18QGLc\nWoOxWNqmuDaUaIsmbGKAdV++d3A=\n' WHERE `id` = 6
172
+ SQL (0.4ms) COMMIT
173
+ SQL (0.1ms) BEGIN
174
+ User Create (0.1ms) INSERT INTO `users` (`creditcard`, `type`, `password`, `login`) VALUES(NULL, NULL, NULL, 'john')
175
+ SQL (0.3ms) COMMIT
176
+ SQL (0.1ms) BEGIN
177
+ SQL (0.1ms) COMMIT
178
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
179
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) 
180
+ User Load (0.1ms) SELECT * FROM `users` WHERE (`users`.`id` = 1) 
@@ -1,25 +1,26 @@
1
1
  class User < ActiveRecord::Base
2
- generates_crypted :creditcard, :mode => :asymmetric
2
+ #define_read_methods
3
+ asymmetrically_encrypts :creditcard
3
4
 
4
- def self.validates_password
5
- validates_presence_of :crypted_password
6
- validates_presence_of :password, :on => :create
7
- validates_length_of :password, :in => 4..40
8
- end
5
+ #def self.validates_password
6
+ # validates_presence_of :password
7
+ # validates_presence_of :password, :on => :create
8
+ # validates_length_of :password, :in => 4..40
9
+ #end
9
10
  end
10
11
 
11
- class ShaUser < User
12
- validates_password
13
- validates_confirmation_of :password
14
- generates_crypted :password # sha is used by default
15
- end
16
-
17
- class DangerousUser < User # no password confirmation
18
- # validates_password
19
- generates_crypted :password
20
- end
21
-
22
- class SymmetricUser < User
23
- validates_password
24
- generates_crypted :password, :mode => :symmetric
25
- end
12
+ #class ShaUser < User
13
+ # validates_password
14
+ # validates_confirmation_of :password
15
+ # generates_crypted :password # sha is used by default
16
+ #end
17
+ #
18
+ #class DangerousUser < User # no password confirmation
19
+ ## validates_password
20
+ # generates_crypted :password
21
+ #end
22
+ #
23
+ #class SymmetricUser < User
24
+ # validates_password
25
+ # generates_crypted :password, :mode => :symmetric
26
+ #end
@@ -1,11 +1,9 @@
1
1
  user_1:
2
2
  id: 1
3
3
  login: bob
4
- crypted_password: "0XlmUuNpE2k=\n"
5
- crypted_creditcard: "vYfMxtVB8ezXmQKSNqTC9sPgi8TbsYRxWd7DVbpprzyuEdZ7gftJ/0IXsbXm\nXCU08bTAl0uEFm7dau+eJMXEJg==\n"
6
- type: SymmetricUser
4
+ password: "0XlmUuNpE2k=\n"
5
+ creditcard: "CBUI2TcYh/ATRB7fYpDBb0t1ifOWPb5jfpO2M8Zy9D/8Gua6/uA+ILHwKtGY\nOgrooPYSxwpBzEZoH18mXqJE7yk=\n" # "sentry" with 8 characters of prepadding
7
6
  user_2:
8
7
  id: 2
9
8
  login: fred
10
- crypted_creditcard: "q2obYAITmK93ylzVS01mJx1jSlnmylMX15nFpb4uKesVgnqvtzBRHZ/SK+Nm\nEzceIoAcJc3DHosVa4VUE/aK/A==\n"
11
-
9
+ creditcard: "CEUx1Ufxi7leQVp0xHhMWKqBcvrb0p3VvX5rqJBXSwddH+Alscs73TEX8Ctn\n9WnV5Ii8txpa20UfM3h5msLpm20=\n" # "sentry" with 8 different characters of prepadding
@@ -0,0 +1,11 @@
1
+ require 'abstract_unit'
2
+
3
+ class RsaKeyTest < Test::Unit::TestCase
4
+ def setup
5
+ @public_key = OpenSSL::PKey::RSA.new(File.open(File.dirname(__FILE__) + '/keys/encrypted_public') { |f| f.read })
6
+ end
7
+
8
+ def test_can_find_max_encoded_length_for_key
9
+ assert_equal 53, @public_key.max_encryptable_length
10
+ end
11
+ end
@@ -1,8 +1,8 @@
1
1
  ActiveRecord::Schema.define(:version => 1) do
2
2
 
3
3
  create_table "users", :force => true do |t|
4
- t.column :crypted_password, :string, :limit => 255
5
- t.column :crypted_creditcard, :string, :limit => 255
4
+ t.column :password, :string, :limit => 255
5
+ t.column :creditcard, :string, :limit => 255
6
6
  t.column :login, :string, :limit => 50
7
7
  t.column :type, :string, :limit => 20
8
8
  end
@@ -2,30 +2,34 @@ require 'abstract_unit'
2
2
  require 'fixtures/user'
3
3
 
4
4
  class ShaSentryTest < Test::Unit::TestCase
5
- def setup
6
- Sentry::ShaSentry.salt = 'salt'
7
- end
8
-
9
- def test_should_encrypt
10
- assert_equal 'f438229716cab43569496f3a3630b3727524b81b', Sentry::ShaSentry.encrypt('test')
11
- end
12
-
13
- def test_should_encrypt_with_salt
14
- Sentry::ShaSentry.salt = 'different salt'
15
- assert_equal '18e3256d71529db8fa65b2eef24a69ddad7070f3', Sentry::ShaSentry.encrypt('test')
5
+ def test_foo
6
+ assert true
16
7
  end
17
8
 
18
- def test_should_encrypt_user_password
19
- u = ShaUser.new :login => 'bob'
20
- u.password = u.password_confirmation = 'test'
21
- assert u.save
22
- assert u.crypted_password = 'f438229716cab43569496f3a3630b3727524b81b'
23
- end
24
-
25
- def test_should_encrypt_user_password_without_confirmation
26
- u = DangerousUser.new :login => 'bob'
27
- u.password = 'test'
28
- assert u.save
29
- assert u.crypted_password = 'f438229716cab43569496f3a3630b3727524b81b'
30
- end
9
+ #def setup
10
+ # Sentry::ShaSentry.salt = 'salt'
11
+ #end
12
+ #
13
+ #def test_should_encrypt
14
+ # assert_equal 'f438229716cab43569496f3a3630b3727524b81b', Sentry::ShaSentry.encrypt('test')
15
+ #end
16
+ #
17
+ #def test_should_encrypt_with_salt
18
+ # Sentry::ShaSentry.salt = 'different salt'
19
+ # assert_equal '18e3256d71529db8fa65b2eef24a69ddad7070f3', Sentry::ShaSentry.encrypt('test')
20
+ #end
21
+ #
22
+ #def test_should_encrypt_user_password
23
+ # u = ShaUser.new :login => 'bob'
24
+ # u.password = u.password_confirmation = 'test'
25
+ # assert u.save
26
+ # assert u.crypted_password = 'f438229716cab43569496f3a3630b3727524b81b'
27
+ #end
28
+ #
29
+ #def test_should_encrypt_user_password_without_confirmation
30
+ # u = DangerousUser.new :login => 'bob'
31
+ # u.password = 'test'
32
+ # assert u.save
33
+ # assert u.crypted_password = 'f438229716cab43569496f3a3630b3727524b81b'
34
+ #end
31
35
  end
@@ -1,33 +1,38 @@
1
1
  require 'abstract_unit'
2
2
  require 'fixtures/user'
3
3
 
4
- class SymmetricSentryCallbackTest < Test::Unit::TestCase
5
- fixtures :users
6
-
4
+ class SymmetricSentryCallbackTest < ActiveSupport::TestCase
5
+ #fixtures :users
6
+ #
7
7
  def setup
8
+ super
8
9
  @str = 'sentry'
9
10
  Sentry::SymmetricSentry.default_key = @key = 'secret'
10
11
  @encrypted = "0XlmUuNpE2k=\n"
11
12
  end
12
-
13
- def test_should_encrypt_user_password
14
- u = SymmetricUser.new :login => 'bob'
15
- u.password = @str
16
- assert u.save
17
- assert_equal @encrypted, u.crypted_password
18
- end
19
-
20
- def test_should_decrypted_user_password
21
- assert_equal @str, users(:user_1).password
22
- end
23
-
24
- def test_should_return_nil_on_invalid_key
25
- Sentry::SymmetricSentry.default_key = 'other secret'
26
- assert_nil users(:user_1).password
27
- end
28
-
29
- def test_should_raise_error_on_invalid_key
30
- Sentry::SymmetricSentry.default_key = 'other secret'
31
- assert_raises(OpenSSL::CipherError) { users(:user_1).password! }
13
+
14
+ def test_foo
15
+ assert true
32
16
  end
17
+ #
18
+ #def test_should_encrypt_user_password
19
+ # u = SymmetricUser.new :login => 'bob'
20
+ # u.password = @str
21
+ # assert u.save
22
+ # assert_equal @encrypted, u.crypted_password
23
+ #end
24
+ #
25
+ #def test_should_decrypted_user_password
26
+ # assert_equal @str, users(:user_1).password
27
+ #end
28
+ #
29
+ #def test_should_return_nil_on_invalid_key
30
+ # Sentry::SymmetricSentry.default_key = 'other secret'
31
+ # assert_nil users(:user_1).password
32
+ #end
33
+ #
34
+ #def test_should_raise_error_on_invalid_key
35
+ # Sentry::SymmetricSentry.default_key = 'other secret'
36
+ # assert_raises(OpenSSL::CipherError) { users(:user_1).password! }
37
+ #end
33
38
  end
metadata CHANGED
@@ -1,68 +1,82 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.10
3
- specification_version: 1
4
2
  name: sentry
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.3.1
7
- date: 2006-01-07
8
- summary: Sentry provides painless encryption services with a wrapper around some OpenSSL classes
9
- require_paths:
10
- - lib
11
- email: technoweenie@gmail.com
12
- homepage: http://techno-weenie.net
13
- rubyforge_project:
14
- description:
4
+ version: 0.5.3
5
+ platform: ruby
6
+ authors:
7
+ - Rick Olson
15
8
  autorequire: sentry
16
- default_executable:
17
9
  bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-02 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: technoweenie@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/active_record/sentry.rb
26
+ - lib/sentry/asymmetric_sentry.rb
27
+ - lib/sentry/asymmetric_sentry_callback.rb
28
+ - lib/sentry/sha_sentry.rb
29
+ - lib/sentry/symmetric_sentry.rb
30
+ - lib/sentry/symmetric_sentry_callback.rb
31
+ - lib/sentry.rb
32
+ - test/abstract_unit.rb
33
+ - test/asymmetric_sentry_callback_test.rb
34
+ - test/asymmetric_sentry_test.rb
35
+ - test/database.yml
36
+ - test/debug.log
37
+ - test/fixtures/user.rb
38
+ - test/fixtures/users.yml
39
+ - test/keys/encrypted_private
40
+ - test/keys/encrypted_public
41
+ - test/keys/private
42
+ - test/keys/public
43
+ - test/rsa_key_test.rb
44
+ - test/schema.rb
45
+ - test/sha_sentry_test.rb
46
+ - test/symmetric_sentry_callback_test.rb
47
+ - test/symmetric_sentry_test.rb
48
+ - test/tests.rb
49
+ - README
50
+ - MIT-LICENSE
51
+ - CHANGELOG
52
+ - RUNNING_UNIT_TESTS
18
53
  has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
54
+ homepage: http://techno-weenie.net
55
+ licenses: []
56
+
57
+ post_install_message:
58
+ rdoc_options: []
59
+
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
20
63
  requirements:
21
- -
22
- - ">"
23
- - !ruby/object:Gem::Version
24
- version: 0.0.0
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: "0"
67
+ version:
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
25
73
  version:
26
- platform: ruby
27
- authors:
28
- - Rick Olson
29
- files:
30
- - lib/active_record
31
- - lib/sentry
32
- - lib/sentry.rb
33
- - lib/active_record/sentry.rb
34
- - lib/sentry/asymmetric_sentry.rb
35
- - lib/sentry/asymmetric_sentry_callback.rb
36
- - lib/sentry/sha_sentry.rb
37
- - lib/sentry/symmetric_sentry.rb
38
- - lib/sentry/symmetric_sentry_callback.rb
39
- - test/abstract_unit.rb
40
- - test/asymmetric_sentry_callback_test.rb
41
- - test/asymmetric_sentry_test.rb
42
- - test/database.yml
43
- - test/debug.log
44
- - test/fixtures
45
- - test/keys
46
- - test/schema.rb
47
- - test/sha_sentry_test.rb
48
- - test/symmetric_sentry_callback_test.rb
49
- - test/symmetric_sentry_test.rb
50
- - test/tests.rb
51
- - test/fixtures/user.rb
52
- - test/fixtures/users.yml
53
- - test/keys/encrypted_private
54
- - test/keys/encrypted_public
55
- - test/keys/private
56
- - test/keys/public
57
- - README
58
- - MIT-LICENSE
59
- - CHANGELOG
60
- - RUNNING_UNIT_TESTS
61
- test_files:
62
- - test/tests.rb
63
- rdoc_options: []
64
- extra_rdoc_files: []
65
- executables: []
66
- extensions: []
67
74
  requirements: []
68
- dependencies: []
75
+
76
+ rubyforge_project:
77
+ rubygems_version: 1.3.5
78
+ signing_key:
79
+ specification_version: 3
80
+ summary: Sentry provides painless encryption services with a wrapper around some OpenSSL classes
81
+ test_files:
82
+ - test/tests.rb