WvStreams
|
00001 /* -*- Mode: C++ -*- 00002 * Worldvisions Tunnel Vision Software: 00003 * Copyright (C) 1997-2002 Net Integration Technologies, Inc. 00004 * 00005 * MD5, SHA-1 and HMAC digest abstractions. 00006 */ 00007 #ifndef __WVDIGEST_H 00008 #define __WVDIGEST_H 00009 00010 #include <stdint.h> 00011 #include "wvencoder.h" 00012 00013 struct env_md_st; 00014 struct env_md_ctx_st; 00015 struct hmac_ctx_st; 00016 00033 class WvDigest : public WvEncoder 00034 { 00035 public: 00037 virtual size_t digestsize() const = 0; 00038 }; 00039 00040 00045 class WvEVPMDDigest : public WvDigest 00046 { 00047 friend class WvHMACDigest; 00048 const env_md_st *evpmd; 00049 env_md_ctx_st *evpctx; 00050 bool active; 00051 00052 public: 00053 virtual ~WvEVPMDDigest(); 00054 virtual size_t digestsize() const; 00055 00056 protected: 00057 WvEVPMDDigest(const env_md_st *_evpmd); 00058 virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, 00059 bool flush); // consumes input 00060 virtual bool _finish(WvBuf &outbuf); // outputs digest 00061 virtual bool _reset(); // supported: resets digest value 00062 00063 const env_md_st *getevpmd() 00064 { return evpmd; } 00065 00066 private: 00067 void cleanup(); 00068 }; 00069 00070 00075 class WvMD5Digest : public WvEVPMDDigest 00076 { 00077 public: 00079 WvMD5Digest(); 00080 virtual ~WvMD5Digest() { } 00081 }; 00082 00083 00088 class WvSHA1Digest : public WvEVPMDDigest 00089 { 00090 public: 00092 WvSHA1Digest(); 00093 virtual ~WvSHA1Digest() { } 00094 }; 00095 00096 00102 class WvHMACDigest : public WvDigest 00103 { 00104 WvEVPMDDigest *digest; 00105 unsigned char *key; 00106 size_t keysize; 00107 hmac_ctx_st *hmacctx; 00108 bool active; 00109 00110 public: 00119 WvHMACDigest(WvEVPMDDigest *_digest, const void *_key, 00120 size_t _keysize); 00121 virtual ~WvHMACDigest(); 00122 virtual size_t digestsize() const; 00123 00124 protected: 00125 virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, 00126 bool flush); // consumes input 00127 virtual bool _finish(WvBuf &outbuf); // outputs digest 00128 virtual bool _reset(); // supported: resets digest value 00129 00130 private: 00131 void cleanup(); 00132 }; 00133 00134 00139 class WvCrc32Digest : public WvDigest 00140 { 00141 uint32_t crc; 00142 00143 public: 00144 WvCrc32Digest(); 00145 virtual ~WvCrc32Digest() { } 00146 00147 virtual size_t digestsize() const; 00148 virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, 00149 bool flush); // consumes input 00150 virtual bool _finish(WvBuf &outbuf); // outputs digest 00151 virtual bool _reset(); // supported: resets digest value 00152 }; 00153 00154 00159 class WvAdler32Digest : public WvDigest 00160 { 00161 uint32_t crc; 00162 00163 public: 00164 WvAdler32Digest(); 00165 virtual ~WvAdler32Digest() { } 00166 00167 virtual size_t digestsize() const; 00168 virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, 00169 bool flush); // consumes input 00170 virtual bool _finish(WvBuf &outbuf); // outputs digest 00171 virtual bool _reset(); // supported: resets digest value 00172 }; 00173 00174 #endif // __WVDIGEST_H