|
digest.hGo to the documentation of this file.00001 // Copyright (C) 1999-2000 Open Source Telecom Corporation. 00002 // 00003 // This program is free software; you can redistribute it and/or modify 00004 // it under the terms of the GNU General Public License as published by 00005 // the Free Software Foundation; either version 2 of the License, or 00006 // (at your option) any later version. 00007 // 00008 // This program is distributed in the hope that it will be useful, 00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00011 // GNU General Public License for more details. 00012 // 00013 // You should have received a copy of the GNU General Public License 00014 // along with this program; if not, write to the Free Software 00015 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00016 // 00017 // As a special exception to the GNU General Public License, permission is 00018 // granted for additional uses of the text contained in its release 00019 // of Common C++. 00020 // 00021 // The exception is that, if you link the Common C++ library with other 00022 // files to produce an executable, this does not by itself cause the 00023 // resulting executable to be covered by the GNU General Public License. 00024 // Your use of that executable is in no way restricted on account of 00025 // linking the Common C++ library code into it. 00026 // 00027 // This exception does not however invalidate any other reasons why 00028 // the executable file might be covered by the GNU General Public License. 00029 // 00030 // This exception applies only to the code released under the 00031 // name Common C++. If you copy code from other releases into a copy of 00032 // Common C++, as the General Public License permits, the exception does 00033 // not apply to the code that you add in this way. To avoid misleading 00034 // anyone as to the status of such modified files, you must delete 00035 // this exception notice from them. 00036 // 00037 // If you write modifications of your own for Common C++, it is your choice 00038 // whether to permit this exception to apply to your modifications. 00039 // If you do not wish that, delete this exception notice. 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.h> 00053 #include <fstream.h> 00054 #include <strstream.h> 00055 00063 #if defined(STLPORT) || defined(__KCC) 00064 #define ostream ostream_withassign 00065 #endif 00066 class Digest : public streambuf, public ostream 00067 { 00068 protected: 00069 Digest(); 00070 00074 virtual void initDigest(void) = 0; 00075 00081 virtual unsigned getSize(void) = 0; 00082 00089 virtual unsigned getDigest(unsigned char *buffer) = 0; 00090 00097 virtual void putDigest(unsigned char *buffer, unsigned length) = 0; 00098 00104 virtual ostream &strDigest(ostream &os) = 0; 00105 00106 friend ostream &operator<<(ostream &os, Digest &ia) 00107 {return ia.strDigest(os);}; 00108 }; 00109 00116 class ChecksumDigest : public Digest 00117 { 00118 protected: 00119 unsigned char csum; 00120 00121 int overflow(int c); 00122 00123 ostream &strDigest(ostream &os); 00124 00125 public: 00126 ChecksumDigest(); 00127 00128 void initDigest(void) 00129 {csum = 0;}; 00130 00131 unsigned getSize(void) 00132 {return 1;}; 00133 00134 unsigned getDigest(unsigned char *buffer); 00135 00136 void putDigest(unsigned char *buffer, unsigned length); 00137 }; 00138 00145 class CRC16Digest : public Digest 00146 { 00147 protected: 00148 unsigned short crc16; 00149 00150 int overflow(int c); 00151 00152 ostream &strDigest(ostream &os); 00153 00154 public: 00155 CRC16Digest(); 00156 00157 void initDigest(void) 00158 {crc16 = 0;}; 00159 00160 unsigned getSize(void) 00161 {return 2;}; 00162 00163 unsigned getDigest(unsigned char *buffer); 00164 00165 void putDigest(unsigned char *buffer, unsigned length); 00166 }; 00167 00168 #ifdef __CCXX_NAMESPACE_H__ 00169 #undef __CCXX_NAMESPACE_H__ 00170 #include <cc++/namespace.h> 00171 #endif 00172 00173 #endif 00174 Generated at Fri Mar 23 10:47:54 2001 for CommonC++ by 1.2.1 written by Dimitri van Heesch, © 1997-2000 |