00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
#ifndef _KMDBASE_H
00035
#define _KMDBASE_H
00036
00037
#define KBase64 KCodecs
00038
00039
#include <qglobal.h>
00040
#include <qstring.h>
00041
#include <qiodevice.h>
00042
00073 class KCodecs
00074 {
00075
public:
00076
00086
static QCString quotedPrintableEncode(
const QByteArray & in,
00087
bool useCRLF =
true);
00088
00101
static QCString quotedPrintableEncode(
const QCString & str,
00102
bool useCRLF =
true);
00103
00123
static void quotedPrintableEncode(
const QByteArray & in,
QByteArray& out,
00124
bool useCRLF);
00125
00134
static QCString quotedPrintableDecode(
const QByteArray & in);
00135
00145
static QCString quotedPrintableDecode(
const QCString & str);
00146
00166
static void quotedPrintableDecode(
const QByteArray & in,
QByteArray& out);
00167
00168
00180
static QCString uuencode(
const QByteArray& in );
00181
00191
static QCString uuencode(
const QCString& str );
00192
00208
static void uuencode(
const QByteArray& in,
QByteArray& out );
00209
00220
static QCString uudecode(
const QByteArray& in );
00221
00231
static QCString uudecode(
const QCString& str );
00232
00252
static void uudecode(
const QByteArray& in,
QByteArray& out );
00253
00254
00268
static QCString base64Encode(
const QByteArray& in,
bool insertLFs =
false);
00269
00280
static QCString base64Encode(
const QCString& str,
bool insertLFs =
false );
00281
00303
static void base64Encode(
const QByteArray& in,
QByteArray& out,
00304
bool insertLFs =
false );
00305
00313
static QCString base64Decode(
const QByteArray& in );
00314
00324
static QCString base64Decode(
const QCString& str );
00325
00343
static void base64Decode(
const QByteArray& in,
QByteArray& out );
00344
00345
00346
private:
00347
KCodecs();
00348
00349
private:
00350
static const char UUEncMap[64];
00351
static const char UUDecMap[128];
00352
static const char Base64EncMap[64];
00353
static const char Base64DecMap[128];
00354
static const char hexChars[16];
00355
static const unsigned int maxQPLineLength;
00356 };
00357
00358
class KMD5Private;
00404 class KMD5
00405 {
00406
public:
00407
00408
typedef unsigned char Digest[16];
00409
00410
KMD5();
00411
00420
KMD5(
const char* in,
int len = -1);
00421
00427
KMD5(
const QByteArray& a );
00428
00434
KMD5(
const QCString& a );
00435
00444 void update(
const char* in,
int len = -1) { update(reinterpret_cast<const unsigned char*>(in), len); }
00445
00449
void update(
const unsigned char* in,
int len = -1);
00450
00456
void update(
const QByteArray& in );
00457
00463
void update(
const QCString& in );
00464
00476
bool update(
QIODevice& file);
00477
00483
void reset();
00484
00488
const Digest&
rawDigest ();
00489
00499
void rawDigest( KMD5::Digest& bin );
00500
00505
QCString hexDigest ();
00506
00510
void hexDigest(
QCString&);
00511
00516
QCString base64Digest ();
00517
00522
bool verify(
const KMD5::Digest& digest);
00523
00527
bool verify(
const QCString&);
00528
00529
protected:
00534
void transform(
const unsigned char buffer[64] );
00535
00539
void finalize();
00540
00541
private:
00542
KMD5(
const KMD5& u);
00543
KMD5& operator=(
const KMD5& md);
00544
00545
void init();
00546
void encode(
unsigned char* output, Q_UINT32 *in, Q_UINT32 len );
00547
void decode( Q_UINT32 *output,
const unsigned char* in, Q_UINT32 len );
00548
00549 Q_UINT32 rotate_left( Q_UINT32 x, Q_UINT32 n );
00550 Q_UINT32 F( Q_UINT32 x, Q_UINT32 y, Q_UINT32 z );
00551 Q_UINT32 G( Q_UINT32 x, Q_UINT32 y, Q_UINT32 z );
00552 Q_UINT32 H( Q_UINT32 x, Q_UINT32 y, Q_UINT32 z );
00553 Q_UINT32 I( Q_UINT32 x, Q_UINT32 y, Q_UINT32 z );
00554
void FF( Q_UINT32& a, Q_UINT32 b, Q_UINT32 c, Q_UINT32 d, Q_UINT32 x,
00555 Q_UINT32 s, Q_UINT32 ac );
00556
void GG( Q_UINT32& a, Q_UINT32 b, Q_UINT32 c, Q_UINT32 d, Q_UINT32 x,
00557 Q_UINT32 s, Q_UINT32 ac );
00558
void HH( Q_UINT32& a, Q_UINT32 b, Q_UINT32 c, Q_UINT32 d, Q_UINT32 x,
00559 Q_UINT32 s, Q_UINT32 ac );
00560
void II( Q_UINT32& a, Q_UINT32 b, Q_UINT32 c, Q_UINT32 d, Q_UINT32 x,
00561 Q_UINT32 s, Q_UINT32 ac );
00562
00563
private:
00564 Q_UINT32 m_state[4];
00565 Q_UINT32 m_count[2];
00566 Q_UINT8 m_buffer[64];
00567 Digest m_digest;
00568
bool m_finalized;
00569
00570 KMD5Private* d;
00571 };
00572
#endif