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
00035
00036
00037
00038
00039
00040
00041 #ifndef __CCXX_DIGEST_H__
00042 #define __CCXX_DIGEST_H__
00043
00044 #ifndef __CCXX_THREAD_H__
00045 #include <cc++/thread.h>
00046 #else
00047 #ifdef __CCXX_NAMESPACE_H__
00048 #include <cc++/macros.h>
00049 #endif
00050 #endif
00051
00052 #include <iostream>
00053 #include <fstream>
00054 #include <strstream>
00055
00056
00064 #if defined(STLPORT) || defined(__KCC)
00065 #define std::ostream std::ostream_withassign
00066 #endif
00067 class Digest : public std::streambuf, public std::ostream
00068 {
00069 protected:
00070 Digest();
00071
00075 virtual void initDigest(void) = 0;
00076
00082 virtual unsigned getSize(void) = 0;
00083
00090 virtual unsigned getDigest(unsigned char *buffer) = 0;
00091
00098 virtual void putDigest(unsigned char *buffer, unsigned length) = 0;
00099
00105 virtual std::ostream &strDigest(std::ostream &os) = 0;
00106
00107 friend std::ostream &operator<<(std::ostream &os, Digest &ia)
00108 {return ia.strDigest(os);};
00109 };
00110
00117 class ChecksumDigest : public Digest
00118 {
00119 protected:
00120 unsigned char csum;
00121
00122 int overflow(int c);
00123
00124 std::ostream &strDigest(std::ostream &os);
00125
00126 public:
00127 ChecksumDigest();
00128
00129 void initDigest(void)
00130 {csum = 0;};
00131
00132 unsigned getSize(void)
00133 {return 1;};
00134
00135 unsigned getDigest(unsigned char *buffer);
00136
00137 void putDigest(unsigned char *buffer, unsigned length);
00138 };
00139
00146 class CRC16Digest : public Digest
00147 {
00148 protected:
00149 unsigned short crc16;
00150
00151 int overflow(int c);
00152
00153 std::ostream &strDigest(std::ostream &os);
00154
00155 public:
00156 CRC16Digest();
00157
00158 void initDigest(void)
00159 {crc16 = 0;};
00160
00161 unsigned getSize(void)
00162 {return 2;};
00163
00164 unsigned getDigest(unsigned char *buffer);
00165
00166 void putDigest(unsigned char *buffer, unsigned length);
00167 };
00168
00169 #ifdef __CCXX_NAMESPACE_H__
00170 #undef __CCXX_NAMESPACE_H__
00171 #include <cc++/namespace.h>
00172 #endif
00173
00174 #endif
00175