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 <fstream.h>
00053 #include <strstream.h>
00054
00062 class Digest : public streambuf, public ostream
00063 {
00064 protected:
00065 Digest();
00066
00070 virtual void initDigest(void) = 0;
00071
00077 virtual unsigned getSize(void) = 0;
00078
00085 virtual unsigned getDigest(unsigned char *buffer) = 0;
00086
00093 virtual void putDigest(unsigned char *buffer, unsigned length) = 0;
00094
00100 virtual ostream &strDigest(ostream &os) = 0;
00101
00102 friend ostream &operator<<(ostream &os, Digest &ia)
00103 {return ia.strDigest(os);};
00104 };
00105
00112 class ChecksumDigest : public Digest
00113 {
00114 protected:
00115 unsigned char csum;
00116
00117 int overflow(int c);
00118
00119 ostream &strDigest(ostream &os);
00120
00121 public:
00122 ChecksumDigest();
00123
00124 void initDigest(void)
00125 {csum = 0;};
00126
00127 unsigned getSize(void)
00128 {return 1;};
00129
00130 unsigned getDigest(unsigned char *buffer);
00131
00132 void putDigest(unsigned char *buffer, unsigned length);
00133 };
00134
00141 class CRC16Digest : public Digest
00142 {
00143 protected:
00144 unsigned short crc16;
00145
00146 int overflow(int c);
00147
00148 ostream &strDigest(ostream &os);
00149
00150 public:
00151 CRC16Digest();
00152
00153 void initDigest(void)
00154 {crc16 = 0;};
00155
00156 unsigned getSize(void)
00157 {return 2;};
00158
00159 unsigned getDigest(unsigned char *buffer);
00160
00161 void putDigest(unsigned char *buffer, unsigned length);
00162 };
00163
00164 #ifdef __CCXX_NAMESPACE_H__
00165 #undef __CCXX_NAMESPACE_H__
00166 #include <cc++/namespace.h>
00167 #endif
00168
00169 #endif
00170