FBB::DigestBuf(3bobcat)
π FBB::DigestBuf β the manual page, but make it cute π
okay so bestie, you know how FBB::DigestBuf lives in the 3bobcat section of the manual? Yeah. This is that page. It's literally Compute Message Digests and it's giving main character energy β¨
πΈ NAME πΈ
FBB::DigestBuf β computes message digests from information inserted into a std::ostream
β¨ SYNOPSIS β¨
#include <bobcat/digestbuf>
Linking option: -lbobcat -lcrypto
π¦ DESCRIPTION π¦
FBB::DigestBuf objects are std::streambuf objects, and you can use them to initialize std::ostream objects with. Iconic behaviour, honestly.
The message digest of all the information you insert into such an std::ostream gets computed. Every single bit. No cap. π
Every message digest that the OpenSSL library defines and that can be selected by name may be used in combination with DigestBuf objects. All of them. The whole roster.
The currently supported message digest algorithms are shown by:
openssl list -digest-commands
And the names of those digest algorithms can be used to select a digest algorithm for the class's constructor, which we're getting to below. π
π NAMESPACE π
FBB
All constructors, members, operators and manipulators mentioned in this man-page are defined in the namespace FBB. So if you're wondering where they're at β it's FBB. Always was. π«Ά
π INHERITS FROM π
std::streambuf
π CONSTRUCTORS π
DigestBuf(char const *digestName, size_t bufsize = 1024)β this constructor initializes the streambuf, setting it up for the message digest algorithm specified with type. The message digest algorithms specified in the DESCRIPTION section may be used here. E.g., to use thesha256algorithm specify"sha256".
The bufsize argument specifies the size of the internal buffer used by DigestBuf to store incoming characters temporarily. The provided default argument should be OK in all normal cases. Don't stress about it, fr fr.
The copy and move constructors and assignment operators are not available. Not on the menu. Not happening. π«
π₯ OVERLOADED OPERATOR π₯
std::ostream &operator<<(std::ostream &out, DigestBuf const &digestbuf)β the insertion operator is a free function defined in the namespaceFBB. It inserts a hash value as a series of hexadecimally displayed values into the provided ostream. See the example below for an illustration, bestie, it's right there. β
π MEMBER FUNCTIONS π
All members of std::streambuf are available, as FBB::DigestBuf inherits from this class. Everything. The whole inheritance situation is slaying.
void eoi()β this member finishes the computation of the message digest computation. It is needed as theDigestBufobject has no external means for deciding whether all information to compute the digest for has yet been received or not. So like, it can't read your mind, okay?? π
The general approach to follow when computing a message digest is therefore:
- create a
DigestBufobject - use it to create a
std::ostreamobject - insert information into the ostream object
- call the
DigestBufobject'seoi()member or insert theeoimanipulator into the ostream (see below) - obtain/process the hash value from the
DigestBufobject.
std::string const &hash() constβ this member returns the hash value computed by theDigestBufobject. Its value is only defined after having calledclose(). The hash value is returned in astd::stringobject. This string'slength()member contains the number of characters used by the hash value, and itsdata()member refers to the hash value's characters.
Note that a hash value's character value may be 0 (not to be confused with '0'). That's not the character zero, bestie, that's an actual zero byte. Different thing entirely. π
void reset()β this member reinitializes the message digest computation. Once a message digest has been computed for, say a stream streamA, this member can be called, after which the digest for a stream streamB can be computed using the sameDigestBufobject. Reuse, recycle, reduce. Sustainability queen. π±
π§ MANIPULATOR π§
FBB::eoiβ theeoimanipulator can be inserted into the ostream to complete the digest. It performs the same actions as theeoimember. If inserted into a plainstd::ostream, nothing happens. Just vibes, no effect. π
β EXAMPLE β
#include <iostream>
#include <ostream>
#include <bobcat/digestbuf>
using namespace std;
using namespace FBB;
int main(int argc, char **argv)
try
{
DigestBuf digestbuf(argc == 1 ? "sha256" : argv[1]);
ostream out(&digestbuf);
string hw("hello world\n");
out << hw << eoi;
cout << ">" << digestbuf << "<" << endl;
digestbuf.reset();
out.write(hw.c_str(), hw.length()) << eoi;
cout << ">" << digestbuf << "<" << endl;
}
catch(exception const &err)
{
cout << err.what() << endl;
return 1;
}
See how it does the whole thing twice with reset() in between?? Yeah. That's the move. π
πΈ FILES πΈ
bobcat/digestbuf β defines the class interface
π SEE ALSO π
bobcat(7), hmacbuf(3bobcat), std::streambuf
π¦ BUGS π¦
None reported
(not a single one. flawless. periodt. π β¨)
π BOBCAT PROJECT FILES π
https://fbb-git.gitlab.io/bobcat/β gitlab project page;
Debian Bobcat project files:
libbobcat6β debian package containing the shared library, changelog and copyright note;libbobcat-devβ debian package containing the static library, headers, manual pages, and developer info;
π BOBCAT π
Bobcat is an acronym of Brokken's Own Base Classes And Templates. Cute acronym, honestly, big fan. π
π COPYRIGHT π
This is free software, distributed under the terms of the GNU General Public License (GPL).
π AUTHOR π
Frank B. Brokken (f.b.brokken@rug.nl).
okay that's the whole entire page bestie, we ate and left absolutely no crumbs π
libbobcat-dev_6.15.01 Β· 2005-2026 Β· FBB::DigestBuf(3bobcat) β mwah, love u, go compute some digests πβ¨π¦
π¦ where this page comes from
- ubuntu stonking: libbobcat-dev 6.15.01-1 Β· GPL-3.0-or-later WITH OpenSSL exception
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms