00001 //---------------------------------------------------------------------------- 00004 // 00005 // (C) 2003-2006 Celartem Technology Inc. All rights reserved. 00006 //---------------------------------------------------------------------------- 00007 00008 #ifndef _cel_checksum_h_ 00009 #define _cel_checksum_h_ 00010 00011 #include "cel_iostream.h" 00012 00013 namespace Celartem 00014 { 00015 //------------------------------------------------------------------------ 00022 class Checksum : public Referable 00023 { 00024 public: 00029 virtual void reset() = 0; 00030 00038 virtual void update(const void *inBuffer, size_t inSize) = 0; 00039 00046 virtual void update(const String& inString) = 0; 00047 00055 virtual size_t getSumSize() = 0; 00056 00064 virtual const u8 *getCurrentSum() = 0; 00065 }; 00066 00067 //------------------------------------------------------------------------ 00072 class MD5Checksum : public Checksum 00073 { 00074 public: 00081 static AutoPtr<MD5Checksum> create(); 00082 }; 00083 00084 //------------------------------------------------------------------------ 00089 class SHA1Checksum : public Checksum 00090 { 00091 public: 00098 static AutoPtr<SHA1Checksum> create(); 00099 }; 00100 00101 //------------------------------------------------------------------------ 00106 class SHA256Checksum : public Checksum 00107 { 00108 public: 00115 static AutoPtr<SHA256Checksum> create(); 00116 }; 00117 00118 //------------------------------------------------------------------------ 00162 //------------------------------------------------------------------------ 00168 class ChecksumStream : public Stream 00169 { 00170 public: 00176 virtual void writeSum(Stream *inStream = NULL) = 0; 00177 00187 virtual bool verifySum(Stream *inStream = NULL) = 0; 00188 00193 virtual void resetSum() = 0; 00194 00202 virtual const u8 *getCurrentSum() = 0; 00203 00211 virtual size_t getSumSize() const = 0; 00212 }; 00213 00214 //------------------------------------------------------------------------ 00219 class MD5Stream : public ChecksumStream 00220 { 00221 public: 00229 static AutoPtr<MD5Stream> create(Stream *inStream); 00230 }; 00231 00232 //------------------------------------------------------------------------ 00237 class SHA1Stream : public ChecksumStream 00238 { 00239 public: 00247 static AutoPtr<SHA1Stream> create(Stream *inStream); 00248 }; 00249 00250 //------------------------------------------------------------------------ 00255 class SHA256Stream : public ChecksumStream 00256 { 00257 public: 00265 static AutoPtr<SHA256Stream> create(Stream *inStream); 00266 }; 00267 00268 } // namespace Celartem 00269 00270 #endif // _cel_checksum_h_