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