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
20class Cipher
21{
22public:
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
39private:
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
56