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
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 class WvDigest : public WvEncoder
00033 {
00034 public:
00035
00036 virtual size_t digestsize() const = 0;
00037 };
00038
00039
00040
00041
00042
00043
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
00070
00071
00072
00073
00074 class WvMD5Digest : public WvEVPMDDigest
00075 {
00076 public:
00077
00078 WvMD5Digest();
00079 virtual ~WvMD5Digest() { }
00080 };
00081
00082
00083
00084
00085
00086
00087 class WvSHA1Digest : public WvEVPMDDigest
00088 {
00089 public:
00090
00091 WvSHA1Digest();
00092 virtual ~WvSHA1Digest() { }
00093 };
00094
00095
00096
00097
00098
00099
00100
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:
00110
00111
00112
00113
00114
00115
00116
00117
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 #endif // __WVDIGEST_H