pivotal-sentry 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,88 @@
1
+ require 'abstract_unit'
2
+
3
+ class AsymmetricSentryTest < Test::Unit::TestCase
4
+ def setup
5
+ @str = 'sentry'
6
+ @key = 'secret'
7
+ @public_key_file = File.dirname(__FILE__) + '/keys/public'
8
+ @private_key_file = File.dirname(__FILE__) + '/keys/private'
9
+ @encrypted_public_key_file = File.dirname(__FILE__) + '/keys/encrypted_public'
10
+ @encrypted_private_key_file = File.dirname(__FILE__) + '/keys/encrypted_private'
11
+ @sentry = Sentry::AsymmetricSentry.new
12
+
13
+ @orig = 'sentry'
14
+ @data = "vYfMxtVB8ezXmQKSNqTC9sPgi8TbsYRxWd7DVbpprzyuEdZ7gftJ/0IXsbXm\nXCU08bTAl0uEFm7dau+eJMXEJg==\n"
15
+ @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
+ end
19
+
20
+ def test_should_decrypt_files
21
+ set_key_files @public_key_file, @private_key_file
22
+ assert_equal @orig, @sentry.decrypt_from_base64(@data)
23
+ end
24
+
25
+ def test_should_decrypt_files_with_encrypted_key
26
+ set_key_files @encrypted_public_key_file, @encrypted_private_key_file
27
+ assert_equal @orig, @sentry.decrypt_from_base64(@encrypted_data, @key)
28
+ end
29
+
30
+ def test_should_read_key_files
31
+ assert !@sentry.public?
32
+ assert !@sentry.private?
33
+ set_key_files @public_key_file, @private_key_file
34
+ end
35
+
36
+ def test_should_read_encrypted_key_files
37
+ assert !@sentry.public?
38
+ assert !@sentry.private?
39
+ set_key_files @encrypted_public_key_file, @encrypted_private_key_file
40
+ end
41
+
42
+ def test_should_decrypt_files_with_default_key
43
+ set_default_key_files @public_key_file, @private_key_file
44
+ assert_equal @orig, @sentry.decrypt_from_base64(@data)
45
+ end
46
+
47
+ def test_should_decrypt_files_with_default_encrypted_key
48
+ set_default_key_files @encrypted_public_key_file, @encrypted_private_key_file
49
+ assert_equal @orig, @sentry.decrypt_from_base64(@encrypted_data, @key)
50
+ end
51
+
52
+ def test_should_decrypt_files_with_default_key_using_class_method
53
+ set_default_key_files @public_key_file, @private_key_file
54
+ assert_equal @orig, Sentry::AsymmetricSentry.decrypt_from_base64(@data)
55
+ end
56
+
57
+ def test_should_decrypt_files_with_default_encrypted_key_using_class_method
58
+ set_default_key_files @encrypted_public_key_file, @encrypted_private_key_file
59
+ assert_equal @orig, Sentry::AsymmetricSentry.decrypt_from_base64(@encrypted_data, @key)
60
+ end
61
+
62
+ def test_should_read_key_files_with_default_key
63
+ assert !@sentry.public?
64
+ assert !@sentry.private?
65
+ set_default_key_files @public_key_file, @private_key_file
66
+ end
67
+
68
+ def test_should_read_encrypted_key_files_with_default_key
69
+ assert !@sentry.public?
70
+ assert !@sentry.private?
71
+ set_default_key_files @encrypted_public_key_file, @encrypted_private_key_file
72
+ end
73
+
74
+ private
75
+ def set_key_files(public_key, private_key)
76
+ @sentry.public_key_file = public_key
77
+ @sentry.private_key_file = private_key
78
+ assert @sentry.private?
79
+ assert @sentry.public?
80
+ end
81
+
82
+ def set_default_key_files(public_key, private_key)
83
+ Sentry::AsymmetricSentry.default_public_key_file = public_key
84
+ Sentry::AsymmetricSentry.default_private_key_file = private_key
85
+ assert @sentry.private?
86
+ assert @sentry.public?
87
+ end
88
+ end
data/test/database.yml ADDED
@@ -0,0 +1,18 @@
1
+ sqlite:
2
+ :adapter: sqlite
3
+ :dbfile: sentry_plugin.sqlite.db
4
+ sqlite3:
5
+ :adapter: sqlite3
6
+ :dbfile: sentry_plugin.sqlite3.db
7
+ postgresql:
8
+ :adapter: postgresql
9
+ :username: postgres
10
+ :password: postgres
11
+ :database: sentry_plugin_test
12
+ :min_messages: ERROR
13
+ mysql:
14
+ :adapter: mysql
15
+ :host: localhost
16
+ :username: root
17
+ :password: password
18
+ :database: sentry_plugin_test
@@ -0,0 +1,26 @@
1
+ class User < ActiveRecord::Base
2
+ #define_read_methods
3
+ generates_crypted :creditcard, :mode => :asymmetric
4
+
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
10
+ end
11
+
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
@@ -0,0 +1,10 @@
1
+ user_1:
2
+ id: 1
3
+ login: bob
4
+ password: "0XlmUuNpE2k=\n"
5
+ creditcard: "vYfMxtVB8ezXmQKSNqTC9sPgi8TbsYRxWd7DVbpprzyuEdZ7gftJ/0IXsbXm\nXCU08bTAl0uEFm7dau+eJMXEJg==\n"
6
+ user_2:
7
+ id: 2
8
+ login: fred
9
+ creditcard: "q2obYAITmK93ylzVS01mJx1jSlnmylMX15nFpb4uKesVgnqvtzBRHZ/SK+Nm\nEzceIoAcJc3DHosVa4VUE/aK/A==\n"
10
+
@@ -0,0 +1,12 @@
1
+ OBNa1q8kbx8pyZZjIpr/pZV0oulE2czh5JlPW/13XsBvoz+A2zxA9gchhi6c
2
+ 3yvfqgcZdojcsep+IiTqeg3gOPB2xNbedpP1lm+9tEfgdb9r1CLzRcURh7Hg
3
+ ufWgyEkS0lloz/YLy4hg9YDKetFNF9fnrk3xVwZPwFVuk4l/Unw1FTXLHsrq
4
+ KG27cR8mvNOow4bk4LVhk/avFSM85m3ITySEnyJsQQDzsI/RrWcQ7Js+8Ynv
5
+ esN51E/T0CYtkMEne2zSaD5qUTJlQ7Qtn4UUeZkpYjn4xQZPxw4OjL6zofg7
6
+ lsqElSv1/qP3QI8aKcQQklVsHRc5AgsxOFX4J6g6lo4kOGOwn0Ex8IRDfOej
7
+ pq4SUDh9IXz+6FBieQrObB/xEsKysVwRSzXre6ObHlPFsigg5ekFPyCv5ZTz
8
+ 0iP8+xe/FJRrYdR3r3F5pRkOy0pw9EqlrLjmOx3/fgxhLq8FWmcSBbH3h3SG
9
+ GkJlfHNjF77FTJjnHKzRS+5VpdW4IHbsjL+NlI1z9Ol//czYvSGv85NdJvkq
10
+ PmH3o0+uYdwY5PeSMOPV21nJ3dwiKlm5IMFasL3C5yVJNVTVZTS7vWdcgZ4U
11
+ XfWQ9Y266ibbqXPluv4nxt1+kgjxmPbjPdYrlB5t7a2+unzT3oE3f4VGOG+k
12
+ YqFg0ErHN+fu
@@ -0,0 +1,4 @@
1
+ -----BEGIN RSA PUBLIC KEY-----
2
+ MEgCQQCvktJgveIcgTH98hAhMjo0g6/GVMJaYdUh+/zQn4RBWASRmwEfJqggsfKT
3
+ pSNendZQMD8kKS8J1YTBr60ToM25AgMBAAE=
4
+ -----END RSA PUBLIC KEY-----
data/test/keys/private ADDED
@@ -0,0 +1,9 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIBOwIBAAJBAL/xeY6aqFx6z1ThNOwgPgxv3tsonTlCj8VkN3Ikumg6SzBuLxlV
3
+ i9gFQZ7K9Pv9o/7+xUTYODqBpVhwgLBeu2cCAwEAAQJAHyjFMfg7Yp/xLndMzxRA
4
+ 3mX+yJckRtpeWo31TktWE3syks1r9OrfmxKiStM9kFRubeBHTihZrW92TYkROLxh
5
+ uQIhAPuftVTJZFDNxeYDKIMIMqwR8KZgtuf25cv4pTxYwPqLAiEAw0gNwDJHBkvo
6
+ da4402pZNQmBA6qCSf0svDXqoEoaShUCIGBma340Oe6LJ0pb42Vv+pnZtazIWMq9
7
+ 2IQwmn1oM2bJAiEAhgP869mVRIzzi091UCG79tn+4DU0FPLasI+P5VD1mcECIQDb
8
+ 3ndvbPcElVvdJgabxyWJJsNtBBNZYPsuc6NrQyShOw==
9
+ -----END RSA PRIVATE KEY-----
data/test/keys/public ADDED
@@ -0,0 +1,4 @@
1
+ -----BEGIN RSA PUBLIC KEY-----
2
+ MEgCQQC/8XmOmqhces9U4TTsID4Mb97bKJ05Qo/FZDdyJLpoOkswbi8ZVYvYBUGe
3
+ yvT7/aP+/sVE2Dg6gaVYcICwXrtnAgMBAAE=
4
+ -----END RSA PUBLIC KEY-----
data/test/schema.rb ADDED
@@ -0,0 +1,10 @@
1
+ ActiveRecord::Schema.define(:version => 1) do
2
+
3
+ create_table "users", :force => true do |t|
4
+ t.column :password, :string, :limit => 255
5
+ t.column :creditcard, :string, :limit => 255
6
+ t.column :login, :string, :limit => 50
7
+ t.column :type, :string, :limit => 20
8
+ end
9
+
10
+ end
@@ -0,0 +1,35 @@
1
+ require 'abstract_unit'
2
+ require 'fixtures/user'
3
+
4
+ class ShaSentryTest < Test::Unit::TestCase
5
+ def test_foo
6
+ assert true
7
+ end
8
+
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
35
+ end
@@ -0,0 +1,38 @@
1
+ require 'abstract_unit'
2
+ require 'fixtures/user'
3
+
4
+ class SymmetricSentryCallbackTest < ActiveSupport::TestCase
5
+ #fixtures :users
6
+ #
7
+ def setup
8
+ super
9
+ @str = 'sentry'
10
+ Sentry::SymmetricSentry.default_key = @key = 'secret'
11
+ @encrypted = "0XlmUuNpE2k=\n"
12
+ end
13
+
14
+ def test_foo
15
+ assert true
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
38
+ end
@@ -0,0 +1,37 @@
1
+ require 'abstract_unit'
2
+
3
+ class SymmetricSentryTest < Test::Unit::TestCase
4
+ def setup
5
+ @str = 'sentry'
6
+ @key = 'secret'
7
+ @encrypted = "0XlmUuNpE2k=\n"
8
+ @sentry = Sentry::SymmetricSentry.new
9
+ Sentry::SymmetricSentry.default_key = nil
10
+ end
11
+
12
+ def test_should_encrypt
13
+ assert_equal @encrypted, @sentry.encrypt_to_base64(@str, @key)
14
+ end
15
+
16
+ def test_should_decrypt
17
+ assert_equal @str, @sentry.decrypt_from_base64(@encrypted, @key)
18
+ end
19
+
20
+ def test_should_encrypt_with_default_key
21
+ Sentry::SymmetricSentry.default_key = @key
22
+ assert_equal @encrypted, @sentry.encrypt_to_base64(@str)
23
+ end
24
+
25
+ def test_should_decrypt_with_default_key
26
+ Sentry::SymmetricSentry.default_key = @key
27
+ assert_equal @str, @sentry.decrypt_from_base64(@encrypted)
28
+ end
29
+
30
+ def test_should_raise_error_when_encrypt_with_no_key
31
+ assert_raises(Sentry::NoKeyError) { @sentry.encrypt_to_base64(@str) }
32
+ end
33
+
34
+ def test_should_raise_error_when_decrypt_with_no_key
35
+ assert_raises(Sentry::NoKeyError) { @sentry.decrypt_from_base64(@str) }
36
+ end
37
+ end
data/test/tests.rb ADDED
@@ -0,0 +1,2 @@
1
+ $:.unshift "../lib"
2
+ Dir["**/*_test.rb"].each { |f| load f }
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pivotal-sentry
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0
5
+ platform: ruby
6
+ authors:
7
+ - John Pelly
8
+ - David Stevenson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-07-29 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: Asymmetric encryption of active record fields
18
+ email: commoncode@pivotallabs.com
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files:
24
+ - README
25
+ files:
26
+ - .gitignore
27
+ - CHANGELOG
28
+ - MIT-LICENSE
29
+ - README
30
+ - RUNNING_UNIT_TESTS
31
+ - Rakefile
32
+ - VERSION
33
+ - init.rb
34
+ - lib/active_record/sentry.rb
35
+ - lib/sentry.rb
36
+ - lib/sentry/asymmetric_sentry.rb
37
+ - lib/sentry/asymmetric_sentry_callback.rb
38
+ - lib/sentry/sha_sentry.rb
39
+ - lib/sentry/symmetric_sentry.rb
40
+ - lib/sentry/symmetric_sentry_callback.rb
41
+ - tasks/sentry.rake
42
+ - test/abstract_unit.rb
43
+ - test/asymmetric_sentry_callback_test.rb
44
+ - test/asymmetric_sentry_test.rb
45
+ - test/database.yml
46
+ - test/fixtures/user.rb
47
+ - test/fixtures/users.yml
48
+ - test/keys/encrypted_private
49
+ - test/keys/encrypted_public
50
+ - test/keys/private
51
+ - test/keys/public
52
+ - test/schema.rb
53
+ - test/sha_sentry_test.rb
54
+ - test/symmetric_sentry_callback_test.rb
55
+ - test/symmetric_sentry_test.rb
56
+ - test/tests.rb
57
+ has_rdoc: true
58
+ homepage: http://github.com/pivotal/sentry
59
+ post_install_message:
60
+ rdoc_options:
61
+ - --charset=UTF-8
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ version:
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: "0"
75
+ version:
76
+ requirements: []
77
+
78
+ rubyforge_project:
79
+ rubygems_version: 1.2.0
80
+ signing_key:
81
+ specification_version: 2
82
+ summary: Asymmetric encryption of active record fields
83
+ test_files:
84
+ - test/abstract_unit.rb
85
+ - test/asymmetric_sentry_callback_test.rb
86
+ - test/asymmetric_sentry_test.rb
87
+ - test/fixtures/user.rb
88
+ - test/schema.rb
89
+ - test/sha_sentry_test.rb
90
+ - test/symmetric_sentry_callback_test.rb
91
+ - test/symmetric_sentry_test.rb
92
+ - test/tests.rb