ultimatepp/bazaar/AESStream/AESStream.h
koldo 4d9b8a64a3 AESStream: Added Core/SSL
git-svn-id: svn://ultimatepp.org/upp/trunk@6337 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2013-09-13 19:44:26 +00:00

82 lines
2 KiB
C++

#ifndef _SSLTest_AESStream_h_
#define _SSLTest_AESStream_h_
#include <Core/Core.h>
#include <openssl/aes.h>
using namespace Upp;
//----------------------------------------------------------------------------------------------
String AESRandomString(int length);
String AESPadString(const String &s, int l);
//----------------------------------------------------------------------------------------------
class AESEncoderStream
{
public:
AESEncoderStream(qword size, const String &key) throw (const char *);
int AddData(const String &);
String GetEncryptedData();
private:
String GetHeader();
qword size,
blocks,
blocksDone;
AES_KEY key;
String data;
const String iv0;
StringBuffer iv;
bool encodedHeader;
};
inline String & operator << (String &s, AESEncoderStream &stream)
{
s << stream.GetEncryptedData();
return s;
}
inline AESEncoderStream & operator << (AESEncoderStream &stream, const String &s)
{
stream.AddData(s);
return stream;
}
//----------------------------------------------------------------------------------------------
class AESDecoderStream
{
public:
AESDecoderStream(const String &key) throw (const char *);
int AddData(const String &);
String GetDecryptedData() throw (const char *); //выброс исключения если ключ неверный
qword GetSize() {return size;}
private:
qword size,
sizeDone;
AES_KEY key;
String data;
StringBuffer iv;
bool decodedHeader;
};
inline String & operator << (String &s, AESDecoderStream &stream)
{
s << stream.GetDecryptedData();
return s;
}
inline AESDecoderStream & operator << (AESDecoderStream &stream, const String &s)
{
stream.AddData(s);
return stream;
}
//----------------------------------------------------------------------------------------------
extern const dword AES_CONTAINER_DWORD_HEADER;
#endif