def prepare_message_attachment_metadata( privkey_str, _attachments, msg_ts, msg_id ): attachment_paths = {} attachment_signatures = {} if _attachments is None: return attachment_paths, attachment_signatures for attachment_name, attachment_data in _attachments.items(): apath = attachment_path( msg_ts, msg_id, attachment_name ) attachment_paths[ attachment_name ] = apath for attachment_name, attachment_data in _attachments.items(): attachment_sig = base64.b64encode( keys.sign_data( privkey_str, attachment_data ) ) attachment_signatures[ attachment_name ] = attachment_sig return attachment_paths, attachment_signatures
# ------------------------------------- def post_message(sender_privkey_pem, encrypted_incoming_message, use_http=False): # called by the endpoint # start to inform the recipient's server that they have a new message # EncryptedIncomingMessage = collections.namedtuple( "EncryptedIncomingMessage", ["incoming_message_ciphertext", "sender_addr", "receiver_addr", "signature"] ) # serialize this try: data = storage.tuple_to_json(encrypted_incoming_message) data = base64.b64encode(data) except Exception, e: log.exception(e) log.error("Failed to serialize") return False sig = keys.sign_data(sender_privkey_pem, data) sig_b64 = base64.b64encode(sig) forms = { "sender": encrypted_incoming_message.sender_addr, "receiver": encrypted_incoming_message.receiver_addr, "signature": sig_b64, "message": data, } try: parsed_receiver_addr = contact.parse_addr(encrypted_incoming_message.receiver_addr) except Exception, e: log.exception(e) log.error("Failed to parse '%s'" % encrypted_incoming_message.receiver_addr)