Scroll to navigation

FBB::ISymCryptStream(3bobcat) Symmetric en- and decryption FBB::ISymCryptStream(3bobcat)


FBB::ISymCryptStream - Istream performing symmetric encryption


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


FBB::ISymCryptStream objects may be used to encrypt or decrypt information that is available on a separate std::istream.

The class ISymCryptStream is a class template, using a FBB::CryptType template non-type parameter. Objects of the class FBB::ISymCryptStream<FBB::ENCRYPT> encrypt the information they receive, objects of the class FBB::ISymCryptStream<FBB::DECRYPT> decrypt the information they receive.

All symmetric encryption methods defined by the OpenSSL library that can be selected by name may be used in combination with EncryptBuf objects. To select a particular encryption method an identifier is passed to the constructor. E.g., "aes-128-cbc" indicating the AES (Rijndael) method, using 128 bit sized keys and blocks using `cbc’ mode (see below for an explanation).

Refer to the isymcryptstreambuf(3bobcat) man-page for a description of available encryption methods.


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


FBB::ISymCryptStreambuf (private),


ISymCryptStream<CryptType>( std::istream &in, char const *type, std::string const &key, std::string const &iv, size_t bufSize = 100, size_t filterBufSize = 1000, ENGINE *engine = 0):
This constructor initializes a std::istream providing it with an FBB::ISymCryptStreambuf stream buffer. The ISymCryptStreambuf’s constructor receives all arguments that are passed to this constructor.
- ISymCryptStream<ENCRYPT> objects perform encryption;
ISymCryptStream<DECRYPT> objects perform decryption;
- ISymCryptStream<CryptType> objects obtain the bytes to encrypt or decrypt from std::istream &in;
- The encryption method to use is specified by the type parameter. E.g., "bf-cbc" selects the Blowfish Cipher Block Chaining method;
- The symmetric key to use is specified by the key parameter;
- The initialization vector is specified by the iv parameter;
- The FBB::ISymCryptStreambuf internally used buffer will contain bufSize characters. The default value is the smallest value that is used. When a smaller bufSize value is specified, the default value is used;
- The internally used IFilterBuf is initialized with a buffer of size filterBufSize, using a lower bound of 100;
- The parameter ENGINE can be used to specify a hardware acceleration engine, as supported by the used encryption/decryption method. Its default argument value indicates that no hardware acceleration is available.

Copy and move constructors (and assignment operators) are not available.


Since the class uses public derivation from std::istream, all members of this class can be used.


#include "../isymcryptstream"
#include <iostream>
using namespace std;
using namespace FBB;
int main()

ISymCryptStream<ENCRYPT> encryptor(cin, "bf-cbc",
"1234567890", "1234567890");
ISymCryptStream<DECRYPT> decryptor(encryptor, "bf-cbc",
"1234567890", "1234567890");
cout << decryptor.rdbuf(); }


bobcat/isymcryptstream - defines the class interface


bobcat(7), isymcryptstreambuf(3bobcat)


Sep/Oct 2013: due to a change in library handling by the linker (cf. and libraries that are indirectly required are no longer automatically linked to your program. With BigInt this is libcrypto, which requires programs to link to both bobcat and crypto.

BOBCAT PROJECT FILES gitlab project page;
bobcat_5.07.00-x.dsc: detached signature;
bobcat_5.07.00-x.tar.gz: source archive;
bobcat_5.07.00-x_i386.changes: change log;
libbobcat1_5.07.00-x_*.deb: debian package containing the libraries;
libbobcat1-dev_5.07.00-x_*.deb: debian package containing the libraries, headers and manual pages;


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


This is free software, distributed under the terms of the GNU General Public License (GPL).


Frank B. Brokken (

2005-2020 libbobcat-dev_5.07.00