Prepend the mode of operation to showkey's output.
[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     inline bool usesCBC() { return m_cbc; }
38
39 private:
40     //direction is true for encrypt, false for decrypt
41     QByteArray blowfishCBC(QByteArray cipherText, bool direction);
42     QByteArray blowfishECB(QByteArray cipherText, bool direction);
43     QByteArray b64ToByte(QByteArray text);
44     QByteArray byteToB64(QByteArray text);
45
46     QCA::Initializer init;
47     QByteArray m_key;
48     QCA::DHPrivateKey m_tempKey;
49     QCA::BigInteger m_primeNum;
50     QString m_type;
51     bool m_cbc;
52 };
53
54
55 #endif // CIPHER_H