6 #ifndef __XSTREAM_DIGEST_H
7 #define __XSTREAM_DIGEST_H
20 # error "I need inttypes.h or stdint.h to exist"
56 std::streamsize
xsputn(
const char *
buffer, std::streamsize n);
101 template <
typename digest_type>
119 virtual digest_type
digest()=0;
148 class z_common :
public common<unsigned long int> {
150 unsigned long int _digest;
152 virtual void reset_digest();
157 virtual unsigned long int digest();
165 class adler32 :
public z_common {
167 void calculate_digest();
175 class crc32 :
public z_common {
177 void calculate_digest();
184 class block_stream:
public stream{
186 const size_t chunk_size;
204 std::streamsize xsputn(
const char *buffer, std::streamsize n);
215 block_stream(
size_t chunk,
unsigned int blocks);
227 class md5 :
public block_stream {
242 bool operator==(
const result& r)
const{
243 return (a==r.a && b==r.b &&
c==r.c && d==r.d);
269 virtual void reset_digest();
271 virtual void calculate_digest();
282 std::ostream&
operator<<(std::ostream& o,
const struct md5::result& m);
int overflow(int c)
write a character that surpasses buffer end (overloaded from streambuf)
int sync()
update digest with as much data as possible (overloaded from streambuf)
stream(size_t len)
default constructor
digest_type reset()
resets the digest calculation
virtual digest_type digest()=0
return the digest value
std::ostream & operator<<(std::ostream &o, const struct md5::result &m)
virtual void reset_digest()=0
resets digest to it's initial value
virtual void calculate_digest()=0
updates the digest must be inplemented by classes that implement this interface
std::streamsize xsputn(const char *buffer, std::streamsize n)
add an entire buffer to digest calculation (overloaded from streambuf)