00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TMD5
00013 #define ROOT_TMD5
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef ROOT_Rtypes
00037 #include "Rtypes.h"
00038 #endif
00039
00040
00041 class TBuffer;
00042 class TMD5;
00043 Bool_t operator==(const TMD5 &m1, const TMD5 &m2);
00044
00045
00046 class TMD5 {
00047
00048 friend Bool_t operator==(const TMD5 &m1, const TMD5 &m2);
00049
00050 private:
00051 UInt_t fBuf[4];
00052 UInt_t fBits[2];
00053 UChar_t fIn[64];
00054 UChar_t fDigest[16];
00055 Bool_t fFinalized;
00056
00057 void Transform(UInt_t buf[4], const UChar_t in[64]);
00058 void Encode(UChar_t *out, const UInt_t *in, UInt_t len);
00059 void Decode(UInt_t *out, const UChar_t *in, UInt_t len);
00060
00061 public:
00062 TMD5();
00063 TMD5(const UChar_t *digest);
00064 TMD5(const TMD5 &md5);
00065 virtual ~TMD5() { }
00066
00067 TMD5 &operator=(const TMD5 &rhs);
00068
00069 void Update(const UChar_t *buf, UInt_t len);
00070 void Final();
00071 void Final(UChar_t digest[16]);
00072 void Print() const;
00073 const char *AsString() const;
00074
00075 Int_t SetDigest(const char *md5ascii);
00076
00077 static TMD5 *ReadChecksum(const char *file);
00078 static Int_t WriteChecksum(const char *file, const TMD5 *md5);
00079
00080 static TMD5 *FileChecksum(const char *file);
00081 static Int_t FileChecksum(const char *file, UChar_t digest[16]);
00082
00083 ClassDef(TMD5,1)
00084 };
00085
00086 inline TBuffer &operator>>(TBuffer &buf, TMD5 &md5)
00087 { md5.Streamer(buf); return buf; }
00088
00089
00090 TBuffer &operator<<(TBuffer &buf, const TMD5 &md5);
00091
00092 inline Bool_t operator!=(const TMD5 &m1, const TMD5 &m2)
00093 { return !(m1 == m2); }
00094
00095
00096 #endif