encrypted_strings 0.1.0 → 0.1.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.rdoc CHANGED
@@ -1,5 +1,11 @@
1
1
  == master
2
2
 
3
+ == 0.1.1 / 2008-12-01
4
+
5
+ * Fix non-compliant PKCS #5 algorithm being used for symmetric encryption. Use :pkcs5_compliant => true for better security.
6
+ * Rename SymmetricEncryptor#key to #password
7
+ * Fix deprecation messages for Cipher#encrypt/decrypt
8
+
3
9
  == 0.1.0 / 2008-07-06
4
10
 
5
11
  * Remove dependency on active_support
data/README.rdoc CHANGED
@@ -57,7 +57,7 @@ the resulting encrypted value is the same.
57
57
 
58
58
  >> password = "shhhh"
59
59
  => "shhhh"
60
- >> crypted_password = password.encrypt(:symmetric, :key => "my_key")
60
+ >> crypted_password = password.encrypt(:symmetric, :password => "secret_key")
61
61
  => "jDACXI5hMPI=\n"
62
62
  >> crypted_password.class
63
63
  => String
data/Rakefile CHANGED
@@ -5,11 +5,11 @@ require 'rake/contrib/sshpublisher'
5
5
 
6
6
  spec = Gem::Specification.new do |s|
7
7
  s.name = 'encrypted_strings'
8
- s.version = '0.1.0'
8
+ s.version = '0.1.1'
9
9
  s.platform = Gem::Platform::RUBY
10
10
  s.summary = 'Dead-simple string encryption/decryption syntax.'
11
11
 
12
- s.files = FileList['{lib,test}/**/*'].to_a + %w(CHANGELOG.rdoc init.rb LICENSE Rakefile README.rdoc)
12
+ s.files = FileList['{lib,test}/**/*'] + %w(CHANGELOG.rdoc init.rb LICENSE Rakefile README.rdoc)
13
13
  s.require_path = 'lib'
14
14
  s.has_rdoc = true
15
15
  s.test_files = Dir['test/**/*_test.rb']
@@ -38,28 +38,32 @@ module PluginAWeek #:nodoc:
38
38
  #
39
39
  # PluginAWeek::EncryptedStrings::AsymmetricEncryptor.default_private_key_file = "./private.key"
40
40
  # PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_algorithm = "DES-EDE3-CBC"
41
- # PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_key = "secret_key"
41
+ # PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_password = "secret"
42
42
  #
43
43
  # If these configuration options are not passed in to #decrypt, then the
44
44
  # default values will be used. You can override the default values like so:
45
45
  #
46
46
  # password = "INy95irZ8AlHmvc6ZAF/ARsTpbqPIB/4bEAKKOebjsayB7NYWtIzpswvzxqf\nNJ5yyuvxfMODrcg7RimEMFkFlg==\n"
47
- # password.decrypt(:asymmetric, :public_key_file => "./encrypted_public.key", :key => "secret") # => "shhhh"
47
+ # password.decrypt(:asymmetric, :public_key_file => "./encrypted_public.key", :password => "secret") # => "shhhh"
48
48
  #
49
49
  # An exception will be raised if either the private key file could not be
50
50
  # found or the key could not decrypt the private key file.
51
51
  class AsymmetricEncryptor < Encryptor
52
- # The default private key to use during encryption. Default is nil.
53
- @default_private_key_file = nil
54
- class << self; attr_accessor :default_private_key_file; end
52
+ class << self
53
+ # The default private key to use during encryption. Default is nil.
54
+ attr_accessor :default_private_key_file
55
+
56
+ # The default public key to use during encryption. Default is nil.
57
+ attr_accessor :default_public_key_file
58
+
59
+ # The default algorithm to use. Default is nil.
60
+ attr_accessor :default_algorithm
61
+ end
55
62
 
56
- # The default public key to use during encryption. Default is nil.
63
+ # Set defaults
64
+ @default_private_key_file = nil
57
65
  @default_public_key_file = nil
58
- class << self; attr_accessor :default_public_key_file; end
59
-
60
- # The default algorithm to use. Default is nil.
61
66
  @default_algorithm = nil
62
- class << self; attr_accessor :default_algorithm; end
63
67
 
64
68
  # Private key used for decrypting data
65
69
  attr_reader :private_key_file
@@ -70,30 +74,36 @@ module PluginAWeek #:nodoc:
70
74
  # The algorithm to use if the key files are encrypted themselves
71
75
  attr_accessor :algorithm
72
76
 
73
- # The key used during symmetric decryption of the key files
74
- attr_accessor :key
77
+ # The password used during symmetric decryption of the key files
78
+ attr_accessor :password
75
79
 
76
80
  # Configuration options:
77
81
  # * +private_key_file+ - Encrypted private key file
78
82
  # * +public_key_file+ - Public key file
79
- # * +key+ - The key to use in the symmetric encryptor
83
+ # * +password+ - The password to use in the symmetric encryptor
84
+ # * +key+ - DEPRECATED. The password to use in the symmetric encryptor
80
85
  # * +algorithm+ - Algorithm to use symmetrically encrypted strings
86
+ # * +pkcs5_compliant+ - Whether the generated key/iv should comply to the PKCS #5 standard. Default is false.
81
87
  def initialize(options = {})
82
- invalid_options = options.keys - [:private_key_file, :public_key_file, :key, :algorithm]
88
+ invalid_options = options.keys - [:private_key_file, :public_key_file, :password, :key, :algorithm, :pkcs5_compliant]
83
89
  raise ArgumentError, "Unknown key(s): #{invalid_options.join(", ")}" unless invalid_options.empty?
84
90
 
85
91
  options = {
86
- :private_key_file => AsymmetricEncryptor.default_private_key_file,
87
- :public_key_file => AsymmetricEncryptor.default_public_key_file,
88
- :algorithm => AsymmetricEncryptor.default_algorithm
92
+ :private_key_file => self.class.default_private_key_file,
93
+ :public_key_file => self.class.default_public_key_file,
94
+ :algorithm => self.class.default_algorithm
89
95
  }.merge(options)
90
96
 
91
97
  @public_key = @private_key = nil
