encrypted_strings 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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-----