wvdigest.h

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 "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); // consumes input
00059     virtual bool _finish(WvBuf &outbuf); // outputs digest
00060     virtual bool _reset(); // supported: resets digest value
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); // consumes input
00126     virtual bool _finish(WvBuf &outbuf); // outputs digest
00127     virtual bool _reset(); // supported: resets digest value
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); // consumes input
00149     virtual bool _finish(WvBuf &outbuf); // outputs digest
00150     virtual bool _reset(); // supported: resets digest value
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); // consumes input
00169     virtual bool _finish(WvBuf &outbuf); // outputs digest
00170     virtual bool _reset(); // supported: resets digest value
00171 };
00172 
00173 #endif // __WVDIGEST_H

Generated on Wed Jul 12 17:53:20 2006 for WvStreams by  doxygen 1.4.7