92
98
 
93
- self.key = options[:key]
94
99
  self.algorithm = options[:algorithm]
95
100
  self.private_key_file = options[:private_key_file]
96
101
  self.public_key_file = options[:public_key_file]
102
+ self.password = options[:password] || options[:key]
103
+ warn(':key option is deprecated and will be removed from encrypted_attributes 0.2.0 (use :password)') if options[:key]
104
+ @pkcs5_compliant = options[:pkcs5_compliant]
105
+
106
+ raise ArgumentError, 'At least one key file must be specified (:private_key_file or :public_key_file)' unless private_key_file || public_key_file
97
107
 
98
108
  super()
99
109
  end
@@ -148,7 +158,7 @@ module PluginAWeek #:nodoc:
148
158
  @private_rsa = nil
149
159
 
150
160
  if private_key_file && File.file?(private_key_file)
151
- @private_key = File.open(private_key_file) {|f| f.read}
161
+ @private_key = File.read(private_key_file)
152
162
  end
153
163
  end
154
164
 
@@ -157,14 +167,18 @@ module PluginAWeek #:nodoc:
157
167
  @public_rsa = nil
158
168
 
159
169
  if public_key_file && File.file?(public_key_file)
160
- @public_key = File.open(public_key_file) {|f| f.read}
170
+ @public_key = File.read(public_key_file)
161
171
  end
162
172
  end
163
173
 
164
174
  # Retrieves the private RSA from the private key
165
175
  def private_rsa
166
- if key
167
- private_key = @private_key.decrypt(:symmetric, :key => key, :algorithm => algorithm)
176
+ if password
177
+ options = {:password => password}
178
+ options[:algorithm] = algorithm if algorithm
179
+ options[:pkcs5_compliant] = @pkcs5_compliant if !@pkcs5_compliant.nil?
180
+
181
+ private_key = @private_key.decrypt(:symmetric, options)
168
182
  OpenSSL::PKey::RSA.new(private_key)
169
183
  else
170
184
  @private_rsa ||= OpenSSL::PKey::RSA.new(@private_key)
@@ -60,7 +60,7 @@ module PluginAWeek #:nodoc:
60
60
  # == Example
61
61
  #
62
62
  # password = 'shhhh'
63
- # password.encrypt!(:symmetric, :key => 'my_key') # => "jDACXI5hMPI=\n"
63
+ # password.encrypt!(:symmetric, :password => 'my_key') # => "jDACXI5hMPI=\n"
64
64
  # password # => "jDACXI5hMPI=\n"
65
65
  def encrypt!(*args)
66
66
  encrypted_string = encrypt(*args)
@@ -89,7 +89,7 @@ module PluginAWeek #:nodoc:
89
89
  # == Example
90
90
  #
91
91
  # password = "jDACXI5hMPI=\n"
92
- # password.decrypt(:symmetric, :key => 'my_key') # => "shhhh"
92
+ # password.decrypt(:symmetric, :password => 'my_key') # => "shhhh"
93
93
  def decrypt(*args)
94
94
  raise ArgumentError, "An encryption algorithm must be specified since we can't figure it out" if args.empty? && !@encryptor
95
95
 
@@ -107,7 +107,7 @@ module PluginAWeek #:nodoc:
107
107
  # For example,
108
108
  #
109
109
  # password = "jDACXI5hMPI=\n"
110
- # password.decrypt!(:symmetric, :key => 'my_key') # => "shhhh"
110
+ # password.decrypt!(:symmetric, :password => 'my_key') # => "shhhh"
111
111
  # password # => "shhhh"
112
112
  def decrypt!(*args)
113
113
  value = replace(decrypt(*args))
@@ -28,9 +28,13 @@ module PluginAWeek #:nodoc:
28
28
  # input = "shhhh".encrypt(:sha, :salt => "secret") # => "3b22cbe4acde873c3efc82681096f3ae69aff828"
29
29
  # password == input # => true
30
30
  class ShaEncryptor < Encryptor
31
- # The default salt value to use during encryption
31
+ class << self
32
+ # The default salt value to use during encryption
33
+ attr_accessor :default_salt
34
+ end
35
+
36
+ # Set defaults
32
37
  @default_salt = 'salt'
33
- class << self; attr_accessor :default_salt; end
34
38
 
35
39
  # The salt value to use for encryption
36
40
  attr_accessor :salt
@@ -2,96 +2,132 @@ require 'encrypted_strings/no_key_error'
2
2
 
3
3
  module PluginAWeek #:nodoc:
4
4
  module EncryptedStrings
5
- # Symmetric encryption uses a key and a specific algorithm to encrypt the
6
- # string. As long as the key and algorithm are known, the string can be
7
- # decrypted.
5
+ # Symmetric encryption uses a password and a specific algorithm to encrypt
6
+ # the string. As long as the password and algorithm are known, the string
7
+ # can be decrypted.
8
8
  #
9
9
  # Source: http://support.microsoft.com/kb/246071
10
10
  #
11
11
  # == Encrypting
12
12
  #
13
13
  # To encrypt a string using a symmetric algorithm, the type of algorithm and
14
- # key must be specified. You can define the defaults for these values like
15
- # so:
14
+ # password *must* be specified. You can define the defaults for these
15
+ # values like so:
16
16
  #
17
17
  # PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_algorithm = 'des-ecb'
18
- # PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_key = 'secret'
18
+ # PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_password = 'secret'
19
19
  #
20
20
  # If these configuration options are not passed in to #encrypt, then the
21
21
  # default values will be used. You can override the default values like so:
22
22
  #
23
23
  # password = 'shhhh'
24
- # password.encrypt(:symmetric, :algorithm => 'des-ecb', :key => 'secret') # => "sUG6tYSn0mI=\n"
24
+ # password.encrypt(:symmetric, :algorithm => 'des-ecb', :password => 'secret') # => "sUG6tYSn0mI=\n"
25
25
  #
26
- # An exception will be raised if no key is specified.
26
+ # An exception will be raised if no password is specified.
27
27
  #
28
28
  # == Decrypting
29
29
  #
