pivotal-sentry 0.4.0

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.
@@ -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