# FBB::ISymCryptStream(3bobcat)

## Symmetric en- and decryption
(libbobcat-dev_5.11.00)

## 2005-2022

## NAME

FBB::ISymCryptStream - Istream performing symmetric encryption

## SYNOPSIS

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

## DESCRIPTION

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.

## NAMESPACE

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

## INHERITS FROM

FBB::ISymCryptStreambuf (private),
std::istream

## CONSTRUCTOR

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

## INHERITED MEMBERS

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

## EXAMPLE

    #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();
    }

## FILES

bobcat/isymcryptstream - defines the class interface

## SEE ALSO

bobcat(7), isymcryptstreambuf(3bobcat)

## BUGS

Sep/Oct 2013: due to a change in library handling by the linker (cf. http://fedoraproject.org/wiki/UnderstandingDSOLinkChange and https://wiki.debian.org/ToolChain/DSOLinking) 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

- https://fbb-git.gitlab.io/bobcat/: gitlab project page;
- bobcat_5.11.00-x.dsc: detached signature;
- bobcat_5.11.00-x.tar.gz: source archive;
- bobcat_5.11.00-x_i386.changes: change log;
- libbobcat1_5.11.00-x_*.deb: debian package containing the libraries;
- libbobcat1-dev_5.11.00-x_*.deb: debian package containing the libraries, headers and manual pages;

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