diaspora/lib/salmon/encrypted_slap.rb
2011-09-14 15:50:07 -07:00

48 lines
1.3 KiB
Ruby

# Copyright (c) 2010-2011, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
module Salmon
class EncryptedSlap < Slap
# Construct an encrypted header
# @return [String] Header XML
def header(person)
<<XML
<encrypted_header>
#{person.encrypt("<decrypted_header>#{plaintext_header}</decrypted_header>")}
</encrypted_header>
XML
end
# @return [String, Boolean] False if RSAError; XML if no error
def xml_for(person)
begin
super
rescue OpenSSL::PKey::RSAError => e
Rails.logger.info(:event => :invalid_rsa_key, :identifier => person.diaspora_handle)
false
end
end
# Decrypts an encrypted magic sig envelope
# @param key_hash [Hash] Contains 'key' (aes) and 'iv' values
# @param user [User]
def parse_data(key_hash, user)
user.aes_decrypt(super, key_hash)
end
# Decrypts and parses out the salmon header
# @return [Nokogiri::Doc]
def salmon_header(doc, user)
header = user.decrypt(doc.search('encrypted_header').text)
Nokogiri::XML(header)
end
# Encrypt the magic sig
# @return [String]
def self.payload(activity, user, aes_key_hash)
user.person.aes_encrypt(activity, aes_key_hash)
end
end
end