e7f88b38dcb6b4609c9a7a8c7ba75a6bed522356
[quassel.git] / src / core / cipher.h
1 /*
2   This file has been derived from Konversation, the KDE IRC client.
3   You can redistribute it and/or modify it under the terms of the
4   GNU General Public License as published by the Free Software Foundation;
5   either version 2 of the License, or (at your option) any later version.
6 */
7
8 /*
9   Copyright (C) 1997 Robey Pointer <robeypointer@gmail.com>
10   Copyright (C) 2005 Ismail Donmez <ismail@kde.org>
11   Copyright (C) 2009 Travis McHenry <tmchenryaz@cox.net>
12   Copyright (C) 2009 Johannes Huber <johu@gmx.de>
13 */
14
15 #ifndef CIPHER_H
16 #define CIPHER_H
17
18 #include <QtCrypto>
19
20 class Cipher
21 {
22 public:
23     Cipher();
24     explicit Cipher(QByteArray key, QString cipherType = QString("blowfish"));
25     ~Cipher();
26     QByteArray decrypt(QByteArray cipher);
27     QByteArray decryptTopic(QByteArray cipher);
28     bool encrypt(QByteArray &cipher);
29     QByteArray initKeyExchange();
30     QByteArray parseInitKeyX(QByteArray key);
31     bool parseFinishKeyX(QByteArray key);
32     bool setKey(QByteArray key);
33     QByteArray key() { return m_key; }
34     bool setType(const QString &type);
35     QString type() { return m_type; }
36     static bool neededFeaturesAvailable();
37
38 private:
39     //direction is true for encrypt, false for decrypt
40     QByteArray blowfishCBC(QByteArray cipherText, bool direction);
41     QByteArray blowfishECB(QByteArray cipherText, bool direction);
42     QByteArray b64ToByte(QByteArray text);
43     QByteArray byteToB64(QByteArray text);
44
45     QCA::Initializer init;
46     QByteArray m_key;
47     QCA::DHPrivateKey m_tempKey;
48     QCA::BigInteger m_primeNum;
49     QString m_type;
50     bool m_cbc;
51 };
52
53
54 #endif // CIPHER_H