30
30
  # To decrypt a string using an symmetric algorithm, the type of algorithm
31
- # and key must also be specified. Defaults for these values can be defined
32
- # as show above.
31
+ # and password must also be specified. Defaults for these values can be
32
+ # defined as show above.
33
33
  #
34
34
  # If these configuration options are not passed in to #decrypt, then the
35
35
  # default values will be used. You can override the default values like so:
36
36
  #
37
37
  # password = "sUG6tYSn0mI=\n"
38
- # password.decrypt(:symmetric, :algorithm => 'des-ecb', :key => 'secret') # => "shhhh"
38
+ # password.decrypt(:symmetric, :algorithm => 'des-ecb', :password => 'secret') # => "shhhh"
39
39
  #
40
- # An exception will be raised if no key is specified.
40
+ # An exception will be raised if no password is specified.
41
41
  class SymmetricEncryptor < Encryptor
42
- # The default algorithm to use for encryption. Default is DES
43
- @default_algorithm = 'DES-EDE3-CBC'
44
- class << self; attr_accessor :default_algorithm; end
42
+ class << self
43
+ # The default algorithm to use for encryption. Default is DES-EDE3-CBC.
44
+ attr_accessor :default_algorithm
45
+
46
+ # The default password to use for generating the key and initialization
47
+ # vector. Default is nil.
48
+ attr_accessor :default_password
49
+
50
+ # DEPRECATED
51
+ def default_key #:nodoc:
52
+ warn("#{self}.default_key is deprecated and will be removed from encrypted_attributes 0.2.0 (use default_password)")
53
+ @default_password
54
+ end
55
+
56
+ # DEPRECATED
57
+ def default_key=(value) #:nodoc:
58
+ warn("#{self}.default_key= is deprecated and will be removed from encrypted_attributes 0.2.0 (use default_password=)")
59
+ @default_password = value
60
+ end
61
+ end
45
62
 
46
- # The default key to use. Default is nil
47
- @default_key = nil
48
- class << self; attr_accessor :default_key; end
63
+ # Set default values
64
+ @default_algorithm = 'DES-EDE3-CBC'
65
+ @default_password = nil
49
66
 
50
67
  # The algorithm to use for encryption/decryption
51
68
  attr_accessor :algorithm
52
69
 
53
- # The private key that seeds the algorithm
54
- attr_accessor :key
70
+ # The password that generates the key/initialization vector for the
71
+ # algorithm
72
+ attr_accessor :password
55
73
 
56
74
  # Configuration options:
57
- # * +key+ - Private key
58
- # * +algorithm+ - Algorithm to use
75
+ # * +algorithm+ - The algorithm to use
76
+ # * +password+ - The secret key to use for generating the key/initialization vector for the algorithm
77
+ # * +key+ - DEPRECATED. The secret key to use for generating the key/initialization vector for the algorithm
78
+ # * +pkcs5_compliant+ - Whether the generated key/iv should comply to the PKCS #5 standard. Default is false.
59
79
  def initialize(options = {})
60
- invalid_options = options.keys - [:key, :algorithm]
80
+ invalid_options = options.keys - [:algorithm, :password, :key, :pkcs5_compliant]
61
81
  raise ArgumentError, "Unknown key(s): #{invalid_options.join(", ")}" unless invalid_options.empty?
62
82
 
63
83
  options = {
64
- :key => SymmetricEncryptor.default_key,
65
- :algorithm => SymmetricEncryptor.default_algorithm
84
+ :algorithm => self.class.default_algorithm,
85
+ :password => self.class.default_password,
86
+ :pkcs5_compliant => false
66
87
  }.merge(options)
67
88
 
68
- self.key = options[:key]
69
- raise NoKeyError if key.nil?
89
+ @pkcs5_compliant = options[:pkcs5_compliant]
90
+ warn('PKCS #5 non-compliancy is deprecated and will be removed from encrypted_attributes 0.2.0') if @pkcs5_compliant == false
70
91
 
71
92
  self.algorithm = options[:algorithm]
72
93
 
94
+ self.password = options[:password] || options[:key]
95
+ warn(':key option is deprecated and will be removed from encrypted_attributes 0.2.0 (use :password)') if options[:key]
96
+ raise NoKeyError if password.nil?
97
+
73
98
  super()
74
99
  end
75
100
 
76
101
  # Decrypts the current string using the current key and algorithm specified
77
102
  def decrypt(data)
78
- cipher.decrypt(key)
79
- decrypted_data = cipher.update(Base64.decode64(data))
80
- decrypted_data << cipher.final
103
+ cipher = build_cipher(:decrypt)
104
+ cipher.update(Base64.decode64(data)) + cipher.final
81
105
  end
82
106
 
83
107
  # Encrypts the current string using the current key and algorithm specified
84
108
  def encrypt(data)
85
- cipher.encrypt(key)
86
- encrypted_data = cipher.update(data)
87
- encrypted_data << cipher.final
88
-
89
- Base64.encode64(encrypted_data)
109
+ cipher = build_cipher(:encrypt)
110
+ Base64.encode64(cipher.update(data) + cipher.final)
90
111
  end
91
112
 
92
113
  private
93
- def cipher #:nodoc:
94
- @cipher ||= OpenSSL::Cipher::Cipher.new(algorithm)
114
+ def build_cipher(type) #:nodoc:
115
+ cipher = OpenSSL::Cipher.new(algorithm)
116
+ cipher.send(type)
117
+
118
+ if @pkcs5_compliant
119
+ # Use the default PKCS5 key/iv generator algorithm
120
+ cipher.pkcs5_keyivgen(password)
121
+ else
122
+ # To remain backwards-compatible, the deprecated #encrypt/#decrypt
123
+ # calls (which take a single argument, being the password) is replaced
124
+ # with pkcs5_keyivgen. Internally, this uses "OpenSSL for Ruby rulez!"
125
+ # as the IV/salt. This is also the case for the number of iterations.
126
+ cipher.pkcs5_keyivgen(password, 'OpenSSL ', 1)
127
+ cipher.iv = 'OpenSSL for Ruby rulez!'
128
+ end
129
+
130
+ cipher
95
131
  end
