KVIrc 5.2.0
Developer APIs
KviCryptEngine.h
Go to the documentation of this file.
1#ifndef _KVI_CRYPT_ENGINE_H_
2#define _KVI_CRYPT_ENGINE_H_
3//=============================================================================
4//
5// File : KviCryptEngine.h
6// Creation date : Fri Nov 03 2000 01:45:21 CEST by Szymon Stefanek
7//
8// This file is part of the KVIrc IRC client distribution
9// Copyright (C) 2000-2010 Szymon Stefanek (pragma at kvirc dot net)
10//
11// This program is FREE software. You can redistribute it and/or
12// modify it under the terms of the GNU General Public License
13// as published by the Free Software Foundation; either version 2
14// of the License, or (at your option) any later version.
15//
16// This program is distributed in the HOPE that it will be USEFUL,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19// See the GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program. If not, write to the Free Software Foundation,
23// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24//
25//=============================================================================
26
27#include "kvi_settings.h"
28
29//
30// Base class for all IRC crypt engines
31// These intend to encrypt plain text into something
32// that can be sent through the IRC protocol...
33// so it should not contain NULL, CR, LF and other
34// similar stuff...
35//
36
37#include "KviHeapObject.h"
38
39#include <QObject>
40
41class KviCString;
42
43#ifdef COMPILE_CRYPT_SUPPORT
44class KviCryptEngine;
45
46typedef KviCryptEngine * (*crypt_engine_allocator_func)();
47typedef void (*crypt_engine_deallocator_func)(KviCryptEngine *);
48#endif //COMPILE_CRYPT_SUPPORT
49
50// we must include this declaration to make moc happy even
51// if we're not compiling the crypt support
52
53class KVILIB_API KviCryptEngine : public QObject, public KviHeapObject
54{
55 Q_OBJECT
56 friend class KviCryptEngineManager;
57
58public:
60 {
61 CanEncrypt = 1,
62 CanDecrypt = 2,
63 WantEncryptKey = 4,
64 WantDecryptKey = 8
65 };
66
68 {
71 EncryptError
72 };
73
81
84
85#ifdef COMPILE_CRYPT_SUPPORT
86private:
87 crypt_engine_deallocator_func m_deallocFunc; // this is accessed by KviCryptEngineManager only
88 QString m_szLastError;
89 int m_iMaxEncryptLen;
90
91public:
92 void setMaxEncryptLen(int m) { m_iMaxEncryptLen = m; }
93 int maxEncryptLen() const { return m_iMaxEncryptLen; }
94 virtual bool init(const char * encKey, int encKeyLen, const char * decKey, int decKeyLen);
95 //
96 // Encrypts utf8 plainText and returns the encrypted
97 // data in outBuffer. The encrypted data must be
98 // suitable for sending through an IRC (eventually DCC
99 // that is less restrictive) connection and must be utf8 encoded: so
100 // no NULL, CR and LF in the output.
101 // 0x01 should be also avoided since
102 // it is the CTCP delimiter.
103 // Converting the result in a HEX string
104 // is a good trick...also Base64 could be used.
105 // Should return false in case of an error.
106 // Theoretically we could allow NULLs in plainText
107 // but this is not the case of KVIrc.
108 //
109 virtual EncryptResult encrypt(const char * plainText, KviCString & outBuffer);
110 //
111 // Decrypts the utf8 data in inBuffer and puts the decrypted utf8
112 // stuff in plainText. inBuffer is the thingie
113 // that we got from outBuffer of encrupt() so it
114 // follows the same rules.
115 // Should return false in case of error.
116 //
117 virtual DecryptResult decrypt(const char * inBuffer, KviCString & plainText);
118 //
119 // Returns the string containing the description
120 // of the last error or an empty string if there
121 // was no error after the last init() call.
122 //
123 const QString & lastError() const { return m_szLastError; }
124protected:
125 //
126 // The following two should have clear meaning
127 //
128 void clearLastError() { setLastError(""); }
129 void setLastError(const QString & err) { m_szLastError = err; }
130#endif //COMPILE_CRYPT_SUPPORT
131};
132
133#endif // _KVI_CRYPT_ENGINE_H_
Heap Object.
Definition KviCString.h:102
Definition KviCryptEngine.h:54
EncryptResult
Definition KviCryptEngine.h:68
@ Encrypted
Definition KviCryptEngine.h:69
@ Encoded
Definition KviCryptEngine.h:70
EngineFlag
Definition KviCryptEngine.h:60
DecryptResult
Definition KviCryptEngine.h:75
@ DecryptOkWasPlainText
Definition KviCryptEngine.h:78
@ DecryptOkWasEncrypted
Definition KviCryptEngine.h:76
@ DecryptOkWasEncoded
Definition KviCryptEngine.h:77
Definition KviHeapObject.h:125
#define m
Definition detector.cpp:78
This file contains compile time settings.
#define KVILIB_API
Definition kvi_settings.h:124
int init()
Definition winamp.cpp:118