require File.expand_path('../test_helper', __FILE__) # Test ensures that values stored by previous versions of the gem will # roundtrip and decrypt correctly in this and future versions. This is important # for data stored in databases and allows consumers of the gem to upgrade with # confidence in the future. # class CompatibilityTest < Minitest::Test ALGORITHM = 'aes-256-cbc' def self.base64_encode(value) [value].pack('m').strip end def self.base64_decode(value) value.unpack('m').first end if OpenSSL::Cipher.ciphers.include?(ALGORITHM) def test_encrypt_with_iv key = Digest::SHA256.hexdigest('my-fixed-key') iv = Digest::SHA256.hexdigest('my-fixed-iv') result = Encryptor.encrypt( algorithm: ALGORITHM, value: 'my-fixed-input', key: key, iv: iv, insecure_mode: true ) assert_equal 'nGuyGniksFXnMYj/eCxXKQ==', self.class.base64_encode(result) end def test_encrypt_without_iv key = Digest::SHA256.hexdigest('my-fixed-key') result = Encryptor.encrypt( algorithm: ALGORITHM, value: 'my-fixed-input', key: key, insecure_mode: true ) assert_equal 'XbwHRMFWqR5M80kgwRcEEg==', self.class.base64_encode(result) end def test_decrypt_with_iv key = Digest::SHA256.hexdigest('my-fixed-key') iv = Digest::SHA256.hexdigest('my-fixed-iv') result = Encryptor.decrypt( algorithm: ALGORITHM, value: self.class.base64_decode('nGuyGniksFXnMYj/eCxXKQ=='), key: key, iv: iv, insecure_mode: true ) assert_equal 'my-fixed-input', result end def test_decrypt_without_iv key = Digest::SHA256.hexdigest('my-fixed-key') result = Encryptor.decrypt( algorithm: ALGORITHM, value: self.class.base64_decode('XbwHRMFWqR5M80kgwRcEEg=='), key: key, insecure_mode: true ) assert_equal 'my-fixed-input', result end def test_encrypt_with_iv_and_salt key = Digest::SHA256.hexdigest('my-fixed-key') iv = Digest::SHA256.hexdigest('my-fixed-iv') salt = 'my-fixed-salt' result = Encryptor.encrypt( algorithm: ALGORITHM, value: 'my-fixed-input', key: key, iv: iv, salt: salt ) assert_equal 'DENuQSh9b0eW8GN3YLzLGw==', self.class.base64_encode(result) end def test_decrypt_with_iv_and_salt key = Digest::SHA256.hexdigest('my-fixed-key') iv = Digest::SHA256.hexdigest('my-fixed-iv') salt = 'my-fixed-salt' result = Encryptor.decrypt( algorithm: ALGORITHM, value: self.class.base64_decode('DENuQSh9b0eW8GN3YLzLGw=='), key: key, iv: iv, salt: salt ) assert_equal 'my-fixed-input', result end end end