96
132
  end
97
133
  end
@@ -2,6 +2,37 @@ require File.dirname(__FILE__) + '/test_helper'
2
2
 
3
3
  class AsymmetricEncryptorByDefaultTest < Test::Unit::TestCase
4
4
  def setup
5
+ @asymmetric_encryptor = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new(:public_key_file => File.dirname(__FILE__) + '/keys/public')
6
+ end
7
+
8
+ def test_should_raise_an_exception
9
+ assert_raise(ArgumentError) {PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new}
10
+ end
11
+
12
+ def test_should_not_have_a_public_key_file
13
+ @asymmetric_encryptor = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new(:private_key_file => File.dirname(__FILE__) + '/keys/private')
14
+ assert_nil @asymmetric_encryptor.public_key_file
15
+ end
16
+
17
+ def test_should_not_have_a_private_key_file
18
+ assert_nil @asymmetric_encryptor.private_key_file
19
+ end
20
+
21
+ def test_should_not_have_an_algorithm
22
+ assert_nil @asymmetric_encryptor.algorithm
23
+ end
24
+
25
+ def test_should_not_have_a_password
26
+ assert_nil @asymmetric_encryptor.password
27
+ end
28
+ end
29
+
30
+ class AsymmetricEncryptorWithCustomDefaultsTest < Test::Unit::TestCase
31
+ def setup
32
+ @original_default_public_key_file = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.default_public_key_file
33
+ @original_default_private_key_file = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.default_private_key_file
34
+ @original_default_algorithm = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.default_algorithm
35
+
5
36
  PluginAWeek::EncryptedStrings::AsymmetricEncryptor.default_public_key_file = File.dirname(__FILE__) + '/keys/public'
6
37
  PluginAWeek::EncryptedStrings::AsymmetricEncryptor.default_private_key_file = File.dirname(__FILE__) + '/keys/private'
7
38
  PluginAWeek::EncryptedStrings::AsymmetricEncryptor.default_algorithm = 'DES-EDE3-CBC'
@@ -9,11 +40,11 @@ class AsymmetricEncryptorByDefaultTest < Test::Unit::TestCase
9
40
  @asymmetric_encryptor = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new
10
41
  end
11
42
 
12
- def test_should_use_the_default_public_key_file
43
+ def test_should_use_default_public_key_file
13
44
  assert_equal File.dirname(__FILE__) + '/keys/public', @asymmetric_encryptor.public_key_file
14
45
  end
15
46
 
16
- def test_should_use_the_default_private_key_file
47
+ def test_should_use_default_private_key_file
17
48
  assert_equal File.dirname(__FILE__) + '/keys/private', @asymmetric_encryptor.private_key_file
18
49
  end
19
50
 
@@ -21,14 +52,14 @@ class AsymmetricEncryptorByDefaultTest < Test::Unit::TestCase
21
52
  assert_equal 'DES-EDE3-CBC', @asymmetric_encryptor.algorithm
22
53
  end
23
54
 
24
- def test_should_not_have_a_key
25
- assert_nil @asymmetric_encryptor.key
55
+ def test_should_not_have_a_password
56
+ assert_nil @asymmetric_encryptor.password
26
57
  end
27
58
 
28
59
  def teardown
29
- PluginAWeek::EncryptedStrings::AsymmetricEncryptor.default_public_key_file = nil
30
- PluginAWeek::EncryptedStrings::AsymmetricEncryptor.default_private_key_file = nil
31
- PluginAWeek::EncryptedStrings::AsymmetricEncryptor.default_algorithm = nil
60
+ PluginAWeek::EncryptedStrings::AsymmetricEncryptor.default_public_key_file = @original_default_public_key_file
61
+ PluginAWeek::EncryptedStrings::AsymmetricEncryptor.default_private_key_file = @original_default_private_key_file
62
+ PluginAWeek::EncryptedStrings::AsymmetricEncryptor.default_algorithm = @original_default_algorithm
32
63
  end
33
64
  end
34
65
 
@@ -40,7 +71,7 @@ end
40
71
 
41
72
  class AsymmetricEncryptorTest < Test::Unit::TestCase
42
73
  def setup
43
- @asymmetric_encryptor = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new
74
+ @asymmetric_encryptor = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new(:public_key_file => File.dirname(__FILE__) + '/keys/public')
44
75
  end
45
76
 
46
77
  def test_should_be_able_to_decrypt
@@ -50,7 +81,7 @@ end
50
81
 
51
82
  class AsymmetricEncryptorWithoutPublicKeyTest < Test::Unit::TestCase
52
83
  def setup
53
- @asymmetric_encryptor = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new(:public_key_file => nil)
84
+ @asymmetric_encryptor = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new(:public_key_file => nil, :private_key_file => File.dirname(__FILE__) + '/keys/private')
54
85
  end
55
86
 
56
87
  def test_should_not_be_public
@@ -86,7 +117,7 @@ end
86
117
 
87
118
  class AsymmetricEncryptorWithoutPrivateKeyTest < Test::Unit::TestCase
88
119
  def setup
89
- @asymmetric_encryptor = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new(:private_key_file => nil)
120
+ @asymmetric_encryptor = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new(:private_key_file => nil, :public_key_file => File.dirname(__FILE__) + '/keys/public')
90
121
  end
91
122
 
92
123
  def test_should_not_be_private
@@ -94,7 +125,7 @@ class AsymmetricEncryptorWithoutPrivateKeyTest < Test::Unit::TestCase
94
125
  end
95
126
 
96
127
  def test_should_not_be_able_to_decrypt
97
- assert_raise(PluginAWeek::EncryptedStrings::NoPrivateKeyError) {@asymmetric_encryptor.decrypt("NMGkkSu8dFdM455ru46b8TIkWQDHVdi4aJFZBCZ5p2VQV88OJnLBnnWYBXZk\n8HcyXzKb1I9lxuVHU/eZorGl7Q==\n")}
128
+ assert_raise(PluginAWeek::EncryptedStrings::NoPrivateKeyError) {@asymmetric_encryptor.decrypt("HbEh0Hwri26S7SWYqO26DBbzfhR1h/0pXYLjSKUpxF5DOaOCtD9oRN748+Na\nrfNaVN5Eg7RUhbRFZE+UnNHo6Q==\n")}
98
129
  end
