diff options
author | jgls <joerg@joergleis.com> | 2013-04-16 15:01:23 +0300 |
---|---|---|
committer | Jörg Leis <joerg@joergleis.com> | 2013-04-19 00:33:02 +0200 |
commit | 91a0a1156e622cad5221f33e852c19aa8eba6cbf (patch) | |
tree | 4f614ce1db2cff77dd9ccfaddf64c920333a92d6 /activesupport | |
parent | 41a90dd459b791c9dcb532ac0c98400081b63edd (diff) | |
download | rails-91a0a1156e622cad5221f33e852c19aa8eba6cbf.tar.gz rails-91a0a1156e622cad5221f33e852c19aa8eba6cbf.tar.bz2 rails-91a0a1156e622cad5221f33e852c19aa8eba6cbf.zip |
Reorganize MessageEncryptor
1) According to OpenSSL's documentation, cipher.random_iv must be called
after cipher.encrypt and already sets the generated IV on the cipher.
2) OpenSSL::CipherError was moved to OpenSSL::Cipher::CipherError in
Ruby 1.8.7. Since Rails 4 requires at least Ruby 1.9.3, support for
the old location can be dropped.
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/message_encryptor.rb | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/activesupport/lib/active_support/message_encryptor.rb b/activesupport/lib/active_support/message_encryptor.rb index ce40a7d689..96025e7614 100644 --- a/activesupport/lib/active_support/message_encryptor.rb +++ b/activesupport/lib/active_support/message_encryptor.rb @@ -28,7 +28,7 @@ module ActiveSupport end class InvalidMessage < StandardError; end - OpenSSLCipherError = OpenSSL::Cipher.const_defined?(:CipherError) ? OpenSSL::Cipher::CipherError : OpenSSL::CipherError + OpenSSLCipherError = OpenSSL::Cipher::CipherError # Initialize a new MessageEncryptor. +secret+ must be at least as long as # the cipher key size. For the default 'aes-256-cbc' cipher, this is 256 @@ -66,12 +66,11 @@ module ActiveSupport def _encrypt(value) cipher = new_cipher - # Rely on OpenSSL for the initialization vector - iv = cipher.random_iv - cipher.encrypt cipher.key = @secret - cipher.iv = iv + + # Rely on OpenSSL for the initialization vector + iv = cipher.random_iv encrypted_data = cipher.update(@serializer.dump(value)) encrypted_data << cipher.final |