2 * Worldvisions Tunnel Vision Software:
3 * Copyright (C) 1997-2002 Net Integration Technologies, Inc.
5 * MD5, SHA-1 and HMAC digest abstractions.
10 #include "wvencoder.h"
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
36 /** Returns the number of bytes in the message digest. */
37 virtual size_t digestsize() const = 0;
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
;
53 virtual ~WvEVPMDDigest();
54 virtual size_t digestsize() const;
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()
73 * Has a digest length of 128 bits.
75 class WvMD5Digest
: public WvEVPMDDigest
78 /** Creates an MD5 digest encoder. */
80 virtual ~WvMD5Digest() { }
86 * Has a digest length of 160 bits.
88 class WvSHA1Digest
: public WvEVPMDDigest
91 /** Creates an SHA1 digest encoder. */
93 virtual ~WvSHA1Digest() { }
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
;
107 hmac_ctx_st
*hmacctx
;
112 * Creates an HMAC digest encoder.
114 * "digest" is the message digest encoder to use as a
116 * "key" is the authentication key
117 * "keysize" is the key size in bytes
119 WvHMACDigest(WvEVPMDDigest
*_digest
, const void *_key
,
121 virtual ~WvHMACDigest();
122 virtual size_t digestsize() const;
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
137 * Digest length of 4 bytes.
139 class WvCrc32Digest
: public WvDigest
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
157 * Digest length of 4 bytes.
159 class WvAdler32Digest
: public WvDigest
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