99
130
  end
100
131
 
@@ -120,46 +151,44 @@ class AsymmetricEncryptorWithPrivateKeyTest < Test::Unit::TestCase
120
151
  end
121
152
  end
122
153
 
123
- class AsymmetricEncryptorWithEncryptedPublicKeyTest < Test::Unit::TestCase
154
+ class AsymmetricEncryptorWithEncryptedPrivateKeyTest < Test::Unit::TestCase
124
155
  def setup
125
- @asymmetric_encryptor = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new(:public_key_file => File.dirname(__FILE__) + '/keys/encrypted_public')
156
+ @asymmetric_encryptor = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new(:private_key_file => File.dirname(__FILE__) + '/keys/encrypted_private', :algorithm => 'DES-EDE3-CBC', :password => 'secret')
126
157
  end
127
158
 
128
- def test_should_be_public
129
- assert @asymmetric_encryptor.public?
159
+ def test_should_not_be_public
160
+ assert !@asymmetric_encryptor.public?
130
161
  end
131
162
 
132
- def test_should_not_be_private
133
- assert !@asymmetric_encryptor.private?
163
+ def test_should_be_private
164
+ assert @asymmetric_encryptor.private?
134
165
  end
135
166
 
136
- def test_should_be_able_to_encrypt
137
- assert_equal 90, @asymmetric_encryptor.encrypt('test').length
167
+ def test_should_not_be_able_to_encrypt
168
+ assert_raise(PluginAWeek::EncryptedStrings::NoPublicKeyError) {@asymmetric_encryptor.encrypt('test')}
138
169
  end
139
170
 
140
- def test_should_not_be_able_to_decrypt
141
- assert_raise(PluginAWeek::EncryptedStrings::NoPrivateKeyError) {@asymmetric_encryptor.decrypt("NMGkkSu8dFdM455ru46b8TIkWQDHVdi4aJFZBCZ5p2VQV88OJnLBnnWYBXZk\n8HcyXzKb1I9lxuVHU/eZorGl7Q==\n")}
171
+ def test_should_be_able_to_decrypt
172
+ assert_equal 'test', @asymmetric_encryptor.decrypt("HbEh0Hwri26S7SWYqO26DBbzfhR1h/0pXYLjSKUpxF5DOaOCtD9oRN748+Na\nrfNaVN5Eg7RUhbRFZE+UnNHo6Q==\n")
142
173
  end
143
174
  end
144
175
 
145
- class AsymmetricEncryptorWithEncryptedPrivateKeyTest < Test::Unit::TestCase
176
+ class AsymmetricEncryptorWithPKCS5CompliancyTest < Test::Unit::TestCase
146
177
  def setup
147
- @asymmetric_encryptor = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new(:private_key_file => File.dirname(__FILE__) + '/keys/encrypted_private', :algorithm => 'DES-EDE3-CBC', :key => 'secret')
148
- end
149
-
150
- def test_should_not_be_public
151
- assert !@asymmetric_encryptor.public?
178
+ @asymmetric_encryptor = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new(:private_key_file => File.dirname(__FILE__) + '/keys/pkcs5_encrypted_private', :algorithm => 'DES-EDE3-CBC', :password => 'secret', :pkcs5_compliant => true)
152
179
  end
153
180
 
154
- def test_should_be_private
155
- assert @asymmetric_encryptor.private?
181
+ def test_should_be_able_to_decrypt
182
+ assert_equal 'test', @asymmetric_encryptor.decrypt("HbEh0Hwri26S7SWYqO26DBbzfhR1h/0pXYLjSKUpxF5DOaOCtD9oRN748+Na\nrfNaVN5Eg7RUhbRFZE+UnNHo6Q==\n")
156
183
  end
157
-
158
- def test_should_not_be_able_to_encrypt
159
- assert_raise(PluginAWeek::EncryptedStrings::NoPublicKeyError) {@asymmetric_encryptor.encrypt('test')}
184
+ end
185
+
186
+ class AsymmetricEncyrptorWithDeprecatedKeyTest < Test::Unit::TestCase
187
+ def setup
188
+ @asymmetric_encryptor = PluginAWeek::EncryptedStrings::AsymmetricEncryptor.new(:private_key_file => File.dirname(__FILE__) + '/keys/encrypted_private', :key => 'secret')
160
189
  end
161
190
 
162
- def test_should_be_able_to_decrypt
163
- assert_equal 'test', @asymmetric_encryptor.decrypt("oo6gLdPuPGmiAD83EKMiXkod5jvoN4JC8azGbCF/ludwuik4QT58DAsidqsN\n5Xu103JgRIZjRgDEhNhO6szfAA==\n")
191
+ def test_should_set_password
192
+ assert_equal 'secret', @asymmetric_encryptor.password
164
193
  end
165
194
  end
