WvStreams
wvdigest.h
1 /* -*- Mode: C++ -*-
2  * Worldvisions Tunnel Vision Software:
3  * Copyright (C) 1997-2002 Net Integration Technologies, Inc.
4  *
5  * MD5, SHA-1 and HMAC digest abstractions.
6  */
7 #ifndef __WVDIGEST_H
8 #define __WVDIGEST_H
9 
10 #include "wvencoder.h"
11 #include <stdint.h>
12 #include <openssl/evp.h>
13 
14 
31 class WvDigest : public WvEncoder
32 {
33 public:
35  virtual size_t digestsize() const = 0;
36 };
37 
38 
43 class WvEVPMDDigest : public WvDigest
44 {
45  friend class WvHMACDigest;
46  const EVP_MD *evpmd;
47  EVP_MD_CTX *evpctx;
48  bool active;
49 
50 public:
51  virtual ~WvEVPMDDigest();
52  virtual size_t digestsize() const;
53 
54 protected:
55  WvEVPMDDigest(const EVP_MD *_evpmd);
56  virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
57  bool flush); // consumes input
58  virtual bool _finish(WvBuf &outbuf); // outputs digest
59  virtual bool _reset(); // supported: resets digest value
60 
61  const EVP_MD *getevpmd()
62  { return evpmd; }
63 
64 private:
65  void cleanup();
66 };
67 
68 
73 class WvMD5Digest : public WvEVPMDDigest
74 {
75 public:
77  WvMD5Digest();
78  virtual ~WvMD5Digest() { }
79 };
80 
81 
87 {
88 public:
90  WvSHA1Digest();
91  virtual ~WvSHA1Digest() { }
92 };
93 
94 
100 class WvHMACDigest : public WvDigest
101 {
102  WvEVPMDDigest *digest;
103  unsigned char *key;
104  size_t keysize;
105  HMAC_CTX *hmacctx;
106  bool active;
107 
108 public:
117  WvHMACDigest(WvEVPMDDigest *_digest, const void *_key,
118  size_t _keysize);
119  virtual ~WvHMACDigest();
120  virtual size_t digestsize() const;
121 
122 protected:
123  virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
124  bool flush); // consumes input
125  virtual bool _finish(WvBuf &outbuf); // outputs digest
126  virtual bool _reset(); // supported: resets digest value
127 
128 private:
129  void cleanup();
130 };
131 
132 
137 class WvCrc32Digest : public WvDigest
138 {
139  uint32_t crc;
140 
141 public:
142  WvCrc32Digest();
143  virtual ~WvCrc32Digest() { }
144 
145  virtual size_t digestsize() const;
146  virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
147  bool flush); // consumes input
148  virtual bool _finish(WvBuf &outbuf); // outputs digest
149  virtual bool _reset(); // supported: resets digest value
150 };
151 
152 
157 class WvAdler32Digest : public WvDigest
158 {
159  uint32_t crc;
160 
161 public:
162  WvAdler32Digest();
163  virtual ~WvAdler32Digest() { }
164 
165  virtual size_t digestsize() const;
166  virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
167  bool flush); // consumes input
168  virtual bool _finish(WvBuf &outbuf); // outputs digest
169  virtual bool _reset(); // supported: resets digest value
170 };
171 
172 #endif // __WVDIGEST_H
WvEncoder
The base encoder class.
Definition: wvencoder.h:67
WvHMACDigest
HMAC Message Authentication Code.
Definition: wvdigest.h:100
WvHMACDigest::digestsize
virtual size_t digestsize() const
Returns the number of bytes in the message digest.
Definition: wvdigest.cc:166
WvCrc32Digest::_reset
virtual bool _reset()
Template method implementation of reset().
Definition: wvdigest.cc:194
WvCrc32Digest::_finish
virtual bool _finish(WvBuf &outbuf)
Template method implementation of finish().
Definition: wvdigest.cc:187
WvAdler32Digest
Adler32 checksum Digest length of 4 bytes.
Definition: wvdigest.h:157
WvMD5Digest::WvMD5Digest
WvMD5Digest()
Creates an MD5 digest encoder.
Definition: wvdigest.cc:88
WvEVPMDDigest::_encode
virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush)
Template method implementation of encode().
Definition: wvdigest.cc:31
WvDigest
Superclass for all message digests.
Definition: wvdigest.h:31
WvCrc32Digest
CRC32 checksum Digest length of 4 bytes.
Definition: wvdigest.h:137
WvSHA1Digest::WvSHA1Digest
WvSHA1Digest()
Creates an SHA1 digest encoder.
Definition: wvdigest.cc:95
WvSHA1Digest
SHA-1 Digest.
Definition: wvdigest.h:86
WvHMACDigest::_reset
virtual bool _reset()
Template method implementation of reset().
Definition: wvdigest.cc:145
WvHMACDigest::_encode
virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush)
Template method implementation of encode().
Definition: wvdigest.cc:120
WvEVPMDDigest
Definition: wvdigest.h:43
WvEVPMDDigest::digestsize
virtual size_t digestsize() const
Returns the number of bytes in the message digest.
Definition: wvdigest.cc:80
WvAdler32Digest::_encode
virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush)
Template method implementation of encode().
Definition: wvdigest.cc:213
WvBufBase< unsigned char >
Specialization of WvBufBase for unsigned char type buffers intended for use with raw memory buffers.
Definition: wvbuf.h:22
WvHMACDigest::WvHMACDigest
WvHMACDigest(WvEVPMDDigest *_digest, const void *_key, size_t _keysize)
Creates an HMAC digest encoder.
Definition: wvdigest.cc:101
WvAdler32Digest::_reset
virtual bool _reset()
Template method implementation of reset().
Definition: wvdigest.cc:229
WvAdler32Digest::digestsize
virtual size_t digestsize() const
Returns the number of bytes in the message digest.
Definition: wvdigest.cc:236
WvEncoder::flush
bool flush(WvBuf &inbuf, WvBuf &outbuf, bool finish=false)
Flushes the encoder and optionally finishes it.
Definition: wvencoder.h:163
WvMD5Digest
MD5 Digest.
Definition: wvdigest.h:73
WvHMACDigest::_finish
virtual bool _finish(WvBuf &outbuf)
Template method implementation of finish().
Definition: wvdigest.cc:133
WvEVPMDDigest::_reset
virtual bool _reset()
Template method implementation of reset().
Definition: wvdigest.cc:56
WvCrc32Digest::digestsize
virtual size_t digestsize() const
Returns the number of bytes in the message digest.
Definition: wvdigest.cc:201
WvDigest::digestsize
virtual size_t digestsize() const =0
Returns the number of bytes in the message digest.
WvCrc32Digest::_encode
virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush)
Template method implementation of encode().
Definition: wvdigest.cc:178
WvEVPMDDigest::_finish
virtual bool _finish(WvBuf &outbuf)
Template method implementation of finish().
Definition: wvdigest.cc:44
WvAdler32Digest::_finish
virtual bool _finish(WvBuf &outbuf)
Template method implementation of finish().
Definition: wvdigest.cc:222