WvStreams
include/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
31class WvDigest : public WvEncoder
32{
33public:
35 virtual size_t digestsize() const = 0;
36};
37
38
43class WvEVPMDDigest : public WvDigest
44{
45 friend class WvHMACDigest;
46 const EVP_MD *evpmd;
47 EVP_MD_CTX *evpctx;
48 bool active;
49
50public:
51 virtual ~WvEVPMDDigest();
52 virtual size_t digestsize() const;
53
54protected:
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
64private:
65 void cleanup();
66};
67
68
73class WvMD5Digest : public WvEVPMDDigest
74{
75public:
78 virtual ~WvMD5Digest() { }
79};
80
81
86class WvSHA1Digest : public WvEVPMDDigest
87{
88public:
91 virtual ~WvSHA1Digest() { }
92};
93
94
100class WvHMACDigest : public WvDigest
101{
102 WvEVPMDDigest *digest;
103 unsigned char *key;
104 size_t keysize;
105 HMAC_CTX *hmacctx;
106 bool active;
107
108public:
117 WvHMACDigest(WvEVPMDDigest *_digest, const void *_key,
118 size_t _keysize);
119 virtual ~WvHMACDigest();
120 virtual size_t digestsize() const;
121
122protected:
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
128private:
129 void cleanup();
130};
131
132
137class WvCrc32Digest : public WvDigest
138{
139 uint32_t crc;
140
141public:
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
157class WvAdler32Digest : public WvDigest
158{
159 uint32_t crc;
160
161public:
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
Adler32 checksum Digest length of 4 bytes.
virtual size_t digestsize() const
Returns the number of bytes in the message digest.
virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush)
Template method implementation of encode().
virtual bool _finish(WvBuf &outbuf)
Template method implementation of finish().
virtual bool _reset()
Template method implementation of reset().
CRC32 checksum Digest length of 4 bytes.
virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush)
Template method implementation of encode().
virtual size_t digestsize() const
Returns the number of bytes in the message digest.
virtual bool _reset()
Template method implementation of reset().
virtual bool _finish(WvBuf &outbuf)
Template method implementation of finish().
Superclass for all message digests.
virtual size_t digestsize() const =0
Returns the number of bytes in the message digest.
virtual bool _reset()
Template method implementation of reset().
virtual size_t digestsize() const
Returns the number of bytes in the message digest.
virtual bool _finish(WvBuf &outbuf)
Template method implementation of finish().
virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush)
Template method implementation of encode().
bool flush(WvBuf &inbuf, WvBuf &outbuf, bool finish=false)
Flushes the encoder and optionally finishes it.
virtual bool _finish(WvBuf &outbuf)
Template method implementation of finish().
virtual bool _reset()
Template method implementation of reset().
virtual size_t digestsize() const
Returns the number of bytes in the message digest.
virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush)
Template method implementation of encode().
WvHMACDigest(WvEVPMDDigest *_digest, const void *_key, size_t _keysize)
Creates an HMAC digest encoder.
WvMD5Digest()
Creates an MD5 digest encoder.
WvSHA1Digest()
Creates an SHA1 digest encoder.