@@ -1,12 +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
1
+ OBNa1q8kbx8pyZZjIpr/pZV0oulE2czh5JlPW/13XsDKYjIwiLkCTZI5Vhv5
2
+ cCF+wQuNvrbnp/QvJGzc5aJK1GwxqEb9hAwCzxw69DVjIhUowXDk/rYWUaTq
3
+ YwpieO1v6gQrOVxerOubR7LT6A4I6k1CTECX6zeJeGgT2jOfXzIii0T1gmYD
4
+ tJxLlNclpGB+eS+tuwrfyNmE4CkYa5vjuWdxHAeMRXPlm+o3ErE0QZ36Sn51
5
+ TScPDsZHo7Ppit87sPXpubM/5JltN0QwV4Hj9dJoSm0QNWDb3BoyT1uuJ0wm
6
+ b/adzINN1oUjdgMB9g3kmkErS3MRJtuPRNuU7/GvAuv78pQ5tAdkvk8gu7Cd
7
+ 5cFgnzvE7l96oZB6TXgsnpjVLide61Di+mX8K2dvUdoCNgrQ1iPklTbEfJeH
8
+ U/GoUV1ZyVnEfHkeWBEmC8YVBeri+lFL923g7z29luhxiBRkhows8TQsQ4hX
9
+ SMlFCKCKWKW2/58aSlvj0INa4NiBwkY987/X7VYvnSm747vOcD8Xmnd0Qwvt
10
+ weC2/NK11NFTNBIIodqsbvtlt1Ff0SXrO5PfbDU1yY+xzbx7SAwqhImXwScS
11
+ 4b0nFpArdfeVKNp5teSiu050m4B8kb2EjPW7NISui5NXxWtU5Mu41EnenGES
12
+ CkHsLI3plvL/
@@ -0,0 +1,12 @@
1
+ TGr8Jm/7zh1dfjjoNJtOncvX/BdUL47b8k2rQbMTY7VD6ZpD317NTuVX1hHV
2
+ 54Nm6pnCId5wcga3sI3TqolTxkqKBy7Rb1mPVBeJyd7ZuoD7zp65+ws+o4Lr
3
+ Xn/3WculfuThUnDESqD53vnKPCfRK6hoMDygEV7urmuide5ogpZp52lidUku
4
+ cXOHDqfVETX7NNnHHghg/6qDUX7+0qf+XeKe8uiI0cPoE5YFnOHyF7oOBGtR
5
+ IqJG97q1InCJMeAbMSxcjO71Te51Z098yI+XN4rGmXbmzSrVKHMUk0tdsVxi
6
+ CE5OmnzLeXK1xomxkRmXZzl10WDBn9e4knoLJTlDdNR3fA4gLRfy3r6RBlDl
7
+ j7HI53o5gi9PTshSXwHr6Q8SV9fty2Nz3/yRT/ZPLUJC1GUqErLl2j6zYbVR
8
+ 8YMaLt1Zqi79ycPZxZV4Zh57YE86nUqepS1pzVpcS8dHZMne846lTyaOyxZ8
9
+ dxW+18s7E7KqpHj17QYrF6c7R5ZHgoNAbLFeGSUCXqkW8YdyidLqQTzWN7hF
10
+ roVcZWFe8YfSUKmgndVBOHGHxMGr+OYgVdAStOEwmRHaNGgSBE4FCkKXYJUj
11
+ ec3zNpiOCb8zxfNku5nT5nIHnGqO4JKWDvDGVioV+ffHwXpAw3OFE5n+M/uo
12
+ 4ZZbVSh1qZxd
@@ -14,6 +14,26 @@ class ShaEncryptorByDefaulTest < Test::Unit::TestCase
14
14
  end
15
15
  end
16
16
 
17
+ class ShaEncryptorWithCustomDefaultsTest < Test::Unit::TestCase
18
+ def setup
19
+ @original_default_salt = PluginAWeek::EncryptedStrings::ShaEncryptor.default_salt
20
+ PluginAWeek::EncryptedStrings::ShaEncryptor.default_salt = 'custom_salt'
21
+ @sha_encryptor = PluginAWeek::EncryptedStrings::ShaEncryptor.new
22
+ end
23
+
24
+ def test_should_use_custom_default_salt
25
+ assert_equal 'custom_salt', @sha_encryptor.salt
26
+ end
27
+
28
+ def test_should_encrypt_using_custom_default_salt
29
+ assert_equal '280f3c516070b09aa3eb755378509c725a9c6561', @sha_encryptor.encrypt('test')
30
+ end
31
+
32
+ def teardown
33
+ PluginAWeek::EncryptedStrings::ShaEncryptor.default_salt = @original_default_salt
34
+ end
35
+ end
36
+
17
37
  class ShaEncryptorWithInvalidOptionsTest < Test::Unit::TestCase
18
38
  def test_should_throw_an_exception
19
39
  assert_raise(ArgumentError) {PluginAWeek::EncryptedStrings::ShaEncryptor.new(:invalid => true)}
@@ -34,7 +54,7 @@ class ShaEncryptorTest < Test::Unit::TestCase
34
54
  end
35
55
  end
36
56
 
37
- class ShaEncryptorWithCustomSaltTest < Test::Unit::TestCase
57
+ class ShaEncryptorWithCustomOptionsTest < Test::Unit::TestCase
38
58
  def setup
39
59
  @sha_encryptor = PluginAWeek::EncryptedStrings::ShaEncryptor.new(:salt => 'different salt')
40
60
  end
data/test/string_test.rb CHANGED
@@ -26,7 +26,7 @@ end
26
26
 
27
27
  class StringWithCustomEncryptor
28
28
  def setup
29
- @encrypted_string = 'test'.encrypt(:symmetric, :key => 'key')
29
+ @encrypted_string = 'test'.encrypt(:symmetric, :password => 'key')
30
30
  end
31
31
 
32
32
  def test_should_use_custom_encryptor
@@ -83,7 +83,7 @@ end
83
83
 
84
84
  class StringAfterBeingDecryptedTest < Test::Unit::TestCase
85
85
  def setup
86
- @encrypted_string = 'test'.encrypt(:symmetric, :key => 'secret')
86
+ @encrypted_string = 'test'.encrypt(:symmetric, :password => 'secret')
87
87
  @decrypted_string = @encrypted_string.decrypt
88
88
  end
89
89
 
@@ -98,7 +98,7 @@ end
98
98
 
99
99
  class StringAfterBeingDecryptedAndReplacedTest < Test::Unit::TestCase
100
100
  def setup
101
- @encrypted_string = 'test'.encrypt(:symmetric, :key => 'secret')
101
+ @encrypted_string = 'test'.encrypt(:symmetric, :password => 'secret')
102
102
  @encrypted_string.decrypt!
103
103
  end
104
104
 
@@ -163,7 +163,7 @@ end
163
163
 
164
164
  class StringWithDecryptableEncryptorTest < Test::Unit::TestCase
165
165
  def setup
166
- @encrypted_string = 'test'.encrypt(:symmetric, :key => 'secret')
166
+ @encrypted_string = 'test'.encrypt(:symmetric, :password => 'secret')
167
167
  end
168
168
 
169
169
  def test_should_be_able_to_decrypt
