+#ifdef HAVE_QCA2
+QByteArray IrcServerHandler::decrypt(const QString &bufferName, QByteArray &message) {
+ if(bufferName.isEmpty())
+ return message;
+
+ if(message.isEmpty())
+ return message;
+
+ const QByteArray key = network()->bufferKey(bufferName);
+ if(key.isEmpty())
+ return message;
+
+ IrcChannel *channel = network()->ircChannel(bufferName);
+ IrcUser *user = network()->ircUser(bufferName);
+
+ //only send encrypted text to decrypter
+ int index = message.indexOf(":",message.indexOf(":")+1);
+
+ /* if(this->identifyMsgEnabled()) // Workaround braindead Freenode prefixing messages with +
+ ++index;*/
+
+ QByteArray backup = message.mid(0,index+1);
+
+ if (channel && channel->cipher()->setKey(key))
+ message = channel->cipher()->decrypt(message.mid(index+1));
+ else if (user && user->cipher()->setKey(key))
+ message = user->cipher()->decrypt(message.mid(index+1));
+
+ message.prepend(backup);
+
+ message = channelDecode(bufferName, message).toAscii();
+
+ return message;
+}
+
+QString IrcServerHandler::decryptTopic(const QString &bufferName, QString &topic) {
+ if(bufferName.isEmpty())
+ return topic;
+
+ if(topic.isEmpty())
+ return topic;
+
+ const QByteArray key = network()->bufferKey(bufferName);
+ if(key.isEmpty())
+ return topic;
+
+ IrcChannel *channel = network()->ircChannel(bufferName);
+ IrcUser *user = network()->ircUser(bufferName);
+
+ //only send encrypted text to decrypter
+ int index = topic.indexOf(":",topic.indexOf(":")+1);
+
+ QString backup = topic.mid(0,index+1);
+
+ if (channel && channel->cipher()->setKey(key))
+ topic = channel->cipher()->decryptTopic(topic.mid(index+1).toAscii());
+ else if (user && user->cipher()->setKey(key))
+ topic = user->cipher()->decryptTopic(topic.mid(index+1).toAscii());
+
+ topic.prepend(backup);
+ topic = channelDecode(bufferName, topic.toAscii());
+
+ return topic;
+}
+#endif
+