# Poco::Crypto

# class CryptoTransform

Library: Crypto
Package: Cipher
Header: Poco/Crypto/CryptoTransform.h

## Description

This interface represents the basic operations for cryptographic transformations to be used with a CryptoInputStream or a CryptoOutputStream.

Implementations of this class are returned by the Cipher class to perform encryption or decryption of data.

## Member Summary

Member Functions: blockSize, finalize, getTag, setPadding, setTag, transform

## Types Aliases

### Ptr

using Ptr = Poco::SharedPtr < CryptoTransform >;

## Constructors

### CryptoTransform

CryptoTransform();

Creates a new CryptoTransform object.

## Destructor

### ~CryptoTransform

virtual ~CryptoTransform();

Destroys the CryptoTransform.

## Member Functions

### blockSize

virtual std::size_t blockSize() const = 0;

Returns the block size for this CryptoTransform.

### finalize

virtual std::streamsize finalize(
unsigned char * output,
std::streamsize length
) = 0;

Finalizes the transformation. The output buffer must contain enough space for at least two blocks, ie.

    length >= 2*blockSize()

must be true. Returns the number of bytes written to the output buffer.

### getTag

virtual std::string getTag(
std::size_t tagSize = 16
) = 0;

Returns the GCM tag after encrypting using GCM mode.

Must be called after finalize().

### setPadding

virtual int setPadding(
int padding
);

Enables or disables padding. By default encryption operations are padded using standard block padding and the padding is checked and removed when decrypting. If the padding parameter is zero then no padding is performed, the total amount of data encrypted or decrypted must then be a multiple of the block size or an error will occur.

### setTag

virtual void setTag(
const std::string & tag
) = 0;

Sets the GCM tag for authenticated decryption using GCM mode.

Must be set before finalize() is called, otherwise decryption will fail.

### transform

virtual std::streamsize transform(
const unsigned char * input,
std::streamsize inputLength,
unsigned char * output,
std::streamsize outputLength
) = 0;

Transforms a chunk of data. The inputLength is arbitrary and does not need to be a multiple of the block size. The output buffer has a maximum capacity of the given outputLength that must be at least

    inputLength + blockSize() - 1

Returns the number of bytes written to the output buffer.