8 #include "wvserialize.h"
9 #include <openssl/evp.h>
10 #include <openssl/hmac.h>
16 WvEVPMDDigest::WvEVPMDDigest(
const EVP_MD*_evpmd) :
17 evpmd(_evpmd), active(false)
19 evpctx = EVP_MD_CTX_new();
24 WvEVPMDDigest::~WvEVPMDDigest()
27 EVP_MD_CTX_free(evpctx);
37 const unsigned char *data = inbuf.
get(len);
38 EVP_DigestUpdate(evpctx, data, len);
47 unsigned char digest[EVP_MAX_MD_SIZE];
49 EVP_DigestFinal(evpctx, digest, & size);
51 outbuf.put(digest, size);
63 EVP_DigestInit(evpctx, evpmd);
69 void WvEVPMDDigest::cleanup()
74 unsigned char digest[EVP_MAX_MD_SIZE];
75 EVP_DigestFinal(evpctx, digest, NULL);
82 return EVP_MD_size(evpmd);
102 const void *_key,
size_t _keysize) :
103 digest(_digest), keysize(_keysize), active(false)
105 key =
new unsigned char[keysize];
106 memcpy(key, _key, keysize);
107 hmacctx = HMAC_CTX_new();
111 WvHMACDigest::~WvHMACDigest()
114 HMAC_CTX_free(hmacctx);
126 const unsigned char *data = inbuf.
get(len);
127 HMAC_Update(hmacctx, data, len);
136 unsigned char digest[EVP_MAX_MD_SIZE];
138 HMAC_Final(hmacctx, digest, & size);
140 outbuf.put(digest, size);
148 HMAC_Init(hmacctx, key, keysize, digest->getevpmd());
154 void WvHMACDigest::cleanup()
159 unsigned char digest[EVP_MAX_MD_SIZE];
160 HMAC_Final(hmacctx, digest, NULL);
172 WvCrc32Digest::WvCrc32Digest()
182 crc = crc32(crc, inbuf.
get(len), len);
189 wv_serialize(outbuf, crc);
196 crc = crc32(0, NULL, 0);
207 WvAdler32Digest::WvAdler32Digest()
217 crc = adler32(crc, inbuf.
get(len), len);
224 wv_serialize(outbuf, crc);
231 crc = adler32(0, NULL, 0);
const T * get(size_t count)
Reads exactly the specified number of elements and returns a pointer to a storage location owned by t...
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().
size_t optgettable() const
Returns the optimal maximum number of elements in the buffer currently available for reading without ...
WvMD5Digest()
Creates an MD5 digest encoder.
virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush)
Template method implementation of encode().
WvSHA1Digest()
Creates an SHA1 digest encoder.
virtual bool _reset()
Template method implementation of reset().
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 _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush)
Template method implementation of encode().
Specialization of WvBufBase for unsigned char type buffers intended for use with raw memory buffers.
WvHMACDigest(WvEVPMDDigest *_digest, const void *_key, size_t _keysize)
Creates an HMAC digest encoder.
virtual bool _reset()
Template method implementation of reset().
#define deletev
Remplacement for delete[].
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 _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().
virtual bool _finish(WvBuf &outbuf)
Template method implementation of finish().
virtual bool _finish(WvBuf &outbuf)
Template method implementation of finish().