00001
00002
00003
00004
00005
00006
00007
#ifndef __WVDIGEST_H
00008
#define __WVDIGEST_H
00009
00010
#include "wvencoder.h"
00011
00012
struct env_md_st;
00013
struct env_md_ctx_st;
00014
struct hmac_ctx_st;
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 class WvDigest :
public WvEncoder
00033 {
00034
public:
00035
00036
virtual size_t
digestsize()
const = 0;
00037 };
00038
00039
00040
00041
00042
00043
00044 class WvEVPMDDigest :
public WvDigest
00045 {
00046
friend class WvHMACDigest;
00047
const env_md_st *evpmd;
00048 env_md_ctx_st *evpctx;
00049
bool active;
00050
00051
public:
00052
virtual ~WvEVPMDDigest();
00053
virtual size_t
digestsize()
const;
00054
00055
protected:
00056
WvEVPMDDigest(
const env_md_st *_evpmd);
00057
virtual bool _encode(
WvBuf &inbuf,
WvBuf &outbuf,
00058
bool flush);
00059
virtual bool _finish(
WvBuf &outbuf);
00060
virtual bool _reset();
00061
00062 const env_md_st *
getevpmd()
00063 {
return evpmd; }
00064
00065
private:
00066
void cleanup();
00067 };
00068
00069
00070
00071
00072
00073
00074 class WvMD5Digest :
public WvEVPMDDigest
00075 {
00076
public:
00077
00078
WvMD5Digest();
00079 virtual ~WvMD5Digest() { }
00080 };
00081
00082
00083
00084
00085
00086
00087 class WvSHA1Digest :
public WvEVPMDDigest
00088 {
00089
public:
00090
00091
WvSHA1Digest();
00092 virtual ~WvSHA1Digest() { }
00093 };
00094
00095
00096
00097
00098
00099
00100
00101 class WvHMACDigest :
public WvDigest
00102 {
00103
WvEVPMDDigest *digest;
00104
unsigned char *key;
00105 size_t keysize;
00106 hmac_ctx_st *hmacctx;
00107
bool active;
00108
00109
public:
00110
00111
00112
00113
00114
00115
00116
00117
00118
WvHMACDigest(
WvEVPMDDigest *_digest,
const void *_key,
00119 size_t _keysize);
00120
virtual ~WvHMACDigest();
00121
virtual size_t
digestsize()
const;
00122
00123
protected:
00124
virtual bool _encode(
WvBuf &inbuf,
WvBuf &outbuf,
00125
bool flush);
00126
virtual bool _finish(
WvBuf &outbuf);
00127
virtual bool _reset();
00128
00129
private:
00130
void cleanup();
00131 };
00132
00133
#endif // __WVDIGEST_H