00001
00002
00003
00004
00005
00006
00007 #ifndef __WVDIGEST_H
00008 #define __WVDIGEST_H
00009
00010 #include "wvencoder.h"
00011
00012 struct env_md_st;
00013 struct env_md_ctx_st;
00014 struct hmac_ctx_st;
00015
00032 class WvDigest : public WvEncoder
00033 {
00034 public:
00036 virtual size_t digestsize() const = 0;
00037 };
00038
00039
00044 class WvEVPMDDigest : public WvDigest
00045 {
00046 friend class WvHMACDigest;
00047 const env_md_st *evpmd;
00048 env_md_ctx_st *evpctx;
00049 bool active;
00050
00051 public:
00052 virtual ~WvEVPMDDigest();
00053 virtual size_t digestsize() const;
00054
00055 protected:
00056 WvEVPMDDigest(const env_md_st *_evpmd);
00057 virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
00058 bool flush);
00059 virtual bool _finish(WvBuf &outbuf);
00060 virtual bool _reset();
00061
00062 const env_md_st *getevpmd()
00063 { return evpmd; }
00064
00065 private:
00066 void cleanup();
00067 };
00068
00069
00074 class WvMD5Digest : public WvEVPMDDigest
00075 {
00076 public:
00078 WvMD5Digest();
00079 virtual ~WvMD5Digest() { }
00080 };
00081
00082
00087 class WvSHA1Digest : public WvEVPMDDigest
00088 {
00089 public:
00091 WvSHA1Digest();
00092 virtual ~WvSHA1Digest() { }
00093 };
00094
00095
00101 class WvHMACDigest : public WvDigest
00102 {
00103 WvEVPMDDigest *digest;
00104 unsigned char *key;
00105 size_t keysize;
00106 hmac_ctx_st *hmacctx;
00107 bool active;
00108
00109 public:
00118 WvHMACDigest(WvEVPMDDigest *_digest, const void *_key,
00119 size_t _keysize);
00120 virtual ~WvHMACDigest();
00121 virtual size_t digestsize() const;
00122
00123 protected:
00124 virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
00125 bool flush);
00126 virtual bool _finish(WvBuf &outbuf);
00127 virtual bool _reset();
00128
00129 private:
00130 void cleanup();
00131 };
00132
00133
00138 class WvCrc32Digest : public WvDigest
00139 {
00140 unsigned long int crc;
00141
00142 public:
00143 WvCrc32Digest();
00144 virtual ~WvCrc32Digest() { }
00145
00146 virtual size_t digestsize() const;
00147 virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
00148 bool flush);
00149 virtual bool _finish(WvBuf &outbuf);
00150 virtual bool _reset();
00151 };
00152
00153
00158 class WvAdler32Digest : public WvDigest
00159 {
00160 unsigned long int crc;
00161
00162 public:
00163 WvAdler32Digest();
00164 virtual ~WvAdler32Digest() { }
00165
00166 virtual size_t digestsize() const;
00167 virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
00168 bool flush);
00169 virtual bool _finish(WvBuf &outbuf);
00170 virtual bool _reset();
00171 };
00172
00173 #endif // __WVDIGEST_H