All information inserted into such a std::ostream is used to compute a message digest from.
All the message digests defined by the OpenSSL library that can be selected by name may be used in combination with DigestBuf objects.
The following message digest algorithms are currently supported: mull, md2, md5, sha, sha1, sha224, sha256, sha384, sha512, dss, dss1, ecdsa, mdc2, ripemd160. These very names are the ones to use to select the particular digest algorithms for the class's constructor, below. It is quite possible that future releases of the openssl library will support additional message digest algorithms. The header file openssl/evp.h lists all available digest algorithms (in that file look for EVP_MD *EVP_: a message digest algorithm immediately follows the 2nd underscore. E.g., const EVP_MD *EVP_md4(void) which refers to the md4 message digest algorithm).
The bufsize argument specifies the internal buffer used by DigestBuf to store incoming characters temporarily. The provided default argument should be OK in all normal cases.
All members of std::streambuf are available, as FBB::DigestBuf inherits from this class. Some of the std::streambuf's member are overridden or are hidden by DigestBuf. In normal situations these inherited members will not be used by programs using DigestBuf objects.
create a DigestBuf object use it to create a std::ostream object insert information into the ostream object call the DigestBuf object's close() member obtain/process the hash value from the DigestBuf object.
#include <iostream> #include <ostream> #include <bobcat/exception> #include <bobcat/digestbuf> using namespace std; using namespace FBB; int main(int argc, char **argv) try { DigestBuf digestbuf(argv[1]); ostream out(&digestbuf); string hw("hello world\n"); out << hw; digestbuf.close(); cout << ">" << digestbuf << "<" << endl; digestbuf.open(); out.write(hw.c_str(), hw.length()); digestbuf.close(); cout << ">" << digestbuf << "<" << endl; } catch(exception const &err) { cout << err.what() << endl; return 1; }