diff --git a/lib/encrypted_strings/symmetric_cipher.rb b/lib/encrypted_strings/symmetric_cipher.rb
index 154e1f9..1664985 100644
--- a/lib/encrypted_strings/symmetric_cipher.rb
+++ b/lib/encrypted_strings/symmetric_cipher.rb
@@ -2,63 +2,63 @@ module EncryptedStrings
# Indicates no password was specified for the symmetric cipher
class NoPasswordError < StandardError
end
-
+
# Symmetric encryption uses a specific algorithm and password to encrypt
# the string. As long as the algorithm and password are known, the string
# can be decrypted.
- #
+ #
# Source: http://support.microsoft.com/kb/246071
- #
- # == Encrypting
- #
+ #
+ # == Encrypting
+ #
# To encrypt a string using a symmetric cipher, the algorithm and password
# must be specified. You can define the defaults for these values like so:
- #
+ #
# EncryptedStrings::SymmetricCipher.default_algorithm = 'des-ecb'
# EncryptedStrings::SymmetricCipher.default_password = 'secret'
- #
+ #
# If these configuration options are not passed in to #encrypt, then the
# default values will be used. You can override the default values like so:
- #
+ #
# password = 'shhhh'
# password.encrypt(:symmetric, :algorithm => 'des-ecb', :password => 'secret') # => "S/sEkViX3v4=\n"
- #
+ #
# An exception will be raised if no password is specified.
- #
+ #
# == Decrypting
- #
+ #
# To decrypt a string using an symmetric cipher, the algorithm and password
# must be specified. Defaults for these values can be defined as show above.
- #
+ #
# If these configuration options are not passed in to #decrypt, then the
# default values will be used. You can override the default values like so:
- #
+ #
# password = "S/sEkViX3v4=\n"
# password.decrypt(:symmetric, :algorithm => 'des-ecb', :password => 'secret') # => "shhhh"
- #
+ #
# An exception will be raised if no password is specified.
class SymmetricCipher < Cipher
class << self
# The default algorithm to use for encryption. Default is DES-EDE3-CBC.
attr_accessor :default_algorithm
-
+
# The default password to use for generating the key and initialization
# vector. Default is nil.
attr_accessor :default_password
end
-
+
# Set default values
@default_algorithm = 'DES-EDE3-CBC'
-
+
# The algorithm to use for encryption/decryption
attr_accessor :algorithm
-
+
# The password that generates the key/initialization vector for the
# algorithm
attr_accessor :password
-
+
# Creates a new cipher that uses a symmetric encryption strategy.
- #
+ #
# Configuration options:
# * :algorithm - The algorithm to use for generating the encrypted string
# * :password - The secret value to use for generating the
@@ -66,34 +66,34 @@ class << self
def initialize(options = {})
invalid_options = options.keys - [:algorithm, :password]
raise ArgumentError, "Unknown key(s): #{invalid_options.join(", ")}" unless invalid_options.empty?
-
+
options = {
:algorithm => SymmetricCipher.default_algorithm,
:password => SymmetricCipher.default_password
}.merge(options)
-
+
self.algorithm = options[:algorithm]
self.password = options[:password]
raise NoPasswordError if password.nil?
-
+
super()
end
-
+
# Decrypts the current string using the current key and algorithm specified
def decrypt(data)
cipher = build_cipher(:decrypt)
cipher.update(data.unpack('m')[0]) + cipher.final
end
-
+
# Encrypts the current string using the current key and algorithm specified
def encrypt(data)
cipher = build_cipher(:encrypt)
[cipher.update(data) + cipher.final].pack('m')
end
-
+
private
def build_cipher(type) #:nodoc:
- cipher = OpenSSL::Cipher::Cipher.new(algorithm).send(type)
+ cipher = OpenSSL::Cipher.new(algorithm).send(type)
cipher.pkcs5_keyivgen(password)
cipher
end