00001
00002
00003
00004
00005
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);
00060 virtual bool _finish(WvBuf &outbuf);
00061 virtual bool _reset();
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);
00127 virtual bool _finish(WvBuf &outbuf);
00128 virtual bool _reset();
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);
00150 virtual bool _finish(WvBuf &outbuf);
00151 virtual bool _reset();
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);
00170 virtual bool _finish(WvBuf &outbuf);
00171 virtual bool _reset();
00172 };
00173
00174 #endif // __WVDIGEST_H