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 
13 struct env_md_st;
14 struct env_md_ctx_st;
15 struct hmac_ctx_st;
16 
33 class WvDigest : public WvEncoder
34 {
35 public:
37  virtual size_t digestsize() const = 0;
38 };
39 
40 
45 class WvEVPMDDigest : public WvDigest
46 {
47  friend class WvHMACDigest;
48  const env_md_st *evpmd;
49  env_md_ctx_st *evpctx;
50  bool active;
51 
52 public:
53  virtual ~WvEVPMDDigest();
54  virtual size_t digestsize() const;
55 
56 protected:
57  WvEVPMDDigest(const env_md_st *_evpmd);
58  virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
59  bool flush); // consumes input
60  virtual bool _finish(WvBuf &outbuf); // outputs digest
61  virtual bool _reset(); // supported: resets digest value
62 
63  const env_md_st *getevpmd()
64  { return evpmd; }
65 
66 private:
67  void cleanup();
68 };
69 
70 
75 class WvMD5Digest : public WvEVPMDDigest
76 {
77 public:
79  WvMD5Digest();
80  virtual ~WvMD5Digest() { }
81 };
82 
83 
89 {
90 public:
92  WvSHA1Digest();
93  virtual ~WvSHA1Digest() { }
94 };
95 
96 
102 class WvHMACDigest : public WvDigest
103 {
104  WvEVPMDDigest *digest;
105  unsigned char *key;
106  size_t keysize;
107  hmac_ctx_st *hmacctx;
108  bool active;
109 
110 public:
119  WvHMACDigest(WvEVPMDDigest *_digest, const void *_key,
120  size_t _keysize);
121  virtual ~WvHMACDigest();
122  virtual size_t digestsize() const;
123 
124 protected:
125  virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
126  bool flush); // consumes input
127  virtual bool _finish(WvBuf &outbuf); // outputs digest
128  virtual bool _reset(); // supported: resets digest value
129 
130 private:
131  void cleanup();
132 };
133 
134 
139 class WvCrc32Digest : public WvDigest
140 {
141  uint32_t crc;
142 
143 public:
144  WvCrc32Digest();
145  virtual ~WvCrc32Digest() { }
146 
147  virtual size_t digestsize() const;
148  virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
149  bool flush); // consumes input
150  virtual bool _finish(WvBuf &outbuf); // outputs digest
151  virtual bool _reset(); // supported: resets digest value
152 };
153 
154 
159 class WvAdler32Digest : public WvDigest
160 {
161  uint32_t crc;
162 
163 public:
164  WvAdler32Digest();
165  virtual ~WvAdler32Digest() { }
166 
167  virtual size_t digestsize() const;
168  virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
169  bool flush); // consumes input
170  virtual bool _finish(WvBuf &outbuf); // outputs digest
171  virtual bool _reset(); // supported: resets digest value
172 };
173 
174 #endif // __WVDIGEST_H
bool flush(WvBuf &inbuf, WvBuf &outbuf, bool finish=false)
Flushes the encoder and optionally finishes it.
Definition: wvencoder.h:163
virtual size_t digestsize() const =0
Returns the number of bytes in the message digest.
Adler32 checksum Digest length of 4 bytes.
Definition: wvdigest.h:159
CRC32 checksum Digest length of 4 bytes.
Definition: wvdigest.h:139
The base encoder class.
Definition: wvencoder.h:67
virtual bool _reset()
Template method implementation of reset().
Definition: wvencoder.h:498
HMAC Message Authentication Code.
Definition: wvdigest.h:102
virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush)=0
Template method implementation of encode().
virtual bool _finish(WvBuf &outbuf)
Template method implementation of finish().
Definition: wvencoder.h:483
SHA-1 Digest.
Definition: wvdigest.h:88
Specialization of WvBufBase for unsigned char type buffers intended for use with raw memory buffers...
Definition: wvbuf.h:22
MD5 Digest.
Definition: wvdigest.h:75
Superclass for all message digests.
Definition: wvdigest.h:33