@@ -180,7 +180,7 @@ class StringWithDecryptableEncryptorTest < Test::Unit::TestCase
180
180
  end
181
181
 
182
182
  def test_should_be_able_to_check_equality_with_encrypted_value_of_encrypted_string
183
- encrypted_encrypted_string = @encrypted_string.encrypt(:symmetric, :key => 'secret')
183
+ encrypted_encrypted_string = @encrypted_string.encrypt(:symmetric, :password => 'secret')
184
184
 
185
185
  assert_equal @encrypted_string, encrypted_encrypted_string
186
186
  assert_equal encrypted_encrypted_string, @encrypted_string
@@ -192,7 +192,7 @@ class StringWithDecryptableEncryptorTest < Test::Unit::TestCase
192
192
  end
193
193
 
194
194
  def test_should_not_be_able_to_check_equality_more_than_one_encryption_away
195
- encrypted_encrypted_string = @encrypted_string.encrypt(:symmetric, :key => 'secret')
195
+ encrypted_encrypted_string = @encrypted_string.encrypt(:symmetric, :password => 'secret')
196
196
 
197
197
  assert_not_equal 'test', encrypted_encrypted_string
198
198
  assert_not_equal encrypted_encrypted_string, 'test'
@@ -217,6 +217,6 @@ class StringPreviouslyEncryptedTest < Test::Unit::TestCase
217
217
  end
218
218
 
219
219
  def test_should_be_able_to_decrypt_with_custom_mode
220
- assert_equal 'test', @encrypted_string.decrypt(:symmetric, :key => 'secret')
220
+ assert_equal 'test', @encrypted_string.decrypt(:symmetric, :password => 'secret')
221
221
  end
222
222
  end
@@ -2,28 +2,55 @@ require File.dirname(__FILE__) + '/test_helper'
2
2
 
3
3
  class SymmetricEncryptorByDefaultTest < Test::Unit::TestCase
4
4
  def setup
5
- PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_key = 'secret'
6
- @symmetric_encryptor = PluginAWeek::EncryptedStrings::SymmetricEncryptor.new
5
+ @symmetric_encryptor = PluginAWeek::EncryptedStrings::SymmetricEncryptor.new(:password => 'secret')
7
6
  end
8
7
 
9
- def test_should_use_the_default_key
10
- assert_equal 'secret', @symmetric_encryptor.key
8
+ def test_should_use_default_algorithm
9
+ assert_equal 'DES-EDE3-CBC', @symmetric_encryptor.algorithm
11
10
  end
12
11
 
13
- def test_should_use_the_default_algorithm
14
- assert_equal 'DES-EDE3-CBC', @symmetric_encryptor.algorithm
12
+ def test_should_raise_exception
13
+ assert_raise(PluginAWeek::EncryptedStrings::NoKeyError) {PluginAWeek::EncryptedStrings::SymmetricEncryptor.new}
15
14
  end
16
15
 
17
- def test_should_encrypt_using_the_default_configuration
16
+ def test_should_encrypt_using_default_configuration
18
17
  assert_equal "MU6e/5LvhKA=\n", @symmetric_encryptor.encrypt('test')
19
18
  end
20
19
 
21
- def test_should_decrypt_encrypted_string_using_the_default_configuration
20
+ def test_should_decrypt_encrypted_string_using_default_configuration
22
21
  assert_equal 'test', @symmetric_encryptor.decrypt("MU6e/5LvhKA=\n")
23
22
  end
23
+ end
24
+
25
+ class SymmetricEncryptorWithCustomDefaultsTest < Test::Unit::TestCase
26
+ def setup
27
+ @original_default_algorithm = PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_algorithm
28
+ @original_default_password = PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_password
29
+
30
+ PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_algorithm = 'DES-EDE3-CFB'
31
+ PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_password = 'secret'
32
+ @symmetric_encryptor = PluginAWeek::EncryptedStrings::SymmetricEncryptor.new
33
+ end
34
+
35
+ def test_should_use_custom_default_algorithm
36
+ assert_equal 'DES-EDE3-CFB', @symmetric_encryptor.algorithm
37
+ end
38
+
39
+ def test_should_use_custom_default_password
40
+ assert_equal 'secret', @symmetric_encryptor.password
41
+ end
42
+
43
+ def test_should_encrypt_using_custom_default_configuration
44
+ assert_equal "C7D9mg==\n", @symmetric_encryptor.encrypt('test')
45
+ end
46
+
47
+ def test_should_decrypt_encrypted_string_using_custom_default_configuration
48
+ assert_equal 'test', @symmetric_encryptor.decrypt("C7D9mg==\n")
49
+ end
24
50
 
25
51
  def teardown
26
- PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_key = nil
52
+ PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_algorithm = @original_default_algorithm
53
+ PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_password = @original_default_password
27
54
  end
28
55
  end
29
56
 
@@ -35,7 +62,7 @@ end
35
62
 
36
63
  class SymmetricEncryptorTest < Test::Unit::TestCase
37
64
  def setup
38
- @symmetric_encryptor = PluginAWeek::EncryptedStrings::SymmetricEncryptor.new(:key => 'secret')
65
+ @symmetric_encryptor = PluginAWeek::EncryptedStrings::SymmetricEncryptor.new(:password => 'secret')
39
66
  end
40
67
 
41
68
  def test_should_be_able_to_decrypt
@@ -45,17 +72,17 @@ end
45
72
 
46
73
  class SymmetricEncryptorWithCustomOptionsTest < Test::Unit::TestCase
47
74
  def setup
48
- @symmetric_encryptor = PluginAWeek::EncryptedStrings::SymmetricEncryptor.new(:key => 'secret', :algorithm => 'DES-EDE3-CFB')
49
- end
50
-
51
- def test_should_use_custom_key
52
- assert_equal 'secret', @symmetric_encryptor.key
75
+ @symmetric_encryptor = PluginAWeek::EncryptedStrings::SymmetricEncryptor.new(:algorithm => 'DES-EDE3-CFB', :password => 'secret')
53
76
  end
54
77
 
55
78
  def test_should_use_custom_algorithm
56
79
  assert_equal 'DES-EDE3-CFB', @symmetric_encryptor.algorithm
