FBB::HMacBuf(3bobcat)

Compute HMAC Message Digests
(libbobcat-dev_6.02.02)

2005-2022

NAME

FBB::HMacBuf - Computes HMAC Message Digests from information inserted into a std::ostream

SYNOPSIS

#include <bobcat/hmacbuf>
Linking option: -lbobcat -lcrypto

DESCRIPTION

FBB::HMacBuf objects are std::streambuf objects that can be used to initialize std::ostream objects with.

All information inserted into such a std::ostream is used to compute a message HMAC.

All the message digest and cipher algorithms defined by the OpenSSL library that can be selected by name, may be used in combination with HMacBuf objects.

For the currently supported message digest algorithms issue the command


    openssl list -digest-commands
        
For the currently supported message cipher algorithms issue the command

    openssl list -cipher-commands
        
The defaults used by HMacBuf constructors are the sha256 digest algorithm and the aes-128-cbc cipher algorithm.

NAMESPACE

FBB
All constructors, members, operators and manipulators, mentioned in this man-page, are defined in the namespace FBB.

INHERITS FROM

std::streambuf

CONSTRUCTORS

OVERLOADED OPERATOR

MEMBER FUNCTIONS

All members of std::streambuf are available, as FBB::HMacBuf inherits from this class.

MANIPULATOR

EXAMPLE

#include <fstream>
#include <iostream>
#include <bobcat/hmacbuf>

using namespace std;
using namespace FBB;

int main(int argc, char **argv)
try
{
                        // using the default (sha256) digest algorithm
    if (argc == 1)
        throw Exception{} <<
                "Usage: arg1: 16-byte key, arg2: file to process,\n"
                "       arg3 (opt) buf size (default 1024)";

    HMacBuf hmacbuf{ argv[1], "aes-128-cbc", "sha256",
                     argc == 3 ? 1024 : stoul(argv[3]) };

    HMacBuf empty;                              // Demo: an empty HMacBuf
    empty = HMacBuf{ argv[1], "sha256", 100 };  // Demo: move assignmeent

    ostream out(&hmacbuf);              // the ostream receiving the
                                        // input to compute the hmac of

    ifstream in{ argv[2] };             // the file to process

    out << in.rdbuf() << eoi;           // compute the hmac
                                        // and show the hmac value
    cout << "  computed hmac value: >" << hmacbuf << "<\n";

    in.seekg(0);                        // to illustrate 'reset': do it
    hmacbuf.reset();                    // again

    out << in.rdbuf();
    eoi(out);                           // calling eoi as a function
    cout << "recomputed hmac value: >" << hmacbuf << "<\n";
}
catch(exception const &err)
{
    cout << err.what() << endl;
    return errno;
}

FILES

bobcat/hmacbuf - defines the class interface

SEE ALSO

bobcat(7), digestbuf(3bobcat), std::streambuf

BUGS

None reported

BOBCAT PROJECT FILES

BOBCAT

Bobcat is an acronym of `Brokken's Own Base Classes And Templates'.

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).