Make WvStreams compile with gcc 4.4.
[wvstreams.git] / include / wvdigest.h
blobfdc39bd6ae086ae04a326ebaa6decf4c354ae11b
1 /* -*- Mode: C++ -*-
2 * Worldvisions Tunnel Vision Software:
3 * Copyright (C) 1997-2002 Net Integration Technologies, Inc.
5 * MD5, SHA-1 and HMAC digest abstractions.
6 */
7 #ifndef __WVDIGEST_H
8 #define __WVDIGEST_H
10 #include "wvencoder.h"
11 #include <stdint.h>
13 struct env_md_st;
14 struct env_md_ctx_st;
15 struct hmac_ctx_st;
17 /**
18 * Superclass for all message digests.
20 * All message digest encoders have the following semantics:
22 * - On encode() or flush(), data from the input buffer is
23 * consumed and a message digest function is applied to
24 * incrementally update the internal digest state.
25 * No output is ever generated.
26 * - On finish(), the message digest is finalized and its value
27 * is written to the output buffer. Afterwards, no new data
28 * can be processed unless reset() is called.
29 * - On reset(), the current digest state is discarded allowing
30 * a new stream of data to be processed.
33 class WvDigest : public WvEncoder
35 public:
36 /** Returns the number of bytes in the message digest. */
37 virtual size_t digestsize() const = 0;
41 /**
42 * @internal
43 * Base class for all digests constructed using the OpenSSL EVP API.
45 class WvEVPMDDigest : public WvDigest
47 friend class WvHMACDigest;
48 const env_md_st *evpmd;
49 env_md_ctx_st *evpctx;
50 bool active;
52 public:
53 virtual ~WvEVPMDDigest();
54 virtual size_t digestsize() const;
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
63 const env_md_st *getevpmd()
64 { return evpmd; }
66 private:
67 void cleanup();
71 /**
72 * MD5 Digest.
73 * Has a digest length of 128 bits.
75 class WvMD5Digest : public WvEVPMDDigest
77 public:
78 /** Creates an MD5 digest encoder. */
79 WvMD5Digest();
80 virtual ~WvMD5Digest() { }
84 /**
85 * SHA-1 Digest.
86 * Has a digest length of 160 bits.
88 class WvSHA1Digest : public WvEVPMDDigest
90 public:
91 /** Creates an SHA1 digest encoder. */
92 WvSHA1Digest();
93 virtual ~WvSHA1Digest() { }
97 /**
98 * HMAC Message Authentication Code.
99 * Has a digest length that equals that of its underlying
100 * message digest encoder.
102 class WvHMACDigest : public WvDigest
104 WvEVPMDDigest *digest;
105 unsigned char *key;
106 size_t keysize;
107 hmac_ctx_st *hmacctx;
108 bool active;
110 public:
112 * Creates an HMAC digest encoder.
114 * "digest" is the message digest encoder to use as a
115 * hash function
116 * "key" is the authentication key
117 * "keysize" is the key size in bytes
119 WvHMACDigest(WvEVPMDDigest *_digest, const void *_key,
120 size_t _keysize);
121 virtual ~WvHMACDigest();
122 virtual size_t digestsize() const;
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
130 private:
131 void cleanup();
136 * CRC32 checksum
137 * Digest length of 4 bytes.
139 class WvCrc32Digest : public WvDigest
141 uint32_t crc;
143 public:
144 WvCrc32Digest();
145 virtual ~WvCrc32Digest() { }
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
156 * Adler32 checksum
157 * Digest length of 4 bytes.
159 class WvAdler32Digest : public WvDigest
161 uint32_t crc;
163 public:
164 WvAdler32Digest();
165 virtual ~WvAdler32Digest() { }
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
174 #endif // __WVDIGEST_H