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
00071 class KCodecs
00072 {
00073 public:
00074
00084 static QCString quotedPrintableEncode(const QByteArray & in,
00085 bool useCRLF = true);
00086
00099 static QCString quotedPrintableEncode(const QCString & str,
00100 bool useCRLF = true);
00101
00121 static void quotedPrintableEncode(const QByteArray & in, QByteArray& out,
00122 bool useCRLF);
00123
00132 static QCString quotedPrintableDecode(const QByteArray & in);
00133
00143 static QCString quotedPrintableDecode(const QCString & str);
00144
00164 static void quotedPrintableDecode(const QByteArray & in, QByteArray& out);
00165
00166
00178 static QCString uuencode( const QByteArray& in );
00179
00189 static QCString uuencode( const QCString& str );
00190
00206 static void uuencode( const QByteArray& in, QByteArray& out );
00207
00218 static QCString uudecode( const QByteArray& in );
00219
00229 static QCString uudecode( const QCString& str );
00230
00250 static void uudecode( const QByteArray& in, QByteArray& out );
00251
00252
00266 static QCString base64Encode( const QByteArray& in, bool insertLFs = false);
00267
00278 static QCString base64Encode( const QCString& str, bool insertLFs = false );
00279
00301 static void base64Encode( const QByteArray& in, QByteArray& out,
00302 bool insertLFs = false );
00303
00311 static QCString base64Decode( const QByteArray& in );
00312
00322 static QCString base64Decode( const QCString& str );
00323
00341 static void base64Decode( const QByteArray& in, QByteArray& out );
00342
00343
00344 private:
00345 KCodecs();
00346
00347 private:
00348 static const char UUEncMap[64];
00349 static const char UUDecMap[128];
00350 static const char Base64EncMap[64];
00351 static const char Base64DecMap[128];
00352 static const char hexChars[16];
00353 static const unsigned int maxQPLineLength;
00354 };
00355
00356 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