class ActiveSupport::MessageEncryptor
def decrypt(encrypted_message)
def decrypt(encrypted_message) cipher = new_cipher encrypted_data, iv, auth_tag = extract_parts(encrypted_message) # Currently the OpenSSL bindings do not raise an error if auth_tag is # truncated, which would allow an attacker to easily forge it. See # https://github.com/ruby/openssl/issues/63 if aead_mode? && auth_tag.bytesize != AUTH_TAG_LENGTH throw :invalid_message_format, "truncated auth_tag" end cipher.decrypt cipher.key = @secret cipher.iv = iv if aead_mode? cipher.auth_tag = auth_tag cipher.auth_data = "" end decrypted_data = cipher.update(encrypted_data) decrypted_data << cipher.final rescue OpenSSLCipherError => error throw :invalid_message_format, error end