57
80
  end
58
81
 
82
+ def test_should_use_custom_password
83
+ assert_equal 'secret', @symmetric_encryptor.password
84
+ end
85
+
59
86
  def test_should_encrypt_using_custom_options
60
87
  assert_equal "C7D9mg==\n", @symmetric_encryptor.encrypt('test')
61
88
  end
@@ -64,3 +91,47 @@ class SymmetricEncryptorWithCustomOptionsTest < Test::Unit::TestCase
64
91
  assert_equal 'test', @symmetric_encryptor.decrypt("C7D9mg==\n")
65
92
  end
66
93
  end
94
+
95
+ class SymmetricEncryptorWithPKCS5CompliancyTest < Test::Unit::TestCase
96
+ def setup
97
+ @symmetric_encryptor = PluginAWeek::EncryptedStrings::SymmetricEncryptor.new(:password => 'secret', :pkcs5_compliant => true)
98
+ end
99
+
100
+ def test_should_encrypt_using_pkcs5_generated_key
101
+ assert_equal "oTxJd67ElLY=\n", @symmetric_encryptor.encrypt('test')
102
+ end
103
+
104
+ def test_should_decrypt_using_pkcs5_generated_key
105
+ assert_equal 'test', @symmetric_encryptor.decrypt("oTxJd67ElLY=\n" )
106
+ end
107
+ end
108
+
109
+ class SymmetricEncryptorWithDeprecatedDefaultsTest < Test::Unit::TestCase
110
+ def setup
111
+ @original_default_password = PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_password
112
+ end
113
+
114
+ def test_should_set_password_when_setting_key
115
+ PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_key = 'secret'
116
+ assert_equal 'secret', PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_password
117
+ end
118
+
119
+ def test_should_get_password_when_getting_key
120
+ PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_key = 'secret'
121
+ assert_equal 'secret', PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_key
122
+ end
123
+
124
+ def teardown
125
+ PluginAWeek::EncryptedStrings::SymmetricEncryptor.default_password = @original_default_password
126
+ end
127
+ end
128
+
129
+ class SymmetricEncryptorWithDeprecatedKeyTest < Test::Unit::TestCase
130
+ def setup
131
+ @symmetric_encryptor = PluginAWeek::EncryptedStrings::SymmetricEncryptor.new(:key => 'secret')
132
+ end
133
+
134
+ def test_should_set_password
135
+ assert_equal 'secret', @symmetric_encryptor.password
136
+ end
137
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: encrypted_strings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Pfeifer
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-07-07 00:00:00 -04:00
12
+ date: 2008-12-01 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -22,31 +22,31 @@ extensions: []
22
22
  extra_rdoc_files: []
23
23
 
24
24
  files:
25
- - lib/encrypted_strings.rb
26
25
  - lib/encrypted_strings
27
- - lib/encrypted_strings/no_key_error.rb
28
- - lib/encrypted_strings/encryptor.rb
29
- - lib/encrypted_strings/symmetric_encryptor.rb
30
- - lib/encrypted_strings/no_public_key_error.rb
26
+ - lib/encrypted_strings/no_private_key_error.rb
31
27
  - lib/encrypted_strings/asymmetric_encryptor.rb
32
28
  - lib/encrypted_strings/sha_encryptor.rb
33
- - lib/encrypted_strings/no_private_key_error.rb
34
29
  - lib/encrypted_strings/extensions
35
30
  - lib/encrypted_strings/extensions/string.rb
31
+ - lib/encrypted_strings/encryptor.rb
32
+ - lib/encrypted_strings/no_key_error.rb
33
+ - lib/encrypted_strings/no_public_key_error.rb
34
+ - lib/encrypted_strings/symmetric_encryptor.rb
35
+ - lib/encrypted_strings.rb
36
+ - test/asymmetric_encryptor_test.rb
36
37
  - test/symmetric_encryptor_test.rb
37
- - test/no_public_key_error_test.rb
38
+ - test/test_helper.rb
39
+ - test/no_key_error_test.rb
38
40
  - test/sha_encryptor_test.rb
41
+ - test/no_private_key_error_test.rb
39
42
  - test/keys
40
43
  - test/keys/encrypted_private
41
44
  - test/keys/private
42
45
  - test/keys/public
43
- - test/keys/encrypted_public
44
- - test/no_key_error_test.rb
45
- - test/test_helper.rb
46
+ - test/keys/pkcs5_encrypted_private
46
47
  - test/string_test.rb
47
- - test/asymmetric_encryptor_test.rb
48
+ - test/no_public_key_error_test.rb
48
49
  - test/encryptor_test.rb
49
- - test/no_private_key_error_test.rb
50
50
  - CHANGELOG.rdoc
51
51
  - init.rb
52
52
  - LICENSE
@@ -74,16 +74,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
74
  requirements: []
75
75
 
76
76
  rubyforge_project: pluginaweek
77
- rubygems_version: 1.1.1
77
+ rubygems_version: 1.2.0
78
78
  signing_key:
79
79
  specification_version: 2
80
80
  summary: Dead-simple string encryption/decryption syntax.
81
81
  test_files:
82
+ - test/asymmetric_encryptor_test.rb
82
83
  - test/symmetric_encryptor_test.rb
83
- - test/no_public_key_error_test.rb
84
- - test/sha_encryptor_test.rb
85
84
  - test/no_key_error_test.rb
85
+ - test/sha_encryptor_test.rb
86
+ - test/no_private_key_error_test.rb
86
87
  - test/string_test.rb
87
- - test/asymmetric_encryptor_test.rb
88
+ - test/no_public_key_error_test.rb
88
89
  - test/encryptor_test.rb
89
- - test/no_private_key_error_test.rb
@@ -1,4 +0,0 @@
1
- -----BEGIN RSA PUBLIC KEY-----
2
- MEgCQQCvktJgveIcgTH98hAhMjo0g6/GVMJaYdUh+/zQn4RBWASRmwEfJqggsfKT
3
- pSNendZQMD8kKS8J1YTBr60ToM25AgMBAAE=
4
- -----END RSA PUBLIC KEY-----