|
|
|
#ifndef _LIBKVIRIJNDAEL_H_
|
|
|
|
#define _LIBKVIRIJNDAEL_H_
|
|
|
|
//
|
|
|
|
// File : libkvirijndael.h
|
|
|
|
// Creation date : Sat Now 4 2000 15:41:41 CEST by Szymon Stefanek
|
|
|
|
//
|
|
|
|
// This file is part of the KVirc irc client distribution
|
|
|
|
// Copyright (C) 1999-2000 Till Bush (buti@geocities.com)
|
|
|
|
//
|
|
|
|
// This program is FREE software. You can redistribute it and/or
|
|
|
|
// modify it under the terms of the GNU General Public License
|
|
|
|
// as published by the Free Software Foundation; either version 2
|
|
|
|
// of the License, or (at your opinion) any later version.
|
|
|
|
//
|
|
|
|
// This program is distributed in the HOPE that it will be USEFUL,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
// See the GNU General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
|
|
// along with this program. If not, write to the Free Software Foundation,
|
|
|
|
// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
//
|
|
|
|
|
|
|
|
#include "kvi_settings.h"
|
|
|
|
|
|
|
|
#ifdef COMPILE_CRYPT_SUPPORT
|
|
|
|
|
|
|
|
#include "kvi_crypt.h"
|
|
|
|
#include "rijndael.h"
|
|
|
|
|
|
|
|
class KviRijndaelEngine : public KviCryptEngine
|
|
|
|
{
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
KviRijndaelEngine();
|
|
|
|
virtual ~KviRijndaelEngine();
|
|
|
|
private:
|
|
|
|
Rijndael * m_pEncryptCipher;
|
|
|
|
Rijndael * m_pDecryptCipher;
|
|
|
|
public:
|
|
|
|
virtual bool init(const char *encKey,int encKeyLen,const char *decKey,int decKeyLen);
|
|
|
|
virtual KviCryptEngine::EncryptResult encrypt(const char * plainText,KviStr &outBuffer);
|
|
|
|
virtual KviCryptEngine::DecryptResult decrypt(const char * inBuffer,KviStr &plainText);
|
|
|
|
protected:
|
|
|
|
virtual bool binaryToAscii(const char * inBuffer,int len,KviStr &outBuffer){ return false; };
|
|
|
|
virtual bool asciiToBinary(const char * inBuffer,int * len,char ** outBuffer){ return false; };
|
|
|
|
virtual int getKeyLen(){ return 32; };
|
|
|
|
virtual Rijndael::KeyLength getKeyLenId(){ return Rijndael::Key32Bytes; };
|
|
|
|
private:
|
|
|
|
void setLastErrorFromRijndaelErrorCode(int errCode);
|
|
|
|
};
|
|
|
|
|
|
|
|
class KviRijndaelHexEngine : public KviRijndaelEngine
|
|
|
|
{
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
KviRijndaelHexEngine() : KviRijndaelEngine() {};
|
|
|
|
virtual ~KviRijndaelHexEngine(){};
|
|
|
|
protected:
|
|
|
|
virtual bool binaryToAscii(const char * inBuffer,int len,KviStr &outBuffer);
|
|
|
|
virtual bool asciiToBinary(const char * inBuffer,int * len,char ** outBuffer);
|
|
|
|
};
|
|
|
|
|
|
|
|
class KviRijndael128HexEngine : public KviRijndaelHexEngine
|
|
|
|
{
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
KviRijndael128HexEngine() : KviRijndaelHexEngine() {};
|
|
|
|
virtual ~KviRijndael128HexEngine(){};
|
|
|
|
protected:
|
|
|
|
virtual int getKenLen(){ return 16; };
|
|
|
|
virtual Rijndael::KeyLength getKeyLenId(){ return Rijndael::Key16Bytes; };
|
|
|
|
};
|
|
|
|
|
|
|
|
class KviRijndael192HexEngine : public KviRijndaelHexEngine
|
|
|
|
{
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
KviRijndael192HexEngine() : KviRijndaelHexEngine() {};
|
|
|
|
virtual ~KviRijndael192HexEngine(){};
|
|
|
|
protected:
|
|
|
|
virtual int getKenLen(){ return 24; };
|
|
|
|
virtual Rijndael::KeyLength getKeyLenId(){ return Rijndael::Key24Bytes; };
|
|
|
|
};
|
|
|
|
|
|
|
|
class KviRijndael256HexEngine : public KviRijndaelHexEngine
|
|
|
|
{
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
KviRijndael256HexEngine() : KviRijndaelHexEngine() {};
|
|
|
|
virtual ~KviRijndael256HexEngine(){};
|
|
|
|
protected:
|
|
|
|
virtual int getKenLen(){ return 32; };
|
|
|
|
};
|
|
|
|
|
|
|
|
class KviRijndaelBase64Engine : public KviRijndaelEngine
|
|
|
|
{
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
KviRijndaelBase64Engine() : KviRijndaelEngine() {};
|
|
|
|
virtual ~KviRijndaelBase64Engine(){};
|
|
|
|
protected:
|
|
|
|
virtual bool binaryToAscii(const char * inBuffer,int len,KviStr &outBuffer);
|
|
|
|
virtual bool asciiToBinary(const char * inBuffer,int * len,char ** outBuffer);
|
|
|
|
};
|
|
|
|
|
|
|
|
class KviRijndael128Base64Engine : public KviRijndaelBase64Engine
|
|
|
|
{
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
KviRijndael128Base64Engine() : KviRijndaelBase64Engine() {};
|
|
|
|
virtual ~KviRijndael128Base64Engine(){};
|
|
|
|
protected:
|
|
|
|
virtual int getKenLen(){ return 16; };
|
|
|
|
virtual Rijndael::KeyLength getKeyLenId(){ return Rijndael::Key16Bytes; };
|
|
|
|
};
|
|
|
|
|
|
|
|
class KviRijndael192Base64Engine : public KviRijndaelBase64Engine
|
|
|
|
{
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
KviRijndael192Base64Engine() : KviRijndaelBase64Engine() {};
|
|
|
|
virtual ~KviRijndael192Base64Engine(){};
|
|
|
|
protected:
|
|
|
|
virtual int getKenLen(){ return 24; };
|
|
|
|
virtual Rijndael::KeyLength getKeyLenId(){ return Rijndael::Key24Bytes; };
|
|
|
|
};
|
|
|
|
|
|
|
|
class KviRijndael256Base64Engine : public KviRijndaelBase64Engine
|
|
|
|
{
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
KviRijndael256Base64Engine() : KviRijndaelBase64Engine() {};
|
|
|
|
virtual ~KviRijndael256Base64Engine(){};
|
|
|
|
protected:
|
|
|
|
virtual int getKenLen(){ return 32; };
|
|
|
|
};
|
|
|
|
|
|
|
|
// Mircyption stuff
|
|
|
|
#define MCPS2_STARTTAG "\xABm\xAB"
|
|
|
|
#define MCPS2_ENDTAG "\xBBm\xBB"
|
|
|
|
|
|
|
|
class KviMircryptionEngine : public KviCryptEngine
|
|
|
|
{
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
KviMircryptionEngine();
|
|
|
|
~KviMircryptionEngine();
|
|
|
|
protected:
|
|
|
|
KviStr m_szEncryptKey;
|
|
|
|
bool m_bEncryptCBC;
|
|
|
|
KviStr m_szDecryptKey;
|
|
|
|
bool m_bDecryptCBC;
|
|
|
|
public:
|
|
|
|
virtual bool isCryptographicEngine(){ return false; }; // we need to return false since it doesn't use the TQt::CTRL+P escape
|
|
|
|
virtual bool init(const char *encKey,int encKeyLen,const char *decKey,int decKeyLen);
|
|
|
|
virtual KviCryptEngine::EncryptResult encrypt(const char * plainText,KviStr &outBuffer);
|
|
|
|
virtual KviCryptEngine::DecryptResult decrypt(const char * inBuffer,KviStr &plainText);
|
|
|
|
protected:
|
|
|
|
bool doDecryptECB(KviStr &encoded,KviStr &plain);
|
|
|
|
bool doDecryptCBC(KviStr &encoded,KviStr &plain);
|
|
|
|
bool doEncryptECB(KviStr &plain,KviStr &encoded);
|
|
|
|
bool doEncryptCBC(KviStr &plain,KviStr &encoded);
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // COMPILE_CRYPT_SUPPORT
|
|
|
|
|
|
|
|
#endif // _LIBKVIRIJNDAEL_H_
|